質問
キーボードデバイスからの入力をキャプチャすることで遊んでいます。
/dev/input/by-path/platform-i8042-serio-0-event-kbd
私にとって、そして私はそれが返されるものの仕様があるかどうか疑問に思っていました。
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
聞くために。特定のキーの動作のために、私は主に興味があります。メタ、矢印キー、Numpadフォワードスラッシュ。
0520300 ac 9d 86 4c 6b 0f 04 00 04 00 04 00 (db) 00 00 00
0520320 ac 9d 86 4c 8c 0f 04 00 01 00 (7d) 00 00 00 00 00
0520340 ac 9d 86 4c 95 0f 04 00 00 00 00 00 00 00 00 00
私がこれまで見た他のすべてのキーは、括弧内の2つのバイトを一致する値として持っていますが、これらが特別な理由はありますか?
解決
/dev/input/by-path/platform-i8042-serio-0-event-kbd
単なるシンリンクです /dev/input/eventX
イベントデバイスファイル。データは、イベントデバイスファイルから読み取ることができます
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
で定義されています /usr/include/linux/input.h
.
の可能な値 type
接頭辞が付けられています EV_
。の可能な値 code
による type
. 。それらが付いています KEY_
また BTN_
また REL_
あまりにも。の可能な値 value
両方に依存します type
と code
. 。たとえば、キープレスイベントの場合 value
平等です 1
キーリリースイベントの場合 0
.
イベントデータを次のように調べることができます。
evtest /dev/input/eventX
どこ X
キーボード(またはその他のイベントデバイス)のイベントデバイス番号です。 1つのキープレスまたはリリースは通常、3つのイベントを発します(EV_MSC
, EV_KEY
と EV_SYN
).
他のヒント
一部のキーには珍しいスキャンコードがあります...
から: http://www.beyondlogic.org/keyboard/keybrd.htm (編集付き):
これで101個のキーがあり、8ビットが256個の異なる組み合わせを作成します。したがって、キーごとに1バイトを送信する必要がありますよね?
いいえ。残念ながら、キーボードにあるキーのほんの一握りは拡張キーであるため、2つのスキャンコードが必要です。これらのキーの前には、E0(六角)があります。ただし、2つのスキャンコードでも停止しません。 E1,14,77、E1、F0,14、F0,77はどうですか?これで有効なスキャンコードになることはできませんか?また違う。一時停止/ブレークキーを押すと、たまたま送信されます。なぜ彼らがそんなに長くしなければならないのか私に聞かないでください!多分彼らは悪い日か何かを持っていたのでしょうか?