打印
[嵌入式linux]

关于Linux下触摸屏驱动的若干问题

[复制链接]
9036|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hedynasty|  楼主 | 2010-7-19 09:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位前辈:如题,小弟现在在搞一个Linux下的触摸屏驱动,现有如下几个问题请教,恳请指点,谢谢!

要求:触摸屏通过USB口接到开发板(S3C2440为主芯片的)上,当用笔在触摸屏上滑动时,有一个鼠标箭头在开发板屏幕的相应位置显示;

问题:
1.要实现要求的功能需要哪些驱动?除了USB驱动,触摸屏驱动外还有吗?
2.要在开发板的屏幕显示一个鼠标,那就必须要在Qt或别的图形界面下显示对吗?
3.如果要在Qt下显示鼠标,是不是将触摸屏的数据作为Qt的鼠标输入来实现?
4.看了宋宝华的《Linux设备驱动开发详解》中的“触摸屏的设备驱动”那节内容,其中的结果是将触点的位置(X,Y坐标)数据读出来,是不是要将这个坐标数据送到Qt的相关函数中经过处理实现一个鼠标箭头的显示?

相关帖子

来自 2楼
chengchenz| | 2010-7-24 10:35 | 只看该作者
1. 需要实现触摸屏的USB设备驱动,其它的都是标准接口,如果按规范写,系统会自动生成对应的event接节。
2. Qt当然可以,如果只需要显示一些基本的功能,tslib简洁多了,可以做屏幕校正,打印校正前/后坐标,还有一个简单的涂鸦板。不过好像不能显示光标。Qt或许也要依赖于tslib,这要看Driver的实现时用了个协议。
3. 如果要在Qt下,驱动完备后,打开Qt前指定好指针设备的环境变量就行了(当然编译Qt时也要选上对应的速鼠标协议),整个过程说起来很简单,初学时还得费不少精力,建议搜一下 QWS_MOUSE_PROTO tslib相关内容。
4. Qt内部都做好了,无特别需求,设好QWS_MOUSE_PROTO,QT就自动去那里读了。

使用特权

评论回复
板凳
一朝成名| | 2010-7-24 15:28 | 只看该作者
QT确实是依赖tslib~

使用特权

评论回复
地板
hedynasty|  楼主 | 2010-7-26 11:33 | 只看该作者
回chengchenz:
1.现在看到的内核源码Driver中已有的包括:USB鼠标等设备驱动,触摸屏驱动(RS232接口的),我需要的USB接口的触摸屏驱动是不是需要参考以上两种驱动进行修改?
2.要求要显示鼠标箭头所以必须得有Qt图形界面。

使用特权

评论回复
5
chengchenz| | 2010-7-26 23:08 | 只看该作者
1. 可以参考这两类驱动来实现。
2.Qt一定能满足要求

不过一般应用对触摸屏设备不显示鼠标箭头,因为鼠标通常是发相对坐标,需箭头指示多次移动“积累”的位置,而触摸屏报告的常是绝对坐标,不需要箭头指示,点哪就是哪

使用特权

评论回复
6
hedynasty|  楼主 | 2010-7-27 09:20 | 只看该作者
本帖最后由 hedynasty 于 2010-7-27 09:23 编辑

谢谢chengchenz细致的回答!

下面说说我对于chengchenz的回答的理解,麻烦看看是否正确:

1.我所需要的USB接口的触摸屏驱动程序,应该包括两个部分:USB设备作为USB总线上挂载设备的驱动和设备本身所属设备类型的驱动,其中前者就是“USB驱动”,而后者就是“触摸屏设备驱动”?

2.想要在Qt中显示触摸屏触点位置的鼠标箭头,必须在编写上述1中所说的“设备本身所属设备类型的驱动”时符合Tslib标准?

3.在按照上述2的方法编写了“设备本身所属设备类型的驱动”后,就达到触摸屏的驱动程序符合Qt的标准(也就是数据格式)的要求了;然后打开Qt前指定好指针设备的环境变量就行了(当然编译Qt时也要选上对应的速鼠标协议),就可以在Qt中显示鼠标了?

使用特权

评论回复
7
chengchenz| | 2010-7-28 07:46 | 只看该作者
1. USB接口的触摸屏本身如果是按HID实现的,Linux这边无需做任何驱动,Linux会自行按HID的那一套加载内部标准的Driver; 可以用cat   /proc/bus/input/devices查看有没有正常加载。如果上述信息里已有所插上的触摸屏,那只需依据Handlers那一行所指示的eventX来mknod,设定QWS_MOUSE_PROTO环境变量就行了。
如果所用触摸屏并非是HID, 也无需做两个Driver, 只是把RS232串触摸屏驱动的读数那块换成USB的(可以参考其它USB设备驱动)。
2. tslib可以读取eventX设备节点,驱动按Linux的相关标准就行了,无需额外去适应tslib

使用特权

评论回复
8
hedynasty|  楼主 | 2010-7-28 08:37 | 只看该作者
chengchenz看过这个程序吗?drivers/input/touchscreen/usbtouchscreen.c

这个好像是一个适用于许多公司USB触摸屏控制器的驱动?

使用特权

评论回复
9
hedynasty|  楼主 | 2010-7-28 09:49 | 只看该作者
现在将触摸屏通过USB口接到开发板上显示如下:

[root@FriendlyARM /]# usb 1-1.1: new full speed USB device using s3c2410-ohci an
d address 3
usb 1-1.1: New USB device found, idVendor=0ed1, idProduct=7851
usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.1: Product: TABLET
usb 1-1.1: Manufacturer: Morgan
usb 1-1.1: configuration #1 chosen from 1 choice
generic-usb: probe of 0003:0ED1:7851.0001 failed with error -22

麻烦chengchenz帮看看现在是什么情况?

使用特权

评论回复
10
chengchenz| | 2010-8-6 12:21 | 只看该作者
不好意思,这些天没怎么上网了。

这样的错误就需要结合代码调试了。
不同的内核版本和硬件可能会有不同的结果。

使用特权

评论回复
11
hedynasty|  楼主 | 2010-8-11 14:42 | 只看该作者
各位好,通过修改内核里的drivers/input/touchscreen/usbtouchscreen.c已经驱动了触摸屏,不过还是有一些问题没有解决,希望指点一下,谢谢!
问题如下:
1.现在触摸屏通过USB口接到开发板上时已经可以正常工作了,就是拿笔在触摸屏上滑动在开发板的屏幕上可以显示运动的鼠标箭头了,但是在开发板上显示的鼠标位置与在触摸屏上笔的触点位置不一样(例如:笔在触摸屏的中央而开发板上显示的鼠标不在中央;或是笔从触摸屏最左端滑向最右端但是开发板上的鼠标却不能从最左端滑向最右端,只是运动了一端而已)。我已将程序中XXX_read_data()中相关部分改成了我所用触摸屏的参数,不知道还是哪里的问题,请指点一下。
2.程序中有几处不明白的地方:struct usbtouch_device_info结构体中定义的int rept_size和void (*process_pkt)和int  (*get_pkt_len) 分别用来干什么的?

高手指点一下,多谢!

使用特权

评论回复
12
pengchhui| | 2011-7-18 16:23 | 只看该作者
我现在接上USB触摸屏的时候也提示错误信息,楼主的hid描述符是怎样的呢?

使用特权

评论回复
13
l0p0c| | 2011-10-27 16:42 | 只看该作者
感觉太高深……

使用特权

评论回复
14
godvmxi| | 2012-2-20 15:13 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

458

帖子

0

粉丝