在ARM linux上使用usb接口的触屏

来源:互联网 发布:exe mac要怎么打开 编辑:程序博客网 时间:2024/05/22 01:44

应公司需要,在现有设备上面要使用触摸屏,显示器的尺寸是15寸,于是自己从淘宝上面买了个15寸4线电阻屏回来,带Windows下的驱动,售后告诉我不支持Linux。在pc上面使用很不错。接下来的任务是用到ARM开发板上面。

当把4根线,直接连接到开发板上面,为电阻屏预留的4个AD上面后,确实能够使用,不过鼠标并不能实时跟随触屏,会有跳动,而且在左侧区域按下后,鼠标跟随过来,当松开触摸屏后,鼠标并没有固定在按下的区域,而是回到右侧区域,类似于回到原点一样。触摸屏的最右下角还没有反映,但是在Windows下触屏是没有问题的。查看了内核的AD输出结果,看不出来什么原因,不得已只好放弃。

在Windows下的驱动文件中找到了一份使用手册,里面介绍了USB的协议,比较详细。然后查找看看内核是不是能够支持USB的触摸屏,在网上找到资料说能够支持,文件在Linux3.6.9/drivers/input/touchscreen/usbtouchscreen.c,找到后,跟协议进行比较,发现egalax的数据协议和手册里面描述的基本一样。看到了曙光!对内核进行配置Device Drivers--->Input Device Support--->Touchscreens--->USB TouchScreen Driver--->eGalax, eTurboTouch CT-410/510/700 device support。这样就配置好了内核,编译移植到开发板,确实可以用,但是总有一个轴是反的(从左向右滑动时,鼠标从右向左运动,当我把4根触屏线,颠倒后,变成从上到下滑动时,鼠标从下向上运动),单独颠倒x轴或者y轴的两个线也解决不了。最后想到可以认为的通过软件颠倒一下。协议使用的是11位数据,即2048。所以在usbtouchscreen.c中更改egalax_read_data函数,在dev->x = ((pkt[0] & 0x0F) << 7) | (pkt[4] & 0x7F);下增加一行dev->x = 2048 - dev->x;重新编译移植。Ok!!!触屏完全可以使用。下图是使用的触摸屏。

        经过之后的验证,这种方式不能算作是触摸屏,而更应该称之为触摸板,类似于笔记本的触摸板一样。如果要求没那么严格倒是可以使用。

0 0