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