Freigeben über


Erforderliche HID-Sammlungen der obersten Ebene (touchscreen-required-hid-top-level-collections)

In diesem Artikel werden die erforderlichen HID-Sammlungen der obersten Ebene erläutert, die für die Kommunikation mit Touchscreens in Windows 10 und späteren Betriebssystemen verwendet werden.

Ein Windows-Touchscreen-Gerät muss mindestens eine Sammlung der obersten Ebene für das Melden von Touch-Ereignissen verfügbar machen. Es kann zusätzlich eine optionale (aber empfohlene) Sammlung für Firmware-Updates implementiert werden.

Das folgende Diagramm zeigt die HID-Sammlungen für ein Windows-Touchscreen-Gerät.

Diagramm der HID-Sammlungen für ein Windows-Touchscreengerät. Die Abbildung zeigt die Unterstützung für eine anbieterspezifische Firmwareupdatesammlung.

Windows-Touchscreen-Sammlung

In Windows 10 kann ein Touchscreengerät das HID-Protokoll verwenden, um eine Sammlung der obersten Ebene bereitzustellen, die als Digitizer/Touchscreen angezeigt wird (Seite 0x0D, Verwendung 0x04).

Die Windows Touchscreen-Sammlung bietet Multikontakt-Berichte an den Host sowie Geräteinformationen mit Bezug zu diesen Berichten. Die Sammlung sollte einen obligatorischen Eingabebericht mit Kontaktinformationen und einen Featurebericht mit der maximalen vom Digitizer unterstützen Anzahl von Kontakten unterstützen. Ein optionaler (aber dringend empfohlener) Featurebericht kann implementiert werden, um vom Host Latenzmodus-Hinweise zu erhalten, um den Stromverbrauch von USB-Geräten im Ruhezustand zu senken. Schließlich kann ein optionaler (aber empfohlener) Featurebericht implementiert werden, der den Zertifizierungsstatus kommuniziert.

Windows-Touchscreen-Eingabeberichte

Verwendungen auf Kontaktebene umfasst alle obligatorischen Verwendungen und unterstützte optionale Verwendungen, die sich auf jeden einzigartigen Kontakt des Digitizers beziehen, der gemeldet wird. Der Host verwendet die folgenden Verwendungen (über die Windows Touchscreen-Sammlung), um Kontaktdaten aus Eingabeberichten zu extrahieren.

Member BESCHREIBUNG Seite ID Obligatorisch/Optional
Kontakt-ID Identifiziert den Kontakt innerhalb eines bestimmten Frames eindeutig. 0x0D 0x51 Obligatorisch.
X X-Koordinate der Kontaktposition. 0x01 0x30

Obligatorisch für T

Optional für C

J Y-Koordinate der Kontaktposition. 0x01 0x31

Obligatorisch für T

Optional für C

Tipp Gesetzt, wenn sich der Kontakt auf der Oberfläche des Digitizers befindet. 0x0D 0x42 Obligatorisch.
Confidence Gesetzt, wenn ein Kontakt zu groß ist, um ein Finger zu sein. 0x0D 0x47 Optional
Width Breite des Begrenzungsrahmens um einen Kontakt. 0x0D 0x48 Optional
Height Höhe des Begrenzungsrahmens um einen Kontakt. 0x0D 0x49 Optional
Luftdruck Die Menge des Drucks, den der Benutzer auf den Kontaktpunkt anwendet. 0x0D 0x30 Optional
Azimut Die dem Uhrzeigersinn entgegengesetzte Drehung des Cursors um Z-Achse. 0x0D 0x3F Optional

In der folgenden Tabelle sind alle obligatorischen Verwendungen auf Berichtebene aufgeführt, die in allen Eingabeberichten für ein Windows-Touchscreengerät vorhanden sein sollten.

