我正在将安卓姜饼移植到我的定制板上(使用三星S5PV210处理器)。我有一个带ESC7000芯片的触摸屏。我在/kernel/drivers/input/touchscreen/usbtouchscreen.c找到了一个司机。它几乎可以工作,但位范围、顺序和字节排序在USB数据包中不是很好。我修改了代码以获得正确的原始位置(在控制台上使用printk查看),现在它几乎可以工作了。我的数据范围从xmin,ymin到xmax,ymax是420,430到3650,3650,而理论上应该是0,0到4095,4095。这并不奇怪,因为电容式触摸需要校准。这是一个简单的校准,就像每个轴的y=mx+b一样(简单的线性校准)。我看了看驱动程序,我不知道校准是在哪里进行的。它必须是可编程的,因为它依赖于单元,并且要在系统生产中为每个单元校准一次。我想像其他Android设备一样干净地做这件事。有人知道校准信息在Android系统中的存储位置吗?其中是执行薪酬计算的代码。任何关于这方面的网络搜索都会给出想要重新校准手机的人的信息。所以对我来说没用。
发布于 2011-09-21 20:14:20
看看下面的帖子:https://groups.google.com/forum/#!msg/rowboat/jlbwnmCIDg0/makHFil31pQJ
在EVM上,我们将校准后的值(或者说硬编码的Xmin/max、Ymin/max和XY分辨率值)从驱动程序传递到用户空间。
…原始事件在这里处理frameworks/base/libs/ui/InputReader.cpp
SingleTouchInputMapper::process(const RawEvent* rawEvent)将处理单个触摸设备的原始事件。ABS_X和ABS_Y是从driver传递的值,在我们的例子中是绝对坐标,正如我在前面的邮件中所说的那样。
如果我错了,请纠正我,afaik Android手机没有从用户空间进行校准的机制。从驱动程序本身发送校准后的值是Android手机的一种标准。
我建议使用tslib来校准,并让它将值存储在/etc/pointercal中。在SingleTouchInputMapper::sync(nsecs_t when)中,通过解析/etc/pointercal文件中的值来计算绝对坐标。
https://stackoverflow.com/questions/7449951
复制相似问题