Freigeben über


Handbuch für die Implementierung des haptischen Stifts

Dieses Dokument beschreibt die Protokollimplementierung für eine haptische Stift-Gerät, das eine Verbindung zu einem kompatiblen Windows 11-Host herstellt. Dies schließt keine Anleitung zu mechanischen Beschränkungen, elektrischen Beschränkungen oder Komponentenauswahl zum Erzeugen der haptischen Reaktion innerhalb des Stiftwandlers ein. Diese Implementierungsanleitung ist unabhängig von dem Stiftprotokoll, das zwischen dem Stiftwandler und dem Stiftdigitalisierer verwendet wird, jedoch kann eine Implementierung wählen, ein Stiftprotokoll mit einer Uplink-Fähigkeit zu verwenden, die es dem Stiftdigitalisierer ermöglicht, dem Stiftwandler zusätzliche Parameter zum Zweck der Modulation bereitzustellen haptische Reaktion.

Geräteklasse

Der haptische Stift ist eine Erweiterung der Pen Device-Klasse unter Windows. Dieser Implementierungsleitfaden ergänzt den Stift-Implementierungsleitfaden und konzentriert sich auf die Implementierung haptischer Geräte innerhalb des Stiftwandlers, daher müssen haptische Stifte zusätzlich zu den hier enthaltenen Anforderungen die Anforderungen im Stift-Implementierungsleitfaden erfüllen.

Gerätebuskonnektivität

Der haptische Stift verwendet die von Microsoft bereitgestellten Inbox-Treiber, um eine Verbindung zu einem Windows-Host mit HID über Bluetooth herzustellen.

Die Implementierung des haptischen Stiftprotokolls

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

Windows enthält einen HID-Klassentreiber und einen entsprechenden HID-Bluetooth-fähigen Miniport-Treiber, daher sind keine Miniport-Treiber von Drittanbietern erforderlich. Die Firmware für haptische Stiftgeräte 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 Musterdeskriptor wird im Abschnitt Musterberichtsdeskriptoren unten bereitgestellt.

Erforderliche HID-Auflistung der obersten Ebene

Erforderliche HID-Auflistung der obersten Ebene für haptische Stift

Ein haptische Stiftgerät sollte das HID-Protokoll auf einem Windows 10 System so verwenden, dass das Gerät eine Sammlung auf oberster Ebene bereitstellt, die als Digitalisierer/Eingabestift (Seite 0x0D, Verwendung 0x20) angezeigt wird.

Eingabebericht zum Stift-Digitalisierer

Die Stift-Digitalisierersammlung muss die Stiftkennung, bestehend aus der Seriennummer des Wandlers und der Hersteller-ID des Wandlers, in den an das Betriebssystem gemeldeten Eingabeberichten melden. Dieselbe Stiftkennung muss über die Stiftsammlung gemeldet werden. Dadurch kann das Betriebssystem die vom Digitalisierer erzeugte Stifteingabe mit dem Stift korrelieren. Details zum Leitfaden für die Stiftimplementierung finden Sie hier: Implementierung des Stiftprotokolls.

Seriennummer des Wandlers

Die Wandlerseriennummer ist eine eindeutige dauerhafte Kennung für den Wandler, der im Stiftzubehör verwendet wird, das mit dem Stiftdigitalisierer kommuniziert. Dies muss 32 Bit sein und wird vom Anbieter oder der Entität definiert, 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 dass die Übertragung nicht vollständig empfangen wurde, meldet der 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-Bit-Bits als Teil des eindeutigen persistenten Bezeichners für den in einem Stiftzubehör verwendeten Wandler. In Fällen, in denen die Seriennummer der Wandler – Teil 2 dem Digitalisierungsgerät nicht bekannt ist, entweder weil das Stiftzubehör die Übertragung dieses Werts nicht unterstützt oder dass die Übertragung nicht vollständig empfangen wurde, meldet der Digitalisierungsgerät 0 an den Host. Nullposition wird vom Host nicht unterstützt.

Seite id Notizen
0xD 0x5B Obligatorisch für Funktionen, die von der eindeutigen Stiftidentifikation abhängig sind (siehe unten)
0xD 0x6E Optionale Erweiterung der Seriennummer um zusätzliche 32 Bits

