Reverse engineered NEXIO/iNexio USB touchscreen protocol -------------------------------------------------------- Device description: T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 54 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=02(comm.) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=1870 ProdID=0001 Rev= 1.00 S: Manufacturer=iNexio S: Product=iNexio USB C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=00 Driver=(none) E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=255ms I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none) E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms The device is infra-red touchscreen and capable of simple multi-touch. The touch packet format is following: BYTE DESCRIPTION 0 some flag, e1 means touch, e0 means release, 8x means non-touch data 1-2 (big endian) length of touch data (X+Y) 3-4 (big endian) length of X axis touch data 5-6 (big endian) length of Y axis touch data 7-70 X axis data - each byte can be in range 0-100 (0x00-0x64), representing coverage of that part of axis 71-122 Y axis data - same as above This means that for single touch, there is one high value somewhere on X axis and another high value somewhere on the Y axis. Two touches at the same moment produce two high values on both axes - which means that it's not possible to find exact finger placement, so this multi-touch capability is very limited.