Member BESCHREIBUNG Seite ID Obligatorisch/Optional
Berichts-ID Bericht-ID für Windows-Touchscreens. 0x0D 0x05 Obligatorisch.
Überprüfungszeit Relative Scanzeit pro Frame. 0x0D 0x56 Optional
Kontaktanzahl Gesamtzahl der Kontakte, die in einem bestimmten Bericht gemeldet werden. 0x0D 0x54 Obligatorisch.

Geräte, die nicht alle obligatorischen Verwendungen auf Kontakt- oder Berichtebene melden, sind als nicht Windows-Touchscreengerät funktionsfähig. Die obligatorischen Verwendungen werden vom Windows-Host streng erzwungen. Wenn ein logischer Maximalwert nicht eingeschränkt wurde, kann er optimiert werden, um die Deskriptorgröße zu verringern.

Kontakt-ID

Die Kontakt-ID identifiziert einen Kontakt in einem Bericht innerhalb seines Lebenszyklus eindeutig. Die Kontakt-ID muss konstant bleiben, während der Kontakt vom Gerät erkannt und gemeldet wird. Jeder separate gleichzeitige Kontakt muss über einen eindeutigen Bezeichner verfügen. Bezeichner können wiederverwendet werden, nachdem der zuvor zugeordnete Kontakt nicht mehr erkannt oder gemeldet wurde. Es gibt keinen erwarteten numerischen Bereich, und die verwendeten Werte sind nur durch das festgelegte logische Maximum im Deskriptor begrenzt.

X/Y

X und Y melden die Koordinaten eines bestimmten Kontakts. Ein Gerät kann zwei Punkte für jeden Kontakt melden. Der erste Punkt (bezeichnet als T) gilt als der vom Benutzer beabsichtigte Punkt der Berührung, während der zweite Punkt (bezeichnet als C) der Mittelpunkt des Kontakts ist. 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. Der beispielhafte Touch-Deskriptor enthält Verwendungsarrays sowohl für X als auch für Y.

Ein Gerät, das nur T meldet, darf kein ein Verwendungsarray für die X- und Y-Eigenschaften verwenden. In anderen Worten, die Berichtanzahl für jede Verwendung ist 1, wie in den folgenden Ausschnitten aus dem Beispieldeskriptor angegeben. Die Auszüge zeigen auch den Unterschied zwischen einem Gerät, das nur T unterstützt, und einem Gerät, das T und C unterstützt.

    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,

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.

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.

Tipp

Der Spitzenschalter wird verwendet, um zu ermitteln, ob sich der Kontakt auf der Oberfläche befindet oder die Oberfläche des Digitizers verlassen hat. Dies wird durch ein Hauptelement mit einer Berichtgröße von 1 Bit angegeben. Bei der Übermittlung eines Kontaktberichts sollte das Bit gesetzt werden, wenn sich der Kontakt auf der Digitizer-Oberfläche befindet und gelöscht werden, wenn der Kontakt die Oberfläche verlassen hat.

Wenn ein Kontakt mit gelöschtem Spitzenschalter-Bit gemeldet wird, sollte die gemeldete X/Y-Position identisch mit der letzten Position sein, die mit gesetztem Spitzenschalter-Bit gemeldet wurde.

Diagramm, das die Kontaktsequenz für zwei Kontakte mit separatem Aufheben zeigt.

Wie im vorherigen Diagramm dargestellt, werden zwei Kontakte auf einem Windows-Touchscreen platziert. Später wird der erste Kontakt aufgehoben, während der zweite auf der Oberfläche bleibt. Dies würde gemeldet wie in der folgenden Tabelle beschrieben.

