Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Input: sentelic - convert documentation into ReST format

This file has its own particular format that doesn't match any
markup one.

Manually change it to get something that would be readable
using ReST markup language.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Mauro Carvalho Chehab and committed by
Dmitry Torokhov
9dc500a3 42f2309b

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