0

我正在使用来自 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) },

我从这里去哪里?

4

1 回答 1

0

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

于 2013-12-19T22:46:26.923 回答