Touch-und Stiftunterstützung
Wenn Ihr Gerät einen Digitalisierer enthält, der sowohl Touch- als auch Stiftfunktionen bietet, müssen Sie Touch- und Stiftsammlungen separat melden. Wenn Ihr Digitizer möglicherweise auf einem Slate, Tablet-PC oder anderen Computer ohne Maus installiert ist, sollten Sie auch eine Maussammlung melden.
Melden von Nullwerten
Um die Handflächenabweisung zu erleichtern, sollte das Stiftgerät Daten in einem höheren vertikalen Abstand als normalerweise melden. Es wird dringend empfohlen, dass dieser Abstand 50 mm beträgt (oder so nah wie möglich daran), da dies zu einem besseren Benutzererlebnis führt. Dadurch kann der Host Touch-Eingaben anders handhaben, wenn er weiß, dass sich der Stift in Reichweite befindet. Da die meisten Geräte, die den Stift in einer höheren vertikalen Entfernung erkennen können, die Koordinaten des Stifts nicht genau erkennen können, sollten NULL-Koordinaten vom Gerät gemeldet werden. Der folgende Berichtsdeskriptor zeigt, wie NULL-Werte für X und Y unterstützt werden können. Bei der Lieferung von NULL-Daten muss das Gerät lediglich Werte festlegen, die außerhalb des angegebenen logischen Bereichs für X und Y liegen. Beide Werte müssen NULL sein, damit der Host sie erkennt diesen Meldemodus.
0x05, 0x0d, // USAGE_PAGE (Digitizers) 0
0x09, 0x02, // USAGE (Pen) 2
0xa1, 0x01, // COLLECTION (Application) 4
0x85, 0x02, // REPORT_ID (Pen) 6
0x09, 0x20, // USAGE (Stylus) 8
0xa1, 0x00, // COLLECTION (Physical) 10
0x09, 0x42, // USAGE (Tip Switch) 12
0x09, 0x44, // USAGE (Barrel Switch) 14
0x09, 0x3c, // USAGE (Invert) 16
0x09, 0x45, // USAGE (Eraser Switch) 18
0x15, 0x00, // LOGICAL_MINIMUM (0) 20
0x25, 0x01, // LOGICAL_MAXIMUM (1) 22
0x75, 0x01, // REPORT_SIZE (1) 24
0x95, 0x04, // REPORT_COUNT (4) 26
0x81, 0x02, // INPUT (Data,Var,Abs) 28
0x95, 0x01, // REPORT_COUNT (1) 30
0x81, 0x03, // INPUT (Cnst,Var,Abs) 32
0x09, 0x32, // USAGE (In Range) 34
0x81, 0x02, // INPUT (Data,Var,Abs) 36
0x95, 0x02, // REPORT_COUNT (2) 38
0x81, 0x03, // INPUT (Cnst,Var,Abs) 40
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
0xb4, // POP 75
0x05, 0x0d, // USAGE_PAGE (Digitizers) 76
0x09, 0x30, // USAGE (Tip Pressure) 78
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) 80
0x81, 0x02, // INPUT (Data,Var,Abs) 83
0x75, 0x08, // REPORT_SIZE (8) 85
0x09, 0x3d, // USAGE (X Tilt) 87
0x65, 0x14, // UNIT (Degrees,EngRotation)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x36, 0xd8, 0xdc, // PHYSICAL_MINIMUM (-9000)
0x46, 0x28, 0x23, // PHYSICAL_MAXIMUM (9000)
0x16, 0xd8, 0xdc, // LOGICAL_MINIMUM (-9000)
0x26, 0x28, 0x23, // LOGICAL_MAXIMUM (9000)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x3e, // USAGE (Y Tilt)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x47, 0xa0, 0x8c, 0x00, 0x00, // PHYSICAL_MAXIMUM (36000)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xa0, 0x8c, 0x00, 0x00, // LOGICAL_MAXIMUM (36000)
0x09, 0x41, // USAGE (Twist)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
Qualitätssicherung der Touch-Hardware
Wenn ein Gerät die Logoanforderungen erfüllt, stellt Microsoft dem Hersteller des Geräts ein kryptografisch signiertes binäres Blob aus. Der Hersteller integriert diesen Blob vor der Produktion in die Firmware des Geräts. Unter Windows wird die Signatur überprüft, wenn ein Touch-Gerät versucht, eine Verbindung herzustellen.
Der Blob selbst besteht aus 256 Byte binärer Daten und sollte wie durch die hervorgehobenen Zeilen im HID-Deskriptor unten dargestellt gemeldet werden. Gerätehersteller sollten sicherstellen, dass vor der Ausgabe des signierten binären Blobs von Microsoft Windows stattdessen das unten bereitgestellte Beispiel-Blob präsentiert wird.
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))
0xb1, 0x02, // FEATURE (Data,Var,Abs)
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
Ein vollständiges Beispiel für einen Berichtsdeskriptor mit dem Featurebericht, der das Zertifizierungs-BLOB enthält, ist in Berichtsdeskriptor für den Einzelfinger-Hybridmodus gezeigt.