Hersteller-ID des Wandlers

Die Hersteller-ID des Wandlers ist ein Feld zum Kommunizieren des Herstellers des Wandlers, der in dem Stiftzubehör verwendet wird, das mit dem Stiftdigitalisierer kommuniziert. Dies muss eine 2-Byte-USB-IF-zugewiesene Anbieter-ID entweder des Herstellers oder der IHV/OEM sein, die die Verwendung ihrer USB-IF-Anbieter-ID für diesen Zweck autorisiert.

Seite id Notizen
0xD 0x91 Obligatorisch für Funktionen, die von der eindeutigen Stiftidentifikation abhängig sind (siehe unten)

Funktionen abhängig von eindeutiger Stiftidentifikation

Das Melden von PenID ist obligatorisch, um Szenarien wie Stifthaptik zu ermöglichen (erforderlich für haptische Funktionen in diesem Handbuch).

Es ist auch obligatorisch für Szenarien, die mehrere Stifte zum Einfärben verwenden. Zum Beispiel:

  • Die Whiteboard-App unter Windows unterstützt die Verwendung mehrerer Stifte, wobei jeder Stift einem bestimmten Tintenwerkzeug zugeordnet werden kann
  • Im Allgemeinen Apps, die verschiedenen physischen Stiften Attribute oder Verhalten zuweisen möchten, obwohl der Digitalisierer zu diesem Zeitpunkt möglicherweise nur einen einzelnen Stift auf dem Bildschirm unterstützt
  • Apps, die mehrere gleichzeitige Stifte auf unterstützten Digitizern verfolgen möchten

Haptischer Ausgabebericht

Wenn ein Stiftgerät haptisches Feedback unterstützt, kann es dem System und Anwendungen ermöglichen, davon zu profitieren, indem es eine haptische Feedback-Sammlung (Seite 0x0E, Verwendung 0x01) in den Stylus-TLC einschließt. Weitere Informationen darüber, wie die HID-Spezifikation haptisches Feedback unterstützt, finden Sie auf der Haptik-Seite-Ratifizierung der HID-Spezifikation.

Der Host verwendet die folgenden Verwendungen in einem Ausgabebericht (über die Sammlung haptischer Rückmeldungen), um es dem Host zu ermöglichen, haptische Rückmeldungsereignisse an das haptische Stiftgerät auszugeben. Wenn sich ein Gerät dafür entscheidet, eine Sammlung haptischer Rückmeldungen bereitzustellen, sind einige Verwendungen obligatorisch, damit vom Host initiierte haptische Rückmeldungen unterstützt werden können.

Member BESCHREIBUNG 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 der Wellenformen in der Waveform-Liste 0x0E 0x11 Obligatorisch.
Automatischer Trigger Die Wellenform wird nach Ermessen des Geräts automatisch ausgelöst 0x0E 0x20 Obligatorisch.
Zugeordnetes Steuerelement des automatischen Triggers HID-Nutzung des Steuerelements, das haptischem Feedback zugeordnet ist 0x0E 0x22 Obligatorisch.
Intensität Ausgang – Intensität der Wellenform des manuellen Triggers in Prozent 0x0E 0x23 Optional
Zahl der Wiederholungen Output – Anzahl der Wiedergaben der manuellen Trigger-Wellenform nach der ersten Wiedergabe 0x0E 0x24 Optional
Retrigger-Periode Ausgang – Wartezeit bis zur erneuten Auslösung des manuellen Triggers bei Wiederholung 0x0E 0x25 Optional
Wellenform-Cutoff-Zeit Max. Zeit, für die eine manuelle Triggerwellenform wiedergegeben werden kann, bevor sie beendet wird 0x0E 0x28 Optional

Wellenformliste