Bericht 1 2 3 4 5 6 7 8 9 10 11
Kontaktanzahl 2 2 2 2 2 2 1 1 1 1 1
Kontakt 1: Spitzenschalter 1 1 1 1 1 0 NR NR NR NR NR
Kontakt 1: X, Y X₁, Y₁ X₂, Y₂ X₃, Y₃ X₄, Y₄ X₅, Y₅ X₆, Y₆ NR NR NR NR NR
Kontakt 2: Spitzenschalter 1 1 1 1 1 1 1 1 1 1 0
Kontakt 2: X, Y X₁, Y₁ X₂, Y₂ X₃, Y₃ X₄, Y₄ X₅, Y₅ X₆, Y₆ X₇, Y₇ X₈, Y₈ X₉, Y₉ X₁₀, Y₁₀ X₁₁, Y₁₁

In der vorherigen Tabelle wird die Berichtsequenz für zwei Kontakte mit getrenntem Aufheben (Zweifinger-Hybrid) angezeigt.

Confidence

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 beabsichtigt ist, setzen Sie die Konfidenzverwendung für die Dauer der Interaktion auf 1 (true), einschließlich des Aufhebens (wenn der Spitzenschalter gelöscht wird). 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 Berührung beabsichtigt ist, und Ihr Gerät die Berührung nicht als versehentlich zurückgewiesen hat, ändern Sie die Konfidenzverwendung auf 0 (false), sodass das Betriebssystem den Touchkontakt bei Bedarf abbrechen kann. Wenn Ihr Gerät versehentliche Berührungen immer zurückweist, müssen Sie die Konfidenzverwendung nicht einschließen.

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 null (0) sein, außer wenn ein "UP"-Ereignis gemeldet wird, in welchem Fall sie null (0) sein sollten.

Druck

Druck ist eine Messung der Kraft, die der Finger gegen die Digitizer-Oberfläche ausübt. Es gibt keine Einschränkungen des für Druck zulässigen Wertebereichs.

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 oder ein gleichwertiges Bogenmaß 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.

Scanzeit

Scanzeit meldet die relative Digitizer-Zeit in Einheiten von 100 μs. 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, wenn sie implementiert wird. Es muss sich um Einheiten von 100 µs handeln. Da dem Zähler nur 2 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.

Kontaktanzahl

Die Kontaktanzahl wird verwendet, um die Anzahl der Kontakte anzugeben, die in einem bestimmten Frame gemeldet werden, unabhängig von den Spitzenschaltern, zu denen die Kontakte gehören.

Windows Touchscreen-Featureberichte

Der Host verwendet die folgenden Verwendungen (über die Windows Touchscreen-Sammlung), um Kontaktdaten aus Eingabeberichten zu extrahieren.

Featurebericht der maximalen Kontaktanzahl

Diese Meldung gibt die Gesamtzahl der Kontakte an, die ein Multitouch-Gerät unterstützt. Ein Windows-Touchscreengerät sollte diesen Wert durch Spezifizierung der maximalen Kontaktanzahl (Seite 0x0D, Verwendung 0x55) in dem Featurebericht der maximalen Kontaktanzahl melden. Das Gerät darf beim Melden von Daten nicht mehr Kontakte melden als die maximale Kontaktanzahl. Beim Melden von Daten darf ein Gerät nicht mehr Kontakte melden als die maximale Kontaktzahl. Wenn ein Eingabeframe mehr Kontakte als das Maximum enthält, verwirft der Host den gesamten Frame, einschließlich der Daten für zuvor gemeldete Kontakte. Für eine optimale Benutzererfahrung sollte das Gerät die Meldung neuer Kontakte unterdrücken, die erkannt werden, nachdem die maximale Anzahl für die Lebensdauer des neuen Kontakts erreicht wurde, selbst wenn bestehende Kontakte abgehen. Bestehende Kontakte können weiterhin gemeldet werden, und wenn Kontakte ausscheiden, können neu hinzukommende Kontakte ihren Platz einnehmen.

Featurebericht des Gerätezertifizierungsstatus

