Freigeben über


Handbuch für die Implementierung des haptischen Stifts

In diesem Dokument wird die Protokollimplementierung für ein Haptic Pen-Gerät erläutert, das eine Verbindung mit einem kompatiblen Windows 11-Host herstellt. Dies schließt keine Anleitungen zu mechanischen Einschränkungen, elektrischen Einschränkungen oder Komponentenauswahl für die Generierung der haptischen Reaktion innerhalb des Stiftwandlers ein. Dieser Implementierungsleitfaden ist unabhängig vom Stiftprotokoll, das zwischen dem Stiftwandler und dem Stiftdigitierer verwendet wird. Eine Implementierung kann jedoch entscheiden, ein Stiftprotokoll mit einer Uplink-Funktion zu verwenden, mit der der Stiftdigitierer zusätzliche Parameter für den Stifttransduktor für die Modulierung der haptischen Reaktion bereitstellen kann.

Geräteklasse

Haptic Pen ist eine Erweiterung der Stift-Geräteklasse unter Windows. Dieser Implementierungsleitfaden fügt zum Implementierungshandbuch für Stift hinzu und konzentriert sich auf die Implementierung von Haptik innerhalb des Stifttransducers, sodass haptische Stifte zusätzlich zu den hier enthaltenen Anforderungen im Pen-Implementierungshandbuch entsprechen müssen.

Gerätebuskonnektivität

Der Haptic Pen verwendet die von Microsoft bereitgestellten Posteingangstreiber, um über Bluetooth eine Verbindung mit einem Windows-Host herzustellen.

Implementierung des Haptischen Stiftprotokolls

Ein gutes Verständnis des HID-Protokolls ist erforderlich, um die hier dargestellten Informationen verstehen zu können. Informationen zum HID-Protokoll finden Sie in den folgenden Ressourcen:

Windows enthält einen HID-Klassentreiber und den entsprechenden HID Bluetooth-fähigen Miniporttreiber, daher ist es nicht erforderlich, dass Miniporttreiber von Drittanbietern benötigt werden. Haptische Stiftgerätefirmware muss nur die in diesem Thema beschriebenen Verwendungen melden. Windows verwendet die Firmware und seine eigenen HID-Treiber, um das Gerät zu aktivieren und Windows-Anwendungen Zugriff auf das Gerät zu gewähren.

Ein Beispieldeskriptor wird unten im Abschnitt "Beispielberichtdeskriptoren" bereitgestellt.

Erforderliche HID-Auflistung der obersten Ebene

Erforderliche HID-Kollektion auf oberster Ebene für haptischen Stift

Ein Haptic Pen-Gerät sollte das HID-Protokoll auf einem Windows 10-System so verwenden, dass das Gerät eine Sammlung auf oberster Ebene bereitstellt, die als Digitalisierungs-/Eingabestift (Page 0x0D, Usage 0x20) angezeigt wird.

Eingabebericht zum Stiftdigisierer

Die Stiftdigitalisierer-Sammlung muss den Stiftidentifikator melden, der aus der Seriennummer des Wandlers und der Hersteller-ID des Wandlers besteht und in den Eingabemeldungen an das Betriebssystem übermittelt wird. Derselbe Eingabestiftbezeichner muss über die Eingabestiftsammlung gemeldet werden. Auf diese Weise kann das Betriebssystem die vom Digitalisierer generierte Stifteingabe mit dem Eingabestift korrelieren. Details zur Stiftimplementierungsanleitung finden Sie hier: Pen-Protokollimplementierung.

Seriennummer des Wandlers

Die Seriennummer des Wandlers ist ein eindeutiger persistenter Bezeichner für den Wandler, der im Stiftzubehör verwendet wird, das mit dem Stiftdigisierer kommuniziert. Dies muss 32 Bit sein und wird von dem Anbieter oder der Entität festgelegt, die durch die Hersteller-ID des Wandlers identifiziert wird. In Fällen, in denen die Seriennummer des Wandlers dem Digitalisierungsgerät nicht bekannt ist, weil das Stiftzubehör diesen Wert nicht unterstützt oder wenn die Übertragung nicht vollständig empfangen wurde, meldet das Digitalisierungsgerät 0 an den Host. Nullposition wird vom Host nicht unterstützt.

Seriennummer des Wandlers – Teil 2

