Freigeben über


Unterstützen von Verwendungsmöglichkeiten in den Berichtsdeskriptoren von Digitizern

Eine Verwendung ist der Name eines Werts, einer Schaltfläche oder einer Sammlung in einem HID-Bericht. Der Host verwendet beim Extrahieren von Daten aus einem Stift oder Touchgerät die folgenden Verwendungen.

Member BESCHREIBUNG Seite id Sicherungsmedium
X X-Koordinate der Kontaktposition. Desktop 0x30 Stift, Berührung
J Y-Koordinate der Kontaktposition. Desktop 0x31 Stift, Berührung
Tipp Legen Sie fest, ob sich der Finger oder Stift auf der Oberfläche des Digitizer befindet. Digitizer 0x42 Stift, Berührung
Im Bereich Legen Sie fest, wann der Finger oder Stift erkannt wird, während sie über den Digitizer fahren oder in Kontakt mit der Oberfläche des Digitizer sind. Digitizer 0x32 Stift, Berührung
Confidence Legen Sie fest, wann der Kontakt ein Finger ist (keine Hand oder ein anderer Teil der Hand, die keine Fingereingabe auslösen sollte). Digitizer 0x47 Touch
Width Breite des Kontakts. Digitizer 0x48 Toucheingabe
Height Höhe des Kontakts. Digitizer 0x49 Toucheingabe
Überprüfungszeit Relative Scanzeit. Digitizer 0x56 Toucheingabe
Luftdruck Die Menge des Drucks, den der Benutzer auf den Kontaktpunkt anwendet. Digitizer 0x30 Stift, Berührung
Barrel Legen Sie fest, ob die Schaltfläche auf der Hülse eines Stifts gedrückt wird Digitizer 0x44 Stift
Azimut Die dem Uhrzeigersinn entgegengesetzte Drehung des Cursors um Z-Achse. Digitizer 0x3f Stift, Berührung
Invertierung Legen Sie fest, wenn das entgegengesetzte Ende des Stifts über den Digitizer bewegt wird. Digitizer 0x3c Stift
Radierer Legen Sie fest, wenn sich das gegenteilige Ende des Stifts auf der Oberfläche des Digitizer befindet. Digitizer 0x45 Stift
X-Neigung Der Winkel zwischen der Y-Z-Ebene und der Ebene, die die Zeigerachse und die Y-Achse enthält. Digitizer 0x3d Stift
Y-Neigung Der Winkel zwischen der X-Z-Ebene und der Zeigergerätebene; eine positive Y-Neigung ist dem Benutzer entgegengesetzt. Digitizer 0x3e Stift
Twist Drehung im Uhrzeigersinn des Cursors um die eigene Achse. Digitizer 0x41 Stift

Hinweis Verwendungen, die in der obigen Tabelle aufgeführt sind, sind Windows bekannt und werden mithilfe der WM_POINTER Nachricht an Anwendungen übermittelt.

Hinweis Zeigergeräte können zusätzliche Verwendungen unterstützen (einschließlich anbieterspezifischer Verwendungen). Zusätzliche Verwendungen werden nicht an Anwendungen in WM_POINTER Nachrichten übermittelt. Der Wert dieser Verwendungen kann mithilfe der Funktion GetRawPointerDeviceData abgerufen werden. Um die Verwendungen über die Funktion GetRawPointerDeviceData zugänglich zu machen, müssen sich die Verwendungen in demselben Bericht wie die X- und Y-Verwendungen befinden.

HID-Descriptor für Digitizer

Ab Windows 8 muss ein Touch-Digitizer als Touchscreen angezeigt werden (Seite = 0x0D, Verwendung = 0x04). Ein Stift-Digitizer muss als integrierter Stift (Seite = 0x0D, Verwendung = 0x02) oder externer Stift (Seite = 0x0D, Verwendung = 0x01) angezeigt werden. Integrierte Touch- und Stiftgeräte werden dem Display zugeordnet, mit dem sie physisch verbunden sind. Externe Stiftgeräte werden dem virtuellen Desktop zugeordnet.

Erforderliche HID-Verwendungen für Digitizer

Die folgenden Verwendungen sind für alle Digitizer erforderlich. Geräte, die nicht alle erforderlichen Verwendungen unterstützen, funktionieren nicht unter Windows 8:

