[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 メーリングリストの案内