如何从linux中的Cirque触摸板读取tap的绝对位置

时间:2010-08-12 18:47:16

标签: c++ c linux touchpad

我们有一个Cirque触摸板。 http://www.cirque.com/downloads/docs/tsm9925.pdf

现在我们想要使用c \ c ++应用程序从这个触摸板读取tap的绝对位置。不幸的是,公司只开发了Windows驱动程序,但我们需要在linux中读取位置。我们尝试使用/ dev / input / eventN子系统但只接收手指移动的方向和手指移动的速度。

是否有可能,我们该怎么做?

3 个答案:

答案 0 :(得分:1)

从您提供的链接:

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.

我建议直接联系Cirque

答案 1 :(得分:1)

这是它的工作原理:

Cirque Smart CAT(型号GDU410 - 这是一个老型号!)报告一个8字节的数据包。 最初数据包如下所示:

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

要切换到绝对模式,您必须向设备发送以下USB控制请求:

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);

也许在Linux下,这可以使用“libusb”来完成。虽然我已经在Linux下进行了一些驱动程序开发,但我还没有使用“libusb”。

执行此操作后,8字节数据包如下所示:

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

Cirque提供的设备驱动程序使用绝对位置模式执行滚动和类似功能,这些功能取决于手指的绝对位置。

答案 2 :(得分:0)

触摸板很少报告绝对位置。

只是为了让你有一些接受的答案;)

相关问题