X und Y
X und Y melden die Koordinaten des Kontakts. Unter Windows 8 kann ein Gerät zwei Punkte für jeden Kontakt melden. Der erste Punkt (bezeichnet als T) gilt als vom Benutzer beabsichtigter Punkt der Berührung, während der zweite Punkt (bezeichnet als C) als Mittelpunkt des Kontakts gilt. Geräte, die T und C melden können, sollten über ein Verwendungsarray von zwei X-Werten und zwei Y-Werten verfügen. Die Werte in der ersten Position der Arrays werden als Koordinaten für T interpretiert und die Werte in der zweiten Position werden als Koordinaten für C interpretiert. (Die Berichtanzahl für beide Verwendungen beträgt 2, wodurch angegeben wird, dass ein Array von Verwendungen vorliegt). Geräte, die C melden, müssen auch die Verwendungen Breite und Höhe melden. Der Host verwendet C, um den Begrenzungsrahmens um den Kontakt zu erstellen. Wenn das Gerät nur ein X- und Y-Paar meldet, verwendet der Host dieses Paar für T und C. Das Beispieleingabedeskriptor enthält Verwendungsarrays sowohl für X als auch für Y. Die folgenden Extrakte aus dem Beispieldeskriptor veranschaulichen den Unterschied zwischen einem Gerät, das nur T unterstützt und einem Gerät, das T und C unterstützt.

Ein Gerät, das nur T meldet, darf nicht über ein Verwendungsarray für die Eigenschaften X und Y verfügen (d. h. die Berichtsanzahl für jede Verwendung ist 1, wie im folgenden angegeben.)

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Ein Gerät, das T und C unterstützt, verwendet Verwendungsarrays zum Melden der X- und Y-Werte. Die Berichtanzahl für X und Y beträgt 2.

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x02,                         //       REPORT_COUNT (2)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Hinweis Diese Beispiele nutzen die HID-Regel, dass globale Elemente für jedes Hauptelement gleich bleiben, bis sie geändert werden. Dadurch können X- und Y-Verwendungen sich für die Berichtanzahl einen einzigen Eintrag teilen.

Stiftgeräte sollten das erste Beispiel für ihre Deskriptoren verwenden, da C für diese Geräte nicht relevant ist.

Die folgenden globalen Elemente müssen für die X- und Y-Verwendungen angegeben werden:

  • Logisches Minimum
  • Logisches Maximum
  • Physisches Minimum
  • Physisches Maximum
  • Einheit
  • Exponent der Einheit

Der physische Bereich des Geräts und die Einheiten müssen genau gemeldet werden. Wenn die Informationen ungenau sind, funktioniert das Gerät nicht ordnungsgemäß. Geräte müssen Daten auch innerhalb des logischen Bereichs melden, der im Berichtdeskriptor angegeben ist. Jeder gemeldete Wert außerhalb dieses Bereichs wird als ungültig betrachtet und der Wert wird in den nächstliegenden Grenzwert (logisches Minimum oder logisches Maximum) geändert.

Spitze
Verwenden Sie den Schalter Spitze, um den Finger- oder Stiftkontakt anzugeben und von der Oberfläche des Digitizers abzuheben. Es sollte ein Hauptelement mit einer Berichtsgröße von 1 vorhanden sein. Bei der Übermittlung von Berichten sollte die Bitposition festgelegt werden, wenn sich der Finger oder Stift in Kontakt mit der Oberfläche des Digitizers befindet. Andernfalls sollte das Bit gelöscht werden.

Scanzeit
Scanzeit meldet relative Zeit in Einheiten von 100 Mikrosekunden. Es stellt das Delta zum ersten Frame dar, der gemeldet wurde, nachdem ein Gerät nach einem Zeitraum der Inaktivität mit dem Melden von Daten begonnen hat. Die erste empfangene Scanzeit wird als Basiszeit für nachfolgende gemeldete Zeiten behandelt. Die Deltas zwischen gemeldeten Scanzeiten sollten die Scanfrequenz des Digitizers widerspiegeln. Es ist wichtig zu beachten, dass im Gegensatz zu anderen Verwendungen der Host keine Flexibilität für die Einheit der Scanzeit-Verwendung zulässt. Da dem Zähler nur 1 Byte Speicher zugeordnet sind, wird erwartet, dass der Wert von Rollovern betroffen ist. Der Scanzeitwert sollte innerhalb eines Frames für alle Kontakte identisch sein. Diese Anforderung gilt auch für Geräte, die Daten über den Hybridmodus melden

Hinweis Diese Verwendung ist nur für Touchgeräte erforderlich.

Im Bereich
Wenn das Gerät die Z-Achse-Erkennung unterstützt, muss der Digitizer die Verwendung von Im Bereich im Eingabebericht festlegen, wenn sich der Transducer innerhalb des Bereichs befindet, in dem die Digitalisierung möglich ist. Wenn das Gerät die Z-Achse-Erkennung nicht unterstützt, sollte der Treiber die Verwendung Im Bereich nicht in seine Berichtsdeskriptor einschließen.

Frühere Windows-Versionen verfügen über verschiedene Richtlinien, wie Touch-Digitalisierertreiber die Berichterstattung im Bereich behandeln sollten.