Seriennummer des Wandlers – Teil 2 ermöglicht die Angabe zusätzlicher 32 Bits als Teil des eindeutigen und permanenten Bezeichners des in einem Stiftzubehör verwendeten Wandlers. In Fällen, in denen die Seriennummer des Wandlers – Teil 2 – dem Digitalisierer nicht bekannt ist, entweder weil das Stiftzubehör die Übertragung dieses Wertes nicht unterstützt oder weil die Übertragung nicht vollständig empfangen wurde, notiert der Digitalisierer 0 an den Host. Nullposition wird vom Host nicht unterstützt.

Seite ID Hinweise
0xD 0x5B Obligatorisch für Features, die von eindeutiger Stiftidentifikation abhängig sind (siehe unten)
0xD 0x6E Optionale Erweiterung der Seriennummer um zusätzliche 32 Bits

Hersteller-ID des Umformers

Die Hersteller-ID des Wandlers ist ein Feld für die Kommunikation des Herstellers des Wandlers, der in der Stiftzubehörkommunikation mit dem Stiftdigisierer verwendet wird. Dies ist erforderlich, um eine 2-Byte-USB-IF-zugewiesene Anbieter-ID entweder von dem Hersteller oder von dem IHV/OEM zu erhalten, das die Nutzung ihrer USB-IF-Anbieter-ID zu diesem Zweck autorisiert.

Seite ID Hinweise
0xD 0x91 Obligatorisch für Features, die von eindeutiger Stiftidentifikation abhängig sind (siehe unten)

Features, die von eindeutiger Stiftidentifikation abhängig sind

Die Meldung der PenID ist obligatorisch, um Szenarien wie die Stifthaptik zu ermöglichen (notwendig für die Haptik-Funktionen in diesem Handbuch).

Es ist auch obligatorisch in Szenarien, in denen mehrere Stifte für das Freihandzeichnen verwendet werden. Beispiel:

  • Whiteboard-App unter Windows unterstützt mehrere Stiftverwendungen, bei denen jeder Stift einem bestimmten Freihandtool zugeordnet werden kann
  • Im Allgemeinen können Apps, die verschiedenen physischen Stiften Attribute oder Verhaltensweisen zuweisen möchten, auch wenn der Digitizer nur einen einzelnen Stift auf dem Bildschirm gleichzeitig unterstützt.
  • Apps, die mehrere gleichzeitige Stifte auf unterstützten Digitalisierungsgebern nachverfolgen möchten

Haptischer Ausgabebericht

Wenn ein Stiftgerät haptisches Feedback unterstützt, kann es dem System und den Anwendungen ermöglichen, diese zu nutzen, indem eine haptische Feedbacksammlung (Page 0x0E, Usage 0x01) innerhalb des Eingabestifts TLC eingeschlossen wird. Weitere Informationen dazu, wie die HID-Spezifikation haptisches Feedback unterstützt, finden Sie auf der Ratifikationsseite zur Haptik der Spezifikation.

Der Host verwendet die folgenden Verwendungen in einem Ausgabebericht (über die haptische Feedbacksammlung), um dem Host das Ausgeben haptischer Feedbackereignisse auf das haptische Stiftgerät zu ermöglichen. Wenn ein Gerät eine haptische Feedbacksammlung verfügbar macht, sind einige Verwendungen obligatorisch, um die Unterstützung von vom Host initiiertem haptischem Feedback zu ermöglichen.

Mitglied Description Seite ID Obligatorisch/Optional
Wellenformliste Sortierte Liste der haptischen Wellenformen, die vom Gerät unterstützt werden 0x0E 0x10 Obligatorisch.
Dauerliste Sortierte Liste der Dauern für Wellenformen in der Wellenformliste 0x0E 0x11 Obligatorisch.
Automatischer Trigger Wellenform zum automatischen Auslösen nach Ermessen des Geräts 0x0E 0x20 Obligatorisch.
Zugeordnetes Steuerelement automatisch auslösen HID-Verwendung des Steuerelements im Zusammenhang mit haptischem Feedback 0x0E 0x22 Obligatorisch.
Intensität Ausgabe - Intensität der manuellen Triggerwellenform als Prozentsatz 0x0E 0x23 Wahlfrei
Zahl der Wiederholungen Ausgabe – Anzahl der Wiederholungen der manuellen Trigger-Wellenform nach der ersten Wiedergabe 0x0E 0x24 Wahlfrei
Wiederholungszeitraum Ausgabe – Dauer der Wartezeit vor dem erneuten Auslösen des manuellen Auslösers bei der Wiederholung 0x0E 0x25 Wahlfrei
Wellenform-Abschneidzeit Max. Zeit, die ein manuelles Auslöserwellenformular wiedergeben kann, bevor es abgeschnitten wird 0x0E 0x28 Wahlfrei

