前回の記事で、Gemini PDAのキーレイアウトをいじったのですが、さらにキーをいじりたくなった時のために、キーイベントについて調べてみました。
キーイベントの取得方法
各種イベントの取得方法については、こちらを参照しました。-p
オプションを付けて実行すると、デバイスのキー関連情報を得ることができます。出力された情報の見方については、8796nさんの記事が参考になります。
> adb shell
$ getevent -p
(中略)
# キーボード
add device 7: /dev/input/event2
name: "Integrated keyboard"
events:
KEY (0001): 0002 0003 0004 0005 0006 0007 0008 0009
000a 000b 000e 000f 0010 0011 0012 0013
0014 0015 0016 0017 0018 0019 001c 001d
001e 001f 0020 0021 0022 0023 0024 0025
0026 0028 002a 002c 002d 002e 002f 0030
0031 0032 0033 0034 0036 0038 0039 0067
0069 006a 006c 00f0 01d0
input props:
<none>
# ヘッドホンボタン、画面の開閉など
add device 8: /dev/input/event0
name: "ACCDET"
events:
KEY (0001): 0043 0044 0057 0058 0072 0073 00a4 0246
input props:
<none>
# 特殊キー
add device 9: /dev/input/event1
name: "mtk-kpd"
events:
KEY (0001): 0072 0074 00e7 0198
input props:
<none>
参考サイト
イベントコードの突合せとラベルの取得
一例として、/dev/input/event0でお世話になりそうなの画面開閉のイベントコードとラベルを以下のコマンドで取得してみます。ワタシは、VSCodeでターミナルを2つ並べて、実行させた状態で、Gemini PDAの画面を開閉させました。
> adb shell
# イベントコードとの突合せ
$ getevent /dev/input/event0
# Close
0001 0057 00000001
0000 0000 00000000
0001 0057 00000000
0000 0000 00000000
# Open
0001 0058 00000001
0000 0000 00000000
0001 0058 00000000
0000 0000 00000000
> adb shell
# ラベルの取得
$ getevent -lt /dev/input/event0
# Close
[ 16974.840324] EV_KEY KEY_F11 DOWN
[ 16974.840324] EV_SYN SYN_REPORT 00000000
[ 16974.884304] EV_KEY KEY_F11 UP
[ 16974.884304] EV_SYN SYN_REPORT 00000000
# Open
[ 17081.833159] EV_KEY KEY_F12 DOWN
[ 17081.833159] EV_SYN SYN_REPORT 00000000
[ 17081.916592] EV_KEY KEY_F12 UP
[ 17081.916592] EV_SYN SYN_REPORT 00000000
操作、コード、ラベルの調査結果
実際にその他の操作もおこなってみて、得られた結果が以下のとおり。
キー/操作 | コード(16進数) | コード(10進数) | ラベル |
---|---|---|---|
画面閉じる | 0057 | 87 | F11 |
画面開く | 0058 | 88 | F12 |
Esc | 0074 | 116 | POWER |
銀ボタン | 00e7 | 231 | SEND |
1 | 0002 | 2 | 1 |
2 | 0003 | 3 | 2 |
3 | 0004 | 4 | 3 |
4 | 0005 | 5 | 4 |
5 | 0006 | 6 | 5 |
6 | 0007 | 7 | 6 |
7 | 0008 | 8 | 7 |
8 | 0009 | 9 | 8 |
9 | 000a | 10 | 9 |
0 | 000b | 11 | 0 |
Del | 000e | 14 | BACKSPACE |
Q | 0010 | 16 | Q |
W | 0011 | 17 | W |
E | 0012 | 18 | E |
R | 0013 | 19 | R |
T | 0014 | 20 | T |
Y | 0015 | 21 | Y |
U | 0016 | 22 | U |
I | 0017 | 23 | I |
O | 0018 | 24 | O |
P | 0019 | 25 | P |
Enter | 001c | 28 | ENTER |
Tab | 000f | 15 | TAB |
A | 001e | 30 | A |
S | 001f | 31 | S |
D | 0020 | 32 | D |
F | 0021 | 33 | F |
G | 0022 | 34 | G |
H | 0023 | 35 | H |
J | 0024 | 36 | J |
K | 0025 | 37 | K |
L | 0026 | 38 | L |
\(BackSlash) | 0028 | 40 | APOSTROPHE |
LeftShift | 002a | 42 | LEFTSHIFT |
Z | 002c | 44 | Z |
X | 002d | 45 | X |
C | 002e | 46 | C |
V | 002f | 47 | V |
B | 0030 | 48 | B |
N | 0031 | 49 | N |
M | 0032 | 50 | M |
.(Period) | 0034 | 52 | DOT |
↑(Up) | 0067 | 103 | UP |
RightShift | 0036 | 54 | RIGHTSHIFT |
Ctrl | 001d | 29 | LEFTCTRL |
Fn | 01d0 | 464 | FN |
Alt | 0038 | 56 | LEFTALT |
Space | 0039 | 57 | SPACE |
,(Comma) | 0033 | 51 | COMMA |
←(Left) | 0069 | 105 | LEFT |
↓(Down) | 006c | 108 | DOWN |
→(Right) | 006a | 106 | RIGHT |
おまけ
単にコードとラベルの組み合わせが知りたい場合は、下記2つのコマンド結果を組み合わせればいいです。
> adb shell
$ getevent -p /dev/input/event2
$ getevent -lp /dev/input/event2
/dev/input/event0
KEY (0001): 0043 0044 0057 0058 0072 0073 00a4 0246
KEY (0001): KEY_F9 KEY_F10 KEY_F11 KEY_F12
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_PLAYPAUSE KEY_VOICECOMMAND
/dev/input/event1
KEY (0001): 0072 0074 00e7 0198
KEY (0001): KEY_VOLUMEDOWN KEY_POWER KEY_SEND KEY_RESTART
/dev/input/event2
KEY (0001): 0002 0003 0004 0005 0006 0007 0008 0009
000a 000b 000e 000f 0010 0011 0012 0013
0014 0015 0016 0017 0018 0019 001c 001d
001e 001f 0020 0021 0022 0023 0024 0025
0026 0028 002a 002c 002d 002e 002f 0030
0031 0032 0033 0034 0036 0038 0039 0067
0069 006a 006c 00f0 01d0
KEY (0001): KEY_1 KEY_2 KEY_3 KEY_4
KEY_5 KEY_6 KEY_7 KEY_8
KEY_9 KEY_0 KEY_BACKSPACE KEY_TAB
KEY_Q KEY_W KEY_E KEY_R
KEY_T KEY_Y KEY_U KEY_I
KEY_O KEY_P KEY_ENTER KEY_LEFTCTRL
KEY_A KEY_S KEY_D KEY_F
KEY_G KEY_H KEY_J KEY_K
KEY_L KEY_APOSTROPHE KEY_LEFTSHIFT KEY_Z
KEY_X KEY_C KEY_V KEY_B
KEY_N KEY_M KEY_COMMA KEY_DOT
KEY_RIGHTSHIFT KEY_LEFTALT KEY_SPACE KEY_UP
KEY_LEFT KEY_RIGHT KEY_DOWN KEY_UNKNOWN
KEY_FN
UNKNOWNってなんだよ!!!!!
ひとまずおしまい
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)