ALPS HID Touchpad Protocol¶
Introduction¶
Currently ALPS HID driver supports U1 Touchpad device.
U1 device basic information.
| Vender ID | 0x044E |
| Product ID | 0x120B |
| Version ID | 0x0121 |
HID Descriptor¶
| Byte | Field | Value | Notes |
|---|---|---|---|
| 0 | wHIDDescLength | 001E | Length of HID Descriptor : 30 bytes |
| 2 | bcdVersion | 0100 | Compliant with Version 1.00 |
| 4 | wReportDescLength | 00B2 | Report Descriptor is 178 Bytes (0x00B2) |
| 6 | wReportDescRegister | 0002 | Identifier to read Report Descriptor |
| 8 | wInputRegister | 0003 | Identifier to read Input Report |
| 10 | wMaxInputLength | 0053 | Input Report is 80 Bytes + 2 |
| 12 | wOutputRegister | 0000 | Identifier to read Output Report |
| 14 | wMaxOutputLength | 0000 | No Output Reports |
| 16 | wCommandRegister | 0005 | Identifier for Command Register |
| 18 | wDataRegister | 0006 | Identifier for Data Register |
| 20 | wVendorID | 044E | Vendor ID 0x044E |
| 22 | wProductID | 120B | Product ID 0x120B |
| 24 | wVersionID | 0121 | Version 01.21 |
| 26 | RESERVED | 0000 | RESERVED |
Report ID¶
| ReportID-1 | (Input Reports) | (HIDUsage-Mouse) for TP&SP |
| ReportID-2 | (Input Reports) | (HIDUsage-keyboard) for TP |
| ReportID-3 | (Input Reports) | (Vendor Usage: Max 10 finger data) for TP |
| ReportID-4 | (Input Reports) | (Vendor Usage: ON bit data) for GP |
| ReportID-5 | (Feature Reports) | Feature Reports |
| ReportID-6 | (Input Reports) | (Vendor Usage: StickPointer data) for SP |
| ReportID-7 | (Feature Reports) | Flash update (Bootloader) |
Data pattern¶
| Case1 | ReportID_1 | TP/SP | Relative/Relative |
| Case2 | ReportID_3 ReportID_6 | TP SP | Absolute Absolute |
Command Read/Write¶
To read/write to RAM, need to send a commands to the device.
The command format is as below.
DataByte(SET_REPORT)
| Byte1 | Command Byte |
| Byte2 | Address - Byte 0 (LSB) |
| Byte3 | Address - Byte 1 |
| Byte4 | Address - Byte 2 |
| Byte5 | Address - Byte 3 (MSB) |
| Byte6 | Value Byte |
| Byte7 | Checksum |
Command Byte is read=0xD1/write=0xD2 .
Address is read/write RAM address.
Value Byte is writing data when you send the write commands.
When you read RAM, there is no meaning.
DataByte(GET_REPORT)
| Byte1 | Response Byte |
| Byte2 | Address - Byte 0 (LSB) |
| Byte3 | Address - Byte 1 |
| Byte4 | Address - Byte 2 |
| Byte5 | Address - Byte 3 (MSB) |
| Byte6 | Value Byte |
| Byte7 | Checksum |
Read value is stored in Value Byte.
Packet Format Touchpad data byte ——————
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |
|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 |
| 2 | 0 | 0 | 0 | Fcv | Fn3 | Fn2 | Fn1 | Fn0 |
| 3 | Xa0_7 | Xa0_6 | Xa0_5 | Xa0_4 | Xa0_3 | Xa0_2 | Xa0_1 | Xa0_0 |
| 4 | Xa0_15 | Xa0_14 | Xa0_13 | Xa0_12 | Xa0_11 | Xa0_10 | Xa0_9 | Xa0_8 |
| 5 | Ya0_7 | Ya0_6 | Ya0_5 | Ya0_4 | Ya0_3 | Ya0_2 | Ya0_1 | Ya0_0 |
| 6 | Ya0_15 | Ya0_14 | Ya0_13 | Ya0_12 | Ya0_11 | Ya0_10 | Ya0_9 | Ya0_8 |
| 7 | LFB0 | Zs0_6 | Zs0_5 | Zs0_4 | Zs0_3 | Zs0_2 | Zs0_1 | Zs0_0 |
| 8 | Xa1_7 | Xa1_6 | Xa1_5 | Xa1_4 | Xa1_3 | Xa1_2 | Xa1_1 | Xa1_0 |
| 9 | Xa1_15 | Xa1_14 | Xa1_13 | Xa1_12 | Xa1_11 | Xa1_10 | Xa1_9 | Xa1_8 |
| 10 | Ya1_7 | Ya1_6 | Ya1_5 | Ya1_4 | Ya1_3 | Ya1_2 | Ya1_1 | Ya1_0 |
| 11 | Ya1_15 | Ya1_14 | Ya1_13 | Ya1_12 | Ya1_11 | Ya1_10 | Ya1_9 | Ya1_8 |
| 12 | LFB1 | Zs1_6 | Zs1_5 | Zs1_4 | Zs1_3 | Zs1_2 | Zs1_1 | Zs1_0 |
| 13 | Xa2_7 | Xa2_6 | Xa2_5 | Xa2_4 | Xa2_3 | Xa2_2 | Xa2_1 | Xa2_0 |
| 14 | Xa2_15 | Xa2_14 | Xa2_13 | Xa2_12 | Xa2_11 | Xa2_10 | Xa2_9 | Xa2_8 |
| 15 | Ya2_7 | Ya2_6 | Ya2_5 | Ya2_4 | Ya2_3 | Ya2_2 | Ya2_1 | Ya2_0 |
| 16 | Ya2_15 | Ya2_14 | Ya2_13 | Ya2_12 | Ya2_11 | Ya2_10 | Ya2_9 | Ya2_8 |
| 17 | LFB2 | Zs2_6 | Zs2_5 | Zs2_4 | Zs2_3 | Zs2_2 | Zs2_1 | Zs2_0 |
| 18 | Xa3_7 | Xa3_6 | Xa3_5 | Xa3_4 | Xa3_3 | Xa3_2 | Xa3_1 | Xa3_0 |
| 19 | Xa3_15 | Xa3_14 | Xa3_13 | Xa3_12 | Xa3_11 | Xa3_10 | Xa3_9 | Xa3_8 |
| 20 | Ya3_7 | Ya3_6 | Ya3_5 | Ya3_4 | Ya3_3 | Ya3_2 | Ya3_1 | Ya3_0 |
| 21 | Ya3_15 | Ya3_14 | Ya3_13 | Ya3_12 | Ya3_11 | Ya3_10 | Ya3_9 | Ya3_8 |
| 22 | LFB3 | Zs3_6 | Zs3_5 | Zs3_4 | Zs3_3 | Zs3_2 | Zs3_1 | Zs3_0 |
| 23 | Xa4_7 | Xa4_6 | Xa4_5 | Xa4_4 | Xa4_3 | Xa4_2 | Xa4_1 | Xa4_0 |
| 24 | Xa4_15 | Xa4_14 | Xa4_13 | Xa4_12 | Xa4_11 | Xa4_10 | Xa4_9 | Xa4_8 |
| 25 | Ya4_7 | Ya4_6 | Ya4_5 | Ya4_4 | Ya4_3 | Ya4_2 | Ya4_1 | Ya4_0 |
| 26 | Ya4_15 | Ya4_14 | Ya4_13 | Ya4_12 | Ya4_11 | Ya4_10 | Ya4_9 | Ya4_8 |
| 27 | LFB4 | Zs4_6 | Zs4_5 | Zs4_4 | Zs4_3 | Zs4_2 | Zs4_1 | Zs4_0 |
- SW1-SW6:
- SW ON/OFF status
- Xan_15-0(16bit):
- X Absolute data of the “n”th finger
- Yan_15-0(16bit):
- Y Absolute data of the “n”th finger
- Zsn_6-0(7bit):
- Operation area of the “n”th finger
StickPointer data byte¶
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |
|---|---|---|---|---|---|---|---|---|
| Byte1 | 1 | 1 | 1 | 0 | 1 | SW3 | SW2 | SW1 |
| Byte2 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 |
| Byte3 | X15 | X14 | X13 | X12 | X11 | X10 | X9 | X8 |
| Byte4 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 |
| Byte5 | Y15 | Y14 | Y13 | Y12 | Y11 | Y10 | Y9 | Y8 |
| Byte6 | Z7 | Z6 | Z5 | Z4 | Z3 | Z2 | Z1 | Z0 |
| Byte7 | T&P | Z14 | Z13 | Z12 | Z11 | Z10 | Z9 | Z8 |
- SW1-SW3:
- SW ON/OFF status
- Xn_15-0(16bit):
- X Absolute data
- Yn_15-0(16bit):
- Y Absolute data
- Zn_14-0(15bit):
- Z