首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触摸屏校准值,在Android/Kernel中是怎么做的?

触摸屏校准值,在Android/Kernel中是怎么做的?
EN

Stack Overflow用户
提问于 2011-09-17 04:18:41
回答 1查看 11.2K关注 0票数 4

我正在将安卓姜饼移植到我的定制板上(使用三星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系统中的存储位置吗?其中是执行薪酬计算的代码。任何关于这方面的网络搜索都会给出想要重新校准手机的人的信息。所以对我来说没用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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文件中的值来计算绝对坐标。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7449951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档