Die Verwendung der Wellenformliste stellt eine mithilfe von Ordnungszeichen sortierte Auflistung der HID-Nutzungen von unterstützten Wellenformen dar. Die vordefinierten haptischen Wellenformen sind in der HID-Spezifikation definiert. Bei haptischen Stiftgeräten können diese Wellenformen als zwei Segmente klassifiziert werden, die unterschiedlichen Szenarien entsprechen:

  • WELLENFORM*KONTINUIERLICH - Tintenbasiertes Feedback zur Simulation verschiedener Texturen, während der Benutzer aktiv mit verschiedenen Werkzeugen wie Stift, Bleistift usw. einfärbt.
  • WAVEFORM_* – Diskretes, nicht kontinuierliches, interaktionsbasiertes Feedback, wenn ein Benutzer eine eingabegesteuerte Aufgabe ausführt, z. B. das Bewegen der Maus über eine Schaltfläche, das Klicken auf eine deaktivierte Schaltfläche und die erfolgreiche Tintenformerkennung.

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

Wellenform BESCHREIBUNG Seite ID Obligatorisch/Optional
WAVEFORM_NONE No-op. Sollte den Wiedergabestatus laufender Wellenformen nicht beeinflussen 0x0E 0x1001 Obligatorisch.
WAVEFORM_STOP Stoppt die Wiedergabe laufender Wellenformen 0x0E 0x1002 Obligatorisch.
WAVEFORM_CLICK Erzeugt ein kurzes „Klick“-Feedback. Standard-Fallback, wenn die von der App ausgewählte Interaktions-Feedback-Wellenform nicht vom haptischen Stift unterstützt wird 0x0E 0x1003 Obligatorisch.
WAVEFORM_INKCONTINUOUS Simuliert das Gefühl der Tinte mit einem physischen Kugelschreiber. Standardfallback, wenn eine Tintenwellenform nicht vom haptischen Stift unterstützt wird 0x0E 0x100B Obligatorisch.
WAVEFORM_SUCCESS Starkes haptisches Signal, um den Benutzer auf eine erfolgreiche Aktion hinzuweisen 0x0E 0x1009 Optional
WAVEFORM_ERROR Starkes haptisches Signal, um den Benutzer darauf hinzuweisen, dass eine Aktion fehlgeschlagen ist oder ein Fehler aufgetreten ist 0x0E 0x100A Optional
WAVEFORM_HOVER Haptisches Signal, wenn der Benutzer mit einem haptischen Stift über ein interaktives UI-Element fährt 0x0E 0x1008 Optional
WAVEFORM_PRESS Haptisches Signal, wenn ein Benutzer ein interaktives UI-Element in einer inkrementellen Aktion drückt (siehe Release) 0x0E 0x1006 Optional
WAVEFORM_RELEASE Haptisches Signal, wenn ein Benutzer ein interaktives UI-Element in einer inkrementellen Aktion loslässt (siehe Drücken) 0x0E 0x1007 Optional
WAVEFORM_PENCILCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer Bleistift als Tintenwerkzeug auswählt 0x0E 0x100C Optional
WAVEFORM_MARKERCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer Marker als Tintenwerkzeug auswählt 0x0E 0x100D Optional
WAVEFORM_CHISELMARKERCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer Meißelmarker/Textmarker als Tintenwerkzeug auswählt 0x0E 0x100E Optional
WAVEFORM_BRUSHCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer den Pinsel als Farbwerkzeug auswählt 0x0E 0x100F Optional
WAVEFORM_ERASERCONTINUOUS Kontinuierliches haptisches Signal, wenn der Benutzer den Radiergummi als Tintenwerkzeug auswählt 0x0E 0x1010 Optional
WAVEFORM_SPARKLECONTINUOUS Kontinuierliches haptisches Signal für spezielle Tintenwerkzeuge, wie z. B. einen mehrfarbigen Pinsel 0x0E 0x1011 Optional

Hinweis

Obwohl dies nicht erforderlich ist, wird empfohlen, auch die anderen aufgezählten Wellenformen zu implementieren, um eine vollständigere Benutzererfahrung bereitzustellen. Insbesondere WAVEFORM_PRESS und WAVEFORM_RELEASE werden dringend empfohlen, da sie wertvolles Interaktionsfeedback liefern.

Sowohl WAVEFORM_NONE als auch WAVEFORM_STOP sind für alle HID-konformen haptischen Geräte erforderlich. Ordnungszeichen 1 und 2 werden implizit auf WAVEFORM_NONE und WAVEFORM_STOP festgelegt. Sie müssen nicht in der Wellenformliste oder Dauerliste deklariert werden. In der Wellenformliste werden unterstützte Wellenformen mit dem physischem Minimum und Maximum der einzelnen Ordinale in der Liste angegeben.

