Habilitación de Wake-on-Touch con un mini controlador HID personalizado
En este tema se describe cómo implementar Wake-on-Touch con un controlador HID mini personalizado.
Background: HIDClass Power Policy for Wake-On-Touch
En el diagrama de estado siguiente se muestran los estados lógicos en los que se colocará el dispositivo de entrada cuando admita la directiva de energía Wake-on-Touch.
Notas:
- Dx = DEVICE_CAPABILITIES. DeviceWake
- El intervalo de temporizador de inactividad es de 1 segundo.
Cómo habilitar Wake-on-Touch
- Decida el estado D para Wake-on-Touch e implemente el mini driver HID personalizado con las instrucciones de la sección "CHoose D-State for Wake-on-Touch" a continuación para obtener algunas instrucciones.
- Cree un INF para participar en la directiva Wake-on-Touch según la sección "Requisitos de INF".
- Compruebe que el dispositivo se reactiva con el gesto o los gestos táctiles adecuados, en función de los requisitos del OEM o el factor de forma del dispositivo. Compruebe también que no provoca eventos de reactivación falsos y que el consumo de energía al habilitar la característica es aceptable. Consulte Guía de validación de Wake-on-Touch.
Elija D-State para Wake-on-Touch
En el caso del controlador hid mini personalizado, el siguiente diagrama tiene las instrucciones sobre cómo elegir entre D2 y D3. Suponiendo que el controlador táctil necesita la fuente de alimentación del dispositivo principal en su modo Wake-on-Touch, cuando D3Cold es compatible, D2 se recomienda para Wake-on-Touch, ya que D3Hot puede ser seguido de D3Cold donde Wake-on-Touch no es posible.
Requisitos de INF
La directiva de alimentación Wake-on-Touch de HIDClass no está activada de forma predeterminada.
Para los controladores táctiles que usan controladores de mini HID personalizados e INFs, los OEM/IHVs deben crear un INF y agregar lo siguiente a su sección DDInstall.HW para participar en la directiva Wake-on-Touch.
Include = input.inf
Needs = WakeScreenOnTouch.HW
Si el dispositivo ha optado por cualquier otra directiva HID que entre en conflicto con la directiva Wake-on-Touch, se omitirá cualquiera de las directivas.
Si el dispositivo tiene varias colecciones HID, incluidas las colecciones de pantalla táctil (UsagePage:0xD, Usage:0x4) y las colecciones que no son de pantalla táctil, el firmware táctil solo debe admitir la reactivación de las colecciones de pantalla táctil. Si una colección que no es de pantalla táctil también puede señalizar la reactivación, el dispositivo se volverá a llevar a D0 para purgar la alimentación.
Descripción de cuándo habilitar o deshabilitar wake-on-touch
En escenarios de reactivación táctil, HIDClass solicita IRP_MN_WAIT_WAKE para armar el dispositivo para reactivar antes de solicitar D-IRP para apagar el dispositivo táctil. En el escenario Dispositivo no en uso, HIDClass solicita D-IRP directamente para apagar el dispositivo táctil sin solicitar IRP_MN_WAIT_WAKE primero.
- Si la solución personalizada usa D2 para Wake-on-Touch y usa D3 para Device-Not-In-Use, puede simplemente confiar en D-state en D-IRP para diferenciar entre dos escenarios y habilitar wake-on-Touch on D2.
- Si la solución personalizada usa D3 en ambos escenarios, debe confiar en la presencia de IRP_MN_WAIT_WAKE para diferenciar entre dos escenarios y habilitar Wake-on-Touch al obtener la solicitud D3 después de IRP_MN_WAIT_WAKE.
Se recomienda que el controlador hid mini personalizado no confíe en otras notificaciones del sistema como GUID_MONITOR_POWER_ON, ya que esto puede provocar problemas de tiempo con el IRP_MN_WAIT_WAKE solicitado por HIDClass y D2/D3.
Notificación de restablecimiento de dispositivo
Este no es un requisito específico de Wake-on-Touch, sino un requisito general para los mini controladores HID. El controlador mini HID personalizado es responsable de completar IOCTL_HID_DEVICERESET_NOTIFICATION cada vez que se da cuenta de la pérdida de estado del dispositivo y de la necesidad de reinicialización del dispositivo. Esto se puede implementar en el controlador de restablecimiento iniciado por el dispositivo o en la rutina D0Entry del controlador, por ejemplo, después de detectar el currículum de D3Cold.