6

私はキーボードデバイスからの入力をキャプチャして遊んでいます:

/dev/input/by-path/platform-i8042-serio-0-event-kbd 

私にとって、それが返すものの仕様があるかどうか疑問に思っていました。

od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd 

聞くこと。主に特定のキーの動作に興味があります。メタ、矢印キー、テンキーのスラッシュ。

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 バイトが一致する値として含まれていますが、これらが特別な理由はありますか?

4

2 に答える 2

15

/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します。たとえば、キー プレス イベントでは equals 、キー リリース イベントでは.typecodevalue10

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

evtest /dev/input/eventX

X、キーボード (またはその他のイベント デバイス) のイベント デバイス番号です。通常、キーを 1 回押すか離すと、3 つのイベント ( EV_MSCEV_KEYおよびEV_SYN) が発行されます。

于 2010-10-06T21:24:34.203 に答える
3

一部のキーには通常とは異なるスキャン コードがあります...

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

現在、101 個のキーがあり、8 ビットで 256 の異なる組み合わせが作成されるため、キーごとに 1 バイトを送信するだけで済みますよね?

いいえ。残念ながら、キーボードにある少数のキーは拡張キーであるため、2 つのスキャン コードが必要です。これらのキーの前には E0 (16 進数) が付きます。しかし、2 つのスキャン コードにとどまりません。E1,14,77,E1,F0,14,F0,77はどうですか!これは有効なスキャン コードではありませんか? 再度間違える。Pause/Break キーを押したときに送信されます。なぜそんなに長くしなければならないのか私に聞かないでください!多分彼らは悪い日か何かを過ごしていましたか?

于 2010-09-07T20:32:24.630 に答える