Geräte, die Stift und Touch unterstützen, sollten NULL-Status für die X- und Y-Verwendungen in der Sammlung der obersten Ebene für den Stift unterstützen. Wenn der Stift auf einer Höhe erkannt wird, in der die X- und Y-Werte nicht genau erkannt werden können, sollte das Gerät NULL-Werte für X und Y melden und die Verwendung Im Bereich festlegen. NULL-Werte bedeuten einfach Werte außerhalb des angegebenen logischen Bereichs für diese Verwendungen, sofern das Gerät angegeben hat, dass es NULL für die relevante Verwendung unterstützt. Das Gerät kann dann genaue X- und Y-Werte melden, sobald der Eingabestift nah genug an der Oberfläche ist, um dies zu ermöglichen. Dieses Protokoll ermöglicht es dem Host, die Palmablehnung zu implementieren, wenn sich der Stift im Bereich befindet.

Es sollte darauf hingewiesen werden, dass der Host die Werte außerhalb des logischen Bereichs als Zeichen für die Implementierung dieses Protokolls erkennt, nur wenn der Berichtdeskriptor insbesondere die Tatsache enthält, dass X und Y NULL-Status unterstützen. Andernfalls werden Werte außerhalb des logischen Bereichs einfach in den nächsten Grenzwertwert verschoben. Die folgenden Extrakte aus Berichtsdeskriptoren veranschaulichen den Unterschied zwischen einem Gerät, das NULL für X und Y unterstützt, und einem, das nicht unterstützt. Es sollte darauf hingewiesen werden, dass NULL-Unterstützung nur in der Sammlung der obersten Ebene des Stiftes benötigt wird. Touch-Auflistungen auf oberster Ebene müssen nicht NULL für X und Y für diesen Zweck unterstützen.

Berichtsextrakt mit NULL-Unterstützung für X und Y:

0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 42
    0x09, 0x30,                         //     USAGE (X)                    44
    0x75, 0x10,                         //     REPORT_SIZE (16)             46
    0x95, 0x01,                         //     REPORT_COUNT (1)             48
    0xa4,                               //     PUSH                         50
    0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           51
    0x65, 0x13,                         //     UNIT (Inch,EngLinear)        53
    0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)         55
    0x46, 0x3a, 0x20,                   //     PHYSICAL_MAXIMUM (8250)      57
    0x26, 0xf8, 0x52,                   //     LOGICAL_MAXIMUM (21240)      60
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         63
    0x09, 0x31,                         //     USAGE (Y)                    65
    0x46, 0x2c, 0x18,                   //     PHYSICAL_MAXIMUM (6188)      67
    0x26, 0x6c, 0x3e,                   //     LOGICAL_MAXIMUM (15980)      70
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         73

Berichtsextrakt ohne NULL-Unterstützung für X und Y:

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

Im Abschnitt „Touch- und Stiftunterstützung“ finden Sie einen vollständigen Deskriptor eines Stiftgeräts, das NULL-Werte für X und Y unterstützt.

Hinweis Diese Verwendung ist für alle Stiftgeräte erforderlich, ist jedoch für Touchgeräte optional.

Optionale HID-Verwendungen

Die folgenden Verwendungen sind optional, aber Sie sollten sie implementieren, wenn die Digitalisiererhardware sie unterstützt. Digitizer, die diese Verwendungen nicht unterstützen, sollten sie nicht im Berichtsdeskriptor enthalten.

Breite und Höhe
Die Verwendungen Breite und Höhe stellen die Breite und Höhe des Begrenzungsrahmens um den Touchkontakt dar. Die gemeldeten Werte sollten niemals 0 sein, außer wenn ein „UP“-Ereignis gemeldet wird, in welchem Fall sie 0 sein sollten.

Breite und Höhe stehen Anwendungsentwicklern auch über die WM_POINTER Nachricht zur Verfügung.

Konfidenz
Konfidenz ist eine Schätzung des Geräts, ob der Touchkontakt eine beabsichtigte oder versehentliche Berührung war. Wenn Sie sicher sind, dass die Toucheingabe vorgesehen ist, legen Sie die Konfidenzverwendung auf 1 (true) fest. Ihr Gerät sollte versehentliche Berührungen so gründlich ablehnen, wie es möglich ist, während die Latenz innerhalb des erforderlichen Bereichs bleibt. Wenn Sie nicht sicher sind, dass die Toucheingabe beabsichtigt ist, und Ihr Gerät die Toucheingabe nicht als versehentlich abgelehnt hat, legen Sie die Konfidenzverwendung auf 0 (false) fest. Wenn Ihr Gerät versehentliche Berührungen immer zurückweist, müssen Sie die Konfidenzverwendung nicht einschließen.

