ふと、とあるパソコンに接続されているUSBデバイスの一覧を眺めていて気になるデバイスがありました。
USBクラスコード「03 01 01」は HID キーボードのはずですが、 Windows デバイスマネージャ上ではこのデバイスに付随する機能は HID マウスと認識していました。
HID (Human Interface Device)
HID という規格は人間が操作するボタン・レバー・ツマミ等のあらゆる入力装置を表現しようとした壮大な規格で、 HID クラスのデバイスが実際にどんな機能を持っているかはレポートディスクリプターに詳細に記述されています。
また、 HID デバイスはしばしば適切ではないクラスコードになっていることがあります。
というわけで、実際にダンプしてパースさせてみました。 *1
レポートディスクリプターはとても読みにくいですね。
Application Collection が Mouse
になっているので HID マウスと認識するのが正しいように見えます。
しかし、よく注意してみると X
, Y
の形式が Abs
になっています。
通常のマウスは相対座標を返す Rel
になりますが、 Abs
の場合は絶対座標を返すタッチパネルということになります。
この方式のタッチパネルは指を識別できずマルチタッチに対応できないので現代では珍しく、他には QEMU で usb-tablet
を指定したデバイスで見かけることができます。
キーボード、マウス、ゲームパッドを除いたほとんどのボタン(音量ボタンや電源ボタンなど)は HID では Consumer Control
に分類され、 HID Consumer Control デバイスはデバイスマネージャー上にたくさん定義されていることがあります。
しかし、件のデバイスはデスクトップPCで当然タッチパネルも見当たらず、なぜこのような謎のデバイスが認識されているのかよくわからない状況でした。
解決編
この調査をしていたとき、画面が汚れていたので軽く拭き取っていたところ、何故かマウスカーソルが予期せぬ移動したことに気づきました。
もしかしてこのディスプレイ、タッチパネルだった!?
ということで色々調査した結果、使っているディスプレイは USB-C で接続するとタッチパネルになることがわかりました。 購入時は USB-C 接続できるモバイルディスプレイが欲しかっただけで、タッチパネルかどうか気にしてなかったのでいままで気付いていませんでした。
なお、 MYOS でも HID キーボードと表示されてますが、ちゃんとタッチパネルとして使うことができました。 (MYOS 上で動作している時にタッチパネルを発見しました)