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 我感觉压力应该是=手指实际接触的面积/手指的面积
是把?这个值到底该怎么取,头大!
直接按照下面的发一个空包: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);
我懒得写idc,直接改inputReader,驱动方面没什么不一样。
建议你可以看看idc。
---------------------------------------------
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数据不准,是怎么个不准?