1 .. include:: <isonum.txt> 1 .. include:: <isonum.txt> 2 2 3 ================= 3 ================= 4 Sentelic Touchpad 4 Sentelic Touchpad 5 ================= 5 ================= 6 6 7 7 8 :Copyright: |copy| 2002-2011 Sentelic Corporat 8 :Copyright: |copy| 2002-2011 Sentelic Corporation. 9 9 10 :Last update: Dec-07-2011 10 :Last update: Dec-07-2011 11 11 12 Finger Sensing Pad Intellimouse Mode (scrollin 12 Finger Sensing Pad Intellimouse Mode (scrolling wheel, 4th and 5th buttons) 13 ============================================== 13 ============================================================================ 14 14 15 A) MSID 4: Scrolling wheel mode plus Forward p 15 A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward 16 page (5th button) 16 page (5th button) 17 17 18 1. Set sample rate to 200; 18 1. Set sample rate to 200; 19 2. Set sample rate to 200; 19 2. Set sample rate to 200; 20 3. Set sample rate to 80; 20 3. Set sample rate to 80; 21 4. Issuing the "Get device ID" command (0xF2) 21 4. Issuing the "Get device ID" command (0xF2) and waits for the response; 22 5. FSP will respond 0x04. 22 5. FSP will respond 0x04. 23 23 24 :: 24 :: 25 25 26 Packet 1 26 Packet 1 27 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 27 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 28 BYTE |---------------|BYTE |------------- 28 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 29 1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X 29 1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 | | |B|F|W|W|W|W| 30 |---------------| |------------- 30 |---------------| |---------------| |---------------| |---------------| 31 31 32 Byte 1: Bit7 => Y overflow 32 Byte 1: Bit7 => Y overflow 33 Bit6 => X overflow 33 Bit6 => X overflow 34 Bit5 => Y sign bit 34 Bit5 => Y sign bit 35 Bit4 => X sign bit 35 Bit4 => X sign bit 36 Bit3 => 1 36 Bit3 => 1 37 Bit2 => Middle Button, 1 is presse 37 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 38 Bit1 => Right Button, 1 is pressed 38 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 39 Bit0 => Left Button, 1 is pressed, 39 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 40 Byte 2: X Movement(9-bit 2's complement in 40 Byte 2: X Movement(9-bit 2's complement integers) 41 Byte 3: Y Movement(9-bit 2's complement in 41 Byte 3: Y Movement(9-bit 2's complement integers) 42 Byte 4: Bit3~Bit0 => the scrolling wheel's 42 Byte 4: Bit3~Bit0 => the scrolling wheel's movement since the last data report. 43 valid values, -8 ~ +7 43 valid values, -8 ~ +7 44 Bit4 => 1 = 4th mouse button is pr 44 Bit4 => 1 = 4th mouse button is pressed, Forward one page. 45 0 = 4th mouse button is no 45 0 = 4th mouse button is not pressed. 46 Bit5 => 1 = 5th mouse button is pr 46 Bit5 => 1 = 5th mouse button is pressed, Backward one page. 47 0 = 5th mouse button is no 47 0 = 5th mouse button is not pressed. 48 48 49 B) MSID 6: Horizontal and Vertical scrolling 49 B) MSID 6: Horizontal and Vertical scrolling 50 50 51 - Set bit 1 in register 0x40 to 1 51 - Set bit 1 in register 0x40 to 1 52 52 53 FSP replaces scrolling wheel's movement as 4 b 53 FSP replaces scrolling wheel's movement as 4 bits to show horizontal and 54 vertical scrolling. 54 vertical scrolling. 55 55 56 :: 56 :: 57 57 58 Packet 1 58 Packet 1 59 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 59 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 60 BYTE |---------------|BYTE |------------- 60 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 61 1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X 61 1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 | | |B|F|r|l|u|d| 62 |---------------| |------------- 62 |---------------| |---------------| |---------------| |---------------| 63 63 64 Byte 1: Bit7 => Y overflow 64 Byte 1: Bit7 => Y overflow 65 Bit6 => X overflow 65 Bit6 => X overflow 66 Bit5 => Y sign bit 66 Bit5 => Y sign bit 67 Bit4 => X sign bit 67 Bit4 => X sign bit 68 Bit3 => 1 68 Bit3 => 1 69 Bit2 => Middle Button, 1 is presse 69 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 70 Bit1 => Right Button, 1 is pressed 70 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 71 Bit0 => Left Button, 1 is pressed, 71 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 72 Byte 2: X Movement(9-bit 2's complement in 72 Byte 2: X Movement(9-bit 2's complement integers) 73 Byte 3: Y Movement(9-bit 2's complement in 73 Byte 3: Y Movement(9-bit 2's complement integers) 74 Byte 4: Bit0 => the Vertical scrolling mov 74 Byte 4: Bit0 => the Vertical scrolling movement downward. 75 Bit1 => the Vertical scrolling mov 75 Bit1 => the Vertical scrolling movement upward. 76 Bit2 => the Horizontal scrolling m 76 Bit2 => the Horizontal scrolling movement leftward. 77 Bit3 => the Horizontal scrolling m 77 Bit3 => the Horizontal scrolling movement rightward. 78 Bit4 => 1 = 4th mouse button is pr 78 Bit4 => 1 = 4th mouse button is pressed, Forward one page. 79 0 = 4th mouse button is no 79 0 = 4th mouse button is not pressed. 80 Bit5 => 1 = 5th mouse button is pr 80 Bit5 => 1 = 5th mouse button is pressed, Backward one page. 81 0 = 5th mouse button is no 81 0 = 5th mouse button is not pressed. 82 82 83 C) MSID 7 83 C) MSID 7 84 84 85 FSP uses 2 packets (8 Bytes) to represent Abso 85 FSP uses 2 packets (8 Bytes) to represent Absolute Position. 86 so we have PACKET NUMBER to identify packets. 86 so we have PACKET NUMBER to identify packets. 87 87 88 If PACKET NUMBER is 0, the packet is Packet 88 If PACKET NUMBER is 0, the packet is Packet 1. 89 If PACKET NUMBER is 1, the packet is Packet 89 If PACKET NUMBER is 1, the packet is Packet 2. 90 Please count this number in program. 90 Please count this number in program. 91 91 92 MSID6 special packet will be enable at the sam 92 MSID6 special packet will be enable at the same time when enable MSID 7. 93 93 94 Absolute position for STL3886-G0 94 Absolute position for STL3886-G0 95 ================================ 95 ================================ 96 96 97 1. Set bit 2 or 3 in register 0x40 to 1 97 1. Set bit 2 or 3 in register 0x40 to 1 98 2. Set bit 6 in register 0x40 to 1 98 2. Set bit 6 in register 0x40 to 1 99 99 100 :: 100 :: 101 101 102 Packet 1 (ABSOLUTE POSITION) 102 Packet 1 (ABSOLUTE POSITION) 103 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 103 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 104 BYTE |---------------|BYTE |------------- 104 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 105 1 |0|1|V|1|1|M|R|L| 2 |X|X|X|X|X|X|X 105 1 |0|1|V|1|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|d|u|X|X|Y|Y| 106 |---------------| |------------- 106 |---------------| |---------------| |---------------| |---------------| 107 107 108 Byte 1: Bit7~Bit6 => 00, Normal data packe 108 Byte 1: Bit7~Bit6 => 00, Normal data packet 109 => 01, Absolute coordinati 109 => 01, Absolute coordination packet 110 => 10, Notify packet 110 => 10, Notify packet 111 Bit5 => valid bit 111 Bit5 => valid bit 112 Bit4 => 1 112 Bit4 => 1 113 Bit3 => 1 113 Bit3 => 1 114 Bit2 => Middle Button, 1 is presse 114 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 115 Bit1 => Right Button, 1 is pressed 115 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 116 Bit0 => Left Button, 1 is pressed, 116 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 117 Byte 2: X coordinate (xpos[9:2]) 117 Byte 2: X coordinate (xpos[9:2]) 118 Byte 3: Y coordinate (ypos[9:2]) 118 Byte 3: Y coordinate (ypos[9:2]) 119 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 119 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 120 Bit3~Bit2 => X coordinate (ypos[1: 120 Bit3~Bit2 => X coordinate (ypos[1:0]) 121 Bit4 => scroll up 121 Bit4 => scroll up 122 Bit5 => scroll down 122 Bit5 => scroll down 123 Bit6 => scroll left 123 Bit6 => scroll left 124 Bit7 => scroll right 124 Bit7 => scroll right 125 125 126 Notify Packet for G0 126 Notify Packet for G0 127 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 127 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 128 BYTE |---------------|BYTE |------------- 128 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 129 1 |1|0|0|1|1|M|R|L| 2 |C|C|C|C|C|C|C 129 1 |1|0|0|1|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |M|M|M|M|M|M|M|M| 4 |0|0|0|0|0|0|0|0| 130 |---------------| |------------- 130 |---------------| |---------------| |---------------| |---------------| 131 131 132 Byte 1: Bit7~Bit6 => 00, Normal data packe 132 Byte 1: Bit7~Bit6 => 00, Normal data packet 133 => 01, Absolute coordinati 133 => 01, Absolute coordination packet 134 => 10, Notify packet 134 => 10, Notify packet 135 Bit5 => 0 135 Bit5 => 0 136 Bit4 => 1 136 Bit4 => 1 137 Bit3 => 1 137 Bit3 => 1 138 Bit2 => Middle Button, 1 is presse 138 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 139 Bit1 => Right Button, 1 is pressed 139 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 140 Bit0 => Left Button, 1 is pressed, 140 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 141 Byte 2: Message Type => 0x5A (Enable/Disab 141 Byte 2: Message Type => 0x5A (Enable/Disable status packet) 142 Mode Type => 0xA5 (Normal/Icon mod 142 Mode Type => 0xA5 (Normal/Icon mode status) 143 Byte 3: Message Type => 0x00 (Disabled) 143 Byte 3: Message Type => 0x00 (Disabled) 144 => 0x01 (Enabled) 144 => 0x01 (Enabled) 145 Mode Type => 0x00 (Normal) 145 Mode Type => 0x00 (Normal) 146 => 0x01 (Icon) 146 => 0x01 (Icon) 147 Byte 4: Bit7~Bit0 => Don't Care 147 Byte 4: Bit7~Bit0 => Don't Care 148 148 149 Absolute position for STL3888-Ax 149 Absolute position for STL3888-Ax 150 ================================ 150 ================================ 151 151 152 :: 152 :: 153 153 154 Packet 1 (ABSOLUTE POSITION) 154 Packet 1 (ABSOLUTE POSITION) 155 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 155 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 156 BYTE |---------------|BYTE |------------- 156 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 157 1 |0|1|V|A|1|L|0|1| 2 |X|X|X|X|X|X|X 157 1 |0|1|V|A|1|L|0|1| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |x|x|y|y|X|X|Y|Y| 158 |---------------| |------------- 158 |---------------| |---------------| |---------------| |---------------| 159 159 160 Byte 1: Bit7~Bit6 => 00, Normal data packe 160 Byte 1: Bit7~Bit6 => 00, Normal data packet 161 => 01, Absolute coordinati 161 => 01, Absolute coordination packet 162 => 10, Notify packet 162 => 10, Notify packet 163 => 11, Normal data packet 163 => 11, Normal data packet with on-pad click 164 Bit5 => Valid bit, 0 means that th 164 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 165 When both fingers are up, 165 When both fingers are up, the last two reports have zero valid 166 bit. 166 bit. 167 Bit4 => arc 167 Bit4 => arc 168 Bit3 => 1 168 Bit3 => 1 169 Bit2 => Left Button, 1 is pressed, 169 Bit2 => Left Button, 1 is pressed, 0 is released. 170 Bit1 => 0 170 Bit1 => 0 171 Bit0 => 1 171 Bit0 => 1 172 Byte 2: X coordinate (xpos[9:2]) 172 Byte 2: X coordinate (xpos[9:2]) 173 Byte 3: Y coordinate (ypos[9:2]) 173 Byte 3: Y coordinate (ypos[9:2]) 174 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 174 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 175 Bit3~Bit2 => X coordinate (ypos[1: 175 Bit3~Bit2 => X coordinate (ypos[1:0]) 176 Bit5~Bit4 => y1_g 176 Bit5~Bit4 => y1_g 177 Bit7~Bit6 => x1_g 177 Bit7~Bit6 => x1_g 178 178 179 Packet 2 (ABSOLUTE POSITION) 179 Packet 2 (ABSOLUTE POSITION) 180 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 180 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 181 BYTE |---------------|BYTE |------------- 181 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 182 1 |0|1|V|A|1|R|1|0| 2 |X|X|X|X|X|X|X 182 1 |0|1|V|A|1|R|1|0| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |x|x|y|y|X|X|Y|Y| 183 |---------------| |------------- 183 |---------------| |---------------| |---------------| |---------------| 184 184 185 Byte 1: Bit7~Bit6 => 00, Normal data packe 185 Byte 1: Bit7~Bit6 => 00, Normal data packet 186 => 01, Absolute coordinate 186 => 01, Absolute coordinates packet 187 => 10, Notify packet 187 => 10, Notify packet 188 => 11, Normal data packet 188 => 11, Normal data packet with on-pad click 189 Bit5 => Valid bit, 0 means that th 189 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 190 When both fingers are up, 190 When both fingers are up, the last two reports have zero valid 191 bit. 191 bit. 192 Bit4 => arc 192 Bit4 => arc 193 Bit3 => 1 193 Bit3 => 1 194 Bit2 => Right Button, 1 is pressed 194 Bit2 => Right Button, 1 is pressed, 0 is released. 195 Bit1 => 1 195 Bit1 => 1 196 Bit0 => 0 196 Bit0 => 0 197 Byte 2: X coordinate (xpos[9:2]) 197 Byte 2: X coordinate (xpos[9:2]) 198 Byte 3: Y coordinate (ypos[9:2]) 198 Byte 3: Y coordinate (ypos[9:2]) 199 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 199 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 200 Bit3~Bit2 => X coordinate (ypos[1: 200 Bit3~Bit2 => X coordinate (ypos[1:0]) 201 Bit5~Bit4 => y2_g 201 Bit5~Bit4 => y2_g 202 Bit7~Bit6 => x2_g 202 Bit7~Bit6 => x2_g 203 203 204 Notify Packet for STL3888-Ax 204 Notify Packet for STL3888-Ax 205 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 205 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 206 BYTE |---------------|BYTE |------------- 206 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 207 1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C 207 1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|d|u|0|0|0|0| 208 |---------------| |------------- 208 |---------------| |---------------| |---------------| |---------------| 209 209 210 Byte 1: Bit7~Bit6 => 00, Normal data packe 210 Byte 1: Bit7~Bit6 => 00, Normal data packet 211 => 01, Absolute coordinate 211 => 01, Absolute coordinates packet 212 => 10, Notify packet 212 => 10, Notify packet 213 => 11, Normal data packet 213 => 11, Normal data packet with on-pad click 214 Bit5 => 1 214 Bit5 => 1 215 Bit4 => when in absolute coordinat 215 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1): 216 0: left button is generate 216 0: left button is generated by the on-pad command 217 1: left button is generate 217 1: left button is generated by the external button 218 Bit3 => 1 218 Bit3 => 1 219 Bit2 => Middle Button, 1 is presse 219 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 220 Bit1 => Right Button, 1 is pressed 220 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 221 Bit0 => Left Button, 1 is pressed, 221 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 222 Byte 2: Message Type => 0xB7 (Multi Finger 222 Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode) 223 Byte 3: Bit7~Bit6 => Don't care 223 Byte 3: Bit7~Bit6 => Don't care 224 Bit5~Bit4 => Number of fingers 224 Bit5~Bit4 => Number of fingers 225 Bit3~Bit1 => Reserved 225 Bit3~Bit1 => Reserved 226 Bit0 => 1: enter gesture mode; 0: 226 Bit0 => 1: enter gesture mode; 0: leaving gesture mode 227 Byte 4: Bit7 => scroll right button 227 Byte 4: Bit7 => scroll right button 228 Bit6 => scroll left button 228 Bit6 => scroll left button 229 Bit5 => scroll down button 229 Bit5 => scroll down button 230 Bit4 => scroll up button 230 Bit4 => scroll up button 231 * Note that if gesture and add 231 * Note that if gesture and additional button (Bit4~Bit7) 232 happen at the same time, the b 232 happen at the same time, the button information will not 233 be sent. 233 be sent. 234 Bit3~Bit0 => Reserved 234 Bit3~Bit0 => Reserved 235 235 236 Sample sequence of Multi-finger, Multi-coordin 236 Sample sequence of Multi-finger, Multi-coordinate mode: 237 237 238 notify packet (valid bit == 1), abs pk 238 notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1, 239 abs pkt 2, ..., notify packet (valid b 239 abs pkt 2, ..., notify packet (valid bit == 0) 240 240 241 Absolute position for STL3888-B0 241 Absolute position for STL3888-B0 242 ================================ 242 ================================ 243 243 244 :: 244 :: 245 245 246 Packet 1(ABSOLUTE POSITION) 246 Packet 1(ABSOLUTE POSITION) 247 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 247 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 248 BYTE |---------------|BYTE |------------- 248 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 249 1 |0|1|V|F|1|0|R|L| 2 |X|X|X|X|X|X|X 249 1 |0|1|V|F|1|0|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|u|d|X|X|Y|Y| 250 |---------------| |------------- 250 |---------------| |---------------| |---------------| |---------------| 251 251 252 Byte 1: Bit7~Bit6 => 00, Normal data packe 252 Byte 1: Bit7~Bit6 => 00, Normal data packet 253 => 01, Absolute coordinate 253 => 01, Absolute coordinates packet 254 => 10, Notify packet 254 => 10, Notify packet 255 => 11, Normal data packet 255 => 11, Normal data packet with on-pad click 256 Bit5 => Valid bit, 0 means that th 256 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 257 When both fingers are up, 257 When both fingers are up, the last two reports have zero valid 258 bit. 258 bit. 259 Bit4 => finger up/down information 259 Bit4 => finger up/down information. 1: finger down, 0: finger up. 260 Bit3 => 1 260 Bit3 => 1 261 Bit2 => finger index, 0 is the fir 261 Bit2 => finger index, 0 is the first finger, 1 is the second finger. 262 Bit1 => Right Button, 1 is pressed 262 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 263 Bit0 => Left Button, 1 is pressed, 263 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 264 Byte 2: X coordinate (xpos[9:2]) 264 Byte 2: X coordinate (xpos[9:2]) 265 Byte 3: Y coordinate (ypos[9:2]) 265 Byte 3: Y coordinate (ypos[9:2]) 266 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 266 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 267 Bit3~Bit2 => X coordinate (ypos[1: 267 Bit3~Bit2 => X coordinate (ypos[1:0]) 268 Bit4 => scroll down button 268 Bit4 => scroll down button 269 Bit5 => scroll up button 269 Bit5 => scroll up button 270 Bit6 => scroll left button 270 Bit6 => scroll left button 271 Bit7 => scroll right button 271 Bit7 => scroll right button 272 272 273 Packet 2 (ABSOLUTE POSITION) 273 Packet 2 (ABSOLUTE POSITION) 274 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 274 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 275 BYTE |---------------|BYTE |------------- 275 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 276 1 |0|1|V|F|1|1|R|L| 2 |X|X|X|X|X|X|X 276 1 |0|1|V|F|1|1|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|u|d|X|X|Y|Y| 277 |---------------| |------------- 277 |---------------| |---------------| |---------------| |---------------| 278 278 279 Byte 1: Bit7~Bit6 => 00, Normal data packe 279 Byte 1: Bit7~Bit6 => 00, Normal data packet 280 => 01, Absolute coordinati 280 => 01, Absolute coordination packet 281 => 10, Notify packet 281 => 10, Notify packet 282 => 11, Normal data packet 282 => 11, Normal data packet with on-pad click 283 Bit5 => Valid bit, 0 means that th 283 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 284 When both fingers are up, 284 When both fingers are up, the last two reports have zero valid 285 bit. 285 bit. 286 Bit4 => finger up/down information 286 Bit4 => finger up/down information. 1: finger down, 0: finger up. 287 Bit3 => 1 287 Bit3 => 1 288 Bit2 => finger index, 0 is the fir 288 Bit2 => finger index, 0 is the first finger, 1 is the second finger. 289 Bit1 => Right Button, 1 is pressed 289 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 290 Bit0 => Left Button, 1 is pressed, 290 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 291 Byte 2: X coordinate (xpos[9:2]) 291 Byte 2: X coordinate (xpos[9:2]) 292 Byte 3: Y coordinate (ypos[9:2]) 292 Byte 3: Y coordinate (ypos[9:2]) 293 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 293 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 294 Bit3~Bit2 => X coordinate (ypos[1: 294 Bit3~Bit2 => X coordinate (ypos[1:0]) 295 Bit4 => scroll down button 295 Bit4 => scroll down button 296 Bit5 => scroll up button 296 Bit5 => scroll up button 297 Bit6 => scroll left button 297 Bit6 => scroll left button 298 Bit7 => scroll right button 298 Bit7 => scroll right button 299 299 300 Notify Packet for STL3888-B0:: 300 Notify Packet for STL3888-B0:: 301 301 302 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 302 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 303 BYTE |---------------|BYTE |------------- 303 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 304 1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C 304 1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|u|d|0|0|0|0| 305 |---------------| |------------- 305 |---------------| |---------------| |---------------| |---------------| 306 306 307 Byte 1: Bit7~Bit6 => 00, Normal data packe 307 Byte 1: Bit7~Bit6 => 00, Normal data packet 308 => 01, Absolute coordinati 308 => 01, Absolute coordination packet 309 => 10, Notify packet 309 => 10, Notify packet 310 => 11, Normal data packet 310 => 11, Normal data packet with on-pad click 311 Bit5 => 1 311 Bit5 => 1 312 Bit4 => when in absolute coordinat 312 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1): 313 0: left button is generate 313 0: left button is generated by the on-pad command 314 1: left button is generate 314 1: left button is generated by the external button 315 Bit3 => 1 315 Bit3 => 1 316 Bit2 => Middle Button, 1 is presse 316 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 317 Bit1 => Right Button, 1 is pressed 317 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 318 Bit0 => Left Button, 1 is pressed, 318 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 319 Byte 2: Message Type => 0xB7 (Multi Finger 319 Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode) 320 Byte 3: Bit7~Bit6 => Don't care 320 Byte 3: Bit7~Bit6 => Don't care 321 Bit5~Bit4 => Number of fingers 321 Bit5~Bit4 => Number of fingers 322 Bit3~Bit1 => Reserved 322 Bit3~Bit1 => Reserved 323 Bit0 => 1: enter gesture mode; 0: 323 Bit0 => 1: enter gesture mode; 0: leaving gesture mode 324 Byte 4: Bit7 => scroll right button 324 Byte 4: Bit7 => scroll right button 325 Bit6 => scroll left button 325 Bit6 => scroll left button 326 Bit5 => scroll up button 326 Bit5 => scroll up button 327 Bit4 => scroll down button 327 Bit4 => scroll down button 328 * Note that if gesture and add 328 * Note that if gesture and additional button(Bit4~Bit7) 329 happen at the same time, the b 329 happen at the same time, the button information will not 330 be sent. 330 be sent. 331 Bit3~Bit0 => Reserved 331 Bit3~Bit0 => Reserved 332 332 333 Sample sequence of Multi-finger, Multi-coordin 333 Sample sequence of Multi-finger, Multi-coordinate mode: 334 334 335 notify packet (valid bit == 1), abs pk 335 notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1, 336 abs pkt 2, ..., notify packet (valid b 336 abs pkt 2, ..., notify packet (valid bit == 0) 337 337 338 Absolute position for STL3888-Cx and STL3888-D 338 Absolute position for STL3888-Cx and STL3888-Dx 339 ============================================== 339 =============================================== 340 340 341 :: 341 :: 342 342 343 Single Finger, Absolute Coordinate Mode (S 343 Single Finger, Absolute Coordinate Mode (SFAC) 344 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 344 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 345 BYTE |---------------|BYTE |------------- 345 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 346 1 |0|1|0|P|1|M|R|L| 2 |X|X|X|X|X|X|X 346 1 |0|1|0|P|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|B|F|X|X|Y|Y| 347 |---------------| |------------- 347 |---------------| |---------------| |---------------| |---------------| 348 348 349 Byte 1: Bit7~Bit6 => 00, Normal data packe 349 Byte 1: Bit7~Bit6 => 00, Normal data packet 350 => 01, Absolute coordinate 350 => 01, Absolute coordinates packet 351 => 10, Notify packet 351 => 10, Notify packet 352 Bit5 => Coordinate mode(always 0 i 352 Bit5 => Coordinate mode(always 0 in SFAC mode): 353 0: single-finger absolute 353 0: single-finger absolute coordinates (SFAC) mode 354 1: multi-finger, multiple 354 1: multi-finger, multiple coordinates (MFMC) mode 355 Bit4 => 0: The LEFT button is gene 355 Bit4 => 0: The LEFT button is generated by on-pad command (OPC) 356 1: The LEFT button is gene 356 1: The LEFT button is generated by external button 357 Default is 1 even if the L 357 Default is 1 even if the LEFT button is not pressed. 358 Bit3 => Always 1, as specified by 358 Bit3 => Always 1, as specified by PS/2 protocol. 359 Bit2 => Middle Button, 1 is presse 359 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 360 Bit1 => Right Button, 1 is pressed 360 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 361 Bit0 => Left Button, 1 is pressed, 361 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 362 Byte 2: X coordinate (xpos[9:2]) 362 Byte 2: X coordinate (xpos[9:2]) 363 Byte 3: Y coordinate (ypos[9:2]) 363 Byte 3: Y coordinate (ypos[9:2]) 364 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 364 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 365 Bit3~Bit2 => X coordinate (ypos[1: 365 Bit3~Bit2 => X coordinate (ypos[1:0]) 366 Bit4 => 4th mouse button(forward o 366 Bit4 => 4th mouse button(forward one page) 367 Bit5 => 5th mouse button(backward 367 Bit5 => 5th mouse button(backward one page) 368 Bit6 => scroll left button 368 Bit6 => scroll left button 369 Bit7 => scroll right button 369 Bit7 => scroll right button 370 370 371 Multi Finger, Multiple Coordinates Mode (M 371 Multi Finger, Multiple Coordinates Mode (MFMC): 372 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 372 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 373 BYTE |---------------|BYTE |------------- 373 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 374 1 |0|1|1|P|1|F|R|L| 2 |X|X|X|X|X|X|X 374 1 |0|1|1|P|1|F|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|B|F|X|X|Y|Y| 375 |---------------| |------------- 375 |---------------| |---------------| |---------------| |---------------| 376 376 377 Byte 1: Bit7~Bit6 => 00, Normal data packe 377 Byte 1: Bit7~Bit6 => 00, Normal data packet 378 => 01, Absolute coordinati 378 => 01, Absolute coordination packet 379 => 10, Notify packet 379 => 10, Notify packet 380 Bit5 => Coordinate mode (always 1 380 Bit5 => Coordinate mode (always 1 in MFMC mode): 381 0: single-finger absolute 381 0: single-finger absolute coordinates (SFAC) mode 382 1: multi-finger, multiple 382 1: multi-finger, multiple coordinates (MFMC) mode 383 Bit4 => 0: The LEFT button is gene 383 Bit4 => 0: The LEFT button is generated by on-pad command (OPC) 384 1: The LEFT button is gene 384 1: The LEFT button is generated by external button 385 Default is 1 even if the L 385 Default is 1 even if the LEFT button is not pressed. 386 Bit3 => Always 1, as specified by 386 Bit3 => Always 1, as specified by PS/2 protocol. 387 Bit2 => Finger index, 0 is the fir 387 Bit2 => Finger index, 0 is the first finger, 1 is the second finger. 388 If bit 1 and 0 are all 1 a 388 If bit 1 and 0 are all 1 and bit 4 is 0, the middle external 389 button is pressed. 389 button is pressed. 390 Bit1 => Right Button, 1 is pressed 390 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 391 Bit0 => Left Button, 1 is pressed, 391 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 392 Byte 2: X coordinate (xpos[9:2]) 392 Byte 2: X coordinate (xpos[9:2]) 393 Byte 3: Y coordinate (ypos[9:2]) 393 Byte 3: Y coordinate (ypos[9:2]) 394 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1: 394 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0]) 395 Bit3~Bit2 => X coordinate (ypos[1: 395 Bit3~Bit2 => X coordinate (ypos[1:0]) 396 Bit4 => 4th mouse button(forward o 396 Bit4 => 4th mouse button(forward one page) 397 Bit5 => 5th mouse button(backward 397 Bit5 => 5th mouse button(backward one page) 398 Bit6 => scroll left button 398 Bit6 => scroll left button 399 Bit7 => scroll right button 399 Bit7 => scroll right button 400 400 401 When one of the two fingers is up, the device 401 When one of the two fingers is up, the device will output four consecutive 402 MFMC#0 report packets with zero X and Y to rep 402 MFMC#0 report packets with zero X and Y to represent 1st finger is up or 403 four consecutive MFMC#1 report packets with ze 403 four consecutive MFMC#1 report packets with zero X and Y to represent that 404 the 2nd finger is up. On the other hand, if b 404 the 2nd finger is up. On the other hand, if both fingers are up, the device 405 will output four consecutive single-finger, ab 405 will output four consecutive single-finger, absolute coordinate(SFAC) packets 406 with zero X and Y. 406 with zero X and Y. 407 407 408 Notify Packet for STL3888-Cx/Dx:: 408 Notify Packet for STL3888-Cx/Dx:: 409 409 410 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 410 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 411 BYTE |---------------|BYTE |------------- 411 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 412 1 |1|0|0|P|1|M|R|L| 2 |C|C|C|C|C|C|C 412 1 |1|0|0|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|u|d|0|0|0|0| 413 |---------------| |------------- 413 |---------------| |---------------| |---------------| |---------------| 414 414 415 Byte 1: Bit7~Bit6 => 00, Normal data packe 415 Byte 1: Bit7~Bit6 => 00, Normal data packet 416 => 01, Absolute coordinate 416 => 01, Absolute coordinates packet 417 => 10, Notify packet 417 => 10, Notify packet 418 Bit5 => Always 0 418 Bit5 => Always 0 419 Bit4 => 0: The LEFT button is gene 419 Bit4 => 0: The LEFT button is generated by on-pad command(OPC) 420 1: The LEFT button is gene 420 1: The LEFT button is generated by external button 421 Default is 1 even if the L 421 Default is 1 even if the LEFT button is not pressed. 422 Bit3 => 1 422 Bit3 => 1 423 Bit2 => Middle Button, 1 is presse 423 Bit2 => Middle Button, 1 is pressed, 0 is not pressed. 424 Bit1 => Right Button, 1 is pressed 424 Bit1 => Right Button, 1 is pressed, 0 is not pressed. 425 Bit0 => Left Button, 1 is pressed, 425 Bit0 => Left Button, 1 is pressed, 0 is not pressed. 426 Byte 2: Message type: 426 Byte 2: Message type: 427 0xba => gesture information 427 0xba => gesture information 428 0xc0 => one finger hold-rotating g 428 0xc0 => one finger hold-rotating gesture 429 Byte 3: The first parameter for the receiv 429 Byte 3: The first parameter for the received message: 430 0xba => gesture ID (refer to the ' 430 0xba => gesture ID (refer to the 'Gesture ID' section) 431 0xc0 => region ID 431 0xc0 => region ID 432 Byte 4: The second parameter for the recei 432 Byte 4: The second parameter for the received message: 433 0xba => N/A 433 0xba => N/A 434 0xc0 => finger up/down information 434 0xc0 => finger up/down information 435 435 436 Sample sequence of Multi-finger, Multi-coordin 436 Sample sequence of Multi-finger, Multi-coordinates mode: 437 437 438 notify packet (valid bit == 1), MFMC p 438 notify packet (valid bit == 1), MFMC packet 1 (byte 1, bit 2 == 0), 439 MFMC packet 2 (byte 1, bit 2 == 1), MF 439 MFMC packet 2 (byte 1, bit 2 == 1), MFMC packet 1, MFMC packet 2, 440 ..., notify packet (valid bit == 0) 440 ..., notify packet (valid bit == 0) 441 441 442 That is, when the device is in MFMC mo 442 That is, when the device is in MFMC mode, the host will receive 443 interleaved absolute coordinate packet 443 interleaved absolute coordinate packets for each finger. 444 444 445 FSP Enable/Disable packet 445 FSP Enable/Disable packet 446 ========================= 446 ========================= 447 447 448 :: 448 :: 449 449 450 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 450 Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 451 BYTE |---------------|BYTE |------------- 451 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------| 452 1 |Y|X|0|0|1|M|R|L| 2 |0|1|0|1|1|0|1 452 1 |Y|X|0|0|1|M|R|L| 2 |0|1|0|1|1|0|1|E| 3 | | | | | | | | | 4 | | | | | | | | | 453 |---------------| |------------- 453 |---------------| |---------------| |---------------| |---------------| 454 454 455 FSP will send out enable/disable packet wh 455 FSP will send out enable/disable packet when FSP receive PS/2 enable/disable 456 command. Host will receive the packet whic 456 command. Host will receive the packet which Middle, Right, Left button will 457 be set. The packet only use byte 0 and byt 457 be set. The packet only use byte 0 and byte 1 as a pattern of original packet. 458 Ignore the other bytes of the packet. 458 Ignore the other bytes of the packet. 459 459 460 Byte 1: Bit7 => 0, Y overflow 460 Byte 1: Bit7 => 0, Y overflow 461 Bit6 => 0, X overflow 461 Bit6 => 0, X overflow 462 Bit5 => 0, Y sign bit 462 Bit5 => 0, Y sign bit 463 Bit4 => 0, X sign bit 463 Bit4 => 0, X sign bit 464 Bit3 => 1 464 Bit3 => 1 465 Bit2 => 1, Middle Button 465 Bit2 => 1, Middle Button 466 Bit1 => 1, Right Button 466 Bit1 => 1, Right Button 467 Bit0 => 1, Left Button 467 Bit0 => 1, Left Button 468 Byte 2: Bit7~1 => (0101101b) 468 Byte 2: Bit7~1 => (0101101b) 469 Bit0 => 1 = Enable 469 Bit0 => 1 = Enable 470 0 = Disable 470 0 = Disable 471 Byte 3: Don't care 471 Byte 3: Don't care 472 Byte 4: Don't care (MOUSE ID 3, 4) 472 Byte 4: Don't care (MOUSE ID 3, 4) 473 Byte 5~8: Don't care (Absolute packet) 473 Byte 5~8: Don't care (Absolute packet) 474 474 475 PS/2 Command Set 475 PS/2 Command Set 476 ================ 476 ================ 477 477 478 FSP supports basic PS/2 commanding set and mod 478 FSP supports basic PS/2 commanding set and modes, refer to following URL for 479 details about PS/2 commands: 479 details about PS/2 commands: 480 480 481 http://www.computer-engineering.org/ps2mouse/ 481 http://www.computer-engineering.org/ps2mouse/ 482 482 483 Programming Sequence for Determining Packet Pa 483 Programming Sequence for Determining Packet Parsing Flow 484 ============================================== 484 ======================================================== 485 485 486 1. Identify FSP by reading device ID(0x00) and 486 1. Identify FSP by reading device ID(0x00) and version(0x01) register 487 487 488 2. For FSP version < STL3888 Cx, determine num 488 2. For FSP version < STL3888 Cx, determine number of buttons by reading 489 the 'test mode status' (0x20) register:: 489 the 'test mode status' (0x20) register:: 490 490 491 buttons = reg[0x20] & 0x30 491 buttons = reg[0x20] & 0x30 492 492 493 if buttons == 0x30 or buttons == 0x20: 493 if buttons == 0x30 or buttons == 0x20: 494 # two/four buttons 494 # two/four buttons 495 Refer to 'Finger Sensing Pad P 495 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse' 496 section A for packet parsing d 496 section A for packet parsing detail(ignore byte 4, bit ~ 7) 497 elif buttons == 0x10: 497 elif buttons == 0x10: 498 # 6 buttons 498 # 6 buttons 499 Refer to 'Finger Sensing Pad P 499 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse' 500 section B for packet parsing d 500 section B for packet parsing detail 501 elif buttons == 0x00: 501 elif buttons == 0x00: 502 # 6 buttons 502 # 6 buttons 503 Refer to 'Finger Sensing Pad P 503 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse' 504 section A for packet parsing d 504 section A for packet parsing detail 505 505 506 3. For FSP version >= STL3888 Cx: 506 3. For FSP version >= STL3888 Cx: 507 Refer to 'Finger Sensing Pad PS/2 Mous 507 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse' 508 section A for packet parsing detail (i 508 section A for packet parsing detail (ignore byte 4, bit ~ 7) 509 509 510 Programming Sequence for Register Reading/Writ 510 Programming Sequence for Register Reading/Writing 511 ============================================== 511 ================================================= 512 512 513 Register inversion requirement: 513 Register inversion requirement: 514 514 515 Following values needed to be inverted(the '~' 515 Following values needed to be inverted(the '~' operator in C) before being 516 sent to FSP:: 516 sent to FSP:: 517 517 518 0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff. 518 0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff. 519 519 520 Register swapping requirement: 520 Register swapping requirement: 521 521 522 Following values needed to have their higher 4 522 Following values needed to have their higher 4 bits and lower 4 bits being 523 swapped before being sent to FSP:: 523 swapped before being sent to FSP:: 524 524 525 10, 20, 40, 60, 80, 100 and 200. 525 10, 20, 40, 60, 80, 100 and 200. 526 526 527 Register reading sequence: 527 Register reading sequence: 528 528 529 1. send 0xf3 PS/2 command to FSP; 529 1. send 0xf3 PS/2 command to FSP; 530 530 531 2. send 0x66 PS/2 command to FSP; 531 2. send 0x66 PS/2 command to FSP; 532 532 533 3. send 0x88 PS/2 command to FSP; 533 3. send 0x88 PS/2 command to FSP; 534 534 535 4. send 0xf3 PS/2 command to FSP; 535 4. send 0xf3 PS/2 command to FSP; 536 536 537 5. if the register address being to re 537 5. if the register address being to read is not required to be 538 inverted(refer to the 'Register invers 538 inverted(refer to the 'Register inversion requirement' section), 539 goto step 6 539 goto step 6 540 540 541 a. send 0x68 PS/2 command to FSP; 541 a. send 0x68 PS/2 command to FSP; 542 542 543 b. send the inverted register addres 543 b. send the inverted register address to FSP and goto step 8; 544 544 545 6. if the register address being to re 545 6. if the register address being to read is not required to be 546 swapped(refer to the 'Register swappin 546 swapped(refer to the 'Register swapping requirement' section), 547 goto step 7 547 goto step 7 548 548 549 a. send 0xcc PS/2 command to FSP; 549 a. send 0xcc PS/2 command to FSP; 550 550 551 b. send the swapped register address 551 b. send the swapped register address to FSP and goto step 8; 552 552 553 7. send 0x66 PS/2 command to FSP; 553 7. send 0x66 PS/2 command to FSP; 554 554 555 a. send the original register addres 555 a. send the original register address to FSP and goto step 8; 556 556 557 8. send 0xe9(status request) PS/2 comm 557 8. send 0xe9(status request) PS/2 command to FSP; 558 558 559 9. the 4th byte of the response read f 559 9. the 4th byte of the response read from FSP should be the 560 requested register value(?? indicates 560 requested register value(?? indicates don't care byte):: 561 561 562 host: 0xe9 562 host: 0xe9 563 3888: 0xfa (??) (??) (val) 563 3888: 0xfa (??) (??) (val) 564 564 565 * Note that since the Cx release, the 565 * Note that since the Cx release, the hardware will return 1's 566 complement of the register value at 566 complement of the register value at the 3rd byte of status request 567 result:: 567 result:: 568 568 569 host: 0xe9 569 host: 0xe9 570 3888: 0xfa (??) (~val) (val) 570 3888: 0xfa (??) (~val) (val) 571 571 572 Register writing sequence: 572 Register writing sequence: 573 573 574 1. send 0xf3 PS/2 command to FSP; 574 1. send 0xf3 PS/2 command to FSP; 575 575 576 2. if the register address being to wr 576 2. if the register address being to write is not required to be 577 inverted(refer to the 'Register invers 577 inverted(refer to the 'Register inversion requirement' section), 578 goto step 3 578 goto step 3 579 579 580 a. send 0x74 PS/2 command to FSP; 580 a. send 0x74 PS/2 command to FSP; 581 581 582 b. send the inverted register addres 582 b. send the inverted register address to FSP and goto step 5; 583 583 584 3. if the register address being to wr 584 3. if the register address being to write is not required to be 585 swapped(refer to the 'Register swappin 585 swapped(refer to the 'Register swapping requirement' section), 586 goto step 4 586 goto step 4 587 587 588 a. send 0x77 PS/2 command to FSP; 588 a. send 0x77 PS/2 command to FSP; 589 589 590 b. send the swapped register address 590 b. send the swapped register address to FSP and goto step 5; 591 591 592 4. send 0x55 PS/2 command to FSP; 592 4. send 0x55 PS/2 command to FSP; 593 593 594 a. send the register address to FSP 594 a. send the register address to FSP and goto step 5; 595 595 596 5. send 0xf3 PS/2 command to FSP; 596 5. send 0xf3 PS/2 command to FSP; 597 597 598 6. if the register value being to writ 598 6. if the register value being to write is not required to be 599 inverted(refer to the 'Register invers 599 inverted(refer to the 'Register inversion requirement' section), 600 goto step 7 600 goto step 7 601 601 602 a. send 0x47 PS/2 command to FSP; 602 a. send 0x47 PS/2 command to FSP; 603 603 604 b. send the inverted register value 604 b. send the inverted register value to FSP and goto step 9; 605 605 606 7. if the register value being to writ 606 7. if the register value being to write is not required to be 607 swapped(refer to the 'Register swappin 607 swapped(refer to the 'Register swapping requirement' section), 608 goto step 8 608 goto step 8 609 609 610 a. send 0x44 PS/2 command to FSP; 610 a. send 0x44 PS/2 command to FSP; 611 611 612 b. send the swapped register value t 612 b. send the swapped register value to FSP and goto step 9; 613 613 614 8. send 0x33 PS/2 command to FSP; 614 8. send 0x33 PS/2 command to FSP; 615 615 616 a. send the register value to FSP; 616 a. send the register value to FSP; 617 617 618 9. the register writing sequence is co 618 9. the register writing sequence is completed. 619 619 620 * Since the Cx release, the hardware w 620 * Since the Cx release, the hardware will return 1's 621 complement of the register value at 621 complement of the register value at the 3rd byte of status request 622 result. Host can optionally send ano 622 result. Host can optionally send another 0xe9 (status request) PS/2 623 command to FSP at the end of registe 623 command to FSP at the end of register writing to verify that the 624 register writing operation is succes 624 register writing operation is successful (?? indicates don't care 625 byte):: 625 byte):: 626 626 627 host: 0xe9 627 host: 0xe9 628 3888: 0xfa (??) (~val) (val) 628 3888: 0xfa (??) (~val) (val) 629 629 630 Programming Sequence for Page Register Reading 630 Programming Sequence for Page Register Reading/Writing 631 ============================================== 631 ====================================================== 632 632 633 In order to overcome the limitation of maximum 633 In order to overcome the limitation of maximum number of registers 634 supported, the hardware separates register int 634 supported, the hardware separates register into different groups called 635 'pages.' Each page is able to include up to 25 635 'pages.' Each page is able to include up to 255 registers. 636 636 637 The default page after power up is 0x82; there 637 The default page after power up is 0x82; therefore, if one has to get 638 access to register 0x8301, one has to use foll 638 access to register 0x8301, one has to use following sequence to switch 639 to page 0x83, then start reading/writing from/ 639 to page 0x83, then start reading/writing from/to offset 0x01 by using 640 the register read/write sequence described in 640 the register read/write sequence described in previous section. 641 641 642 Page register reading sequence: 642 Page register reading sequence: 643 643 644 1. send 0xf3 PS/2 command to FSP; 644 1. send 0xf3 PS/2 command to FSP; 645 645 646 2. send 0x66 PS/2 command to FSP; 646 2. send 0x66 PS/2 command to FSP; 647 647 648 3. send 0x88 PS/2 command to FSP; 648 3. send 0x88 PS/2 command to FSP; 649 649 650 4. send 0xf3 PS/2 command to FSP; 650 4. send 0xf3 PS/2 command to FSP; 651 651 652 5. send 0x83 PS/2 command to FSP; 652 5. send 0x83 PS/2 command to FSP; 653 653 654 6. send 0x88 PS/2 command to FSP; 654 6. send 0x88 PS/2 command to FSP; 655 655 656 7. send 0xe9(status request) PS/2 comm 656 7. send 0xe9(status request) PS/2 command to FSP; 657 657 658 8. the response read from FSP should b 658 8. the response read from FSP should be the requested page value. 659 659 660 660 661 Page register writing sequence: 661 Page register writing sequence: 662 662 663 1. send 0xf3 PS/2 command to FSP; 663 1. send 0xf3 PS/2 command to FSP; 664 664 665 2. send 0x38 PS/2 command to FSP; 665 2. send 0x38 PS/2 command to FSP; 666 666 667 3. send 0x88 PS/2 command to FSP; 667 3. send 0x88 PS/2 command to FSP; 668 668 669 4. send 0xf3 PS/2 command to FSP; 669 4. send 0xf3 PS/2 command to FSP; 670 670 671 5. if the page address being written i 671 5. if the page address being written is not required to be 672 inverted(refer to the 'Register invers 672 inverted(refer to the 'Register inversion requirement' section), 673 goto step 6 673 goto step 6 674 674 675 a. send 0x47 PS/2 command to FSP; 675 a. send 0x47 PS/2 command to FSP; 676 676 677 b. send the inverted page address to 677 b. send the inverted page address to FSP and goto step 9; 678 678 679 6. if the page address being written i 679 6. if the page address being written is not required to be 680 swapped(refer to the 'Register swappin 680 swapped(refer to the 'Register swapping requirement' section), 681 goto step 7 681 goto step 7 682 682 683 a. send 0x44 PS/2 command to FSP; 683 a. send 0x44 PS/2 command to FSP; 684 684 685 b. send the swapped page address to 685 b. send the swapped page address to FSP and goto step 9; 686 686 687 7. send 0x33 PS/2 command to FSP; 687 7. send 0x33 PS/2 command to FSP; 688 688 689 8. send the page address to FSP; 689 8. send the page address to FSP; 690 690 691 9. the page register writing sequence 691 9. the page register writing sequence is completed. 692 692 693 Gesture ID 693 Gesture ID 694 ========== 694 ========== 695 695 696 Unlike other devices which sends multiple fing 696 Unlike other devices which sends multiple fingers' coordinates to host, 697 FSP processes multiple fingers' coordinates in 697 FSP processes multiple fingers' coordinates internally and convert them 698 into a 8 bits integer, namely 'Gesture ID.' F 698 into a 8 bits integer, namely 'Gesture ID.' Following is a list of 699 supported gesture IDs: 699 supported gesture IDs: 700 700 701 ======= ============================== 701 ======= ================================== 702 ID Description 702 ID Description 703 ======= ============================== 703 ======= ================================== 704 0x86 2 finger straight up 704 0x86 2 finger straight up 705 0x82 2 finger straight down 705 0x82 2 finger straight down 706 0x80 2 finger straight right 706 0x80 2 finger straight right 707 0x84 2 finger straight left 707 0x84 2 finger straight left 708 0x8f 2 finger zoom in 708 0x8f 2 finger zoom in 709 0x8b 2 finger zoom out 709 0x8b 2 finger zoom out 710 0xc0 2 finger curve, counter clockw 710 0xc0 2 finger curve, counter clockwise 711 0xc4 2 finger curve, clockwise 711 0xc4 2 finger curve, clockwise 712 0x2e 3 finger straight up 712 0x2e 3 finger straight up 713 0x2a 3 finger straight down 713 0x2a 3 finger straight down 714 0x28 3 finger straight right 714 0x28 3 finger straight right 715 0x2c 3 finger straight left 715 0x2c 3 finger straight left 716 0x38 palm 716 0x38 palm 717 ======= ============================== 717 ======= ================================== 718 718 719 Register Listing 719 Register Listing 720 ================ 720 ================ 721 721 722 Registers are represented in 16 bits values. T 722 Registers are represented in 16 bits values. The higher 8 bits represent 723 the page address and the lower 8 bits represen 723 the page address and the lower 8 bits represent the relative offset within 724 that particular page. Refer to the 'Programmi 724 that particular page. Refer to the 'Programming Sequence for Page Register 725 Reading/Writing' section for instructions on h 725 Reading/Writing' section for instructions on how to change current page 726 address:: 726 address:: 727 727 728 offset width default r/w name 728 offset width default r/w name 729 0x8200 bit7~bit0 0x01 RO device 729 0x8200 bit7~bit0 0x01 RO device ID 730 730 731 0x8201 bit7~bit0 RW versio 731 0x8201 bit7~bit0 RW version ID 732 0xc1: 732 0xc1: STL3888 Ax 733 0xd0 ~ 733 0xd0 ~ 0xd2: STL3888 Bx 734 0xe0 ~ 734 0xe0 ~ 0xe1: STL3888 Cx 735 0xe2 ~ 735 0xe2 ~ 0xe3: STL3888 Dx 736 736 737 0x8202 bit7~bit0 0x01 RO vendor 737 0x8202 bit7~bit0 0x01 RO vendor ID 738 738 739 0x8203 bit7~bit0 0x01 RO produc 739 0x8203 bit7~bit0 0x01 RO product ID 740 740 741 0x8204 bit3~bit0 0x01 RW revisi 741 0x8204 bit3~bit0 0x01 RW revision ID 742 742 743 0x820b test m 743 0x820b test mode status 1 744 bit3 1 RO 0: rot 744 bit3 1 RO 0: rotate 180 degree 745 1: no 745 1: no rotation 746 *only 746 *only supported by H/W prior to Cx 747 747 748 0x820f regist 748 0x820f register file page control 749 bit2 0 RW 1: rot 749 bit2 0 RW 1: rotate 180 degree 750 0: no 750 0: no rotation 751 *suppo 751 *supported since Cx 752 752 753 bit0 0 RW 1 to e 753 bit0 0 RW 1 to enable page 1 register files 754 *only 754 *only supported by H/W prior to Cx 755 755 756 0x8210 RW system 756 0x8210 RW system control 1 757 bit0 1 RW Reserv 757 bit0 1 RW Reserved, must be 1 758 bit1 0 RW Reserv 758 bit1 0 RW Reserved, must be 0 759 bit4 0 RW Reserv 759 bit4 0 RW Reserved, must be 0 760 bit5 1 RW regist 760 bit5 1 RW register clock gating enable 761 0: rea 761 0: read only, 1: read/write enable 762 (Note that following registers does no 762 (Note that following registers does not require clock gating being 763 enabled prior to write: 05 06 07 08 09 763 enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e 764 40 41 42 43. In addition to that, thi 764 40 41 42 43. In addition to that, this bit must be 1 when gesture 765 mode is enabled) 765 mode is enabled) 766 766 767 0x8220 test m 767 0x8220 test mode status 768 bit5~bit4 RO number 768 bit5~bit4 RO number of buttons 769 11 => 769 11 => 2, lbtn/rbtn 770 10 => 770 10 => 4, lbtn/rbtn/scru/scrd 771 01 => 771 01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr 772 00 => 772 00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn 773 *only 773 *only supported by H/W prior to Cx 774 774 775 0x8231 RW on-pad 775 0x8231 RW on-pad command detection 776 bit7 0 RW on-pad 776 bit7 0 RW on-pad command left button down tag 777 enable 777 enable 778 0: dis 778 0: disable, 1: enable 779 *only 779 *only supported by H/W prior to Cx 780 780 781 0x8234 RW on-pad 781 0x8234 RW on-pad command control 5 782 bit4~bit0 0x05 RW XLO in 782 bit4~bit0 0x05 RW XLO in 0s/4/1, so 03h = 0010.1b = 2.5 783 (Note that position unit is in 0.5 sca 783 (Note that position unit is in 0.5 scanline) 784 *only 784 *only supported by H/W prior to Cx 785 785 786 bit7 0 RW on-pad 786 bit7 0 RW on-pad tap zone enable 787 0: dis 787 0: disable, 1: enable 788 *only 788 *only supported by H/W prior to Cx 789 789 790 0x8235 RW on-pad 790 0x8235 RW on-pad command control 6 791 bit4~bit0 0x1d RW XHI in 791 bit4~bit0 0x1d RW XHI in 0s/4/1, so 19h = 1100.1b = 12.5 792 (Note that position unit is in 0.5 sca 792 (Note that position unit is in 0.5 scanline) 793 *only 793 *only supported by H/W prior to Cx 794 794 795 0x8236 RW on-pad 795 0x8236 RW on-pad command control 7 796 bit4~bit0 0x04 RW YLO in 796 bit4~bit0 0x04 RW YLO in 0s/4/1, so 03h = 0010.1b = 2.5 797 (Note that position unit is in 0.5 sca 797 (Note that position unit is in 0.5 scanline) 798 *only 798 *only supported by H/W prior to Cx 799 799 800 0x8237 RW on-pad 800 0x8237 RW on-pad command control 8 801 bit4~bit0 0x13 RW YHI in 801 bit4~bit0 0x13 RW YHI in 0s/4/1, so 11h = 1000.1b = 8.5 802 (Note that position unit is in 0.5 sca 802 (Note that position unit is in 0.5 scanline) 803 *only 803 *only supported by H/W prior to Cx 804 804 805 0x8240 RW system 805 0x8240 RW system control 5 806 bit1 0 RW FSP In 806 bit1 0 RW FSP Intellimouse mode enable 807 0: dis 807 0: disable, 1: enable 808 *only 808 *only supported by H/W prior to Cx 809 809 810 bit2 0 RW moveme 810 bit2 0 RW movement + abs. coordinate mode enable 811 0: dis 811 0: disable, 1: enable 812 (Note that this function has the funct 812 (Note that this function has the functionality of bit 1 even when 813 bit 1 is not set. However, the format 813 bit 1 is not set. However, the format is different from that of bit 1. 814 In addition, when bit 1 and bit 2 are 814 In addition, when bit 1 and bit 2 are set at the same time, bit 2 will 815 override bit 1.) 815 override bit 1.) 816 *only 816 *only supported by H/W prior to Cx 817 817 818 bit3 0 RW abs. c 818 bit3 0 RW abs. coordinate only mode enable 819 0: dis 819 0: disable, 1: enable 820 (Note that this function has the funct 820 (Note that this function has the functionality of bit 1 even when 821 bit 1 is not set. However, the format 821 bit 1 is not set. However, the format is different from that of bit 1. 822 In addition, when bit 1, bit 2 and bit 822 In addition, when bit 1, bit 2 and bit 3 are set at the same time, 823 bit 3 will override bit 1 and 2.) 823 bit 3 will override bit 1 and 2.) 824 *only 824 *only supported by H/W prior to Cx 825 825 826 bit5 0 RW auto s 826 bit5 0 RW auto switch enable 827 0: dis 827 0: disable, 1: enable 828 *only 828 *only supported by H/W prior to Cx 829 829 830 bit6 0 RW G0 abs 830 bit6 0 RW G0 abs. + notify packet format enable 831 0: dis 831 0: disable, 1: enable 832 (Note that the absolute/relative coord 832 (Note that the absolute/relative coordinate output still depends on 833 bit 2 and 3. That is, if any of those 833 bit 2 and 3. That is, if any of those bit is 1, host will receive 834 absolute coordinates; otherwise, host 834 absolute coordinates; otherwise, host only receives packets with 835 relative coordinate.) 835 relative coordinate.) 836 *only 836 *only supported by H/W prior to Cx 837 837 838 bit7 0 RW EN_PS2 838 bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd 839 finger 839 finger packet enable 840 0: dis 840 0: disable, 1: enable 841 *only 841 *only supported by H/W prior to Cx 842 842 843 0x8243 RW on-pad 843 0x8243 RW on-pad control 844 bit0 0 RW on-pad 844 bit0 0 RW on-pad control enable 845 0: dis 845 0: disable, 1: enable 846 (Note that if this bit is cleared, bit 846 (Note that if this bit is cleared, bit 3/5 will be ineffective) 847 *only 847 *only supported by H/W prior to Cx 848 848 849 bit3 0 RW on-pad 849 bit3 0 RW on-pad fix vertical scrolling enable 850 0: dis 850 0: disable, 1: enable 851 *only 851 *only supported by H/W prior to Cx 852 852 853 bit5 0 RW on-pad 853 bit5 0 RW on-pad fix horizontal scrolling enable 854 0: dis 854 0: disable, 1: enable 855 *only 855 *only supported by H/W prior to Cx 856 856 857 0x8290 RW softwa 857 0x8290 RW software control register 1 858 bit0 0 RW absolu 858 bit0 0 RW absolute coordination mode 859 0: dis 859 0: disable, 1: enable 860 *suppo 860 *supported since Cx 861 861 862 bit1 0 RW gestur 862 bit1 0 RW gesture ID output 863 0: dis 863 0: disable, 1: enable 864 *suppo 864 *supported since Cx 865 865 866 bit2 0 RW two fi 866 bit2 0 RW two fingers' coordinates output 867 0: dis 867 0: disable, 1: enable 868 *suppo 868 *supported since Cx 869 869 870 bit3 0 RW finger 870 bit3 0 RW finger up one packet output 871 0: dis 871 0: disable, 1: enable 872 *suppo 872 *supported since Cx 873 873 874 bit4 0 RW absolu 874 bit4 0 RW absolute coordination continuous mode 875 0: dis 875 0: disable, 1: enable 876 *suppo 876 *supported since Cx 877 877 878 bit6~bit5 00 RW gestur 878 bit6~bit5 00 RW gesture group selection 879 00: ba 879 00: basic 880 01: su 880 01: suite 881 10: su 881 10: suite pro 882 11: ad 882 11: advanced 883 *suppo 883 *supported since Cx 884 884 885 bit7 0 RW Bx pac 885 bit7 0 RW Bx packet output compatible mode 886 0: dis 886 0: disable, 1: enable 887 *suppo 887 *supported since Cx 888 *suppo 888 *supported since Cx 889 889 890 890 891 0x833d RW on-pad 891 0x833d RW on-pad command control 1 892 bit7 1 RW on-pad 892 bit7 1 RW on-pad command detection enable 893 0: dis 893 0: disable, 1: enable 894 *suppo 894 *supported since Cx 895 895 896 0x833e RW on-pad 896 0x833e RW on-pad command detection 897 bit7 0 RW on-pad 897 bit7 0 RW on-pad command left button down tag 898 enable 898 enable. Works only in H/W based PS/2 899 data p 899 data packet mode. 900 0: dis 900 0: disable, 1: enable 901 *suppo 901 *supported since Cx
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.