Wenn ein Gerät die Kompatibilitätsanforderungen erfüllt, stellt Microsoft dem Gerätehersteller einen kryptografisch signierten binären Blob (als THQA-Blob bezeichnet) aus. Der Hersteller integriert diesen Blob vor der Produktion in die Firmware des Geräts. Wenn ein Touchgerät versucht, eine Verbindung herzustellen, wird die Signatur vom Windows-Betriebssystem überprüft. Windows lässt nur Geräte zu, die den THQA-Featurebericht in ihrem Deskriptor enthalten.

Hinweis Das Melden eines gültigen zertifizierten Blobs an den Host ist in Windows 10 optional, ist jedoch für die Abwärtskompatibilität mit Windows 8 und Windows 8.1 erforderlich. Geräte mit THQA-Blob sind in der Systemsteuerung durch die Phrase „Vollständige Windows Touch-Unterstützung“ gekennzeichnet. Geräte ohne zertifizierten THQA-Blob sind in der Systemsteuerung durch die Phrase „Windows Touch-Unterstützung“ gekennzeichnet.

Das Blob selbst besteht aus 256 Byte Binärdaten und sollte wie im folgenden HID-Deskriptor dargestellt gemeldet werden. Gerätehersteller sollten sicherstellen, dass sie, bevor ihnen der signierte Binärblob von Microsoft ausgestellt wird, stattdessen den unten bereitgestellten Beispiel-Blob an Windows melden.

    0x06, 0x00, 0xff,                   //     USAGE_PAGE (Vendor Defined)
    0x09, 0xC5,                         //     USAGE (Vendor Usage 0xC5)
    0x15, 0x00,                         //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,                   //     LOGICAL_MAXIMUM (0xff)
    0x75, 0x08,                         //     REPORT_SIZE (8)
    0x96, 0x00, 0x01,                   //     REPORT_COUNT (0x100 (256

Nachfolgend sehen Sie den Beispiel-Blob im Klartext.

0xfc, 0x28, 0xfe, 0x84, 0x40, 0xcb, 0x9a, 0x87, 0x0d, 0xbe, 0x57, 0x3c, 0xb6, 0x70, 0x09, 0x88,
0x07, 0x97, 0x2d, 0x2b, 0xe3, 0x38, 0x34, 0xb6, 0x6c, 0xed, 0xb0, 0xf7, 0xe5, 0x9c, 0xf6, 0xc2,
0x2e, 0x84, 0x1b, 0xe8, 0xb4, 0x51, 0x78, 0x43, 0x1f, 0x28, 0x4b, 0x7c, 0x2d, 0x53, 0xaf, 0xfc,
0x47, 0x70, 0x1b, 0x59, 0x6f, 0x74, 0x43, 0xc4, 0xf3, 0x47, 0x18, 0x53, 0x1a, 0xa2, 0xa1, 0x71,
0xc7, 0x95, 0x0e, 0x31, 0x55, 0x21, 0xd3, 0xb5, 0x1e, 0xe9, 0x0c, 0xba, 0xec, 0xb8, 0x89, 0x19,
0x3e, 0xb3, 0xaf, 0x75, 0x81, 0x9d, 0x53, 0xb9, 0x41, 0x57, 0xf4, 0x6d, 0x39, 0x25, 0x29, 0x7c,
0x87, 0xd9, 0xb4, 0x98, 0x45, 0x7d, 0xa7, 0x26, 0x9c, 0x65, 0x3b, 0x85, 0x68, 0x89, 0xd7, 0x3b,
0xbd, 0xff, 0x14, 0x67, 0xf2, 0x2b, 0xf0, 0x2a, 0x41, 0x54, 0xf0, 0xfd, 0x2c, 0x66, 0x7c, 0xf8,
0xc0, 0x8f, 0x33, 0x13, 0x03, 0xf1, 0xd3, 0xc1, 0x0b, 0x89, 0xd9, 0x1b, 0x62, 0xcd, 0x51, 0xb7,
0x80, 0xb8, 0xaf, 0x3a, 0x10, 0xc1, 0x8a, 0x5b, 0xe8, 0x8a, 0x56, 0xf0, 0x8c, 0xaa, 0xfa, 0x35,
0xe9, 0x42, 0xc4, 0xd8, 0x55, 0xc3, 0x38, 0xcc, 0x2b, 0x53, 0x5c, 0x69, 0x52, 0xd5, 0xc8, 0x73,
0x02, 0x38, 0x7c, 0x73, 0xb6, 0x41, 0xe7, 0xff, 0x05, 0xd8, 0x2b, 0x79, 0x9a, 0xe2, 0x34, 0x60,
0x8f, 0xa3, 0x32, 0x1f, 0x09, 0x78, 0x62, 0xbc, 0x80, 0xe3, 0x0f, 0xbd, 0x65, 0x20, 0x08, 0x13,
0xc1, 0xe2, 0xee, 0x53, 0x2d, 0x86, 0x7e, 0xa7, 0x5a, 0xc5, 0xd3, 0x7d, 0x98, 0xbe, 0x31, 0x48,
0x1f, 0xfb, 0xda, 0xaf, 0xa2, 0xa8, 0x6a, 0x89, 0xd6, 0xbf, 0xf2, 0xd3, 0x32, 0x2a, 0x9a, 0xe4,
0xcf, 0x17, 0xb7, 0xb8, 0xf4, 0xe1, 0x33, 0x08, 0x24, 0x8b, 0xc4, 0x43, 0xa5, 0xe5, 0x24, 0xc2