Wellenformliste

Die Verwendung der Wellenformliste stellt eine Sammlung der HID-Nutzungen der unterstützten Wellenformen dar, geordnet nach Ordnungszahlen. Die vordefinierten Haptikwellenformen werden in der HID-Spezifikation definiert. Bei haptischen Stiftgeräten können diese Wellenformen als zwei Segmente klassifiziert werden, die unterschiedlichen Szenarien entsprechen:

  • WAVEFORM_*CONTINUOUS - Tintenbasiertes Feedback zur Simulation verschiedener Texturen, während der Benutzer aktiv mit verschiedenen Werkzeugen wie Stift, Bleistift usw. zeichnet.
  • WAVEFORM_* – Diskretes, nicht fortlaufendes, interaktionsbasiertes Feedback, für das ein Benutzer eine benutzereingabegesteuerte Aufgabe ausführt, z. B. das Zeigen auf eine Schaltfläche, das Klicken auf eine deaktivierte Schaltfläche und die erfolgreiche Freihandzeichenerkennung.

Die vollständige Liste der für haptischen Stiftgeräte unterstützten Waveforms finden Sie unten:

Wellenform Description Seite ID Obligatorisch/Optional
WAVEFORM_NONE No-op. Sollte sich nicht auf den Spielzustand laufender Wellenformen auswirken 0x0E 0x1001 Obligatorisch.
WAVEFORM_STOP Beendet die Wiedergabe fortlaufender Wellenformen. 0x0E 0x1002 Obligatorisch.
Wellenform_Klick Erstellt ein kurzes "Klick"-Feedback. Standardvorgabe, wenn die Interaktionsfeedback-Waveform, die von der App ausgewählt wurde, vom haptischen Stift nicht unterstützt wird. 0x0E 0x1003 Obligatorisch.
WAVEFORM_INKCONTINUOUS Simuliert das Schreibgefühl mit einem echten Kugelschreiber. Standardmäßiger Fallback, wenn eine Tintenwellenform nicht von einem haptischen Stift unterstützt wird. 0x0E 0x100B Obligatorisch.
WELLENFORM_ERFOLG Starkes haptisches Signal, um den Benutzer zu benachrichtigen, dass eine Aktion erfolgreich war 0x0E 0x1009 Wahlfrei
WAVEFORM_ERROR Starkes haptisches Signal, um den Benutzer zu benachrichtigen, dass eine Aktion fehlgeschlagen ist oder ein Fehler aufgetreten ist. 0x0E 0x100A Wahlfrei
WAVEFORM_HOVER Haptisches Signal, wenn der Benutzer mit einem haptischen Stift über ein interaktives UI-Element schwebt 0x0E 0x1008 Wahlfrei
WAVEFORM_PRESS Haptisches Signal für das Drücken eines interaktiven UI-Elements in einer inkrementellen Aktion (siehe Release) 0x0E 0x1006 Wahlfrei
Wellenform-Freigabe Haptisches Signal beim Freigeben eines interaktiven UI-Elements in einer inkrementellen Aktion (siehe Drücken) 0x0E 0x1007 Wahlfrei
WAVEFORM_PENCILCONTINUOUS Ein kontinuierliches haptisches Signal, wenn der Benutzer den Stift als Zeichenwerkzeug auswählt. 0x0E 0x100C Wahlfrei
WAVEFORM_MARKERCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer den Marker als Eingabestift auswählt. 0x0E 0x100D Wahlfrei
WAVEFORM_CHISELMARKERCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer Keil- oder Textmarker als Zeichenwerkzeug auswählt 0x0E 0x100E Wahlfrei
WELLENFORM_PINSELKONTINUIERLICH Kontinuierliches haptisches Signal, wenn der Benutzer Pinsel als Zeichentool auswählt 0x0E 0x100F Wahlfrei
WELLENFORM_RADIERGUMMIKONTINUIERLICH Kontinuierliches haptisches Signal, wenn der Benutzer den Radiergummi als Zeichenwerkzeug auswählt. 0x0E 0x1010 Wahlfrei
WAVEFORM_SPARKLECONTINUOUS Kontinuierliches haptisches Signal für spezielle Tintengeräte wie einen mehrfarbigen Pinsel 0x0E 0x1011 Wahlfrei

