您的位置:首页 > 移动开发 > Android开发

ads7846驱动及android系统input输入子系统分析

2014-03-20 15:52 471 查看
1.首先说明驱动中对于触摸的定义,其平台驱动的私有数据如下:

解释:
    x_max为4095表示x轴数据采样得到的最大值,同理y_max为y轴这个我们后面会使用到。

2.定义了如下的宏定义

其中的定义在后面会做解释,其中的OMAP3EVM_XRES    480 及OMAP3EVM_YRES    640在整个驱动中并未使用到。

3.从触摸芯片中得到的数据为采样值,得到采样值后会做如下处理:

其公式的计算原理由下图给出,

其算法可以使我们的触摸区域落在任何一个象限。这个计算的结果是使x y的值计算后全部落在[0,4095]。
其中驱动最终上传的值为x属于[0,4095]  y属于[0,4095].

以下分析属于android  input子系统:
1.android4.0.3,他的touchscreen是需要配置文件的,在我们的系统上面为文件:/system/usr/idc/qwerty.idc
其内容如下:
    

其中的宏定义会被后面的代码使用到。
2.代码frameworks/base/services/input/InputReader.cpp

这个文件会去读取刚才的配置文件,它会根据上面的配置文件确定我们的设备类型是touchScreen及触摸屏,而里面被注释掉的pointer是指鼠标。

3.代码文件frameworks/base/services/input/InputReader.cpp
关键代码如下:
    

其中的in.x in.y即底层驱动上传上来的x,y的绝对坐标值。x,y为最终给到ui的坐标值。pressure为压力值,size为面积值。

可以看到android系统本身的input子系统对上传的值会做重新计算,而且会根据屏幕是否旋转重新计算定位。
数据转换为x[0,4096] --> 屏幕的x[0,480]   y[0,4096] --> 屏幕的y[0,640].

从上述分析中我们得到屏幕校准做如下方案的假设。
1.首先查找到上述算法中的参数定义值。
2.这些参数由原来的方式修改成读取文件(后面说明这个文件的由来)。
3.编写apk(其中zte也使用的这种方式,有apk在google应用商店中有发布)。这个文件的两个用途其一:出现图形界面进行点击。其二,通过校准算法计算得到上面的校准参数值并保存到文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: