MSM8974 TP 多点触控 B协议

记录一些关于多点触控的信息:

一、配置

在TP模块的probe函数里有如下设置:

1)配置该设备支持的事件或是按键类型

set_bit(EV_SYN, rmi4_data->input_dev->evbit);
set_bit(EV_KEY, rmi4_data->input_dev->evbit);
set_bit(EV_ABS, rmi4_data->input_dev->evbit);
set_bit(BTN_TOUCH, rmi4_data->input_dev->keybit);
set_bit(BTN_TOOL_FINGER, rmi4_data->input_dev->keybit);
2)配置值的范围

input_set_abs_params(rmi4_data->input_dev,ABS_MT_POSITION_X, rmi4_data->disp_minx,rmi4_data->disp_maxx, 0, 0);
input_set_abs_params(rmi4_data->input_dev,ABS_MT_POSITION_Y, rmi4_data->disp_miny,rmi4_data->disp_maxy, 0, 0);
input_set_abs_params(rmi4_data->input_dev,ABS_PRESSURE, 0, 255, 0, 0);
input_set_abs_params(rmi4_data->input_dev,ABS_MT_TOUCH_MAJOR, 0,rmi4_data->max_touch_width, 0, 0);
input_set_abs_params(rmi4_data->input_dev,ABS_MT_TOUCH_MINOR, 0,rmi4_data->max_touch_width, 0, 0);

3)配置最多支持同时触摸的点的个数

 
  
input_mt_init_slots(rmi4_data->input_dev,rmi4_data->num_of_fingers);

二、报点

1)从传感器读取从硬件报上来的点的相关数据并进行处理

	x = (finger_data->x_msb << 8) | (finger_data->x_lsb);
	y = (finger_data->y_msb << 8) | (finger_data->y_lsb);
2)创建一个slot并初始化

input_mt_slot(rmi4_data->input_dev, finger);
input_mt_report_slot_state(rmi4_data->input_dev,MT_TOOL_FINGER, finger_status != 0);
 
  3)向上报点 
  

input_report_key(rmi4_data->input_dev,BTN_TOUCH, 1);
input_report_key(rmi4_data->input_dev,BTN_TOOL_FINGER, 1);
input_report_abs(rmi4_data->input_dev,ABS_MT_POSITION_X, x);
input_report_abs(rmi4_data->input_dev,ABS_MT_POSITION_Y, y);
input_report_abs(rmi4_data->input_dev,ABS_MT_TOUCH_MAJOR, max(wx, wy));
input_report_abs(rmi4_data->input_dev,ABS_MT_TOUCH_MINOR, min(wx, wy));
以上的1)、2)、3)步是在一个循环里面的,如果同时多点(N个点)触摸的话,上面的三个步骤就会走N次

4)完成,开始上报

input_sync(rmi4_data->input_dev);







你可能感兴趣的:(msm8974,安卓驱动,TP)