Hinweis

Es wird zwar nicht benötigt, aber es wird empfohlen, auch die anderen aufgezählten Wellenformen zu implementieren, um eine umfassendere Benutzererfahrung zu ermöglichen. Insbesondere werden WAVEFORM_PRESS und WAVEFORM_RELEASE dringend empfohlen, da sie wertvolles Interaktionsfeedback liefern.

Sowohl WAVEFORM_NONE als auch WAVEFORM_STOP sind für alle HID-kompatiblen Haptikgeräte erforderlich. Ordinale 1 und 2 werden automatisch auf WAVEFORM_NONE und WAVEFORM_STOP festgelegt. Sie müssen nicht in der Waveform-Liste oder Dauerliste deklariert werden. Die Waveform-Liste deklariert unterstützte Wellenformen anhand des physischen Minimums und maximums jeder Ordnungszahl in der Liste.

Dauerliste

Die Verwendung der Dauerliste stellt eine Auflistung der Dauer für die unterstützten Wellenformen in der Waveform-Liste dar, sortiert mithilfe von Ordnungszahlen. Die Einheit für die Wellenformdauer ist Millisekunden, und die Dauer muss ein positiver Wert ungleich Null für jede nicht fortlaufende Wellenform sein. Wenn eine Wellenform kontinuierlich ist (wird abgespielt, bis sie vom Host gestoppt wird oder die Wellenform-Abschaltzeit überschritten wird), wird ihre Dauer als Null definiert.

WAVEFORM_NONE und WAVEFORM_STOP werden davon ausgegangen, dass die Dauer null ist. Sie müssen nicht in der Dauerliste deklariert werden.

Intensität

Die Intensitätsauslastung stellt den Prozentsatz der maximalen Intensität dar, der auf eine Wellenform angewendet werden soll. Dieser Wert sollte zwischen 0 und 100 Prozent variieren. 100 Prozent deuten darauf hin, dass Wellenformen vom Gerät mit ihrer maximalen Stärke ausgelöst werden, und 0 Prozent gibt an, dass der haptische Wandler nicht aktiviert ist.

Zahl der Wiederholungen

Die Verwendung der Wiederholungsanzahl gibt an, wie oft eine Wellenform wiederholt wird. Eine Wiederholungsanzahl von Null gibt an, dass die manuelle Triggerwellenform nur ein mal wiedergegeben werden soll (keine Wiederholung). Wenn die Wellenform-Abschneidzeit überschritten wurde, wird erwartet, dass unvollständige Wiederholungen ignoriert werden.

Wiederholungszeitraum

Die Verwendung der Retrigger-Periode stellt die Zeitspanne dar, die das Gerät warten muss, bevor eine manuelle Triggerwellenform in einem Ausgabebericht wiederholt wird, entsprechend dem von der Wiederholungsanzahl angegebenen Wert. Die Einheiten für diesen Wert sind Millisekunden. Wenn die Wiederholungsperiode kleiner als die Dauer der abgespielten Wellenform ist, sollte die Wellenform angehalten und neu gestartet werden, zum Zeitpunkt, der durch die Wiederholungsperiode angegeben wird.

Wellenform-Abschneidzeit

Die Nutzung der Waveform-Abschneidezeit stellt die maximale Zeitspanne dar, die das Gerät ermöglicht, dass eine manuelle Trigger-Wellenform wiederholt wird, bevor die Wiedergabe beendet wird. Dies ist ein konstanter Wert für das Gerät und enthält sowohl fortlaufende Wellenformen ohne festgelegte Dauer als auch Wellenformen mit diskreten Daueren, die so eingestellt sind, dass sie viele Male wiederholt werden. Die Einheiten für diesen Wert sind Millisekunden.

Haptischer Ausgabebericht

Der Host verwendet die folgenden Nutzungen in einem Ausgabebericht, um haptische Feedbackereignisse an das Haptic Pen-Gerät auszugeben. Einige Verwendungen sind für die Kompatibilität mit der Windows-Hostimplementierung obligatorisch.

Mitglied Description Seite ID Obligatorisch/Optional
Manueller Trigger Waveform zum Auslösen als expliziter Befehl vom Host 0x0E 0x21 Obligatorisch.
Intensität Intensität der manuellen Triggerwellenform als Prozentsatz 0x0E 0x23 Obligatorisch.
Zahl der Wiederholungen Anzahl der Wiedergaben der manuellen Triggerwellenform nach der erstmaligen Wiedergabe 0x0E 0x24 Wahlfrei
Wiederholungszeitraum Dauer des Wartens vor dem erneuten Auslösen des manuellen Triggers beim Wiederholen 0x0E 0x25 Wahlfrei

