質問

キーボードデバイスからの入力をキャプチャすることで遊んでいます。

/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 両方に依存します typecode. 。たとえば、キープレスイベントの場合 value 平等です 1 キーリリースイベントの場合 0.

イベントデータを次のように調べることができます。

evtest /dev/input/eventX

どこ X キーボード(またはその他のイベントデバイス)のイベントデバイス番号です。 1つのキープレスまたはリリースは通常、3つのイベントを発します(EV_MSC, EV_KEYEV_SYN).

他のヒント

一部のキーには珍しいスキャンコードがあります...

から: http://www.beyondlogic.org/keyboard/keybrd.htm (編集付き):

これで101個のキーがあり、8ビットが256個の異なる組み合わせを作成します。したがって、キーごとに1バイトを送信する必要がありますよね?

いいえ。残念ながら、キーボードにあるキーのほんの一握りは拡張キーであるため、2つのスキャンコードが必要です。これらのキーの前には、E0(六角)があります。ただし、2つのスキャンコードでも停止しません。 E1,14,77、E1、F0,14、F0,77はどうですか?これで有効なスキャンコードになることはできませんか?また違う。一時停止/ブレークキーを押すと、たまたま送信されます。なぜ彼らがそんなに長くしなければならないのか私に聞かないでください!多分彼らは悪い日か何かを持っていたのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top