【问题标题】:Touch screen calibration values, How is it done in Android/Kernel?触摸屏校准值,如何在 Android/Kernel 中完成?
【发布时间】:2011-11-18 23:32:38
【问题描述】:

我正在将 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(简单线性校准)。我在驱动程序中环顾四周,但无法弄清楚校准的处理位置。它必须是可编程的,因为它依赖于单元,并且要在系统生产中为每个单元校准一次。我想像其他 Android 设备一样干净。有人知道校准信息在安卓系统中存储在哪里吗?进行补偿计算的代码在哪里。任何有关此的网络搜索都会提供有关想要重新校准手机的人的信息。所以对我来说没用。

【问题讨论】:

    标签: android linux-kernel touchscreen android-source calibration


    【解决方案1】:

    看看下面的帖子: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 文件中的值来计算绝对坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多