Habilitar o Ativar ao tocar com um mini driver HID personalizado
Este tópico discute como implementar o Wake-on-Touch com um mini driver HID personalizado.
Plano de fundo: HIDClass Power Policy para Wake-On-Touch
O diagrama de estado a seguir ilustra os estados lógicos em que o dispositivo de entrada será colocado quando oferecer suporte à política de energia Wake-on-Touch.
Observações:
- Dx = DEVICE_CAPABILITIES. DeviceWake
- O intervalo de temporizador ocioso é de 1 segundo
Como habilitar a Ativação por Toque
- Decida o D-State para Wake-on-Touch e implemente o mini driver HID personalizado com as diretrizes na seção "CHoose D-State for Wake-on-Touch" abaixo para obter algumas diretrizes.
- Crie um INF para aceitar a política Wake-on-Touch de acordo com a seção "Requisitos do INF".
- Valide se o dispositivo é ativado nos gestos de toque apropriados, com base nos requisitos do OEM e/ou no fator forma do dispositivo. Valide também que ele não causa eventos de ativação espúrios e que o consumo de energia de habilitar o recurso é aceitável. Consulte Guia de Validação da Ativação por Toque.
Escolha Estado D para Wake-on-Touch
Para o mini driver HID personalizado, o diagrama a seguir tem as diretrizes sobre como escolher entre D2 e D3. Supondo que o controlador de toque precise da fonte de alimentação do dispositivo main em seu modo Wake-on-Touch, quando há suporte para D3Cold, D2 é recomendado para Wake-on-Touch, pois D3Hot pode ser seguido por D3Cold, em que Wake-on-Touch não é possível.
Requisitos de INF
A política de energia de Ativação por Toque do HIDClass não é aceita por padrão.
Para os controladores de toque que usam mini drivers HID personalizados e INFs, os OEMs/IHVs devem criar um INF e adicionar o seguinte à seção DDInstall.HW para aceitar a política Wake-on-Touch.
Include = input.inf
Needs = WakeScreenOnTouch.HW
Se o dispositivo tiver optado por qualquer outra política hid que entre em conflito com a política Wake-on-Touch, qualquer uma das políticas será ignorada.
Se o dispositivo tiver várias coleções de HID, incluindo coleções de tela sensível ao toque (UsagePage:0xD, Usage:0x4) e coleções que não sejam de tela sensível ao toque, o firmware de toque só deverá dar suporte à ativação das coleções de tela sensível ao toque. Se uma coleção que não seja de tela sensível ao toque também puder sinalizar a ativação, o dispositivo ainda será trazido de volta para D0 para esvaziar a energia.
Noções básicas sobre quando habilitar ou desabilitar o wake-on-touch
Em cenários de Wake-on-Touch, HIDClass solicita IRP_MN_WAIT_WAKE armar o dispositivo para ativação antes de solicitar que o D-IRP desligue o dispositivo sensível ao toque. No cenário dispositivo não em uso, HIDClass solicita D-IRP diretamente para desligar o dispositivo touch sem solicitar IRP_MN_WAIT_WAKE primeiro.
- Se a solução personalizada usa d2 para wake-on-touch e usa D3 para dispositivo não em uso, ela pode simplesmente depender do estado D no D-IRP para diferenciar entre dois cenários e habilitar apenas Wake-on-Touch em D2.
- Se a solução personalizada usar D3 em ambos os cenários, ela deverá contar com a presença de IRP_MN_WAIT_WAKE para diferenciar entre dois cenários e habilitar o Wake-on-Touch ao obter a solicitação D3 após IRP_MN_WAIT_WAKE.
É recomendável que o mini driver HID personalizado não dependa de nenhuma outra notificação do sistema, como GUID_MONITOR_POWER_ON, pois isso pode causar problemas de tempo com o IRP_MN_WAIT_WAKE solicitado por HIDClass e D2/D3.
Notificação de redefinição de dispositivo
Esse não é um requisito específico para Wake-on-Touch, mas um requisito geral para mini drivers HID. O mini driver HID personalizado é responsável por concluir IOCTL_HID_DEVICERESET_NOTIFICATION sempre que perceber a perda de estado do dispositivo e a necessidade de reinicialização do dispositivo. Isso pode ser implementado no manipulador de redefinição iniciado pelo dispositivo ou na rotina D0Entry do driver, por exemplo, depois de detectar o currículo de D3Cold.