当前位置:编程学习 > wap >>

android 4.0 触摸屏驱动移植后屏幕不准,急求解决!

1.        请教下大家我从2.3的,将多点的电容触摸屏驱动移植到4.0平台,坐标打印正常 事件打印正常,可是屏幕显示的手指印打飘  并且还不能够弹起来  看了4.0的文档 说是 “UP” 不用在发送input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0)
直接按照下面的发一个空包:

input_mt_sync(ts->input_dev);
input_sync(ts->input_dev);

可是屏幕连反映都没!

2.另外还有一个问题困扰了很久

就是压力的问题
假设接触面都是圆形
ABS_MT_TOUCH_MAJOR (接触面的长轴,指的是实际手机按下去的面积的长轴吗吗)
ABS_MT_WIDTH_MAJOR  (接触物的长轴,指的是显示屏的长轴吗?) 
ABS_MT_WIDTH_MAJOR的值是固定的吗?

压力=ABS_MT_TOUCH_MAJOR/ABS_MT_WIDTH_MAJOR  

我感觉压力应该是=手指实际接触的面积/手指的面积


是把?这个值到底该怎么取,头大!



             --------------------编程问答-------------------- 那是因为你可能是多点触摸,并且没触摸的点也向上报数据了,
方法有二:
1.修改驱动,只报触摸点数据,没有触的点什么都不能报,(up/down/move)状态在
  android4.0中已不重要
2.修改frameworks\base\services\input\InputReader.cpp,把有效点的条件变一下,
  默认只要有相关数据上报,就认为这点有效,可修改为只报关键数据,比如x,y的值时才算有效 --------------------编程问答-------------------- 楼上的朋友,我现在改为单点触摸还是不行,很明显的是屏幕不准
上报:
static  int state=0;
 if (event_num)^M
 {
   printk("finger on~~~~~~~~~~~~~~~~~~\n") ;

    if (!state)
    {    
     input_report_key(data->input_dev, BTN_TOUCH, 1);
     state=1;
    }    
  input_report_abs(data->input_dev, ABS_X, event->x);
  input_report_abs(data->input_dev, ABS_Y, event->y);

  input_report_abs(data->input_dev, ABS_PRESSURE, 1);

  ft5x0x_dbg("point_%d: %d, %d\n",event->id, event->x,event->y);
  input_sync(data->input_dev);^M
 // ft5x0x_report_mt_event(data->input_dev, event, event_num);
 }
 
  else 
 {


  printk("finger up~~~~~~~~~~~~~~~~~~\n") ;

  
 if (state)
 {
  input_report_key(data->input_dev, BTN_TOUCH, 0);
  input_report_abs(data->input_dev, ABS_PRESSURE, 0);
  input_sync(data->input_dev);
  state=0;
 }
 }
 enable_irq(this_client->irq);
}

驱动probe 配置:


 set_bit(EV_SYN, input_dev->evbit);
 set_bit(EV_KEY, input_dev->evbit);
 set_bit(EV_ABS, input_dev->evbit);
 set_bit(BTN_TOUCH, input_dev->keybit);
 set_bit(ABS_X, input_dev->absbit);
 set_bit(ABS_Y, input_dev->absbit);
// set_bit(ABS_PRESSURE, input_dev->absbit);


 set_bit(ABS_PRESSURE, input_dev->absbit);

 input_set_abs_params(input_dev, ABS_PRESSURE, 0, 1, 0, 0);
 input_set_abs_params(input_dev,
        ABS_X, 0, pdata->screen_max_x, 0, 0);
 input_set_abs_params(input_dev,^M
        ABS_Y, 0, pdata->screen_max_y, 0, 0);

--------------------编程问答-------------------- 3.0以后的触摸屏配置用idc文件描述了,和2.3之前有很大不一样。
我懒得写idc,直接改inputReader,驱动方面没什么不一样。
建议你可以看看idc。 --------------------编程问答-------------------- 楼市的能够传一个IDC配置文件吗? 我 真是要狂抓了   调式了几天  还没出来! --------------------编程问答-------------------- system\usr\idc\xxx.idc xxx--touch设备名
---------------------------------------------
touch.deviceType = touchScreen
touch.orientationAware = 1

keyboard.layout = qwerty
keyboard.characterMap = qwerty
keyboard.orientationAware = 1
keyboard.builtIn = 1

cursor.mode = navigation
cursor.orientationAware = 1

-------------------------------------------

如果没有弹起来,就是报的数据有问题,即使单点,没触摸的情况下,
只能发送
input_mt_sync(ts->input_dev);
input_sync(ts->input_dev);
其它数据都不能发送,否则系统会认为此点还没有UP

数据不准,是怎么个不准?

--------------------编程问答-------------------- 搞定了   谢谢各位! --------------------编程问答--------------------
引用 6 楼 xh88888 的回复:
搞定了 谢谢各位!

LZ分享点成功的经验啊! --------------------编程问答--------------------
引用 6 楼 xh88888 的回复:
搞定了 谢谢各位!

遇到类似的问题, 请问下LZ是怎么解决的啊? 可否分享一下, 谢谢 --------------------编程问答-------------------- 可以啊 那个是idc配置的问题,另外在动态创建input设备的时候应赋予完整的信息,还有4.0去掉了之前与之不兼容的多点上报协议,具体看android 4.0文档 --------------------编程问答--------------------
引用 9 楼  的回复:
可以啊 那个是idc配置的问题,另外在动态创建input设备的时候应赋予完整的信息,还有4.0去掉了之前与之不兼容的多点上报协议,具体看android 4.0文档

能否具体一点呢?我现在就在调试4.0下的touch,getevent也有数据,但就是没法解锁,完全不动,另外奇怪的,getevent时,比如两个点x,y的值只有x有差异的话,第二次看到的只有x的值,但4.0之前不是这样的,不管前后两次x,y的值是否一样,getevent的时候都能打出x,y的值。 --------------------编程问答-------------------- 我现在也在也在把驱动移植到android4.0.3上, 启动后,触屏,一点反应都没,在驱动里加了打印,怎么触摸时都没打印的,(系统启动时,也走了驱动_init,初始化函数有打印)。

前面调通的哥们们,来指点指点啊! --------------------编程问答-------------------- Android4.0.3触屏,调试通过,一段时间后,也出现了点飘的现象,不知道什么原因 --------------------编程问答-------------------- 看来很多人都是搞定了就是不关心贴了,不愿意分享! --------------------编程问答-------------------- 安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,楼主可以告诉我吗,包括触摸屏驱动怎么移植?  我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。 --------------------编程问答--------------------
引用 1 楼 yyhzpk 的回复:
那是因为你可能是多点触摸,并且没触摸的点也向上报数据了,
方法有二:
1.修改驱动,只报触摸点数据,没有触的点什么都不能报,(up/down/move)状态在
  android4.0中已不重要
2.修改frameworks\base\services\input\InputReader.cpp,把有效点的条件变一下,
  默认只要有相关数据上报,就认为这点有效,可修改为只报关键数据,比……



请问安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,你可以告诉我吗,包括触摸屏驱动怎么移植?  我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。 --------------------编程问答-------------------- 晕了 ,我的也没解决啊,就是弹不起来。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,