我正在将 Android Gingerbread 移植到我的定制板上(使用三星 S5PV210 处理器)。我有一个带有 ESC7000 芯片的触摸屏。我在 /kernel/drivers/input/touchscreen/usbtouchscreen.c 找到了一个驱动程序。它几乎可以工作,但 USB 数据包中的位范围、顺序和字节顺序并不好。我修改了代码以获得正确的 RAW 位置(在控制台上使用 printk 来查看它),现在它几乎可以工作了。我的数据范围从 xmin、ymin 到 xmax,ymax 是 420,430 到 3650、3650,而理论上应该是 0,0 到 4095,4095。这并不奇怪,因为电容式触摸需要校准。这是一个简单的校准,例如每个轴的 y=mx+b(简单线性校准)。我在驱动程序中环顾四周,但无法弄清楚校准的处理位置。它必须是可编程的,因为它' s 取决于单元,并在系统生产中为每个单元校准一次。我想像其他 Android 设备一样干净。有人知道校准信息在安卓系统中存储在哪里吗?进行补偿计算的代码在哪里。任何关于此的网络搜索都会提供有关想要重新校准手机的人的信息。所以对我来说没用。
问问题
11218 次
1 回答
3
看看以下线程: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 是从驱动程序传递的值,在我们的 例子中,这些是绝对坐标,正如我在之前的邮件中告诉你的那样。如果我错了,请纠正我,afaik Android 手机没有从用户空间进行校准的机制。从驱动程序本身发送校准值是 Android 手机中的一种标准。
我的建议是,使用 tslib 进行校准并让它将值存储在 /etc/pointercal. 通过
SingleTouchInputMapper::sync(nsecs_t when)
解析 /etc/pointercal 文件中的值来计算绝对坐标。
于 2011-09-21T12:14:19.510 回答