* ボタンドライバ [#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                                                                            
 # 



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS