Freescale Linux カーネル (linux-2.6-imx) を使用する Congatech の BSP を使用しています。タッチスクリーンは 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 が正しいことを 4 重に確認しました。
// 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) },
ここからどこへ行けばいいですか?