Aktivieren von Wake-On-Touch mit einem benutzerdefinierten HID Mini-Treiber

In diesem Thema wird erläutert, wie Wake-on-Touch mit einem benutzerdefinierten HID-Minitreiber implementiert wird.

Hintergrund: HIDClass Power Policy for Wake-On-Touch

Das folgende Zustandsdiagramm veranschaulicht die logischen Zustände, in die das Eingabegerät eingefügt wird, wenn es die Wake-on-Touch-Power-Richtlinie unterstützt.

Logische Zustände für das Eingabegerät

Hinweise:

  1. Dx = DEVICE_CAPABILITIES.DeviceWake
  2. Das Zeitgeberintervall im Leerlauf beträgt 1 Sekunde.

So aktivieren Sie "Wake-on-Touch"

  1. Entscheiden Sie den D-State für Wake-on-Touch, und implementieren Sie den benutzerdefinierten HID-Minitreiber mit den Anweisungen im Abschnitt "CHoose D-State für Wake-on-Touch" unten für einige Anleitungen.
  2. Erstellen Sie eine INF, um die Wake-on-Touch-Richtlinie gemäß dem Abschnitt "INF-Anforderungen" zu aktivieren.
  3. Überprüfen Sie, ob das Gerät auf der Grundlage der OEM-Anforderungen und/oder des Formfaktors des Geräts auf die entsprechende Touchgeste aktiviert wird. Überprüfen Sie außerdem, dass es nicht zu löslichen Aktivierungsereignissen führt und der Stromverbrauch von der Aktivierung des Features zulässig ist. Siehe Validierungshandbuch für Wake-On-Touch.

Wählen Sie "D-State" für "Wake-on-Touch" aus.

Für benutzerdefinierte HID-Minitreiber enthält das folgende Diagramm die Anleitungen zur Auswahl zwischen D2 und D3. Vorausgesetzt, der Touchcontroller benötigt die Hauptleistungsquelle des Geräts im Wake-on-Touch-Modus, wenn D3Cold unterstützt wird, wird D2 für Wake-on-Touch empfohlen, da D3Hot möglicherweise von D3Cold gefolgt werden kann, wenn Wake-on-Touch nicht möglich ist.

Wake-on-Touch D-Zustandsdiagramm

INF-Anforderungen

Die HIDClass Wake-on-Touch-Power-Richtlinie ist standardmäßig nicht aktiviert.

Für die Touchcontroller, die benutzerdefinierte HID-Minitreiber und INFs verwenden, sollten OEMs/IHVs eine INF erstellen und dem DDInstall.HW-Abschnitt folgendes hinzufügen, um die Wake-on-Touch-Richtlinie zu aktivieren.

Include = input.inf

Needs = WakeScreenOnTouch.HW

Wenn sich das Gerät für eine andere HID-Richtlinie entschieden hat, die mit der Wake-on-Touch-Richtlinie in Konflikt steht, wird eine der Richtlinien ignoriert.

Wenn das Gerät über mehrere HID-Sammlungen verfügt, darunter Touchscreen-Sammlungen (UsagePage:0xD, Usage:0x4) und Nicht-Touchscreen-Sammlungen, sollte die Touch-Firmware nur das Aufwecken aus den Touchscreen-Sammlungen unterstützen. Wenn eine Nicht-Touchscreen-Sammlung ebenfalls das Aufwachen signalisiert, wird das Gerät trotzdem auf D0 zurückgebracht, um den Strom zu verbrauchen.

Grundlegendes zum Aktivieren oder Deaktivieren von Wake-on-Touch

In Wake-on-Touch-Szenarien fordert HIDClass IRP_MN_WAIT_WAKE an, das Gerät zur Aktivierung zu armieren, bevor D-IRP angefordert wird, um das Touchgerät zu aktivieren. Im Szenario "Device-Not-In-Use" fordert HIDClass D-IRP direkt an, um das Touchgerät herunterzuschalten, ohne zuerst IRP_MN_WAIT_WAKE anzufordern.

  • Wenn die benutzerdefinierte Lösung D2 für Wake-on-Touch verwendet und D3 für Device-Not-In-Use verwendet, kann es sich einfach auf D-Zustand im D-IRP verlassen, um zwischen zwei Szenarien zu unterscheiden und nur Wake-on-Touch auf D2 zu aktivieren.
  • Wenn die benutzerdefinierte Lösung D3 in beiden Szenarien verwendet, muss es sich auf die Anwesenheit von IRP_MN_WAIT_WAKE verlassen, um zwischen zwei Szenarien zu unterscheiden und Wake-on-Touch zu aktivieren, wenn D3-Anforderung nach IRP_MN_WAIT_WAKE abgerufen wird.

Es wird empfohlen, dass der benutzerdefinierte HID-Minitreiber nicht auf andere Systembenachrichtigungen wie GUID_MONITOR_POWER_ON angewiesen ist, da dies möglicherweise zu Zeitproblemen mit dem angeforderten HIDClass-IRP_MN_WAIT_WAKE und D2/D3 führen kann.

Benachrichtigung beim Zurücksetzen des Geräts

Dies ist keine anforderungsspezifisch für Wake-on-Touch, sondern eine allgemeine Anforderung für HID-Minitreiber. Der benutzerdefinierte HID-Mini-Treiber ist dafür verantwortlich, IOCTL_HID_DEVICERESET_NOTIFICATION auszuführen, wenn er den Verlust des Gerätezustands und die Notwendigkeit einer Neuinitialisierung des Geräts feststellt. Dies kann in dem vom Gerät initiierten Reset-Handler oder in der D0Entry-Routine des Treibers implementiert werden, z.B. nachdem dieser die Wiederaufnahme von D3Cold erkannt hat.