我正在努力校准 Android 平台上的触摸屏。

它是来自供应商 0dfc 和产品 0001 的 USB 单点触控触摸屏,使用 dmesg 进行检查:

<6>[ 4118.091541] input: USB Touchscreen 0dfc:0001 as /devices/platform/usb20_host/usb2/2-1/2-1.3/2-1.3:1.0/input/input23

我正在推送 Vendor_0dfc_Product_0001.idc 文件 /data/system/devices/idc/(遵循 android source - IDC 的文档

我得到了具有单点触摸事件所有要求的触摸设备:
root@android:/ # getevent -il /dev/input/event3
add device 1: /dev/input/event3
  bus:      0003
  vendor    0dfc
  product   0001
  version   0202
  name:     "USB Touchscreen 0dfc:0001"
  location: "usb-usb20_host-1.3/input0"
  id:       ""
  version:  1.0.1
  events:
    KEY (0001): BTN_TOUCH
    ABS (0003): ABS_X                 : value 540, min 0, max 32767, fuzz 0, flat 0, resolution 0
                ABS_Y                 : value 289, min 0, max 32767, fuzz 0, flat 0, resolution 0
  input props:
    <none>

我还启用了 Pointer Location(Android 设置)中的 Developer options 选项,以便调试此阶段的校准。

设置 1
touch.deviceType = touchScreen

使用此设置 ( 1 ),触摸屏上的所有手势都发生在 左上角 - 无论手势(滑动)都向左/向右/向上/向下几个像素。所有的触摸屏都得到事件。所有的手势都是相反的 - 向左滑动时,指针向右;向上滑动时,指针向下。

设置 2
touch.deviceType = pointer
touch.gestureMode = pointer

使用此设置 ( 2 ),正如预期的那样,它显示了一个指针,放置在距离最后一个指针设备(鼠标)的位置。触摸屏上的所有手势(无论滑动大小如何)都像 setup 1 一样保持波动 - 每个滑动事件仅移动几个像素,并且轴反转。

设置 3
touch.deviceType = pointer
touch.gestureMode = spots

使用此设置 ( 3 ),结果与设置 2 相同。我这样做只是为了证明 IDC 文件被正确解释。

在这个阶段,正如您现在可以检查的那样,我有一个 工作 IDC 文件( setup 1 ) 需要为此触摸设备校准

我尝试了很多来自其他 IDC 文件(互联网样本)和来自 android source - IDC - 任何其他属性影响(不是一个单一的)的组合 - raw.* , output.* , touch.size.*
有谁知道如何在 Android 中正确校准触摸屏以指导我完成此过程?

谢谢

最佳答案

同样在这里,

但我的校准应用程序没有做任何事情。

过了一会儿,阅读/system/etc/init.sh 我发现以下内容:

mkdir -p/data/misc/tscal
触摸/数据/杂项/tscal/pointercal
chown 1000.1000/data/misc/tscal/data/misc/tscal/*
chmod 775/data/misc/tscal
chmod 664/data/misc/tscal/pointercal


只需手动运行这些命令,重新启动,然后启动校准应用程序

关于安卓触摸屏IDC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26021616/

10-12 06:22