Manueller Trigger

Die Verwendung des manuellen Triggers stellt eine unterstützte Waveform-Nutzung aus der Waveform-Liste dar, die vom Host angefordert wurde, um abgespielt zu werden. Wenn ein Ausgabebericht, der einen anderen manuellen Trigger als WAVEFORM_NONE enthält, an das Gerät gesendet wird, sollte es sofort mit der Wiedergabe der angegebenen Wellenform beginnen, wobei die zusätzlichen Eigenschaften im Ausgabebericht enthalten sind (Intensität, Wiederholungsanzahl, Wiederholungsperiode). Wenn ein Ausgabebericht einen manuellen Trigger von WAVEFORM_STOP enthält, sollte jede fortlaufende Waveformwiedergabe beendet werden.

Informationen zur Intensität, Wiederholungsanzahl und Wiederholungszeitraum finden Sie im vorherigen Abschnitt im Hinblick auf den Ausgabefunktionsbericht.

Starten und Stoppen des haptischen Feedbacks

Das flussdiagramm unten beschreibt, wann die haptischen Signale des Stifts konfiguriert, gelöscht, gestartet und angehalten werden sollen.

Die unten aufgeführten haptischen Zustände sind:

  • Spielen: Der Stift spielt aktiv die haptische Wellenform
  • Angehalten: Der Stift ist mit einer Wellenform konfiguriert, spielt sie jedoch nicht aktiv ab.
  • Beendet: Der Stift ist nicht mit einer Wellenform konfiguriert und es wird derzeit nichts abgespielt.

Für den Stiftstatus im Hinblick auf den Digitalisierer lesen Sie bitte Windows Pen States.

Hinweis

Wenn der Stift außerhalb der Reichweite ist, wird empfohlen, aber es ist nicht erforderlich, die haptische Konfiguration zu löschen. Dies wird im folgenden Diagramm durch die zwei alternativen Pfade dargestellt, die den Zustand "Stift: Im Bereich; Haptik: Angehalten" verlassen, wenn der Stift außerhalb des Bereichs ist.

Hinweis

Der Host kann jederzeit verlangen, dass eine nicht fortlaufende Wellenform wiedergegeben wird. In diesem Fall sollte der Stift es abspielen und dann in den Zustand zurückkehren, in dem er zuvor war.

Hinweis

Der Host darf nur fortlaufende Wellenformen konfigurieren. Diskrete/nicht fortlaufende Wellenformen dürfen nur manuell ausgelöst werden.

Haptisches Stiftzustandsdiagramm

Tastatursammlung (optional)

Eine optionale Funktion, um die Berichterstellung über letzte Schaltflächenklicks an den Host über HID-Tastaturberichte zu aktivieren.

Ein kompatibles Gerät soll drei unterschiedliche Tastaturkombinationen melden, die drei verschiedenen Tastenaktionen entsprechen, über ein HID-Bluetooth-Tastaturgerät, das dem Host zur Verfügung gestellt wird. Die Aktionen und die entsprechenden Tastaturkombinationen werden unten beschrieben:

Button-Aktion Tastenkombination
Einzelner Klick WIN+F20
Doppelklicken WIN+F19
Drücken und Halten Win+F18

Implementierung der Bluetooth-Schaltfläche

Um eine End-Bluetooth-Taste zu implementieren, meldet das Gerät 3 verschiedene Tastaturkombinationen, die 3 verschiedenen Tastenaktionen über ein HID Bluetooth LE-Tastaturgerät entsprechen, das dem Host verfügbar gemacht wird. Die Aktionen und die entsprechenden Tastaturkombinationen werden unten beschrieben:

Bluetooth-Tastenaktion Tastenkombination zum Bericht
Einzelklick WIN+F20
Doppelklicken WIN+F19
Drücken und Halten WIN+F18

Stiftaufbewahrung

Ab Windows 10, Version 1903, unterstützt Windows Benachrichtigungen für Geräte mit kompatiblem Stiftstau. Der Mechanismus basiert auf der Hardware, die den entfernten oder ersetzten Stift erkennt und einen entsprechenden HID-Tastaturbericht für ein Paar Tastenkombinationen generiert. Melden Sie WIN+STRG+F20, um eine Andockung zu signalisieren (Stift in der Verstauung), melden Sie WIN+STRG+F19, um eine Entdocking zu signalisieren (Stift aus der Verstauung entfernt). Dies kann mit Firmware oder treiber implementiert werden.

