1.
linux-3.0.15中的EV_VERSION是在include/linux/input.h中定义的:
#define EV_VERSION 0x010001
和应用层两者不一致,改成 0x010000
2./linux-3.0.15/drivers/input/touchscreen/gslX68X.c
注释为//-_- 为增加修改部分
1)首先看gsl_ts_probe函数里的gsl_request_input_dev
增加按键的初始化
一般是这样设置的,单点触摸的情况下:
1.
__set_bit(EV_ABS, ts->input_dev->evbit);
2.
__set_bit(EV_KEY, ts->input_dev->evbit);
3.
__set_bit(EV_SYN, ts->input_dev->evbit);
4.
__set_bit(BTN_TOUCH, ts->input_dev->keybit);
5.
6.
input_set_abs_params(ts->input_dev, ABS_X, 0, ts->abs_x_max, 0, 0);
7.
input_set_abs_params(ts->input_dev, ABS_Y, 0, ts->abs_y_max, 0, 0);
8.
input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 1, 0, 0);
设置完之后然后修改上报函数
这是单点触摸的上报函数:
1.
input_report_abs(ts->input_dev, ABS_X, x);
2.
input_report_abs(ts->input_dev, ABS_Y, y);
3.
input_report_abs(ts->input_dev, ABS_PRESSURE, 1);
4.
input_sync(ts->input_dev);
这是多点触摸的上报函数:
1.
input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x);
2.
input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y);
3.
input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w);
4.
input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w);
5.
input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id);
6.
input_mt_sync(ts->input_dev);
可以从include/linux/input.h这文件里看到ABS_X等的宏定义,他们的值是不一样的
3.修改中断中的上报函数gsl_report_point
input_report_abs(idev, ABS_X, cinfo->x[i]);//-_-
input_report_abs(idev, ABS_Y, cinfo->y[i]); //-_-
input_report_abs(idev, ABS_PRESSURE, 1);
input_sync(idev);
//-_-
648 input_report_abs(idev, ABS_PRESSURE, 0);
649 input_sync(idev);//end
1和0代表按下与抬起
linux-3.0.15中的EV_VERSION是在include/linux/input.h中定义的:
#define EV_VERSION 0x010001
和应用层两者不一致,改成 0x010000
2./linux-3.0.15/drivers/input/touchscreen/gslX68X.c
注释为//-_- 为增加修改部分
1)首先看gsl_ts_probe函数里的gsl_request_input_dev
增加按键的初始化
一般是这样设置的,单点触摸的情况下:
1.
__set_bit(EV_ABS, ts->input_dev->evbit);
2.
__set_bit(EV_KEY, ts->input_dev->evbit);
3.
__set_bit(EV_SYN, ts->input_dev->evbit);
4.
__set_bit(BTN_TOUCH, ts->input_dev->keybit);
5.
6.
input_set_abs_params(ts->input_dev, ABS_X, 0, ts->abs_x_max, 0, 0);
7.
input_set_abs_params(ts->input_dev, ABS_Y, 0, ts->abs_y_max, 0, 0);
8.
input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 1, 0, 0);
设置完之后然后修改上报函数
这是单点触摸的上报函数:
1.
input_report_abs(ts->input_dev, ABS_X, x);
2.
input_report_abs(ts->input_dev, ABS_Y, y);
3.
input_report_abs(ts->input_dev, ABS_PRESSURE, 1);
4.
input_sync(ts->input_dev);
这是多点触摸的上报函数:
1.
input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x);
2.
input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y);
3.
input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w);
4.
input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w);
5.
input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id);
6.
input_mt_sync(ts->input_dev);
可以从include/linux/input.h这文件里看到ABS_X等的宏定义,他们的值是不一样的
3.修改中断中的上报函数gsl_report_point
input_report_abs(idev, ABS_X, cinfo->x[i]);//-_-
input_report_abs(idev, ABS_Y, cinfo->y[i]); //-_-
input_report_abs(idev, ABS_PRESSURE, 1);
input_sync(idev);
//-_-
648 input_report_abs(idev, ABS_PRESSURE, 0);
649 input_sync(idev);//end
1和0代表按下与抬起