触摸屏校准值,如何在Android 内核中完成?

触摸屏校准值,如何在Android 内核中完成?,第1张

概述我正在将 Android Gingerbread移植到我的定制主板(使用三星S5PV210处理器).我有一个带ESC7000芯片的触摸屏.我在/kernel/drivers/input/touchscreen/usbtouchscreen.c中找到了一个驱动程序.它几乎可以工作,但USB数据包中的位范围,顺序和字节顺序并不好.我修改了代码以获得正确的RAW位置(在控制台上使用printk来查看它) 我正在将 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系统中的哪个位置?代码在哪里进行补偿计算.任何网络搜索都会提供有关想要重新校准手机的人的信息.所以对我来说没用.解决方法 看看以下主题: https://groups.google.com/forum/#!msg/rowboat/jlbwnmCIDg0/makHFil31pQJ

On EVMs we pass the calibrated values(or let us say hardcoded values
for Xmin/max,Ymin/max and XY resolution) from the driver to the user
space.

Raw events are handled here frameworks/base/libs/ui/inputReader.cpp

SingletouchinputMapper::process(const RawEvent* rawEvent) will process
raw events for a Single touch device. ABS_X and ABS_Y are the values
passed from driver and these are the absolute coordinates in our
case as I told you in my earlIEr mail.

Correct me if I’m wrong,afaik AndroID phones have no mechanism to do
calibration from user space. It is a sort of standard in AndroID
phones to send the calibrated values from driver itself.

What I suggest is,use tslib to calibrate and let it store values in /etc/pointercal. In SingletouchinputMapper::sync(nsecs_t when) calculate the absolute coordinates by parsing the values from /etc/pointercal file.

总结

以上是内存溢出为你收集整理的触摸屏校准值,如何在Android /内核中完成?全部内容,希望文章能够帮你解决触摸屏校准值,如何在Android /内核中完成?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1126934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存