CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 20957|回复: 9

模拟触摸屏动作,触摸点总是跟随鼠标指针位置(已解决)

[复制链接]
发表于 2013-12-18 08:58:09 | 显示全部楼层 |阅读模式
本帖最后由 chinatf 于 2013-12-24 09:17 编辑

现在有个需求,需要模拟触摸 屏动作。
CB1上由于没有接实际的触摸屏,也不能用鼠标,所以需要模拟触摸屏动作进行界面上的操作。

目前,内核中编译了ft5x_ts驱动,sys_config1.fex中配置了ctp_used=1,系统启动后,可以看到
以下信息,说明触摸屏驱动已加载,触摸屏设备为 /dev/input/event3,通过其他方法知道,触摸屏是
多点触摸设备,在驱动中 #define CONFIG_FT5X0X_MULTITOUCH     (1) 也说明是多点触摸设备。

root@android:/ # getevent&
getevent&
[1] 617
root@android:/ # add device 1: /dev/input/event3
  name:     "ft5x_ts"
add device 2: /dev/input/event1
  name:     "sun4i-ir"
add device 3: /dev/input/event0
  name:     "sun4i-keyboard"
could not get driver version for /dev/input/mice, Not a typewriter
add device 4: /dev/input/event2
  name:     "axp20-supplyer"

现在用 sendevent 来发送相应事件,来模拟触摸屏动作,参考了网上各种说明,在CB1上实际操作都不正常。
现象是,触摸点老是跟随鼠标指针的位置,没有出现在指定的坐标位置。
以下是我模拟触摸屏动作,发送的事件。

adb shell sendevent /dev/input/event3 3 57 0
adb shell sendevent /dev/input/event3 3 48 200
adb shell sendevent /dev/input/event3 3 53 10
adb shell sendevent /dev/input/event3 3 54 10
adb shell sendevent /dev/input/event3 3 50 1
adb shell sendevent /dev/input/event3 0 2 0
adb shell sendevent /dev/input/event3 0 0 0

adb shell sendevent /dev/input/event3 3 48 0
adb shell sendevent /dev/input/event3 0 0 0


回复

使用道具 举报

发表于 2013-12-19 09:41:24 | 显示全部楼层
我也遇到了同样的问题,,求解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 08:52:43 | 显示全部楼层
本帖最后由 chinatf 于 2013-12-24 08:53 编辑

在网上其他地方找到的解决方法,全文引用如下。

在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了,而到android4.0上又有些不同了,针对linux驱动,需添加如下内容:
    1、在手指按下时需调用如下函数上报Key Down:
       input_report_key(struct input_dev *input, BTN_TOUCH, 1);
    2、在手指释放时需调用如下函数上报Key Up:
       input_report_key(struct input_dev *input, BTN_TOUCH, 0);
    这样通过的话,可以在android4.0上看到有鼠标指针(圆圈)可以移动,把触摸屏做成了笔记本电脑上的鼠标触摸屏了,后来再查了下,原来需要添加一个idc文件,具体识别优先级参考:http://source.android.com/tech/i ... guration-files.html这篇文档,会按下面的顺序识别配置文件:

    /system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
    /system/usr/idc/Vendor_XXXX_Product_XXXX.idc
    /system/usr/idc/DEVICE_NAME.idc
    /data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
    /data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
    /data/system/devices/idc/DEVICE_NAME.idc

   为了方便,我直接创建一个“设备名.idc”的文件,直接放到/system/usr/idc/目录下,相应的内容参考如下:
   # Basic Parameters
   touch.deviceType = touchScreen
   touch.orientationAware = 1

   # Size
   touch.size.calibration = diameter
   touch.size.scale = 10
   touch.size.bias = 0
   touch.size.isSummed = 0

   # Pressure
   # Driver reports signal strength as pressure.
   #
   # A normal thumb touch typically registers about 200 signal strength
   # units although we don't expect these values to be accurate.
   touch.pressure.calibration = amplitude
   touch.pressure.scale = 0.005

   # Orientation
   touch.orientation.calibration = none
   这样配置好后,在android4.0上的TP就可以正常使用了,而不会成为滑鼠触屏了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 08:59:18 | 显示全部楼层