Diese Andocken-/Abdocken-Ereignisse rufen das Shell-Freihandbereichsmenü auf oder blenden es aus. Ab Windows 10, Version 2004, reagiert Office auch auf diese Ereignisse mithilfe einer Plattform-API , mit der entwickler ihre Anwendung erweitern können, um das Bewusstsein für Stowageereignisse zu erhöhen. Es gibt keine Unterstützung, um abzufragen, ob der Stift im Dock vorhanden ist, Apps werden nur über das Entfernen und Zurückgeben von Ereignissen benachrichtigt, wenn sie sich im Vordergrund befinden.

HiD-Berichtsdeskriptorbeispiel

05,0D,                      // Usage Page (Digitizers)
09,20,                      // Usage (Stylus)
A1,01,                      // Collection (Application)
85,40,                      //   Report ID (64)
95,01,                      //   Report Count (1)
75,20,                      //   Report Size (32)
17,00,00,00,80,             //   Logical Minimum (-2147483648)
27,FF,FF,FF,7F,             //   Logical Maximum (2147483647)
09,5B,                      //   Transducer Serial Number
81,02,                      //   Input (Data,Var,Abs)
75,10,                      //   Report Size (16)
15,01,                      //   Logical Minimum (1)
27,FF,FF,00,00,             //   Logical Maximum (65535)
09,91,                      //   Transducer Vendor ID
81,02,                      //   Input (Data,Var,Abs)
05,0E,                      //   Usage Page (Haptics)
09,01,                      //   Usage (0x01)
A1,02,                      //   Collection (Logical)
85,41,                      //     Report ID (65)
95,01,                      //     Report Count (1)
75,08,                      //     Report Size (8)
15,01,                      //     Logical Minimum (1)
26,FF,00,                   //     Logical Maximum (255)
09,24,                      //     Usage (0x24)
B1,02,                      //     Feature (Data,Var,Abs)
09,24,                      //     Usage (0x24)
91,02,                      //     Output (Data,Var,Abs)
09,23,                      //     Usage (0x23)
B1,02,                      //     Feature (Data,Var,Abs)
09,23,                      //     Usage (0x23)
91,02,                      //     Output (Data,Var,Abs)
15,01,                      //     Logical Minimum (1)
25,12,                      //     Logical Maximum (18)
09,20,                      //     Usage (0x20)
B1,02,                      //     Feature (Data,Var,Abs)
09,21,                      //     Usage (0x21)
91,02,                      //     Output (Data,Var,Abs)
15,00,                      //     Logical Minimum (0)
26,FE,00,                   //     Logical Maximum (254)
66,01,10,                   //     Unit (SI Linear)
55,FD,                      //     Unit Exponent (253)
35,00,                      //     Physical Minimum (0)
46,EC,09,                   //     Physical Maximum (2540)
09,28,                      //     Usage (0x28)
91,02,                      //     Output (Data,Var,Abs)
75,10,                      //     Report Size (16)
26,D0,07,                   //     Logical Maximum (2000)
46,D0,07,                   //     Physical Maximum (2000)
09,25,                      //     Usage (0x25)
91,02,                      //     Output (Data,Var,Abs)
09,25,                      //     Usage (0x25)
B1,02,                      //     Feature (Data,Var,Abs)
45,00,                      //     Physical Maximum (0)
85,42,                      //     Report ID (66)
75,20,                      //     Report Size (32)
17,42,00,0D,00,             //     Logical Minimum (852034)
27,42,00,0D,00,             //     Logical Maximum (852034)
09,22,                      //     Usage (0x22)
B1,02,                      //     Feature (Data,Var,Abs)
09,11,                      //     Usage (0x11)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
75,10,                      //       Report Size (16)
95,10,                      //       Report Count (16)
15,01,                      //       Logical Minimum (1)
27,FF,FF,00,00,             //       Logical Maximum (65535)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
05,0E,                      //     Usage Page (Haptics)
09,10,                      //     Usage (0x10)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
16,03,10,                   //       Logical Minimum (4099)
26,FF,2F,                   //       Logical Maximum (12287)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
C0,                         //   End Collection ()
C0                          // End Collection ()