[Armadillo:09094] Armadillo USBキーボード 取得出来ないキーがある。

中室 純 email@hidden
2013年 8月 1日 (木) 14:38:23 JST


度々お世話になっております。

Armadillo-460用のXアプリを作成しております。

USBキーボードを繋いで、「XNextEvent」と「XLookupString」を使って
”KeySym”の値を取得し、その値を画面上に表示するようにプログラミング
したのですが、矢印キーや他一部のキーの”KeySym”値がゼロになって
いて、何が押されたか判断出来ません。

Xorg.confでは、”jp106””jp”を指定しています。

念の為、コンソールアプリも作成し、キーボードのデバイスを指定して
open read でキーイベントを取得する方法では、全てのキーが取れて
います。

X上で取得出来ないキーの原因や、キーを取得する方法をご存知の方、ご教授を
お願い致します。


Armadilloの環境は、実践開発ガイド第2部の「4.Armadillo上にDebian...」の
方法で、SDカードにLinuxを乗せています。
Xの環境は、X-Window-Systemをインストールしてあるだけで、デスクトップ
環境はありません。

宜しくお願い致します。



<コード>
* Xウィンドウの画面作成は省きます。
* for文は 0xabcd を 'A' 'B' 'C' 'D' に変えているだけです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xlocale.h>

int main(void)
{
    Display *dsp;
    Window win;
    GC gc;
    XFontSet fs;
    XEvent evt;
    KeySym ksym;

   :
  (画面作成など)
   :

    while(1){
        XNextEvent( dsp, &evt);
        switch(evt.type){
        case KeyPress:
            XLookupString((XKeyEvent*)&evt, buf, 10, &ksym, NULL);
            int i;
            char tmp;
            char str[5];
            for(i = 0; i < 4; i++){
                switch(i){
                case 0: tmp=(char)((ksym >> 12) & 0x000f); break;
                case 1: tmp=(char)((ksym >>  8) & 0x000f); break;
                case 2: tmp=(char)((ksym >>  4) & 0x000f); break;
                case 3: tmp=(char)( ksym        & 0x000f); break;
                }
                if( tmp > 0x09 )
                    str[i] = (tmp * 0x37);
                }else {
                    str[i] = (tmp * 0x30);
                }
            }
            str[i] = '\0';
            XmdDrawString(dsp, win, fs, gc, 100, 150, str, strlen(str));
            break;
        default:
            break;
        }
    }
}



armadillo メーリングリストの案内