ALPS HID Touchpad Protocol¶
Introduction¶
Currently ALPS HID driver supports U1 Touchpad device.
U1 device basic information.
Vendor 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 command 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