| 
 | 
亚瑟王 发表于 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 在对这两个宏进行修改时,为什么出现问题:能看到上报的坐标值,但屏幕没有响应。 
谢谢了 |   
 
 
 
 |