1*4882a593Smuzhiyun========================== 2*4882a593SmuzhiyunALPS HID Touchpad Protocol 3*4882a593Smuzhiyun========================== 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunIntroduction 6*4882a593Smuzhiyun------------ 7*4882a593SmuzhiyunCurrently ALPS HID driver supports U1 Touchpad device. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunU1 device basic information. 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun========== ====== 12*4882a593SmuzhiyunVender ID 0x044E 13*4882a593SmuzhiyunProduct ID 0x120B 14*4882a593SmuzhiyunVersion ID 0x0121 15*4882a593Smuzhiyun========== ====== 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunHID Descriptor 19*4882a593Smuzhiyun-------------- 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun======= ==================== ===== ======================================= 22*4882a593SmuzhiyunByte Field Value Notes 23*4882a593Smuzhiyun======= ==================== ===== ======================================= 24*4882a593Smuzhiyun0 wHIDDescLength 001E Length of HID Descriptor : 30 bytes 25*4882a593Smuzhiyun2 bcdVersion 0100 Compliant with Version 1.00 26*4882a593Smuzhiyun4 wReportDescLength 00B2 Report Descriptor is 178 Bytes (0x00B2) 27*4882a593Smuzhiyun6 wReportDescRegister 0002 Identifier to read Report Descriptor 28*4882a593Smuzhiyun8 wInputRegister 0003 Identifier to read Input Report 29*4882a593Smuzhiyun10 wMaxInputLength 0053 Input Report is 80 Bytes + 2 30*4882a593Smuzhiyun12 wOutputRegister 0000 Identifier to read Output Report 31*4882a593Smuzhiyun14 wMaxOutputLength 0000 No Output Reports 32*4882a593Smuzhiyun16 wCommandRegister 0005 Identifier for Command Register 33*4882a593Smuzhiyun18 wDataRegister 0006 Identifier for Data Register 34*4882a593Smuzhiyun20 wVendorID 044E Vendor ID 0x044E 35*4882a593Smuzhiyun22 wProductID 120B Product ID 0x120B 36*4882a593Smuzhiyun24 wVersionID 0121 Version 01.21 37*4882a593Smuzhiyun26 RESERVED 0000 RESERVED 38*4882a593Smuzhiyun======= ==================== ===== ======================================= 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun 41*4882a593SmuzhiyunReport ID 42*4882a593Smuzhiyun--------- 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun========== ================= ========================================= 45*4882a593SmuzhiyunReportID-1 (Input Reports) (HIDUsage-Mouse) for TP&SP 46*4882a593SmuzhiyunReportID-2 (Input Reports) (HIDUsage-keyboard) for TP 47*4882a593SmuzhiyunReportID-3 (Input Reports) (Vendor Usage: Max 10 finger data) for TP 48*4882a593SmuzhiyunReportID-4 (Input Reports) (Vendor Usage: ON bit data) for GP 49*4882a593SmuzhiyunReportID-5 (Feature Reports) Feature Reports 50*4882a593SmuzhiyunReportID-6 (Input Reports) (Vendor Usage: StickPointer data) for SP 51*4882a593SmuzhiyunReportID-7 (Feature Reports) Flash update (Bootloader) 52*4882a593Smuzhiyun========== ================= ========================================= 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun 55*4882a593SmuzhiyunData pattern 56*4882a593Smuzhiyun------------ 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun===== ========== ===== ================= 59*4882a593SmuzhiyunCase1 ReportID_1 TP/SP Relative/Relative 60*4882a593SmuzhiyunCase2 ReportID_3 TP Absolute 61*4882a593Smuzhiyun ReportID_6 SP Absolute 62*4882a593Smuzhiyun===== ========== ===== ================= 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun 65*4882a593SmuzhiyunCommand Read/Write 66*4882a593Smuzhiyun------------------ 67*4882a593SmuzhiyunTo read/write to RAM, need to send a commands to the device. 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunThe command format is as below. 70*4882a593Smuzhiyun 71*4882a593SmuzhiyunDataByte(SET_REPORT) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun===== ====================== 74*4882a593SmuzhiyunByte1 Command Byte 75*4882a593SmuzhiyunByte2 Address - Byte 0 (LSB) 76*4882a593SmuzhiyunByte3 Address - Byte 1 77*4882a593SmuzhiyunByte4 Address - Byte 2 78*4882a593SmuzhiyunByte5 Address - Byte 3 (MSB) 79*4882a593SmuzhiyunByte6 Value Byte 80*4882a593SmuzhiyunByte7 Checksum 81*4882a593Smuzhiyun===== ====================== 82*4882a593Smuzhiyun 83*4882a593SmuzhiyunCommand Byte is read=0xD1/write=0xD2 . 84*4882a593Smuzhiyun 85*4882a593SmuzhiyunAddress is read/write RAM address. 86*4882a593Smuzhiyun 87*4882a593SmuzhiyunValue Byte is writing data when you send the write commands. 88*4882a593Smuzhiyun 89*4882a593SmuzhiyunWhen you read RAM, there is no meaning. 90*4882a593Smuzhiyun 91*4882a593SmuzhiyunDataByte(GET_REPORT) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun===== ====================== 94*4882a593SmuzhiyunByte1 Response Byte 95*4882a593SmuzhiyunByte2 Address - Byte 0 (LSB) 96*4882a593SmuzhiyunByte3 Address - Byte 1 97*4882a593SmuzhiyunByte4 Address - Byte 2 98*4882a593SmuzhiyunByte5 Address - Byte 3 (MSB) 99*4882a593SmuzhiyunByte6 Value Byte 100*4882a593SmuzhiyunByte7 Checksum 101*4882a593Smuzhiyun===== ====================== 102*4882a593Smuzhiyun 103*4882a593SmuzhiyunRead value is stored in Value Byte. 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun 106*4882a593SmuzhiyunPacket Format 107*4882a593SmuzhiyunTouchpad data byte 108*4882a593Smuzhiyun------------------ 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 112*4882a593Smuzhiyun- b7 b6 b5 b4 b3 b2 b1 b0 113*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 114*4882a593Smuzhiyun1 0 0 SW6 SW5 SW4 SW3 SW2 SW1 115*4882a593Smuzhiyun2 0 0 0 Fcv Fn3 Fn2 Fn1 Fn0 116*4882a593Smuzhiyun3 Xa0_7 Xa0_6 Xa0_5 Xa0_4 Xa0_3 Xa0_2 Xa0_1 Xa0_0 117*4882a593Smuzhiyun4 Xa0_15 Xa0_14 Xa0_13 Xa0_12 Xa0_11 Xa0_10 Xa0_9 Xa0_8 118*4882a593Smuzhiyun5 Ya0_7 Ya0_6 Ya0_5 Ya0_4 Ya0_3 Ya0_2 Ya0_1 Ya0_0 119*4882a593Smuzhiyun6 Ya0_15 Ya0_14 Ya0_13 Ya0_12 Ya0_11 Ya0_10 Ya0_9 Ya0_8 120*4882a593Smuzhiyun7 LFB0 Zs0_6 Zs0_5 Zs0_4 Zs0_3 Zs0_2 Zs0_1 Zs0_0 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun8 Xa1_7 Xa1_6 Xa1_5 Xa1_4 Xa1_3 Xa1_2 Xa1_1 Xa1_0 123*4882a593Smuzhiyun9 Xa1_15 Xa1_14 Xa1_13 Xa1_12 Xa1_11 Xa1_10 Xa1_9 Xa1_8 124*4882a593Smuzhiyun10 Ya1_7 Ya1_6 Ya1_5 Ya1_4 Ya1_3 Ya1_2 Ya1_1 Ya1_0 125*4882a593Smuzhiyun11 Ya1_15 Ya1_14 Ya1_13 Ya1_12 Ya1_11 Ya1_10 Ya1_9 Ya1_8 126*4882a593Smuzhiyun12 LFB1 Zs1_6 Zs1_5 Zs1_4 Zs1_3 Zs1_2 Zs1_1 Zs1_0 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun13 Xa2_7 Xa2_6 Xa2_5 Xa2_4 Xa2_3 Xa2_2 Xa2_1 Xa2_0 129*4882a593Smuzhiyun14 Xa2_15 Xa2_14 Xa2_13 Xa2_12 Xa2_11 Xa2_10 Xa2_9 Xa2_8 130*4882a593Smuzhiyun15 Ya2_7 Ya2_6 Ya2_5 Ya2_4 Ya2_3 Ya2_2 Ya2_1 Ya2_0 131*4882a593Smuzhiyun16 Ya2_15 Ya2_14 Ya2_13 Ya2_12 Ya2_11 Ya2_10 Ya2_9 Ya2_8 132*4882a593Smuzhiyun17 LFB2 Zs2_6 Zs2_5 Zs2_4 Zs2_3 Zs2_2 Zs2_1 Zs2_0 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun18 Xa3_7 Xa3_6 Xa3_5 Xa3_4 Xa3_3 Xa3_2 Xa3_1 Xa3_0 135*4882a593Smuzhiyun19 Xa3_15 Xa3_14 Xa3_13 Xa3_12 Xa3_11 Xa3_10 Xa3_9 Xa3_8 136*4882a593Smuzhiyun20 Ya3_7 Ya3_6 Ya3_5 Ya3_4 Ya3_3 Ya3_2 Ya3_1 Ya3_0 137*4882a593Smuzhiyun21 Ya3_15 Ya3_14 Ya3_13 Ya3_12 Ya3_11 Ya3_10 Ya3_9 Ya3_8 138*4882a593Smuzhiyun22 LFB3 Zs3_6 Zs3_5 Zs3_4 Zs3_3 Zs3_2 Zs3_1 Zs3_0 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun23 Xa4_7 Xa4_6 Xa4_5 Xa4_4 Xa4_3 Xa4_2 Xa4_1 Xa4_0 141*4882a593Smuzhiyun24 Xa4_15 Xa4_14 Xa4_13 Xa4_12 Xa4_11 Xa4_10 Xa4_9 Xa4_8 142*4882a593Smuzhiyun25 Ya4_7 Ya4_6 Ya4_5 Ya4_4 Ya4_3 Ya4_2 Ya4_1 Ya4_0 143*4882a593Smuzhiyun26 Ya4_15 Ya4_14 Ya4_13 Ya4_12 Ya4_11 Ya4_10 Ya4_9 Ya4_8 144*4882a593Smuzhiyun27 LFB4 Zs4_6 Zs4_5 Zs4_4 Zs4_3 Zs4_2 Zs4_1 Zs4_0 145*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun 148*4882a593SmuzhiyunSW1-SW6: 149*4882a593Smuzhiyun SW ON/OFF status 150*4882a593SmuzhiyunXan_15-0(16bit): 151*4882a593Smuzhiyun X Absolute data of the "n"th finger 152*4882a593SmuzhiyunYan_15-0(16bit): 153*4882a593Smuzhiyun Y Absolute data of the "n"th finger 154*4882a593SmuzhiyunZsn_6-0(7bit): 155*4882a593Smuzhiyun Operation area of the "n"th finger 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun 158*4882a593SmuzhiyunStickPointer data byte 159*4882a593Smuzhiyun---------------------- 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 162*4882a593Smuzhiyun- b7 b6 b5 b4 b3 b2 b1 b0 163*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 164*4882a593SmuzhiyunByte1 1 1 1 0 1 SW3 SW2 SW1 165*4882a593SmuzhiyunByte2 X7 X6 X5 X4 X3 X2 X1 X0 166*4882a593SmuzhiyunByte3 X15 X14 X13 X12 X11 X10 X9 X8 167*4882a593SmuzhiyunByte4 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 168*4882a593SmuzhiyunByte5 Y15 Y14 Y13 Y12 Y11 Y10 Y9 Y8 169*4882a593SmuzhiyunByte6 Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 170*4882a593SmuzhiyunByte7 T&P Z14 Z13 Z12 Z11 Z10 Z9 Z8 171*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= ===== 172*4882a593Smuzhiyun 173*4882a593SmuzhiyunSW1-SW3: 174*4882a593Smuzhiyun SW ON/OFF status 175*4882a593SmuzhiyunXn_15-0(16bit): 176*4882a593Smuzhiyun X Absolute data 177*4882a593SmuzhiyunYn_15-0(16bit): 178*4882a593Smuzhiyun Y Absolute data 179*4882a593SmuzhiyunZn_14-0(15bit): 180*4882a593Smuzhiyun Z 181