android 4.0 触摸屏驱动移植后屏幕不准,急求解决!
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.修改驱动,只报触摸点数据,没有触的点什么都不能报,(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);
--------------------编程问答-------------------- 3.0以后的触摸屏配置用idc文件描述了,和2.3之前有很大不一样。
我懒得写idc,直接改inputReader,驱动方面没什么不一样。
建议你可以看看idc。 --------------------编程问答-------------------- 楼市的能够传一个IDC配置文件吗? 我 真是要狂抓了 调式了几天 还没出来! --------------------编程问答-------------------- system\usr\idc\xxx.idc xxx--touch设备名
---------------------------------------------
touch.deviceType = touchScreen
touch.orientationAware = 1
keyboard.layout = qwerty
keyboard.characterMap = qwerty
keyboard.orientationAware = 1
keyboard.builtIn = 1
cursor.mode = navigation
cursor.orientationAware = 1
-------------------------------------------
如果没有弹起来,就是报的数据有问题,即使单点,没触摸的情况下,
只能发送
input_mt_sync(ts->input_dev);
input_sync(ts->input_dev);
其它数据都不能发送,否则系统会认为此点还没有UP
数据不准,是怎么个不准?
--------------------编程问答-------------------- 搞定了 谢谢各位! --------------------编程问答--------------------
LZ分享点成功的经验啊! --------------------编程问答--------------------
遇到类似的问题, 请问下LZ是怎么解决的啊? 可否分享一下, 谢谢 --------------------编程问答-------------------- 可以啊 那个是idc配置的问题,另外在动态创建input设备的时候应赋予完整的信息,还有4.0去掉了之前与之不兼容的多点上报协议,具体看android 4.0文档 --------------------编程问答--------------------
能否具体一点呢?我现在就在调试4.0下的touch,getevent也有数据,但就是没法解锁,完全不动,另外奇怪的,getevent时,比如两个点x,y的值只有x有差异的话,第二次看到的只有x的值,但4.0之前不是这样的,不管前后两次x,y的值是否一样,getevent的时候都能打出x,y的值。 --------------------编程问答-------------------- 我现在也在也在把驱动移植到android4.0.3上, 启动后,触屏,一点反应都没,在驱动里加了打印,怎么触摸时都没打印的,(系统启动时,也走了驱动_init,初始化函数有打印)。
前面调通的哥们们,来指点指点啊! --------------------编程问答-------------------- Android4.0.3触屏,调试通过,一段时间后,也出现了点飘的现象,不知道什么原因 --------------------编程问答-------------------- 看来很多人都是搞定了就是不关心贴了,不愿意分享! --------------------编程问答-------------------- 安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,楼主可以告诉我吗,包括触摸屏驱动怎么移植? 我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。 --------------------编程问答--------------------
请问安卓的系统触摸屏驱动在哪里啊,我打算这样修改,一个厂家A和厂家B生产的平板电脑除了触摸屏硬件不一样,其他都一模一样,我已经拆机验证过,而且,型号一点差别都没有,但是因为触摸屏硬件不同,互刷系统后,都能进入系统,按键正常,唯独触屏不能用,我想充A厂家固件update。img中提取触摸屏相关的文件,然后整合进B厂家的update.img中,然后刷机,这样就可以用B硬件,刷A厂家的固件用了,你可以告诉我吗,包括触摸屏驱动怎么移植? 我之所以这样做,是因为A厂家的固件做的比B厂家好点,B厂家硬件好点。 --------------------编程问答-------------------- 晕了 ,我的也没解决啊,就是弹不起来。
补充:移动开发 , Android