在做SDL至Android的移植时,键盘事件是能正常捕获到,看了SLD的源码,发现用的device是 /dev/tty0,但是鼠标叫是不能成功捕获,总是得到 0,运行命令查看devices时,显示如下:
# cat /proc/bus/input/devices
cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=”qwerty”
P: Phys=
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=kbd mouse0 event0
B: EV=2f
B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff f
fffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe
B: REL=3
B: ABS=7
B: SW=1
进入 /dev/input 目录,发现在3个device文件:mice,mouse0,event0,分别 cat这3个文件,发现只有 event0 有反应,如下图:
Android Native 鼠标事件截图1
而且不管是点击鼠标还是按键,都有反应,但显示的是一堆乱码,而且点击鼠标出来的东西要多一点,难道这就是传说是的 touchscreen ?!
为了分析 event0 的返回值,写了一段代码 testmice.c,如下:
引用
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/input.h>
static int event0_fd = -1;
struct input_event ev0[64];
//for handling event0, mouse/key/ts
static int handle_event0() {
int button = 0, realx = 0, realy = 0, i, rd;
rd = read(event0_fd, ev0, sizeof(struct input_event) * 64);
if ( rd < sizeof(struct input_event) ) return 0;
for (i = 0; i < rd / sizeof(struct input_event); i++) {
printf(”", ev0[i].type, ev0[i].code, ev0[i].value);
if (ev0[i].type == 3 && ev0[i].code == 0)
realx = ev0[i].value;
else if (ev0[i].type == 3 && ev0[i].code == 1)
realy = ev0[i].value;
else if (ev0[i].type == 1) {
if (ev0[i].code == 158) {
//if key esc then exit
return 0;
}
} else if (ev0[i].type == 0 && ev0[i].code == 0 && ev0[i].value == 0) {
realx = 0, realy = 0;
}
printf(”event(%d): type: %d; code: %3d; value: %3d; realx: %3d; realy: %3d\n”, i,
ev0[i].type, ev0[i].code, ev0[i].value, realx, realy);
}
return 1;
}
int main(void) {
int done = 1;
printf(”sizeof(struct input_event) = %d\n”, sizeof(struct input_event));
event0_fd = open(”/dev/input/event0″, O_RDWR);
if ( event0_fd < 0 )
return -1;
while ( done ) {
printf(”begin handel_event0…\n”);
done = handle_event0();
printf(”end handel_event0…\n”);
}
if ( event0_fd > 0 ) {
close(event0_fd);
event0_fd = -1;
}
return 0;
}
用交叉编译器编译好后(编译过程就不再详述,请参见 blog:Android原生(Native)C开发之一:环境搭建篇),push至 emulator后执行后,切换到android 模拟器,在模拟器上点几下mouse,程序就会打出你点击的信息,效果如下,果然能正确得到点击的 mouse pos,如下图:
Android Native 鼠标事件截图2
分析上面的返回值,发现当按下 mouse left button 时,会得到4个事件,2个 type = 3 的事件返回了 pos x, pos y 的值,即mouse click pos, 另外1个 type = 1 的事件是按键事件(keydown),value就是按下的键的key,为0的应该就是 key的release事件,当松开 mouse时,也会得到两个 type = 1, 0 的事件,没有仔细去看它们的返回值,反正已经正确得到了 mosue的事件,下一步就是改SDL的事件驱动源码了…
参考链接: USB Mouse and Touch Screen (TS) Input(EN)[http://www.webkinesia.com/games/embedded.php]
文章转自:http://emck.avaw.com/?p=212
- 大小: 35.7 KB
- 大小: 52.3 KB
分享到:
相关推荐
捕鼠记-2页.pdf
MouseTrap permits people with movements impairments to access the computer. It uses image processing to translate the user's head movements into mouse events (movements, clicks) which allow users to ...
一款触屏小游戏,非常好玩,用老鼠夹围住老鼠吧!
行业分类-电子-关于变电站捕鼠装置的说明分析.rar
捕鼠器
捕鼠易案例分析.docx
高效殴打捕鼠的电路图
行业分类-电子-一种电控捕鼠器
行业分类-电子-一种电击捕鼠器
一种新型简易捕鼠器.doc
这是整理发布的一款自动捕鼠器制作法,自动捕鼠器制作法能给你需要了解的知识与资料,欢迎大家...该文档为自动捕鼠器制作法,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
把捕鼠笼卖到全国去.pdf
本文介绍的是一种简单的高效电子捕鼠器电路。红黑二接线柱分别接到金属电网上,电网间隙为2cm。
介绍一种袖珍式简易捕鼠器.pdf
电子政务-一种电磁捕鼠器.zip
本文介绍的电子捕鼠器采用蓄电池供电,非常适合野外使用。
电子政务-一种电磁铁捕鼠器.zip
电子政务-全开放微电子捕鼠器.zip
react-hotkeys React组件可侦听keydown和keyup键盘事件,定义和调度键盘快捷键。 使用hotkeys.js的fork进行特殊字符的keydown检测。 您为它提供了shortcu react-hotkeys React组件的键盘映射,以侦听keydown和keyup...
电子政务-基于霍尔元件的电子捕鼠器.zip