Dauerliste

Die Nutzung der Dauerliste ist eine Sammlung der Dauer der unterstützten Wellenformen der Wellenformliste, sortiert mithilfe von Ordnungszeichen. Die Einheit für die Wellenformdauer ist Millisekunden, die Dauer muss für eine nicht fortlaufende Wellenform ein positiver Nicht-Null-Wert sein. Wenn eine Wellenform kontinuierlich ist (wiedergegeben wird, bis der Host sie anhält oder die Wellenform-Cutoff-Zeit überschritten wird), ist die Dauer mit Null angegeben.

Für WAVEFORM_NONE und WAVEFORM_STOP wird angenommen, dass die Dauer Null beträgt. Sie müssen nicht in der Dauerliste deklariert werden.

Intensität

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

Zahl der Wiederholungen

Die Nutzung „Zahl der Wiederholungen“ gibt an, wie oft eine Wellenform wiederholt wird. Eine Zahl der Wiederholungen von Null gibt an, dass die manuelle Triggerwellenform nur ein mal wiedergegeben werden soll (keine Wiederholung). Wenn die Wellenform-Cutoff-Zeit überschritten wurde, wird erwartet, dass alle unvollständigen Wiederholungen ignoriert werden.

Retrigger-Periode

Die Verwendung des Zeitraums bis zum erneuten Auslösen gibt an, wie lange das Gerät warten soll, bis es eine Wellenform für den manuellen Trigger in einem Ausgabebericht gemäß der angegebenen Wiederholungsanzahl wiederholt. Dieser Wert wird in Millisekunden angegeben. Wenn die Retrigger-Periode kleiner als die Dauer der wiedergegebenen Wellenform ist, sollte die Wellenform gestoppt und zu dem durch die Retrigger-Periode angegebenen Zeitraum neu gestartet werden.

Wellenform-Cutoff-Zeit

Die Wellenform-Cutoff-Zeit-Nutzung gibt maximale Dauer an, für die eine manuelle Triggerwellenform wiederholt werden kann, 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 diskreter Dauer, die mehrmals wiederholt werden. Die Einheiten für diesen Wert sind Millisekunden.

Haptischer Ausgabebericht

Der Host verwendet die folgenden Verwendungen in einem Ausgabebericht, um haptische Feedback-Ereignisse an das haptische Stiftgerät auszugeben. Einige Verwendungen sind aus Gründen der Kompatibilität mit der Windows-Hostimplementierung obligatorisch.

Member BESCHREIBUNG Seite ID Obligatorisch/Optional
Manueller-Trigger Wellenform zum Auslösen als expliziter Befehl vom Host 0x0E 0x21 Obligatorisch.
Intensität Intensität der Wellenform des manuellen Triggers in Prozent 0x0E 0x23 Obligatorisch.
Zahl der Wiederholungen Anzahl der Wiedergaben der manuellen Trigger-Wellenform nach der ersten Wiedergabe 0x0E 0x24 Optional
Retrigger-Periode Dauer der Wartezeit, bevor der manuelle Trigger bei Wiederholung erneut ausgelöst wird 0x0E 0x25 Optional

Manueller-Trigger

Die Verwendung des manuellen Triggers stellt eine unterstützte Wellenformverwendung aus der Wellenformliste dar, deren Wiedergabe vom Host angefordert wurde. Wenn ein Ausgabebericht, der einen anderen manuellen Trigger als „WAVEFORM_NONE“ enthält, an das Gerät gesendet wird, sollte sofort mit der Wiedergabe der angegebenen Wellenform mit den zusätzlichen Eigenschaften begonnen werden, die im Ausgabebericht enthalten sind (Intensität, Wiederholungsanzahl, Zeitraum bis zum erneuten Auslösen). Wenn ein Ausgabebericht einen manuellen Trigger von WAVEFORM_STOP enthält, sollte jede laufende Wellenformwiedergabe gestoppt werden.

Informationen zur Verwendung von Intensität, Wiederholungsanzahl und Retrigger-Periode finden Sie im vorherigen Abschnitt in Bezug auf den Ausgabefunktionsbericht.

