`
yinter
  • 浏览: 245124 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android原生(Native)C开发之三 鼠标事件篇(捕鼠记)

阅读更多
在做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

    1. 捕鼠记的主题:捕鼠记是一篇记录作者与一只顽皮老鼠之间的斗智斗勇的故事。通过这篇文章,我们可以了解作者对老鼠的不满和愤怒,以及作者最终捕获老鼠的方法和过程。 2. 老鼠的恶行:老鼠的恶行是导致作者愤怒的...

    捕鼠器源代码

    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

    传统的物理捕鼠器,如捕鼠笼和粘鼠板,可能无法满足变电站环境的安全需求,因为它们可能引发误触,导致设备损坏或人员受伤。因此,现代的变电站捕鼠装置通常采用智能技术,例如红外感应、超声波驱赶或电击捕杀,确保...

    捕鼠行动.jar

    一款触屏小游戏,非常好玩,用老鼠夹围住老鼠吧!

    捕鼠易案例分析.docx

    具体来说,可以开发配套的捕鼠诱饵,区分一次性与可重复使用产品。价格策略上,设立经济型和高端型,满足不同消费层次。销售渠道上,引入代理制度,激励代理商提升销售。促销上,加大广告投入,尤其在目标市场的媒体...

    电子-一种电控捕鼠器

    标题中的“电子-一种电控捕鼠器”指的是利用电子技术设计的一种自动化捕鼠设备,它可能结合了传感器、微控制器和其他电子元件,以非传统方式替代传统的物理陷阱来捕捉老鼠。这种电控捕鼠器可能更加高效、安全,且...

    iot-mousetrap:智能捕鼠器项目

    【描述】:“物联网项目‘智能鼠标陷阱’”意味着它运用了物联网(IoT)的核心理念,将物理世界中的捕鼠设备与互联网连接,使用户能够远程了解捕鼠器的状态,例如是否捕获到老鼠,或者捕鼠器是否需要维护。...

    捕鼠器

    "捕鼠器"项目似乎是一个使用TypeScript编写的软件应用,其核心可能是一个键盘事件管理和用户交互处理的库。TypeScript是一种由微软开发的强类型、面向对象的编程语言,它是JavaScript的一个超集,旨在提供更好的工具...

    电子-一种电击捕鼠器

    标题中的“电子-一种电击捕鼠器”可能是指一种使用电力作为驱动力的捕鼠设备,这在农业、环保或者家庭害虫控制领域中可能会用到。在电子技术的范畴内,这样的设备可能涉及到电路设计、电源管理、传感器应用等多个...

    四年级数学下册三角形三边的关系PPT学习教案.pptx

    假设黑猫警长在花园仓库和鼠洞之间设置了三个捕鼠陷阱,每个陷阱的位置相当于三角形的一个顶点,只要确保任何两个陷阱之间的距离大于鼠洞到任一陷阱的距离,黑猫警长就可以确保无论老鼠从哪个方向逃跑,都会落入陷阱...

    一种新型简易捕鼠器.doc

    该捕鼠器的创新之处在于其设计。捕鼠器的各个组件均采用艺术雕刻侧竹子材质,不仅增强了产品的观赏性,还提高了产品的耐用度和实用性。其中,箱体与箱盖之间采用了嵌入式的连接方式,使得结构更为稳固。同时,箱盖...

    自动捕鼠器制作法

    【自动捕鼠器制作法】是一种实用的物理装置,旨在高效、安全地捕捉害鼠,如家鼠。这种装置的设计原理通常基于利用老鼠的行为习性,例如对食物的追求和对新事物的好奇心,来诱导它们进入陷阱,然后通过机械或电子方式...

    电子政务-基于霍尔元件的电子捕鼠器.zip

    在电子捕鼠器中,霍尔元件通常用于检测老鼠的活动,例如通过检测鼠标的移动或体重变化来触发捕获机制。这种技术可以提高捕鼠效率,减少人力投入,并且更环保,因为它通常采用非致命方式捕捉,以便于后续的释放或处理...

    【少儿英语】少儿英语故事带翻译六篇.doc

    【篇三】《成功的秘密》借由苏格拉底与年轻人的对话,揭示了成功并非轻易可得。苏格拉底将年轻人放入水中,让他体验到濒临窒息的恐惧,以此象征挑战和困难。故事告诉孩子们,成功往往源于克服困难和挑战自我。 【篇...

    高效殴打捕鼠的电路图

    今天我们要探讨的是一个既有趣又实用的设计——高效殴打捕鼠的电路图。虽然这个概念听起来似乎带有一些戏谑的成分,但从技术角度来看,这个电路图确实是一个巧妙的创新应用,它不仅展示了电子工程基本原理的应用,还...

    蓄电池供电的升压式捕鼠器

    【蓄电池供电的升压式捕鼠器】是一种适用于野外环境的电子捕鼠设备,它采用蓄电池作为电源,克服了传统电子捕鼠器依赖市电的局限性。这种捕鼠器的特点在于其高效、小巧、轻便且节能,只有在老鼠触碰导线时才会启动...

    宠物医院实习总结三篇.docx

    - **资源开发**:中国拥有丰富的宠物品种资源和宠物饲料资源,这为动物专家和爱好者提供了广阔的研究开发空间。 - **职业发展**:实习经历让作者深刻认识到理论与实践结合的重要性,对未来从事兽医行业的人员提出了...

    高效殴打捕鼠电路原理图

    在探讨捕鼠方法时,传统的捕鼠器可能因效率低下或处理不当等问题而饱受争议。最近,一种名为“高效殴打捕鼠电路”的新型装置受到了人们的关注。这一设备的设计理念源自基础的电路原理,结合了现代电子技术与动物生理...

    电子政务-一种电磁捕鼠器.zip

    电子政务-一种电磁捕鼠器.zip

    介绍一种袖珍式简易捕鼠器.pdf

    为此,一种新型的袖珍式简易捕鼠器应运而生,它不仅体积小巧、结构简单,而且在高效和环保方面表现出色,提供了一种更加合理且易于操作的灭鼠方案。 该捕鼠器的设计理念是针对传统药物灭鼠和大型捕鼠器存在的诸多...

Global site tag (gtag.js) - Google Analytics