Hardware
The touchscreen is based around a serial controller interface.
The serial UART is a standard 16550A style interface, which the standard linux serial driver can communicate with. The correct configuration paramaters are:
IO Port | 0x4220 |
---|---|
IRQ | 12 |
UART Type | 16550A |
You can use setserial to bind these settings to a serial port at runtime. However, you can NOT use a kernel with PS/2 Mouse support compiled in due to the IRQ 12 conflict.
Software
The Touchscreen Protocol, so far, doesn't match any other protocols I've been able to find - It does, however, bear a superficial resemblance to binary form of the Microtouch protocol. If somebody can identify this protocol as being somebody else's protocol, could they please contact me so I can put the details here, and further research the interface.
The touchscreen communicates using fixed serial parameters: 19200 baud, 8 bits data, 1 bit stop, no parity.
Every packet is 5 bytes long. The first byte of every packet can be identified by the presence of a sync-bit which is only set on the first byte of the packet.
The first byte also contains state flags for the digitiser, and for the 'buttons'.
Packet Format
Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | |
---|---|---|---|---|---|
(Binary) | 1sc# ##rl | 0xxx xxxx | 0XXX XXXX | 0yyy yyyy | 0YYY YYYY |
Bit | Definition |
---|---|
# | Unknown/Insignificant |
s | State Change Detection. This bit is set 1 to indicate that the contact state of the touchscreen has changed. |
c | Screen Contact. This bit is set 1 to indicate that the stylus is currently is contact with the screen. |
l & r | Left and Right mouse button (respectively). Only set when bits s and c are both 1. Due to design, these states are also mutually exclusive. |
xxxxxxx | Least Significant Byte (bottom 7 bits) of the X coordinate. |
XXXXXXX | Most Significant Byte (top 7 bits) of the X coordinate. |
yyyyyyy | Least Significant Byte (bottom 7 bits) of the Y coordinate. |
YYYYYYY | Most Significant Byte (top 7 bits) of the Y coordinate. |