[Armadillo:09097] Re: Armadillo USBキーボード 取得出来ないキーがある。
Yuichiro Goto
email@hidden
2013年 8月 1日 (木) 18:05:15 JST
後藤です。
> X上で取得出来ないキーの原因や、キーを取得する方法をご存知の方、ご教授を
> お願い致します。
XLookupString() が動作しない原因はわかりませんが、XLookupKeysym() という
関数を使用してみては如何でしょうか?
使用例)
ksym = XLookupKeysym((XKeyEvent*)&evt, 0);
if (ksym == XK_Up) {
/* 矢印キー上が押された */
} else if (ksm == XK_Down) {
/* 矢印キー下が押された */
} else if (ksym == XK_Left) {
/* 矢印キー左が押された */
} else if (ksym == XK_Right) {
/* 矢印キー右が押された */
}
尚、XK_Up 等 の KeySym の定義を使用するには以下のヘッダーファイルが必要
です。
#incluce <X11/keysym.h>
以上です。
(2013/08/01 14:38), 中室 純 wrote:
> 度々お世話になっております。
>
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
armadillo メーリングリストの案内