在做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 有反应,如下图:
而且不管是点击鼠标还是按键,都有反应,但显示的是一堆乱码,而且点击鼠标出来的东西要多一点,难道这就是传说是的 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,如下图:
分析上面的返回值,发现当按下 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的事件驱动源码了...
分享到:
相关推荐
捕鼠记-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 ...
物联网项目“智能鼠标陷阱” 昂首阔步的文档: :
捕鼠器::路轨 是一个JavaScript库,用于处理由编写的Web应用程序中的键盘快捷键。 mousetrap-rails gem将Mousetrap javascript库与Rails资产管道集成在一起。安装将捕鼠器宝石添加到应用程序将此行添加到您的应用...
一款触屏小游戏,非常好玩,用老鼠夹围住老鼠吧!
捕鼠器 使用 WDF 框架构建的 Windows 内核模式类筛选器驱动程序 (KMDF)。 为每个鼠标反转滚轮 随附驱动程序安装程序应用程序 MouseTrapInstaller.exe 必须与打包文件在同一路径 以管理员身份安装...
行业分类-电子-关于变电站捕鼠装置的说明分析.rar
捕鼠器
捕鼠易案例分析.docx
键盘快捷键 兼容性 Ember.js v2.18或更高版本 Ember CLI v2.13或更高版本 安装 在您的ember-cli项目中: ember install ember-keyboard-shortcuts 用法 我们提供了两个用于设置和删除键盘快捷键的功能。...
是一个图形用户界面,用于显示Excel电子表格中列出的鼠标菌落数据。 它被设计用于最多可容纳100-200只动物的小型小鼠群落; 对于较大的菌落,显示和速度都不能令人满意。 特征: 读取Excel文件的可选工作表 每只动物...
高效殴打捕鼠的电路图
行业分类-电子-一种电控捕鼠器
行业分类-电子-一种电击捕鼠器
一种新型简易捕鼠器.doc
捕鼠器暂停 捕鼠器插件可暂停和取消暂停所有或特定组合 安装 npm install mousetrap-pause --save 用法 使用browserify将捕鼠器与暂停功能配合使用: var mousetrap = require ( 'mousetrap-pause' ) ( require ...
这是整理发布的一款自动捕鼠器制作法,自动捕鼠器制作法能给你需要了解的知识与资料,欢迎大家...该文档为自动捕鼠器制作法,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
react-hotkeys React组件可侦听keydown和keyup键盘事件,定义和调度键盘快捷键。 使用hotkeys.js的fork进行特殊字符的keydown检测。 您为它提供了shortcu react-hotkeys React组件的键盘映射,以侦听keydown和keyup...
把捕鼠笼卖到全国去.pdf
捕鼠器 捕鼠器是一个用于处理Java键盘快捷键的简单库。 它根据Apache 2.0许可获得许可。 压缩后约2kb ,压缩后约4.5kb ,没有外部依赖性,并且已经在以下浏览器中进行了测试: Internet Explorer 6+ 苹果浏览器...