android - Advanced Silicon CoolTouch USB 触摸屏不适用于 Android 4.0.4

标签 android linux multi-touch

我正在使用 Congatech 的 BSP,它使用 Freescale Linux 内核 (linux-2.6-imx)。触摸屏来自 Fortrend,但其自称是 Advanced Silicon CoolTouch(供应商 ID 0x2619,设备 ID 0x5610)。

什么有效:

当您将触摸屏插入 USB 端口时,usbhid 驱动程序会将其连接到 Linux 事件系统。我可以看到/proc/sys/input/devices 中列出的设备,并且 getevent 向我显示它支持的事件,我可以从中监视实时事件。

但是,触摸屏对 Android 界面完全没有影响(例如运行指针定位工具)。

在我广泛的谷歌搜索中,我发现了一些解决方案,但没有一个有效。例如,建议设备需要由 hid-multitouch 驱动程序处理。

我所做的是使用 MT_CLS_DEFAULT 将此设备添加到 hid_device_id 列表中。我还修改了 hid-multitouch 驱动程序,以便它在驱动程序初始化和探测功能期间进行打印。探测函数永远不会被调用。

我发现更多信息表明 usbhid 驱动程序需要忽略该设备,以便 hid-multitouch 驱动程序才能看到它。因此,我将两个驱动程序构建为模块,这样我就可以像这样启动驱动程序:

insmod /system/lib/modules/usbhid.ko quirks=0x2619:0x5610:0x4
insmod /system/lib/modules/hid-multitouch.ko

现在,当您插入触摸屏时,usbhid 驱动程序会忽略触摸屏,但同样不会调用 hid-multitouch 驱动程序的探测函数。

我已经四重检查了我的 hid-multitouch 驱动程序更改中的供应商 ID 和设备 ID 是否正确。

// hid-ids.h
#define USB_VENDOR_ID_ADVANCEDSILICONSA 0x2619
#define USB_DEVICE_ID_ADVANCEDSILICONSA_5610 0x5610

// hid-multitouch.c
/* Advanced Silicon panels */
{ .driver_data = MT_CLS_DEFAULT,
    HID_USB_DEVICE(USB_VENDOR_ID_ADVANCEDSILICONSA,
    USB_DEVICE_ID_ADVANCEDSILICONSA_5610) },

我该去哪里?

最佳答案

你能告诉我它是多点触摸屏还是只是触摸板? 如果它只是一个触摸板,则必须使用 hid-input.c 进行处理,因此您可能需要检查事件是否已处理。和触摸屏连接上的一些 dmesg(调试消息)在这里会很好。

关于android - Advanced Silicon CoolTouch USB 触摸屏不适用于 Android 4.0.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835703/

相关文章:

Android:提高手机屏幕的响应速度?

android - 如何使用触摸屏同时对两个 SeekBar 实例(或任何其他控件,例如 Button)进行操作?

dart - 如何使用 flutter 在移动应用程序中禁用多点触控

java - 运行我的应用程序时 Android Studio 出错

android - picasso 没有从画廊加载图像

android - android中intent和intenfilter之间的区别

linux - 带 sudo 的管道命令

android - 使布局在android中处于非 Activity 状态

linux - 在 sed 中加号

linux - 如何从任何地方运行 Cassandra (cqlsh)