【TP调试】android虚拟按键无振动效果

1.在normal mode下,tp button也是和其它触摸事件一样,以坐标形式的input_event进行上报。在初始化时会通过tpd_button_setting()函数根据定义在tpd_custom_XXX.h文件中的配置信息将虚拟按键的坐标信息写在/sys/board_properties /virtualkeys.mtk-tpd中。工作时,tp driver将按下的点的坐标进行上报,Android上层会读取sys中的按键配置信息,再判断上报的坐标是否属于某个按键的坐标范围,以此将坐标信息转化为具体的按键键值。 
2.在factory mode和recovery mode下,由于Android还未启动,所以按键事件不能采取1中的上报机制,而是利用tpd_button()函数来对按键进行直接上报处理。 
所以,对于normal mode,按键事件不需要调用tpd_button()函数上报,而在factory mode和recovery mode下,必须调用tpd_button()函数对虚拟按键事件进行上报。

http://blog.csdn.net/sergeycao/article/details/8152110

#define TPD_HAVE_BUTTON                            //report key as coordinate,Vibration feedback

  static  void tpd_down(int x, int y, int p) {
       
        // input_report_abs(tpd->dev, ABS_PRESSURE, p);
        input_report_key(tpd->dev, BTN_TOUCH, 1);
        input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 25);
        input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
        input_report_abs(tpd->dev, ABS_MT_POSITION_Y, y);

       
            //input_report_abs(tpd->dev, ABS_MT_TRACKING_ID, p);
        input_mt_sync(tpd->dev);
        if (FACTORY_BOOT == get_boot_mode()|| RECOVERY_BOOT == get_boot_mode())
        {   
            tpd_button(x, y, 1); 
        }
        if(y > TPD_RES_Y) //virtual key debounce to avoid android ANR issue
        {
              msleep(50);
              TPD_DEBUG("D virtual key \n");
        }
        TPD_EM_PRINT(x, y, x, y, p-1, 1);
  }


\mediatek\custom\common\kernel\touchpanel\src\Tpd_button.c
void tpd_button(unsigned int x, unsigned int y, unsigned int down) {
      int i;
      if(down) {
              for(i=0;i
            {
                      if(x>=tpd_keys_dim[i][0]-(tpd_keys_dim[i][2]/2) &&
                            x<=tpd_keys_dim[i][0]+(tpd_keys_dim[i][2]/2) &&
                            y>=tpd_keys_dim[i][1]-(tpd_keys_dim[i][3]/2) &&
                            y<=tpd_keys_dim[i][1]+(tpd_keys_dim[i][3]/2) &&
                            !(tpd->btn_state&(1<<i)))
                      {
                              input_report_key(tpd->kpd, tpd_keys[i], 1);
                        input_sync(tpd->kpd);
                              tpd->btn_state|=(1<<i);
                              TPD_DEBUG("[mtk-tpd] press key %d (%d)\n",i, tpd_keys[i]);
                        printk("[mtk-tpd] press key %d (%d)\n",i, tpd_keys[i]);
                      }
              }
      } else {
              for(i=0;i
                      if(tpd->btn_state&(1<<i)) {
                              input_report_key(tpd->kpd, tpd_keys[i], 0);
                        input_sync(tpd->kpd);
                              TPD_DEBUG("[mtk-tpd] release key %d (%d)\n",i, tpd_keys[i]);
                        printk("[mtk-tpd] release key %d (%d)\n",i, tpd_keys[i]);
                      }
              }
              tpd->btn_state=0;
      }
}

你可能感兴趣的:(【TP调试】android虚拟按键无振动效果)