Haptik starten und stoppen

Das folgende Flussdiagramm beschreibt, wann die haptischen Signale des Stifts konfiguriert, gelöscht, gestartet und gestoppt werden sollten.

Die unten beschriebenen verschiedenen haptischen Zustände sind:

  • Spielen: Der Stift spielt aktiv die haptische Wellenform ab
  • Angehalten: Der Stift ist mit einer Wellenform konfiguriert, spielt sie aber nicht aktiv ab
  • Gestoppt: Der Stift ist nicht mit einer Wellenform konfiguriert und gibt nichts aktiv wieder

Informationen zum Stiftstatus in Bezug auf den Digitizer finden Sie unter Zustände des Windows-Stifts.

Hinweis

Wenn der Stift die Reichweite verlässt, wird empfohlen, aber nicht erforderlich, die haptische Konfiguration zu löschen. Dies wird im Diagramm unten durch die zwei alternativen Pfade vermittelt, die aus dem Zustand „Stift: In Reichweite; Haptik: Angehalten“ herauskommen, wenn der Stift außerhalb der Reichweite ist.

Hinweis

Der Host kann jederzeit das Abspielen einer nicht kontinuierlichen Wellenform anfordern. In diesem Fall sollte der Stift es abspielen und dann in den Zustand zurückkehren, in dem er sich zuvor befand.

Hinweis

Der Host darf nur kontinuierliche Wellenformen konfigurieren. Diskrete/nicht kontinuierliche Wellenformen dürfen nur manuell getriggert werden.

Zustandsdiagramm des haptischen Stifts

Tastatursammlung (Optional)

Eine optionale Funktion, um das Melden von Tastenklicks am Ende an den Host über HID-Tastaturberichte zu ermöglichen.

Ein kompatibles Gerät muss 3 unterschiedliche Tastaturkombinationen melden, die 3 unterschiedlichen Tastenaktionen über ein dem Host ausgesetztes HID-Bluetooth-Tastaturgerät entsprechen. Die Aktionen und die entsprechenden Tastenkombinationen sind unten aufgeführt:

Schaltfläche Aktion Tastenkombination
Einzigen Klick WIN+F20
Doppelklicken WIN+F19
Drücken und Halten Win+F18

Implementierung der Bluetooth-Schaltfläche

Zum Implementieren einer Tail-End-Bluetooth-Taste meldet das Gerät 3 verschiedene Tastenkombinationen, die 3 unterschiedliche Tastenaktionen über ein HID Bluetooth LE-Tastaturgerät anzeigen, das dem Host zur Verfügung stehen. Die Aktionen und die entsprechenden Tastenkombinationen sind unten aufgeführt:

Bluetooth-Schaltflächenaktion Tastenkombination zum Bericht
Einfaches Klicken WIN+F20
Doppelklicken WIN+F19
Drücken und Halten WIN+F18

Stift-Stowage

Ab Windows 10, Version 1903, unterstützt Windows Benachrichtigungen für Geräte, die kompatible Stiftstauung enthalten. Der Mechanismus beruht darauf, dass die Hardware erkennt, dass der Stift entfernt oder ersetzt wird, und einen entsprechenden HID-Tastaturbericht für ein Paar von Tastenkombinationen generiert. Um ein Dock zu signalisieren (Stift wird im Staufach ersetzt), melden Sie WIN+STRG+F20 um ein Dock zu signalisieren (Stift aus dem Stauraum entfernt), melden SIE WIN+STRG+F19. Dies kann mit Firmware oder einem Treiber implementiert werden.

Diese Einock-/Dockereignisse bringen/schließen das Menü "Shell-Freihandarbeitsbereich". Ab Windows 10 reagiert Office mit version 2004 auch auf diese Ereignisse, indem eine Plattform-API verwendet wird, mit der jeder Entwickler seine Anwendung für das Bewusstsein für Stowageereignisse erweitern kann. Es gibt keine Unterstützung für die Abfrage, ob der Stift im Dock vorhanden ist, Apps werden nur dann über Entfernungs- und Rückgabeereignisse benachrichtigt, wenn sie im Vordergrund sind.

Sample HID Report Descriptor

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 ()