我解决问题的具体步骤:(前提是ft5x_ts的驱动已正确编译。)
1. 在PC上新建文件ft5x_ts.idc
    内容如下
# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
touch.size.calibration = diameter
touch.size.scale = 10
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal thumb touch typically registers about 200 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.005

# Orientation
touch.orientation.calibration = none

2. 将ft5x_ts.idc文件通过adb方式push到cb1板子/system/usr/idc/目录下。
3. 重新启动系统后,触摸屏就可以正常使用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 08:59:42 | 显示全部楼层
与上述解决方法相对应的,可直接修改系统源码,使得生成的镜像文件下载后,系统中具有文件/system/usr/idc/ft5x_ts.idc。
步骤如下:
1. 将ft5x_ts.idc拷贝到openbox/device/allwinner/cubieboard目录下。
2. 修改文件openbox/device/allwinner/cubieboard/cubieboard.mk

device/allwinner/cubieboard/sun4i-ts.idc:system/usr/idc/sun4i-ts.idc
改为
device/allwinner/cubieboard/sun4i-ts.idc:system/usr/idc/sun4i-ts.idc \
device/allwinner/cubieboard/ft5x_ts.idc:system/usr/idc/ft5x_ts.idc
3. 重新编译系统镜像文件。
回复 支持 反对

使用道具 举报

发表于 2013-12-24 09:29:45 | 显示全部楼层
果断顶一个!!!!!
驱动有修要修改的地方吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 09:40:05 | 显示全部楼层
本帖最后由 chinatf 于 2013-12-24 09:42 编辑
lin 发表于 2013-12-24 09:29
果断顶一个!!!!!
驱动有修要修改的地方吗?

linux驱动部分就是要用make menuconfig把ft5x_ts的驱动打开,编译进linux内核。这样系统启动后,才能在看到设备/dev/input/event3存在。
用getevent可以看到相关设备信息如下:
root@android:/# getevent&
getevent&
[1] 693
root@android:/ # add device 1: /dev/input/event3
  name:     "ft5x_ts"
add device 2: /dev/input/event1
  name:     "sun4i-ir"
add device 3: /dev/input/event0
  name:     "sun4i-keyboard"
could not get driver version for /dev/input/mice, Not a typewriter
add device 4: /dev/input/event2
  name:     "axp20-supplyer"


由于没有触摸屏硬件,我是用sendevent方式发送触摸屏事件,模拟触摸屏动作的。所以,ft5x_ts的驱动源码我是没有修改的。我的板子上使能ft5x_ts的驱动的作用,仅仅是向系统中注册一个触摸屏设备。
回复 支持 反对

使用道具 举报

发表于 2013-12-24 09:45:38 | 显示全部楼层
我有屏,也有
root@android:/ # add device 1: /dev/input/event3
  name:     "ft5x_ts"

但是getevent后,触摸屏没反应,屏用A20测试是行的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-24 10:24:24 | 显示全部楼层
lin 发表于 2013-12-24 09:45
我有屏,也有
root@android:/ # add device 1: /dev/input/event3
  name:     "ft5x_ts"

估计是驱动和硬件通讯还没打通。我没有硬件,也没有去调试驱动。
回复 支持 反对

使用道具 举报

发表于 2014-8-20 21:13:53 | 显示全部楼层
lin 发表于 2013-12-24 09:45
我有屏,也有
root@android:/ # add device 1: /dev/input/event3
  name:     "ft5x_ts"

我的 a20 没有ft5x_ts  getenevt  没有发现 ft5x_ts 驱动是 模块化的编译  M  不是 *  请问编译时候是否 直接编译进内核 *  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 16:55 , Processed in 0.024956 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部