日期:2014-05-16  浏览次数:20621 次

[linux]如何将触摸屏信号识别为鼠标信号?
我在一台已经实现读取触摸屏信息的linux平台的PND上试图简化触摸屏的处理
因为目前我读取触摸屏信息是通过最底层的IO操作实现的,移植并不方便
所以,我的最低目标是: 
1. 希望有一种方法能在console mode帮我处理触摸屏的底层事务,我只需要像读取鼠标信息那样(cat /dev/input/mouse0)直接open设备文件即可读取触摸屏坐标信息.
于是我找到了tslib-1.4,编译安装完全没有问题,但是运行tslib自带的ts_calibrate时发现它不认识我指定的设备,点击屏幕上的十字架没有反应,它也提示"这是我不认识的触摸屏设备";而我指定的设备是根据/proc/bus/input/devices里的信息指定在profile中的
以下是/proc/bus/input/devices的信息:
========================
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: EV=40001
B: SND=6

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=kbd event1 
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7

I: Bus=0011 Vendor=0002 Product=0001 Version=0000
N: Name="PS/2 Generic Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input2
U: Uniq=
H: Handlers=mouse0 event2 ts0
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=3

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:1d.0-1.4/input0
S: Sysfs=/class/input/input3
U: Uniq=
H: Handlers=kbd event3 
B: EV=120003
B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=1f

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:1d.0-1.4/input1
S: Sysfs=/class/input/input4
U: Uniq=
H: Handlers=kbd event4 
B: EV=3
B: KEY=20000 3878 d801d101 1e0000 0 0 0

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button (CM)"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/class/input/input5
U: Uniq=
H: Handlers=kbd event5 
B: EV=3
B: KEY=4000 0 0 0 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button (CM)"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/class/input/input6
U: Uniq=
H: Handlers=kbd event6 
B: EV=3
B: KEY=100000 0 0 0
========================
可见devices里根本没有触摸屏信息,唯一看上去与触摸屏有关的是红字标出的mouse信息,里面有一个ts0,而我就是把/dev/input/ts0设置为tslib的触摸屏设备的.
当然,我尝试过修改环境变量,不用modeload_raw input,而是load H3600等其他触摸屏类型,结果都是点击没反应...
我的疑问是: 

<1>我的触摸屏设备没有出现在devices中是否意味着编译内核时没有将touch screen编译进去?(不是我编译的,我不知道)
<2>这是否就是tslib不认识我的触摸屏的原因?
<3>如果是,有何办法使其能识别?

2. 更好的办法是,我听说可以把触摸屏信息转换成鼠标信息------但是Qt因为各种原因不在考虑之列,请勿推荐Qt...
有什么简单的办法吗?况且我的ts0居然也出现在鼠标设备的信息里了


------解决方案--------------------
PS: 鼠标和触摸屏 都归类为鼠标设备,  只不过 鼠标报的是相对坐标, 触摸屏报的是绝对坐标。

贴你的 触摸屏代码吧。 如果触摸屏驱动没有注册 inpute device 那么就要修改 驱动。
------解决方案--------------------
如果你的触摸屏是usb接口,你可以在你的底层将触摸屏数据走usb鼠标数据格式,在上层直接访问/dev/input/mice就行了,我们就是这样实现的。从而在minigui里面加的触摸屏驱动