mirror of
https://github.com/FrameworkComputer/InputModules.git
synced 2026-03-09 12:53:48 +00:00
440 lines
26 KiB
Markdown
440 lines
26 KiB
Markdown
# Framework 16 Touchpad
|
|
|
|
For the pinout, check the hubboard's pinout, documented on the main [README](../../README.md).
|
|
|
|
## Silkscreen
|
|
|
|
| Label | Type | Description |
|
|
|-------|-----------|----------------|
|
|
| ID | Testpoint | Board ID |
|
|
| TG | Testpoint | Ground |
|
|
| TI | Testpoint | I2C Interrupt |
|
|
| LID | Testpoint | Reserved |
|
|
| TD | Testpoint | I2C SDA |
|
|
| TV | Testpoint | 3.3V |
|
|
| TC | Testpoint | I2C SCL |
|
|
| TB1 | Testpoint | Button |
|
|
| J1 | Connector | FPC Connector |
|
|
| U4 | IC | Pixart PCT3854 |
|
|
| R1 | Resistor | Board ID 560k |
|
|
| R2 | Resistor | I2C SDA Pullup |
|
|
| R3 | Resistor | I2C SCL Pullup |
|
|
|
|
The I2C pullup resistors are unpopulated, they are present on the system side instead of the touchpad.
|
|
If you want to use the touchpad outside of the chassis, you can populate them.
|
|
|
|
## Firmware
|
|
|
|
The touchpad presents as an I2C HID device at address 0x2C.
|
|
Below the HID Report descriptor and details about some reports are documented.
|
|
|
|
### HID Reports
|
|
|
|
Report ID 1 - PTP (Precision Touchpad)
|
|
|
|
```mermaid
|
|
---
|
|
title: "TCP Packet"
|
|
config:
|
|
packet:
|
|
bitsPerRow: 8
|
|
bitWidth: 70
|
|
---
|
|
packet
|
|
+8: "Report Length (Low Byte)"
|
|
+8: "Report Length (High Byte)"
|
|
+8: "Touchpad Report ID (0x01)"
|
|
+1: "Confidence"
|
|
+1: "Tip Switch"
|
|
+6: "Reserved"
|
|
+8: "Contact Identifier"
|
|
+8: "X1 ABS Position (Low Byte)"
|
|
+8: "X1 ABS Position (High Byte)"
|
|
+8: "Y1 ABS Position (Low Byte)"
|
|
+8: "Y1 ABS Position (High Byte)"
|
|
+1: "Confidence"
|
|
+1: "Tip Switch"
|
|
+6: "Reserved"
|
|
+8: "Contact Identifier"
|
|
+8: "X2 ABS Position (Low Byte)"
|
|
+8: "X2 ABS Position (High Byte)"
|
|
+8: "Y2 ABS Position (Low Byte)"
|
|
+8: "Y2 ABS Position (High Byte)"
|
|
+1: "Confidence"
|
|
+1: "Tip Switch"
|
|
+6: "Reserved"
|
|
+8: "Contact Identifier"
|
|
+8: "X3 ABS Position (Low Byte)"
|
|
+8: "X3 ABS Position (High Byte)"
|
|
+8: "Y3 ABS Position (Low Byte)"
|
|
+8: "Y3 ABS Position (High Byte)"
|
|
+1: "Confidence"
|
|
+1: "Tip Switch"
|
|
+6: "Reserved"
|
|
+8: "Contact Identifier"
|
|
+8: "X4 ABS Position (Low Byte)"
|
|
+8: "X4 ABS Position (High Byte)"
|
|
+8: "Y4 ABS Position (Low Byte)"
|
|
+8: "Y4 ABS Position (High Byte)"
|
|
+1: "Confidence"
|
|
+1: "Tip Switch"
|
|
+6: "Reserved"
|
|
+8: "Contact Identifier"
|
|
+8: "X5 ABS Position (Low Byte)"
|
|
+8: "X5 ABS Position (High Byte)"
|
|
+8: "Y5 ABS Position (Low Byte)"
|
|
+8: "Y5 ABS Position (High Byte)"
|
|
+8: "Contact Count"
|
|
+1: "Button 0"
|
|
+1: "Button 1"
|
|
+1: "Button 2"
|
|
+5: "Reserved"
|
|
+8: "Scan Time (Low Byte)"
|
|
+8: "Scan Time (High Byte)"
|
|
```
|
|
|
|
Report ID 2 - Mouse Mode
|
|
|
|
```mermaid
|
|
---
|
|
title: "TCP Packet"
|
|
config:
|
|
packet:
|
|
bitsPerRow: 8
|
|
bitWidth: 70
|
|
---
|
|
packet
|
|
+8: "Report Length (Low Byte)"
|
|
+8: "Report Length (High Byte)"
|
|
+8: "Touchpad Report ID (0x02)"
|
|
+1: "Left Button"
|
|
+1: "Right Button"
|
|
+1: "In Range"
|
|
+5: "Reserved"
|
|
+8: "Relative-X (Low Byte)"
|
|
+8: "Relative-X (High Byte)"
|
|
+8: "Relative-Y (Low Byte)"
|
|
+8: "Relative-Y (High Byte)"
|
|
```
|
|
|
|
### HID Report Descriptor
|
|
|
|
```
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
|
|
# 0x09, 0x02, // Usage (Mouse) 2
|
|
# 0xa1, 0x01, // Collection (Application) 4
|
|
# 0x85, 0x01, // Report ID (1) 6
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 8
|
|
# 0x09, 0x01, // Usage (Pointer) 10
|
|
# 0xa1, 0x00, // Collection (Physical) 12
|
|
# 0x05, 0x09, // Usage Page (Button) 14
|
|
# 0x19, 0x01, // Usage Minimum (1) 16
|
|
# 0x29, 0x02, // Usage Maximum (2) 18
|
|
# 0x15, 0x00, // Logical Minimum (0) 20
|
|
# 0x25, 0x01, // Logical Maximum (1) 22
|
|
# 0x75, 0x01, // Report Size (1) 24
|
|
# 0x95, 0x02, // Report Count (2) 26
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 28
|
|
# 0x95, 0x06, // Report Count (6) 30
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 32
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 34
|
|
# 0x09, 0x30, // Usage (X) 36
|
|
# 0x09, 0x31, // Usage (Y) 38
|
|
# 0x09, 0x38, // Usage (Wheel) 40
|
|
# 0x15, 0x81, // Logical Minimum (-127) 42
|
|
# 0x25, 0x7f, // Logical Maximum (127) 44
|
|
# 0x75, 0x08, // Report Size (8) 46
|
|
# 0x95, 0x03, // Report Count (3) 48
|
|
# 0x81, 0x26, // Input (Data,Var,Rel,NoPref) 50
|
|
# 0x05, 0x0c, // Usage Page (Consumer Devices) 52
|
|
# 0x0a, 0x38, 0x02, // Usage (AC Pan) 54
|
|
# 0x95, 0x01, // Report Count (1) 57
|
|
# 0x81, 0x06, // Input (Data,Var,Rel) 59
|
|
# 0x75, 0x08, // Report Size (8) 61
|
|
# 0x95, 0x03, // Report Count (3) 63
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 65
|
|
# 0xc0, // End Collection 67
|
|
# 0xc0, // End Collection 68
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 69
|
|
# 0x09, 0x05, // Usage (Touch Pad) 71
|
|
# 0xa1, 0x01, // Collection (Application) 73
|
|
# 0x85, 0x04, // Report ID (4) 75
|
|
# 0x05, 0x09, // Usage Page (Button) 77
|
|
# 0x09, 0x01, // Usage (Vendor Usage 0x01) 79
|
|
# 0x15, 0x00, // Logical Minimum (0) 81
|
|
# 0x25, 0x01, // Logical Maximum (1) 83
|
|
# 0x75, 0x01, // Report Size (1) 85
|
|
# 0x95, 0x01, // Report Count (1) 87
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 89
|
|
# 0x95, 0x02, // Report Count (2) 91
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 93
|
|
# 0x06, 0x01, 0xff, // Usage Page (Vendor Usage Page 0xff01) 95
|
|
# 0x09, 0x01, // Usage (Vendor Usage 0x01) 98
|
|
# 0x95, 0x01, // Report Count (1) 100
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 102
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 104
|
|
# 0x09, 0x54, // Usage (Contact Count) 106
|
|
# 0x25, 0x05, // Logical Maximum (5) 108
|
|
# 0x75, 0x04, // Report Size (4) 110
|
|
# 0x95, 0x01, // Report Count (1) 112
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 114
|
|
# 0x09, 0x56, // Usage (Scan Time) 116
|
|
# 0x55, 0x0c, // Unit Exponent (-4) 118
|
|
# 0x66, 0x01, 0x10, // Unit (SILinear: s) 120
|
|
# 0x47, 0xff, 0xff, 0x00, 0x00, // Physical Maximum (65535) 123
|
|
# 0x27, 0xff, 0xff, 0x00, 0x00, // Logical Maximum (65535) 128
|
|
# 0x75, 0x10, // Report Size (16) 133
|
|
# 0x95, 0x01, // Report Count (1) 135
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 137
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 139
|
|
# 0x09, 0x22, // Usage (Finger) 141
|
|
# 0xa1, 0x02, // Collection (Logical) 143
|
|
# 0x09, 0x47, // Usage (Confidence) 145
|
|
# 0x09, 0x42, // Usage (Tip Switch) 147
|
|
# 0x15, 0x00, // Logical Minimum (0) 149
|
|
# 0x25, 0x01, // Logical Maximum (1) 151
|
|
# 0x75, 0x01, // Report Size (1) 153
|
|
# 0x95, 0x02, // Report Count (2) 155
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 157
|
|
# 0x95, 0x02, // Report Count (2) 159
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 161
|
|
# 0x09, 0x51, // Usage (Contact Id) 163
|
|
# 0x25, 0x0a, // Logical Maximum (10) 165
|
|
# 0x75, 0x04, // Report Size (4) 167
|
|
# 0x95, 0x01, // Report Count (1) 169
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 171
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 173
|
|
# 0x09, 0x30, // Usage (X) 175
|
|
# 0x35, 0x00, // Physical Minimum (0) 177
|
|
# 0x46, 0xc4, 0x04, // Physical Maximum (1220) 179
|
|
# 0x26, 0x01, 0x0f, // Logical Maximum (3841) 182
|
|
# 0x55, 0x0e, // Unit Exponent (-2) 185
|
|
# 0x65, 0x11, // Unit (SILinear: cm) 187
|
|
# 0x75, 0x10, // Report Size (16) 189
|
|
# 0x95, 0x01, // Report Count (1) 191
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 193
|
|
# 0x09, 0x31, // Usage (Y) 195
|
|
# 0x46, 0xf8, 0x02, // Physical Maximum (760) 197
|
|
# 0x26, 0x58, 0x09, // Logical Maximum (2392) 200
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 203
|
|
# 0xc0, // End Collection 205
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 206
|
|
# 0x09, 0x22, // Usage (Finger) 208
|
|
# 0xa1, 0x02, // Collection (Logical) 210
|
|
# 0x09, 0x47, // Usage (Confidence) 212
|
|
# 0x09, 0x42, // Usage (Tip Switch) 214
|
|
# 0x15, 0x00, // Logical Minimum (0) 216
|
|
# 0x25, 0x01, // Logical Maximum (1) 218
|
|
# 0x75, 0x01, // Report Size (1) 220
|
|
# 0x95, 0x02, // Report Count (2) 222
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 224
|
|
# 0x95, 0x02, // Report Count (2) 226
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 228
|
|
# 0x09, 0x51, // Usage (Contact Id) 230
|
|
# 0x25, 0x0a, // Logical Maximum (10) 232
|
|
# 0x75, 0x04, // Report Size (4) 234
|
|
# 0x95, 0x01, // Report Count (1) 236
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 238
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 240
|
|
# 0x09, 0x30, // Usage (X) 242
|
|
# 0x35, 0x00, // Physical Minimum (0) 244
|
|
# 0x46, 0xc4, 0x04, // Physical Maximum (1220) 246
|
|
# 0x26, 0x01, 0x0f, // Logical Maximum (3841) 249
|
|
# 0x55, 0x0e, // Unit Exponent (-2) 252
|
|
# 0x65, 0x11, // Unit (SILinear: cm) 254
|
|
# 0x75, 0x10, // Report Size (16) 256
|
|
# 0x95, 0x01, // Report Count (1) 258
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 260
|
|
# 0x09, 0x31, // Usage (Y) 262
|
|
# 0x46, 0xf8, 0x02, // Physical Maximum (760) 264
|
|
# 0x26, 0x58, 0x09, // Logical Maximum (2392) 267
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 270
|
|
# 0xc0, // End Collection 272
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 273
|
|
# 0x09, 0x22, // Usage (Finger) 275
|
|
# 0xa1, 0x02, // Collection (Logical) 277
|
|
# 0x09, 0x47, // Usage (Confidence) 279
|
|
# 0x09, 0x42, // Usage (Tip Switch) 281
|
|
# 0x15, 0x00, // Logical Minimum (0) 283
|
|
# 0x25, 0x01, // Logical Maximum (1) 285
|
|
# 0x75, 0x01, // Report Size (1) 287
|
|
# 0x95, 0x02, // Report Count (2) 289
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 291
|
|
# 0x95, 0x02, // Report Count (2) 293
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 295
|
|
# 0x09, 0x51, // Usage (Contact Id) 297
|
|
# 0x25, 0x0a, // Logical Maximum (10) 299
|
|
# 0x75, 0x04, // Report Size (4) 301
|
|
# 0x95, 0x01, // Report Count (1) 303
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 305
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 307
|
|
# 0x09, 0x30, // Usage (X) 309
|
|
# 0x35, 0x00, // Physical Minimum (0) 311
|
|
# 0x46, 0xc4, 0x04, // Physical Maximum (1220) 313
|
|
# 0x26, 0x01, 0x0f, // Logical Maximum (3841) 316
|
|
# 0x55, 0x0e, // Unit Exponent (-2) 319
|
|
# 0x65, 0x11, // Unit (SILinear: cm) 321
|
|
# 0x75, 0x10, // Report Size (16) 323
|
|
# 0x95, 0x01, // Report Count (1) 325
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 327
|
|
# 0x09, 0x31, // Usage (Y) 329
|
|
# 0x46, 0xf8, 0x02, // Physical Maximum (760) 331
|
|
# 0x26, 0x58, 0x09, // Logical Maximum (2392) 334
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 337
|
|
# 0xc0, // End Collection 339
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 340
|
|
# 0x09, 0x22, // Usage (Finger) 342
|
|
# 0xa1, 0x02, // Collection (Logical) 344
|
|
# 0x09, 0x47, // Usage (Confidence) 346
|
|
# 0x09, 0x42, // Usage (Tip Switch) 348
|
|
# 0x15, 0x00, // Logical Minimum (0) 350
|
|
# 0x25, 0x01, // Logical Maximum (1) 352
|
|
# 0x75, 0x01, // Report Size (1) 354
|
|
# 0x95, 0x02, // Report Count (2) 356
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 358
|
|
# 0x95, 0x02, // Report Count (2) 360
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 362
|
|
# 0x09, 0x51, // Usage (Contact Id) 364
|
|
# 0x25, 0x0a, // Logical Maximum (10) 366
|
|
# 0x75, 0x04, // Report Size (4) 368
|
|
# 0x95, 0x01, // Report Count (1) 370
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 372
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 374
|
|
# 0x09, 0x30, // Usage (X) 376
|
|
# 0x35, 0x00, // Physical Minimum (0) 378
|
|
# 0x46, 0xc4, 0x04, // Physical Maximum (1220) 380
|
|
# 0x26, 0x01, 0x0f, // Logical Maximum (3841) 383
|
|
# 0x55, 0x0e, // Unit Exponent (-2) 386
|
|
# 0x65, 0x11, // Unit (SILinear: cm) 388
|
|
# 0x75, 0x10, // Report Size (16) 390
|
|
# 0x95, 0x01, // Report Count (1) 392
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 394
|
|
# 0x09, 0x31, // Usage (Y) 396
|
|
# 0x46, 0xf8, 0x02, // Physical Maximum (760) 398
|
|
# 0x26, 0x58, 0x09, // Logical Maximum (2392) 401
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 404
|
|
# 0xc0, // End Collection 406
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 407
|
|
# 0x09, 0x22, // Usage (Finger) 409
|
|
# 0xa1, 0x02, // Collection (Logical) 411
|
|
# 0x09, 0x47, // Usage (Confidence) 413
|
|
# 0x09, 0x42, // Usage (Tip Switch) 415
|
|
# 0x15, 0x00, // Logical Minimum (0) 417
|
|
# 0x25, 0x01, // Logical Maximum (1) 419
|
|
# 0x75, 0x01, // Report Size (1) 421
|
|
# 0x95, 0x02, // Report Count (2) 423
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 425
|
|
# 0x95, 0x02, // Report Count (2) 427
|
|
# 0x81, 0x03, // Input (Cnst,Var,Abs) 429
|
|
# 0x09, 0x51, // Usage (Contact Id) 431
|
|
# 0x25, 0x0a, // Logical Maximum (10) 433
|
|
# 0x75, 0x04, // Report Size (4) 435
|
|
# 0x95, 0x01, // Report Count (1) 437
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 439
|
|
# 0x05, 0x01, // Usage Page (Generic Desktop) 441
|
|
# 0x09, 0x30, // Usage (X) 443
|
|
# 0x35, 0x00, // Physical Minimum (0) 445
|
|
# 0x46, 0xc4, 0x04, // Physical Maximum (1220) 447
|
|
# 0x26, 0x01, 0x0f, // Logical Maximum (3841) 450
|
|
# 0x55, 0x0e, // Unit Exponent (-2) 453
|
|
# 0x65, 0x11, // Unit (SILinear: cm) 455
|
|
# 0x75, 0x10, // Report Size (16) 457
|
|
# 0x95, 0x01, // Report Count (1) 459
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 461
|
|
# 0x09, 0x31, // Usage (Y) 463
|
|
# 0x46, 0xf8, 0x02, // Physical Maximum (760) 465
|
|
# 0x26, 0x58, 0x09, // Logical Maximum (2392) 468
|
|
# 0x81, 0x02, // Input (Data,Var,Abs) 471
|
|
# 0xc0, // End Collection 473
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 474
|
|
# 0x85, 0x02, // Report ID (2) 476
|
|
# 0x09, 0x55, // Usage (Contact Max) 478
|
|
# 0x15, 0x00, // Logical Minimum (0) 480
|
|
# 0x25, 0x05, // Logical Maximum (5) 482
|
|
# 0x75, 0x08, // Report Size (8) 484
|
|
# 0x95, 0x01, // Report Count (1) 486
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 488
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 490
|
|
# 0x85, 0x06, // Report ID (6) 492
|
|
# 0x09, 0x59, // Usage (Button Type) 494
|
|
# 0x15, 0x00, // Logical Minimum (0) 496
|
|
# 0x25, 0x0f, // Logical Maximum (15) 498
|
|
# 0x75, 0x08, // Report Size (8) 500
|
|
# 0x95, 0x01, // Report Count (1) 502
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 504
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 506
|
|
# 0x85, 0x07, // Report ID (7) 508
|
|
# 0x09, 0x60, // Usage (Vendor Usage 0x60) 510
|
|
# 0x15, 0x00, // Logical Minimum (0) 512
|
|
# 0x25, 0x01, // Logical Maximum (1) 514
|
|
# 0x75, 0x01, // Report Size (1) 516
|
|
# 0x95, 0x01, // Report Count (1) 518
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 520
|
|
# 0x95, 0x0f, // Report Count (15) 522
|
|
# 0xb1, 0x03, // Feature (Cnst,Var,Abs) 524
|
|
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 526
|
|
# 0x85, 0x0b, // Report ID (11) 529
|
|
# 0x09, 0xc5, // Usage (Vendor Usage 0xc5) 531
|
|
# 0x15, 0x00, // Logical Minimum (0) 533
|
|
# 0x26, 0xff, 0x00, // Logical Maximum (255) 535
|
|
# 0x75, 0x08, // Report Size (8) 538
|
|
# 0x96, 0x00, 0x01, // Report Count (256) 540
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 543
|
|
# 0xc0, // End Collection 545
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 546
|
|
# 0x09, 0x0e, // Usage (Device Configuration) 548
|
|
# 0xa1, 0x01, // Collection (Application) 550
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 552
|
|
# 0x09, 0x22, // Usage (Finger) 554
|
|
# 0xa1, 0x02, // Collection (Logical) 556
|
|
# 0x85, 0x03, // Report ID (3) 558
|
|
# 0x09, 0x52, // Usage (Inputmode) 560
|
|
# 0x15, 0x00, // Logical Minimum (0) 562
|
|
# 0x25, 0x0a, // Logical Maximum (10) 564
|
|
# 0x75, 0x08, // Report Size (8) 566
|
|
# 0x95, 0x01, // Report Count (1) 568
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 570
|
|
# 0xc0, // End Collection 572
|
|
# 0x05, 0x0d, // Usage Page (Digitizers) 573
|
|
# 0x09, 0x22, // Usage (Finger) 575
|
|
# 0xa1, 0x00, // Collection (Physical) 577
|
|
# 0x85, 0x05, // Report ID (5) 579
|
|
# 0x09, 0x57, // Usage (Surface Switch) 581
|
|
# 0x09, 0x58, // Usage (Button Switch) 583
|
|
# 0x15, 0x00, // Logical Minimum (0) 585
|
|
# 0x25, 0x01, // Logical Maximum (1) 587
|
|
# 0x75, 0x01, // Report Size (1) 589
|
|
# 0x95, 0x02, // Report Count (2) 591
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 593
|
|
# 0x95, 0x06, // Report Count (6) 595
|
|
# 0xb1, 0x03, // Feature (Cnst,Var,Abs) 597
|
|
# 0xc0, // End Collection 599
|
|
# 0xc0, // End Collection 600
|
|
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 601
|
|
# 0x09, 0x01, // Usage (Vendor Usage 1) 604
|
|
# 0xa1, 0x01, // Collection (Application) 606
|
|
# 0x85, 0x42, // Report ID (66) 608
|
|
# 0x09, 0x06, // Usage (Vendor Usage 0x06) 610
|
|
# 0x15, 0x00, // Logical Minimum (0) 612
|
|
# 0x26, 0xff, 0x00, // Logical Maximum (255) 614
|
|
# 0x75, 0x08, // Report Size (8) 617
|
|
# 0x95, 0x03, // Report Count (3) 619
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 621
|
|
# 0x85, 0x43, // Report ID (67) 623
|
|
# 0x09, 0x06, // Usage (Vendor Usage 0x06) 625
|
|
# 0x15, 0x00, // Logical Minimum (0) 627
|
|
# 0x26, 0xff, 0x00, // Logical Maximum (255) 629
|
|
# 0x75, 0x08, // Report Size (8) 632
|
|
# 0x95, 0x03, // Report Count (3) 634
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 636
|
|
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 638
|
|
# 0x85, 0x41, // Report ID (65) 641
|
|
# 0x09, 0x05, // Usage (Vendor Usage 0x05) 643
|
|
# 0x15, 0x00, // Logical Minimum (0) 645
|
|
# 0x26, 0xff, 0x00, // Logical Maximum (255) 647
|
|
# 0x75, 0x08, // Report Size (8) 650
|
|
# 0x96, 0x00, 0x01, // Report Count (256) 652
|
|
# 0xb1, 0x02, // Feature (Data,Var,Abs) 655
|
|
# 0xc0, // End Collection 657
|
|
```
|