|
亚瑟王 发表于 2013-9-30 16:43
电阻屏多多少少都会有一些偏差的,特别是android机制中用的是上报的坐标值的方式。
你好
我查看了一下 Linux 与 Android 下 tq210-ts.c 这个文件,并对其进行了下对比。
发现:在 linux 中使用的上报的坐标值的计算方法与 android 中的不一样
在函数:touch_timer_fire 中
linux 上报的坐标值是:
- x=(long) ts->xp;//
- y=(long) ts->yp;
- #if defined(CONFIG_TOUCHSCREEN_S3C_DEBUG)
- printk("x=%d,y=%d\n",(long) x,(long) y);
- #endif
-
- input_report_abs(ts->dev, ABS_X, x);
- input_report_abs(ts->dev, ABS_Y, y);
- input_report_key(ts->dev, BTN_TOUCH, 1);
- input_report_abs(ts->dev, ABS_PRESSURE, 1);
- input_sync(ts->dev);
复制代码 而在 android 中上報的值是通过
- tpx = (long )((a2 + (a0 * x) + (a1 * y)) / a6);
- tpy = (long )((a5 + (a2 * x) + (a3 * y)) / a6);
- x = tpx;
- y = tpy;
复制代码 計算得到的。
由于这两种对坐标的计算方法不同,觉得在 linux 中得到核准数据(a0~a6)可能不适合 android 。个人认为:要使 android 能使用 linux 下得到的7个值就要使用相同的坐标计算方法。但当我将添加宏:CONFIG_ANDROID_1 时,结果显示;能正常读取坐标值,从串口输出中也可以得到触摸点的坐标,但TSLIB没有响应。也就是在显示第一个“+”后,屏幕就不动了,但能看到坐标值,也不清楚这个坐标值是否正确。
当我添加宏:CONFIG_ANDROID_1 , 并修改了部分地方(CONFIG_CPU_S5PV210_EVT1_abc)代码,使在linux 下能以
- ts->xp=(long) ((a2+(a0*x)+(a1*y))/a6);
- ts->yp=(long) ((a5+(a3*x)+(a4*y))/a6);
复制代码 作为计算后的坐标上报给系统,但也遇到了相同的问题。
由于现在按照上面的方法没有得到预期想得到值
所以请问:
这可能是不是导致 android 下触摸屏不准的一个原因。
还有就是宏:CONFIG_ANDROID_1 与 CONFIG_CPU_S5PV210_EVT1_abc 在对这两个宏进行修改时,为什么出现问题:能看到上报的坐标值,但屏幕没有响应。
谢谢了 |
|