902 lines · plain
1.. include:: <isonum.txt>2 3=================4Sentelic Touchpad5=================6 7 8:Copyright: |copy| 2002-2011 Sentelic Corporation.9 10:Last update: Dec-07-201111 12Finger Sensing Pad Intellimouse Mode (scrolling wheel, 4th and 5th buttons)13============================================================================14 15A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward16 page (5th button)17 181. Set sample rate to 200;192. Set sample rate to 200;203. Set sample rate to 80;214. Issuing the "Get device ID" command (0xF2) and waits for the response;225. FSP will respond 0x04.23 24::25 26 Packet 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 028 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|31 32 Byte 1: Bit7 => Y overflow33 Bit6 => X overflow34 Bit5 => Y sign bit35 Bit4 => X sign bit36 Bit3 => 137 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.38 Bit1 => Right Button, 1 is pressed, 0 is not pressed.39 Bit0 => Left Button, 1 is pressed, 0 is not pressed.40 Byte 2: X Movement(9-bit 2's complement integers)41 Byte 3: Y Movement(9-bit 2's complement integers)42 Byte 4: Bit3~Bit0 => the scrolling wheel's movement since the last data report.43 valid values, -8 ~ +744 Bit4 => 1 = 4th mouse button is pressed, Forward one page.45 0 = 4th mouse button is not pressed.46 Bit5 => 1 = 5th mouse button is pressed, Backward one page.47 0 = 5th mouse button is not pressed.48 49B) MSID 6: Horizontal and Vertical scrolling50 51- Set bit 1 in register 0x40 to 152 53FSP replaces scrolling wheel's movement as 4 bits to show horizontal and54vertical scrolling.55 56::57 58 Packet 159 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 060 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|63 64 Byte 1: Bit7 => Y overflow65 Bit6 => X overflow66 Bit5 => Y sign bit67 Bit4 => X sign bit68 Bit3 => 169 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.70 Bit1 => Right Button, 1 is pressed, 0 is not pressed.71 Bit0 => Left Button, 1 is pressed, 0 is not pressed.72 Byte 2: X Movement(9-bit 2's complement integers)73 Byte 3: Y Movement(9-bit 2's complement integers)74 Byte 4: Bit0 => the Vertical scrolling movement downward.75 Bit1 => the Vertical scrolling movement upward.76 Bit2 => the Horizontal scrolling movement leftward.77 Bit3 => the Horizontal scrolling movement rightward.78 Bit4 => 1 = 4th mouse button is pressed, Forward one page.79 0 = 4th mouse button is not pressed.80 Bit5 => 1 = 5th mouse button is pressed, Backward one page.81 0 = 5th mouse button is not pressed.82 83C) MSID 784 85FSP uses 2 packets (8 Bytes) to represent Absolute Position.86so we have PACKET NUMBER to identify packets.87 88 If PACKET NUMBER is 0, the packet is Packet 1.89 If PACKET NUMBER is 1, the packet is Packet 2.90 Please count this number in program.91 92MSID6 special packet will be enable at the same time when enable MSID 7.93 94Absolute position for STL3886-G095================================96 971. Set bit 2 or 3 in register 0x40 to 1982. Set bit 6 in register 0x40 to 199 100::101 102 Packet 1 (ABSOLUTE POSITION)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 0104 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|107 108 Byte 1: Bit7~Bit6 => 00, Normal data packet109 => 01, Absolute coordination packet110 => 10, Notify packet111 Bit5 => valid bit112 Bit4 => 1113 Bit3 => 1114 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.115 Bit1 => Right Button, 1 is pressed, 0 is not pressed.116 Bit0 => Left Button, 1 is pressed, 0 is not pressed.117 Byte 2: X coordinate (xpos[9:2])118 Byte 3: Y coordinate (ypos[9:2])119 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])120 Bit3~Bit2 => X coordinate (ypos[1:0])121 Bit4 => scroll up122 Bit5 => scroll down123 Bit6 => scroll left124 Bit7 => scroll right125 126 Notify Packet for G0127 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 0128 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|131 132 Byte 1: Bit7~Bit6 => 00, Normal data packet133 => 01, Absolute coordination packet134 => 10, Notify packet135 Bit5 => 0136 Bit4 => 1137 Bit3 => 1138 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.139 Bit1 => Right Button, 1 is pressed, 0 is not pressed.140 Bit0 => Left Button, 1 is pressed, 0 is not pressed.141 Byte 2: Message Type => 0x5A (Enable/Disable status packet)142 Mode Type => 0xA5 (Normal/Icon mode status)143 Byte 3: Message Type => 0x00 (Disabled)144 => 0x01 (Enabled)145 Mode Type => 0x00 (Normal)146 => 0x01 (Icon)147 Byte 4: Bit7~Bit0 => Don't Care148 149Absolute position for STL3888-Ax150================================151 152::153 154 Packet 1 (ABSOLUTE POSITION)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 0156 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|159 160 Byte 1: Bit7~Bit6 => 00, Normal data packet161 => 01, Absolute coordination packet162 => 10, Notify packet163 => 11, Normal data packet with on-pad click164 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.165 When both fingers are up, the last two reports have zero valid166 bit.167 Bit4 => arc168 Bit3 => 1169 Bit2 => Left Button, 1 is pressed, 0 is released.170 Bit1 => 0171 Bit0 => 1172 Byte 2: X coordinate (xpos[9:2])173 Byte 3: Y coordinate (ypos[9:2])174 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])175 Bit3~Bit2 => X coordinate (ypos[1:0])176 Bit5~Bit4 => y1_g177 Bit7~Bit6 => x1_g178 179 Packet 2 (ABSOLUTE POSITION)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 0181 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|184 185 Byte 1: Bit7~Bit6 => 00, Normal data packet186 => 01, Absolute coordinates packet187 => 10, Notify packet188 => 11, Normal data packet with on-pad click189 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.190 When both fingers are up, the last two reports have zero valid191 bit.192 Bit4 => arc193 Bit3 => 1194 Bit2 => Right Button, 1 is pressed, 0 is released.195 Bit1 => 1196 Bit0 => 0197 Byte 2: X coordinate (xpos[9:2])198 Byte 3: Y coordinate (ypos[9:2])199 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])200 Bit3~Bit2 => X coordinate (ypos[1:0])201 Bit5~Bit4 => y2_g202 Bit7~Bit6 => x2_g203 204 Notify Packet for STL3888-Ax205 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 0206 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|209 210 Byte 1: Bit7~Bit6 => 00, Normal data packet211 => 01, Absolute coordinates packet212 => 10, Notify packet213 => 11, Normal data packet with on-pad click214 Bit5 => 1215 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):216 0: left button is generated by the on-pad command217 1: left button is generated by the external button218 Bit3 => 1219 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.220 Bit1 => Right Button, 1 is pressed, 0 is not pressed.221 Bit0 => Left Button, 1 is pressed, 0 is not pressed.222 Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)223 Byte 3: Bit7~Bit6 => Don't care224 Bit5~Bit4 => Number of fingers225 Bit3~Bit1 => Reserved226 Bit0 => 1: enter gesture mode; 0: leaving gesture mode227 Byte 4: Bit7 => scroll right button228 Bit6 => scroll left button229 Bit5 => scroll down button230 Bit4 => scroll up button231 * Note that if gesture and additional button (Bit4~Bit7)232 happen at the same time, the button information will not233 be sent.234 Bit3~Bit0 => Reserved235 236Sample sequence of Multi-finger, Multi-coordinate mode:237 238 notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,239 abs pkt 2, ..., notify packet (valid bit == 0)240 241Absolute position for STL3888-B0242================================243 244::245 246 Packet 1(ABSOLUTE POSITION)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 0248 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|251 252 Byte 1: Bit7~Bit6 => 00, Normal data packet253 => 01, Absolute coordinates packet254 => 10, Notify packet255 => 11, Normal data packet with on-pad click256 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.257 When both fingers are up, the last two reports have zero valid258 bit.259 Bit4 => finger up/down information. 1: finger down, 0: finger up.260 Bit3 => 1261 Bit2 => finger index, 0 is the first finger, 1 is the second finger.262 Bit1 => Right Button, 1 is pressed, 0 is not pressed.263 Bit0 => Left Button, 1 is pressed, 0 is not pressed.264 Byte 2: X coordinate (xpos[9:2])265 Byte 3: Y coordinate (ypos[9:2])266 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])267 Bit3~Bit2 => X coordinate (ypos[1:0])268 Bit4 => scroll down button269 Bit5 => scroll up button270 Bit6 => scroll left button271 Bit7 => scroll right button272 273 Packet 2 (ABSOLUTE POSITION)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 0275 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|278 279 Byte 1: Bit7~Bit6 => 00, Normal data packet280 => 01, Absolute coordination packet281 => 10, Notify packet282 => 11, Normal data packet with on-pad click283 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.284 When both fingers are up, the last two reports have zero valid285 bit.286 Bit4 => finger up/down information. 1: finger down, 0: finger up.287 Bit3 => 1288 Bit2 => finger index, 0 is the first finger, 1 is the second finger.289 Bit1 => Right Button, 1 is pressed, 0 is not pressed.290 Bit0 => Left Button, 1 is pressed, 0 is not pressed.291 Byte 2: X coordinate (xpos[9:2])292 Byte 3: Y coordinate (ypos[9:2])293 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])294 Bit3~Bit2 => X coordinate (ypos[1:0])295 Bit4 => scroll down button296 Bit5 => scroll up button297 Bit6 => scroll left button298 Bit7 => scroll right button299 300Notify Packet for STL3888-B0::301 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 0303 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|306 307 Byte 1: Bit7~Bit6 => 00, Normal data packet308 => 01, Absolute coordination packet309 => 10, Notify packet310 => 11, Normal data packet with on-pad click311 Bit5 => 1312 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):313 0: left button is generated by the on-pad command314 1: left button is generated by the external button315 Bit3 => 1316 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.317 Bit1 => Right Button, 1 is pressed, 0 is not pressed.318 Bit0 => Left Button, 1 is pressed, 0 is not pressed.319 Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)320 Byte 3: Bit7~Bit6 => Don't care321 Bit5~Bit4 => Number of fingers322 Bit3~Bit1 => Reserved323 Bit0 => 1: enter gesture mode; 0: leaving gesture mode324 Byte 4: Bit7 => scroll right button325 Bit6 => scroll left button326 Bit5 => scroll up button327 Bit4 => scroll down button328 * Note that if gesture and additional button(Bit4~Bit7)329 happen at the same time, the button information will not330 be sent.331 Bit3~Bit0 => Reserved332 333Sample sequence of Multi-finger, Multi-coordinate mode:334 335 notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,336 abs pkt 2, ..., notify packet (valid bit == 0)337 338Absolute position for STL3888-Cx and STL3888-Dx339===============================================340 341::342 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 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0345 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|348 349 Byte 1: Bit7~Bit6 => 00, Normal data packet350 => 01, Absolute coordinates packet351 => 10, Notify packet352 Bit5 => Coordinate mode(always 0 in SFAC mode):353 0: single-finger absolute coordinates (SFAC) mode354 1: multi-finger, multiple coordinates (MFMC) mode355 Bit4 => 0: The LEFT button is generated by on-pad command (OPC)356 1: The LEFT button is generated by external button357 Default is 1 even if the LEFT button is not pressed.358 Bit3 => Always 1, as specified by PS/2 protocol.359 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.360 Bit1 => Right Button, 1 is pressed, 0 is not pressed.361 Bit0 => Left Button, 1 is pressed, 0 is not pressed.362 Byte 2: X coordinate (xpos[9:2])363 Byte 3: Y coordinate (ypos[9:2])364 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])365 Bit3~Bit2 => X coordinate (ypos[1:0])366 Bit4 => 4th mouse button(forward one page)367 Bit5 => 5th mouse button(backward one page)368 Bit6 => scroll left button369 Bit7 => scroll right button370 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 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0373 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|376 377 Byte 1: Bit7~Bit6 => 00, Normal data packet378 => 01, Absolute coordination packet379 => 10, Notify packet380 Bit5 => Coordinate mode (always 1 in MFMC mode):381 0: single-finger absolute coordinates (SFAC) mode382 1: multi-finger, multiple coordinates (MFMC) mode383 Bit4 => 0: The LEFT button is generated by on-pad command (OPC)384 1: The LEFT button is generated by external button385 Default is 1 even if the LEFT button is not pressed.386 Bit3 => Always 1, as specified by PS/2 protocol.387 Bit2 => Finger index, 0 is the first finger, 1 is the second finger.388 If bit 1 and 0 are all 1 and bit 4 is 0, the middle external389 button is pressed.390 Bit1 => Right Button, 1 is pressed, 0 is not pressed.391 Bit0 => Left Button, 1 is pressed, 0 is not pressed.392 Byte 2: X coordinate (xpos[9:2])393 Byte 3: Y coordinate (ypos[9:2])394 Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])395 Bit3~Bit2 => X coordinate (ypos[1:0])396 Bit4 => 4th mouse button(forward one page)397 Bit5 => 5th mouse button(backward one page)398 Bit6 => scroll left button399 Bit7 => scroll right button400 401When one of the two fingers is up, the device will output four consecutive402MFMC#0 report packets with zero X and Y to represent 1st finger is up or403four consecutive MFMC#1 report packets with zero X and Y to represent that404the 2nd finger is up. On the other hand, if both fingers are up, the device405will output four consecutive single-finger, absolute coordinate(SFAC) packets406with zero X and Y.407 408Notify Packet for STL3888-Cx/Dx::409 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 0411 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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 |---------------| |---------------| |---------------| |---------------|414 415 Byte 1: Bit7~Bit6 => 00, Normal data packet416 => 01, Absolute coordinates packet417 => 10, Notify packet418 Bit5 => Always 0419 Bit4 => 0: The LEFT button is generated by on-pad command(OPC)420 1: The LEFT button is generated by external button421 Default is 1 even if the LEFT button is not pressed.422 Bit3 => 1423 Bit2 => Middle Button, 1 is pressed, 0 is not pressed.424 Bit1 => Right Button, 1 is pressed, 0 is not pressed.425 Bit0 => Left Button, 1 is pressed, 0 is not pressed.426 Byte 2: Message type:427 0xba => gesture information428 0xc0 => one finger hold-rotating gesture429 Byte 3: The first parameter for the received message:430 0xba => gesture ID (refer to the 'Gesture ID' section)431 0xc0 => region ID432 Byte 4: The second parameter for the received message:433 0xba => N/A434 0xc0 => finger up/down information435 436Sample sequence of Multi-finger, Multi-coordinates mode:437 438 notify packet (valid bit == 1), MFMC packet 1 (byte 1, bit 2 == 0),439 MFMC packet 2 (byte 1, bit 2 == 1), MFMC packet 1, MFMC packet 2,440 ..., notify packet (valid bit == 0)441 442 That is, when the device is in MFMC mode, the host will receive443 interleaved absolute coordinate packets for each finger.444 445FSP Enable/Disable packet446=========================447 448::449 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 0451 BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|452 1 |Y|X|0|0|1|M|R|L| 2 |0|1|0|1|1|0|1|E| 3 | | | | | | | | | 4 | | | | | | | | |453 |---------------| |---------------| |---------------| |---------------|454 455 FSP will send out enable/disable packet when FSP receive PS/2 enable/disable456 command. Host will receive the packet which Middle, Right, Left button will457 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.459 460 Byte 1: Bit7 => 0, Y overflow461 Bit6 => 0, X overflow462 Bit5 => 0, Y sign bit463 Bit4 => 0, X sign bit464 Bit3 => 1465 Bit2 => 1, Middle Button466 Bit1 => 1, Right Button467 Bit0 => 1, Left Button468 Byte 2: Bit7~1 => (0101101b)469 Bit0 => 1 = Enable470 0 = Disable471 Byte 3: Don't care472 Byte 4: Don't care (MOUSE ID 3, 4)473 Byte 5~8: Don't care (Absolute packet)474 475PS/2 Command Set476================477 478FSP supports basic PS/2 commanding set and modes, refer to following URL for479details about PS/2 commands:480 481http://www.computer-engineering.org/ps2mouse/482 483Programming Sequence for Determining Packet Parsing Flow484========================================================485 4861. Identify FSP by reading device ID(0x00) and version(0x01) register487 4882. For FSP version < STL3888 Cx, determine number of buttons by reading489 the 'test mode status' (0x20) register::490 491 buttons = reg[0x20] & 0x30492 493 if buttons == 0x30 or buttons == 0x20:494 # two/four buttons495 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'496 section A for packet parsing detail(ignore byte 4, bit ~ 7)497 elif buttons == 0x10:498 # 6 buttons499 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'500 section B for packet parsing detail501 elif buttons == 0x00:502 # 6 buttons503 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'504 section A for packet parsing detail505 5063. For FSP version >= STL3888 Cx:507 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'508 section A for packet parsing detail (ignore byte 4, bit ~ 7)509 510Programming Sequence for Register Reading/Writing511=================================================512 513Register inversion requirement:514 515Following values needed to be inverted(the '~' operator in C) before being516sent to FSP::517 518 0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff.519 520Register swapping requirement:521 522Following values needed to have their higher 4 bits and lower 4 bits being523swapped before being sent to FSP::524 525 10, 20, 40, 60, 80, 100 and 200.526 527Register reading sequence:528 529 1. send 0xf3 PS/2 command to FSP;530 531 2. send 0x66 PS/2 command to FSP;532 533 3. send 0x88 PS/2 command to FSP;534 535 4. send 0xf3 PS/2 command to FSP;536 537 5. if the register address being to read is not required to be538 inverted(refer to the 'Register inversion requirement' section),539 goto step 6540 541 a. send 0x68 PS/2 command to FSP;542 543 b. send the inverted register address to FSP and goto step 8;544 545 6. if the register address being to read is not required to be546 swapped(refer to the 'Register swapping requirement' section),547 goto step 7548 549 a. send 0xcc PS/2 command to FSP;550 551 b. send the swapped register address to FSP and goto step 8;552 553 7. send 0x66 PS/2 command to FSP;554 555 a. send the original register address to FSP and goto step 8;556 557 8. send 0xe9(status request) PS/2 command to FSP;558 559 9. the 4th byte of the response read from FSP should be the560 requested register value(?? indicates don't care byte)::561 562 host: 0xe9563 3888: 0xfa (??) (??) (val)564 565 * Note that since the Cx release, the hardware will return 1's566 complement of the register value at the 3rd byte of status request567 result::568 569 host: 0xe9570 3888: 0xfa (??) (~val) (val)571 572Register writing sequence:573 574 1. send 0xf3 PS/2 command to FSP;575 576 2. if the register address being to write is not required to be577 inverted(refer to the 'Register inversion requirement' section),578 goto step 3579 580 a. send 0x74 PS/2 command to FSP;581 582 b. send the inverted register address to FSP and goto step 5;583 584 3. if the register address being to write is not required to be585 swapped(refer to the 'Register swapping requirement' section),586 goto step 4587 588 a. send 0x77 PS/2 command to FSP;589 590 b. send the swapped register address to FSP and goto step 5;591 592 4. send 0x55 PS/2 command to FSP;593 594 a. send the register address to FSP and goto step 5;595 596 5. send 0xf3 PS/2 command to FSP;597 598 6. if the register value being to write is not required to be599 inverted(refer to the 'Register inversion requirement' section),600 goto step 7601 602 a. send 0x47 PS/2 command to FSP;603 604 b. send the inverted register value to FSP and goto step 9;605 606 7. if the register value being to write is not required to be607 swapped(refer to the 'Register swapping requirement' section),608 goto step 8609 610 a. send 0x44 PS/2 command to FSP;611 612 b. send the swapped register value to FSP and goto step 9;613 614 8. send 0x33 PS/2 command to FSP;615 616 a. send the register value to FSP;617 618 9. the register writing sequence is completed.619 620 * Since the Cx release, the hardware will return 1's621 complement of the register value at the 3rd byte of status request622 result. Host can optionally send another 0xe9 (status request) PS/2623 command to FSP at the end of register writing to verify that the624 register writing operation is successful (?? indicates don't care625 byte)::626 627 host: 0xe9628 3888: 0xfa (??) (~val) (val)629 630Programming Sequence for Page Register Reading/Writing631======================================================632 633In order to overcome the limitation of maximum number of registers634supported, the hardware separates register into different groups called635'pages.' Each page is able to include up to 255 registers.636 637The default page after power up is 0x82; therefore, if one has to get638access to register 0x8301, one has to use following sequence to switch639to page 0x83, then start reading/writing from/to offset 0x01 by using640the register read/write sequence described in previous section.641 642Page register reading sequence:643 644 1. send 0xf3 PS/2 command to FSP;645 646 2. send 0x66 PS/2 command to FSP;647 648 3. send 0x88 PS/2 command to FSP;649 650 4. send 0xf3 PS/2 command to FSP;651 652 5. send 0x83 PS/2 command to FSP;653 654 6. send 0x88 PS/2 command to FSP;655 656 7. send 0xe9(status request) PS/2 command to FSP;657 658 8. the response read from FSP should be the requested page value.659 660 661Page register writing sequence:662 663 1. send 0xf3 PS/2 command to FSP;664 665 2. send 0x38 PS/2 command to FSP;666 667 3. send 0x88 PS/2 command to FSP;668 669 4. send 0xf3 PS/2 command to FSP;670 671 5. if the page address being written is not required to be672 inverted(refer to the 'Register inversion requirement' section),673 goto step 6674 675 a. send 0x47 PS/2 command to FSP;676 677 b. send the inverted page address to FSP and goto step 9;678 679 6. if the page address being written is not required to be680 swapped(refer to the 'Register swapping requirement' section),681 goto step 7682 683 a. send 0x44 PS/2 command to FSP;684 685 b. send the swapped page address to FSP and goto step 9;686 687 7. send 0x33 PS/2 command to FSP;688 689 8. send the page address to FSP;690 691 9. the page register writing sequence is completed.692 693Gesture ID694==========695 696Unlike other devices which sends multiple fingers' coordinates to host,697FSP processes multiple fingers' coordinates internally and convert them698into a 8 bits integer, namely 'Gesture ID.' Following is a list of699supported gesture IDs:700 701 ======= ==================================702 ID Description703 ======= ==================================704 0x86 2 finger straight up705 0x82 2 finger straight down706 0x80 2 finger straight right707 0x84 2 finger straight left708 0x8f 2 finger zoom in709 0x8b 2 finger zoom out710 0xc0 2 finger curve, counter clockwise711 0xc4 2 finger curve, clockwise712 0x2e 3 finger straight up713 0x2a 3 finger straight down714 0x28 3 finger straight right715 0x2c 3 finger straight left716 0x38 palm717 ======= ==================================718 719Register Listing720================721 722Registers are represented in 16 bits values. The higher 8 bits represent723the page address and the lower 8 bits represent the relative offset within724that particular page. Refer to the 'Programming Sequence for Page Register725Reading/Writing' section for instructions on how to change current page726address::727 728 offset width default r/w name729 0x8200 bit7~bit0 0x01 RO device ID730 731 0x8201 bit7~bit0 RW version ID732 0xc1: STL3888 Ax733 0xd0 ~ 0xd2: STL3888 Bx734 0xe0 ~ 0xe1: STL3888 Cx735 0xe2 ~ 0xe3: STL3888 Dx736 737 0x8202 bit7~bit0 0x01 RO vendor ID738 739 0x8203 bit7~bit0 0x01 RO product ID740 741 0x8204 bit3~bit0 0x01 RW revision ID742 743 0x820b test mode status 1744 bit3 1 RO 0: rotate 180 degree745 1: no rotation746 *only supported by H/W prior to Cx747 748 0x820f register file page control749 bit2 0 RW 1: rotate 180 degree750 0: no rotation751 *supported since Cx752 753 bit0 0 RW 1 to enable page 1 register files754 *only supported by H/W prior to Cx755 756 0x8210 RW system control 1757 bit0 1 RW Reserved, must be 1758 bit1 0 RW Reserved, must be 0759 bit4 0 RW Reserved, must be 0760 bit5 1 RW register clock gating enable761 0: read only, 1: read/write enable762 (Note that following registers does not require clock gating being763 enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e764 40 41 42 43. In addition to that, this bit must be 1 when gesture765 mode is enabled)766 767 0x8220 test mode status768 bit5~bit4 RO number of buttons769 11 => 2, lbtn/rbtn770 10 => 4, lbtn/rbtn/scru/scrd771 01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr772 00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn773 *only supported by H/W prior to Cx774 775 0x8231 RW on-pad command detection776 bit7 0 RW on-pad command left button down tag777 enable778 0: disable, 1: enable779 *only supported by H/W prior to Cx780 781 0x8234 RW on-pad command control 5782 bit4~bit0 0x05 RW XLO in 0s/4/1, so 03h = 0010.1b = 2.5783 (Note that position unit is in 0.5 scanline)784 *only supported by H/W prior to Cx785 786 bit7 0 RW on-pad tap zone enable787 0: disable, 1: enable788 *only supported by H/W prior to Cx789 790 0x8235 RW on-pad command control 6791 bit4~bit0 0x1d RW XHI in 0s/4/1, so 19h = 1100.1b = 12.5792 (Note that position unit is in 0.5 scanline)793 *only supported by H/W prior to Cx794 795 0x8236 RW on-pad command control 7796 bit4~bit0 0x04 RW YLO in 0s/4/1, so 03h = 0010.1b = 2.5797 (Note that position unit is in 0.5 scanline)798 *only supported by H/W prior to Cx799 800 0x8237 RW on-pad command control 8801 bit4~bit0 0x13 RW YHI in 0s/4/1, so 11h = 1000.1b = 8.5802 (Note that position unit is in 0.5 scanline)803 *only supported by H/W prior to Cx804 805 0x8240 RW system control 5806 bit1 0 RW FSP Intellimouse mode enable807 0: disable, 1: enable808 *only supported by H/W prior to Cx809 810 bit2 0 RW movement + abs. coordinate mode enable811 0: disable, 1: enable812 (Note that this function has the functionality of bit 1 even when813 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 set at the same time, bit 2 will815 override bit 1.)816 *only supported by H/W prior to Cx817 818 bit3 0 RW abs. coordinate only mode enable819 0: disable, 1: enable820 (Note that this function has the functionality of bit 1 even when821 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 3 are set at the same time,823 bit 3 will override bit 1 and 2.)824 *only supported by H/W prior to Cx825 826 bit5 0 RW auto switch enable827 0: disable, 1: enable828 *only supported by H/W prior to Cx829 830 bit6 0 RW G0 abs. + notify packet format enable831 0: disable, 1: enable832 (Note that the absolute/relative coordinate output still depends on833 bit 2 and 3. That is, if any of those bit is 1, host will receive834 absolute coordinates; otherwise, host only receives packets with835 relative coordinate.)836 *only supported by H/W prior to Cx837 838 bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd839 finger packet enable840 0: disable, 1: enable841 *only supported by H/W prior to Cx842 843 0x8243 RW on-pad control844 bit0 0 RW on-pad control enable845 0: disable, 1: enable846 (Note that if this bit is cleared, bit 3/5 will be ineffective)847 *only supported by H/W prior to Cx848 849 bit3 0 RW on-pad fix vertical scrolling enable850 0: disable, 1: enable851 *only supported by H/W prior to Cx852 853 bit5 0 RW on-pad fix horizontal scrolling enable854 0: disable, 1: enable855 *only supported by H/W prior to Cx856 857 0x8290 RW software control register 1858 bit0 0 RW absolute coordination mode859 0: disable, 1: enable860 *supported since Cx861 862 bit1 0 RW gesture ID output863 0: disable, 1: enable864 *supported since Cx865 866 bit2 0 RW two fingers' coordinates output867 0: disable, 1: enable868 *supported since Cx869 870 bit3 0 RW finger up one packet output871 0: disable, 1: enable872 *supported since Cx873 874 bit4 0 RW absolute coordination continuous mode875 0: disable, 1: enable876 *supported since Cx877 878 bit6~bit5 00 RW gesture group selection879 00: basic880 01: suite881 10: suite pro882 11: advanced883 *supported since Cx884 885 bit7 0 RW Bx packet output compatible mode886 0: disable, 1: enable887 *supported since Cx888 *supported since Cx889 890 891 0x833d RW on-pad command control 1892 bit7 1 RW on-pad command detection enable893 0: disable, 1: enable894 *supported since Cx895 896 0x833e RW on-pad command detection897 bit7 0 RW on-pad command left button down tag898 enable. Works only in H/W based PS/2899 data packet mode.900 0: disable, 1: enable901 *supported since Cx902