* ボタンドライバ [#na26a6e8] 最近の Linux では LED 同様,GPIO に接続されたボタンも抽象化されていて,共通のインターフェースで利用することができるようになっています. で,ボタンがどのように見えるかというと,なんと''キーボードの1つのキー''としての扱いとなっています. ** HDL-GXR では [#q7fe9dab] HDL-GXR に先日移植したパッチでは :電源ボタン|KEY_POWER :コピーボタン|KEY_COPY :リセットボタン|KEY_RESTART に割り当てています. ** キーボードイベントの捕捉 [#q8e575af] ユーザランドプログラムからはキーボードのキーの press / release は,/dev/input/event0, event1, ... (デバイスの認識順序によって割り当ては異なる)から取得することができます. 試しにダンプしてみましょう. # hexdump -C /dev/input/event0 00000000 15 44 44 49 58 85 01 00 01 00 74 00 01 00 00 00 |.DDIX.....t.....|← 電源ボタン press 00000010 15 44 44 49 64 85 01 00 00 00 00 00 00 00 00 00 |.DDId...........|← SYN 00000020 15 44 44 49 c5 e2 07 00 01 00 74 00 00 00 00 00 |.DDI......t.....|← 電源ボタン release 00000030 15 44 44 49 cd e2 07 00 00 00 00 00 00 00 00 00 |.DDI............|← SYN 00000040 17 44 44 49 14 c4 02 00 01 00 85 00 01 00 00 00 |.DDI............|← コピーボタン press 00000050 17 44 44 49 20 c4 02 00 00 00 00 00 00 00 00 00 |.DDI ...........|← SYN 00000060 17 44 44 49 77 cb 04 00 01 00 85 00 00 00 00 00 |.DDIw...........|← コピーボタン release 00000070 17 44 44 49 7e cb 04 00 00 00 00 00 00 00 00 00 |.DDI~...........|← SYN 00000080 1f 44 44 49 2d ae 05 00 01 00 98 01 01 00 00 00 |.DDI-...........|← RESET ボタン press 00000090 1f 44 44 49 39 ae 05 00 00 00 00 00 00 00 00 00 |.DDI9...........|← SYN 000000a0 1f 44 44 49 a2 78 09 00 01 00 98 01 00 00 00 00 |.DDI.x..........|← RESET ボタン release 000000b0 1f 44 44 49 a9 78 09 00 00 00 00 00 00 00 00 00 |.DDI.x..........|← SYN ^C landisk:~# 各イベントは linux/include/input.h 内の struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value; }; の形で通知されています. というわけで,これを解釈する perl スクリプトを作ってみました. #ref(event_dump) こんな形でダンプされます. # ./event_dump /dev/input/event0 sec: 1229211366.618994 type: EV_KEY code: KEY_POWER value: 1 sec: 1229211366.619006 type: EV_SYN code: 0 value: 0 sec: 1229211367.986704 type: EV_KEY code: KEY_POWER value: 0 sec: 1229211367.986712 type: EV_SYN code: 0 value: 0 sec: 1229211370.623228 type: EV_KEY code: KEY_COPY value: 1 sec: 1229211370.623240 type: EV_SYN code: 0 value: 0 sec: 1229211371.721910 type: EV_KEY code: KEY_COPY value: 0 sec: 1229211371.721918 type: EV_SYN code: 0 value: 0 sec: 1229211373.120396 type: EV_KEY code: KEY_RESTART value: 1 sec: 1229211373.120407 type: EV_SYN code: 0 value: 0 sec: 1229211374.642596 type: EV_KEY code: KEY_RESTART value: 0 sec: 1229211374.642604 type: EV_SYN code: 0 value: 0 ^C #