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