2012-01-05 6 views
1

私は組み込みシステムで作業しています。ユーザーがキーボード(すなわちバーコードスキャナ)をエミュレートするHIDデバイスを実際に接続しているかどうかを判断する必要がありますキーボード。USB HIDデバイスがキーボードをエミュレートしているときを検出する信頼できる方法

iManufacturer、iProduct、iSerialNumber、およびiInterfaceの文字列記述子を調べて、手がかりを得ることができます。たとえば、バーコードリーダーが接続されている場合、「リーダー」または「スキャナ」がiProduct文字列に表示されることが確認されています。同様に、iInterface文字列には「エミュレーション」があります。しかし、私はこれらの文字列だけに頼ることに少し躊躇しています(文字列の場合は扱いやすいほど簡単ですが、キーワード/フレーズの略語などの扱いはすぐに面倒です)。

私はUSB 1.10と1.11仕様では、レポート記述子にもいくつかの手掛かりがあることがわかりました。たとえば、グローバル使用アイテムはGeneric Desktopの場合は0x0501、ローカル使用アイテムは0x0906(キーボード)でなければなりません。違いを検出するのに役立つレポート記述子には他に何かがありますか?

これは限られたリソースを持つ組み込みシステムなので、ベンダーIDとプロダクトIDリストに頼らないようにしたいと思います。提案?私が見逃したことはありますか?

+0

あなたは、このようなことをLinuxがどのように扱うと言いましたか? –

+0

私は、Linuxにキーボードとかキーボードのようなものをあいまいにする必要があるとは思わない。 – Throwback1986

答えて

5

これを行うための絶対的な信頼できる方法はありません。キーボードが何であるかないかについての絶対的な定義がないため、「キーボードをエミュレートする」と「キーボードである」という違いはありません。この境界は、補助デバイスやコーディング・キーボードのようなものの周りに特に曖昧になりますが、それを超えても、キーボードをエミュレートする方法は、キーボードが通信するのとまったく同じ方法でUSBケーブルを介して通信するという根本的な問題があります。

あなたが提案した方法は、明らかにキーボード以外のもの(いくつかのケースでは偽陽性の危険性が非常に低い)を識別するための妥当なヒューリスティックですが、ヒントを探すヒューリスティックは、可能である。

+0

私は完全に合意しています。私の質問は、より堅牢なソリューションを見つける最後の努力でした。ありがとう! – Throwback1986