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.   

    那是因为你可能是多点触摸,并且没触摸的点也向上报数据了,
    方法有二:
    1.修改驱动,只报触摸点数据,没有触的点什么都不能报,(up/down/move)状态在
      android4.0中已不重要
    2.修改frameworks\base\services\input\InputReader.cpp,把有效点的条件变一下,
      默认只要有相关数据上报,就认为这点有效,可修改为只报关键数据,比如x,y的值时才算有效
      

  2.   

    楼上的朋友,我现在改为单点触摸还是不行,很明显的是屏幕不准
    上报:
    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.   

    3.0以后的触摸屏配置用idc文件描述了,和2.3之前有很大不一样。
    我懒得写idc,直接改inputReader,驱动方面没什么不一样。
    建议你可以看看idc。
      

  4.   

    楼市的能够传一个IDC配置文件吗? 我 真是要狂抓了   调式了几天  还没出来!
      

  5.   

    system\usr\idc\xxx.idc xxx--touch设备名
    ---------------------------------------------
    touch.deviceType = touchScreen
    touch.orientationAware = 1keyboard.layout = qwerty
    keyboard.characterMap = qwerty
    keyboard.orientationAware = 1
    keyboard.builtIn = 1cursor.mode = navigation
    cursor.orientationAware = 1-------------------------------------------如果没有弹起来,就是报的数据有问题,即使单点,没触摸的情况下,
    只能发送
    input_mt_sync(ts->input_dev);
    input_sync(ts->input_dev);
    其它数据都不能发送,否则系统会认为此点还没有UP数据不准,是怎么个不准?
      

  6.   

    可以啊 那个是idc配置的问题,另外在动态创建input设备的时候应赋予完整的信息,还有4.0去掉了之前与之不兼容的多点上报协议,具体看android 4.0文档
      

  7.   

    能否具体一点呢?我现在就在调试4.0下的touch,getevent也有数据,但就是没法解锁,完全不动,另外奇怪的,getevent时,比如两个点x,y的值只有x有差异的话,第二次看到的只有x的值,但4.0之前不是这样的,不管前后两次x,y的值是否一样,getevent的时候都能打出x,y的值。
      

  8.   

    我现在也在也在把驱动移植到android4.0.3上, 启动后,触屏,一点反应都没,在驱动里加了打印,怎么触摸时都没打印的,(系统启动时,也走了驱动_init,初始化函数有打印)。前面调通的哥们们,来指点指点啊!
      

  9.   

    Android4.0.3触屏,调试通过,一段时间后,也出现了点飘的现象,不知道什么原因
      

  10.   

    安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,楼主可以告诉我吗,包括触摸屏驱动怎么移植?  我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。
      

  11.   

    请问安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,你可以告诉我吗,包括触摸屏驱动怎么移植?  我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。