Featurebericht des Latenzmodus

Hinweis Windows 10 Version 1511 und frühere Betriebssysteme melden derzeit diesen HID-Featurebericht nicht an Stift- oder Touchscreengeräte, die dieses Feature unterstützen. Wenn Sie jedoch Unterstützung für den Featurebericht des Latenzmodus in einem Gerät implementieren, ist es bereit für die Zukunft, wenn Windows ihn auf Stift- und Touchscreengeräten unterstützen wird.

Der Featurebericht des Latenzmodus wird vom Host an ein Windows-Touchscreengerät gesendet, um anzugeben, wenn für Stromeinsparungen eine hohe Latenz wünschenswert ist und umgekehrt, wenn die normale Latenz für den Betrieb gewünscht wird. Auf per USB angeschlossenen Windows-Touchscreengeräten kann das Gerät so unterscheiden, ob es wegen Inaktivität angehalten wird (runtime IDLE) oder weil das System in den S3- oder verbundenen Standbymodus versetzt wird.

Der Latenzmodus sollte über den Wert für die Latenzmodusverwendung (Seite 0x0D, Verwendung 0x60) in dem Featurebericht des Latenzmodus angegeben werden.

Latenzmoduswert Latenzmodus
0 Normale Latenz
1 Hohe Latenz

Firmwareaktualisierungssammlung (optional)

Ein Windows-Touchscreengerät kann das HID-Protokoll verwenden, um eine anbieterspezifische Sammlung der obersten Ebene für die Ausführung von Gerätefirmware- und Herstellerkonfigurationsupdates bereitzustellen.

Die herstellerspezifische Firmwareupdatesammlung kann einen Ausgabebericht zum Übertragen der Firmwaredaten vom Host auf das Gerät senden.

Dies ist sehr vorteilhaft, da Firmware-Updates durchgeführt werden können, ohne dass ein Treiber auf dem Host erforderlich ist. Das Geräteattribut wVersionID muss nach einem Firmwareupgrade inkrementiert werden.

Ein Windows-Touchscreengerät sollte sich wiederherstellen können, nachdem ein Firmwareupdate aufgrund eines Stromausfalls (oder eines anderen Fehlers) fehlgeschlagen ist, indem es heruntergefahren und dann seine Stromversorgung wieder eingeschaltet wird. Es wird dringend empfohlen, dass grundlegende Funktionen auch nach einem fehlgeschlagenen Firmwareupdate verfügbar sind.