Druck
Druck ist eine Messung der Kraft, die der Finger oder der Stift auf die Digitizer-Oberfläche ausübt. Es gibt keine Einschränkungen des für Druck zulässigen Wertebereichs. Der von einem Gerät angegebene Bereich wird jedoch in einem Bereich von 0 – 1024 normalisiert, wenn Daten an Clientanwendungen bereitgestellt werden.

Barrel
Barrel sollte festgelegt werden, wenn die Stiftlaufschaltfläche gedrückt wird. Andernfalls sollte es zurückgesetzt werden. Barrel wird von Windows verwendet, um die Funktion der Tippfunktion für eine primäre Aktion (Tippen, Ziehen) oder eine sekundäre Aktion (rechts tippen, rechts ziehen) zu ändern.

Obwohl Druck und Barrel optionale Verwendungen sind, wird die Implementierung für Stift-Digitalisierer empfohlen. Ein zusätzlicher Wert wird für diese Verwendungen hinzugefügt: Druck definiert die Stiftstrichbreite, wodurch es realistischer wird, und die Laufschaltfläche ermöglicht die rechte Maustastenfunktion beim Verwenden des Stifts.

X-Neigung
X-Neigung stellt den Ebenenwinkel zwischen der Y-Z-Ebene und der Ebene dar, die die Transducer-Achse und die Y-Achse enthält.

Der physische Bereich und der logische Bereich müssen spezifiziert werden. Der physische Bereich muss –90 bis 90 sein. Der logische Bereich muss groß genug sein, um Daten bereitzustellen, die auf mindestens zwei Dezimalstellen genau sind. Für den physikalischen Bereich können auch Bogenmaße verwendet werden. Die folgende Liste zeigt eine typische logische und physische Kombination.

  • Logisches Minimum: –9000
  • Logisches Maximum: 9000
  • Einheit: Grad
  • Exponent der Einheit: –2
  • Physisches Minimum: –9000
  • Physisches Maximum: 9000

Y-Neigung
Y-Neigung stellt den Ebenenwinkel zwischen der X-Z-Ebene und der Ebene dar, die die Transducer-Achse und die X-Ebenen enthält.

Der physische Bereich und der logische Bereich müssen spezifiziert werden. Der physische Bereich muss zwischen –90 und 90 liegen. Der logische Bereich muss groß genug sein, um Daten bereitzustellen, die auf mindestens zwei Dezimalstellen genau sind. Für den physikalischen Bereich können auch Bogenmaße verwendet werden. Die folgende Liste zeigt eine typische logische und physische Kombination.

  • Logisches Minimum: 0
  • Logisches Maximum: 18000
  • Einheit: Grad
  • Exponent der Einheit: –2
  • Physisches Minimum: –9000
  • Physisches Maximum: 9000

Twist
Twist stellt die Drehung des Cursors im Uhrzeigersinn um die eigene Hauptachse dar.

Der physische Bereich und der logische Bereich müssen spezifiziert werden. Der physische Bereich muss 0 bis 360 sein. Der logische Bereich muss groß genug sein, um Daten bereitzustellen, die auf mindestens zwei Dezimalstellen genau sind. Für den physikalischen Bereich können auch Bogenmaße verwendet werden. In diesem Fall muss der logische Bereich groß genug sein, um Werte zu melden, die auf mindestens vier Dezimalstellen genau sind. Die folgende Liste zeigt eine typische logische und physische Kombination.

  • Logisches Minimum: 0
  • Logisches Maximum: 62831
  • Einheit: Bogenmaß
  • Exponent der Einheit: –4
  • Physisches Minimum: 0
  • Physisches Maximum: 62831

Azimut
Azimut gibt die dem Uhrzeigersinn entgegengesetzte Drehung des Cursors um Z-Achse im Bereich eines vollständigen Kreises an. Der physische Bereich und der logische Bereich müssen spezifiziert werden. Der physische Bereich muss 0 bis 360 sein, aber das Gerät kann entweder den vollständigen Bereich oder die Hälfte des Bereichs melden, vorausgesetzt, die Berührungsellipse ist symmetrisch, was von den Möglichkeiten der Hardware abhängt. Der logische Bereich muss groß genug sein, um Daten bereitzustellen, die auf mindestens zwei Dezimalstellen genau sind. Für den physikalischen Bereich können auch Bogenmaße verwendet werden. In diesem Fall muss der logische Bereich groß genug sein, um Werte zu melden, die auf mindestens 4 Dezimalstellen genau sind. Die folgende Liste zeigt eine typische logische und physische Kombination.

  • Logisches Minimum: 0
  • Logisches Maximum: 36000
  • Einheit: Grad
  • Exponent der Einheit: –2
  • Physisches Minimum: 0
  • Physisches Maximum: 36000

Hinweis Die Exponent der Einheit muss –2 sein, wenn die Einheit Grad ist und –4, wenn die Einheit Bogenmaß ist.