how to read absolute positions of tap from Cirque touchpad in linux

we have one of Cirque touchpads. http://www.cirque.com/downloads/docs/tsm9925.pdf

now we want to read absolute position of tap from this touchpad using c\c++ application. unfortunately company developed only windows drivers but we need to read positions in the linux. we tried to use /dev/input/eventN subsystem but received only direction of finger moving and speed of finger moving.

is it possible and how can we do this?

Answers


From your supplied link:

For custom functionality at the product design stage, we offer software that 
allows OEMs to enable, disable or personalize advanced settings and/or 
reprogram the touch sensitive area.

I'd suggest contacting Cirque directly


This is how it works:

The Cirque Smart CAT (model GDU410 - this is an OLD model!) reports an 8 byte packet. Initially the packet looks like this:

Byte 0, bit 0: Left button
Byte 0, bit 1: Right button
Byte 0, bit 2: Side buttons (they cannot be distinguished)
Byte 1: Relative X data
Byte 2: Relative Y data
Bytes 3-7: 0

To switch to absolute mode you'll have to send the following USB control requests to the device:

unsigned char buf[8];
do {
    Usb_Control_Request(Type=0xC1, Request=0x6A, Index=0,
        Value=0, Data Length=8, Data Buffer=buf)
} while(buf[0] & 8);
Usb_Control_Request(Type=0x41, Request=0x66, Index=0xBB, Value=1, No data)
do { ... /* C1/6A, see above */ } while(buf[0] & 8);
Usb_Control_Request(Type=0x41, Request=0x66, Index=0xB5, Value=0x3E0, No data)
do { ... /* C1/6A */ } while(buf[0] & 8);
Usb_Control_Request(Type=0x41, Request=0x66, Index=0xA2, Value=0xFEE, No data)
do { ... /* C1/6A */ } while(buf[0] & 8);
Usb_Control_Request(Type=0x41, Request=0x66, Index=0xB4, Value=0xE, No data)
do { ... /* C1/6A */ } while(buf[0] & 8);
Usb_Control_Request(Type=0x41, Request=0x64, Index=0, Value=0, No data)
do { ... /* C1/6A */ } while(buf[0] & 8);

Maybe under Linux this can be done using "libusb". Although I already did some driver development under Linux I did not use "libusb", yet.

After doing this the 8-byte packets look like this:

Byte 0: Buttons, as before
Bytes 1-3: 0
Byte 4: low 8 bits of X finger position
Byte 5: bits 0-2: high 3 bits of X finger position
        bits 3-7: low 5 bits of Y finger position
Byte 6: bits 0-5: high 6 bits of Y finger position
Byte 7, low 7 (?) bits: non-zero if finger touches pad, 0 if not
        some pads report the finger pressure;
        MAYBE this is done in this field.

Finger positions:
X position: left ~0x790, right ~0x70
Y position: top ~0, bottom ~0x5B0

The device driver provided by Cirque uses the absolute position mode to perform scrolling and similar functions that depend on the absolute finger position.


Touchpads rarely report absolute positions.

Just so that you have some answer to accept ;)


Need Your Help

How to Pass Image File and Some Data From Ajax to MVC Controller

jquery ajax asp.net-mvc

I have a partial view to display image upload button and a list of photos as follows:

Rails turbolinks break submit remote form

ruby-on-rails ruby-on-rails-4 turbolinks remote-forms

I'm having a rather weird problem using Rails 4, Turbolinks and a remote form. I have a form looking like: