Android 触摸屏位置关闭

标签 android kernel-module

我在 android 上使用触摸屏 (atmel maxtouch - atmel 1664s),发现越往右(X 变大),我的手指与屏幕上的触摸点之间的距离就越大。这是 IDC 文件、驱动程序或其他地方的设置问题吗?在同一屏幕上使用其他操作系统(如 Ubuntu)似乎没有此问题。

我用过这个IDC文件以尝试更正位置,但最后一行只是将触摸屏变成了触控板。

touch.deviceType = touchScreen
touch.orientationAware = 1
output.x = (raw.x - raw.x.min) * (output.width / raw.width)

最佳答案

内核驱动程序未正确检测和报告输入 X 报告的可能范围。

如果你使用 adb shell 并运行 getevent -il 你应该得到类似的东西

add device 6: /dev/input/event2
  bus:      0000
  vendor    0000
  product   0000
  version   0000
  name:     "touch_dev"
  location: ""
  id:       ""
  version:  1.0.1
  events:
    ABS (0003): ABS_MT_SLOT           : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
                ABS_MT_TOUCH_MAJOR    : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
                ABS_MT_POSITION_X     : value 0, min 0, max 1535, fuzz 0, flat 0, resolution 0
                ABS_MT_POSITION_Y     : value 0, min 0, max 2559, fuzz 0, flat 0, resolution 0
                ABS_MT_TRACKING_ID    : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
                ABS_MT_PRESSURE       : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
  input props:
    INPUT_PROP_DIRECT

你可以在我的设备上看到,X 值可以在 0 到 1535 之间。

如果您随后运行 getevent -trl/dev/input/event2,在屏幕上移动您的手指,并查看最大可能的 X 值,它应该对应于:

[  115960.226411] EV_ABS       ABS_MT_POSITION_X    000005ee

0x5ee = 1518,所以这是正确的。

触摸 Controller 上有一些参数可以调整缩放比例,需要与内核驱动程序报告的内容同步。标准的 Linux 主线驱动程序不能很好地处理那些与平台数据不同步的参数。有解决此问题的补丁尚未上游:https://github.com/atmel-maxtouch/linux/commit/002438d207

如果当您将手指移到最右边时,触摸仍在屏幕上,您可能可以通过执行以下操作来纠正它

output.x = raw.x / scale

其中比例是报告坐标与所需坐标的比率。你不能反过来做,因为较低的输入层会丢弃屏幕外的报告。

正确的解决方法是修复内核驱动程序中的错误,或调整触摸 Controller 上的范围设置。

您没有说明它是什么特定设备,因此很难提供进一步的帮助。

关于Android 触摸屏位置关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564830/

相关文章:

java - 将字符串转换为 unicode

php - 与 PHP 的应用程序交互 - 记住用户

c - 在 Linux 内核模块中读/写文件

c - kvm:模块验证失败:缺少签名和/或所需的 key - 污染内核

android - 主题更改不适用于 <4.0,因为它应该

android - '无法访问主线程上的数据库,因为它可能会长时间锁定 UI' 另外,我使用协程访问了房间

linux - module_platform_driver初始化顺序

c - 错误: Unknown symbol in module?

c - 编写 Linux 内核模块时获取用户进程 pid

java - 如何获得这个firebase值?