web-dev-qa-db-ja.com

16進キーボードスキャンコードとUSB HIDキーボードドキュメントのリスト

さまざまなキーボードレイアウトの16進キーボードスキャンコードのリストはどこにありますか?

Bashコマンドecho -neに続いてエスケープされた16進キースキャンコードとHIDデバイスを使用して、(偽の)USB HIDキーボードでキーコードを送信しています。

echo -ne "\x00\x00\x00\x38\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

uSキーボードレイアウトのスラッシュ(/)。

私のキーボードレイアウト(CH)では

echo -ne "\x00\x00\x00\x24\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

スラッシュ。したがって、これらすべてのリストが存在する必要があると思います。それでも、私は Sレイアウト のリストを見つけることができましたが、他のキーボードレイアウトのリストは見つかりませんでした。

2行目でキーの入力が停止することは知っていますが、これらのエスケープシーケンスの構文はよくわかりません。最初の\x00x02に変更すると、入力されたキーが「シフト」されることを知っています。しかし、なぜさらに6つの修飾子がありますか? ctrlalt、...の略ですか?そして、どれがどれを表しますか?

この構文のドキュメントは本当にクールです。まだ見つけられませんでした。

(Nexus 7 2012でKali Nethunterを使用しています)

14
Nico Hauser

「スキャンコード」(実際には使用コードのインデックス)は、10章「キーボード/キーパッドページ(0x07)」の SB HID Usage Tables 仕様でusb.orgに公開されています。典型的なキーボードレポートのレイアウトは、付録B「ブートインターフェイス記述子」の「B.1プロトコル1(キーボード)」セクションの HIDのUSBデバイスクラス仕様 にあります。

キーボードレポート形式は次のように説明されています。

Byte 0: Keyboard modifier bits (SHIFT, ALT, CTRL etc)
Byte 1: reserved
Byte 2-7: Up to six keyboard usage indexes representing the keys that are 
          currently "pressed". 
          Order is not important, a key is either pressed (present in the 
          buffer) or not pressed.

USB仕様ではキーボードレイアウトが定義されていないことに注意してください。特定の主要な機能に割り当てられた使用法コードを単にリストします。文字「a」は、たとえば使用コード0x04です。大文字の「A」が必要な場合は、バイト0修飾子ビットを設定して「左シフト」(または「右シフト」)を選択する必要もあります。

レポートバッファーの正確な形式は、キーボードがUSBポートに接続されたときにホストコンピューターに送信されるレポート記述子に依存するため、上記は単なる(非常に典型的な)例です。

35
aja