`
yinter
  • 浏览: 244607 次
  • 性别: 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

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

    电子-一种电控捕鼠器

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

    一种新型简易捕鼠器.doc

    三、新型简易捕鼠器的创新点 本实用新型的创新点在于采用艺术雕刻侧竹子材质制成的箱体、箱盖、推开门、定位杆、第一支撑板、第一杠杆板、抓捕箱、盖板、第二支撑板、第二杠杆板、锁定杆等组件,使捕鼠器具有艺术性...

    iot-mousetrap:智能捕鼠器项目

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

    捕鼠器

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

    电子-一种电击捕鼠器

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

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

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

    自动捕鼠器制作法

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

    高效殴打捕鼠的电路图

    高效殴打捕鼠的电路图 高效殴打捕鼠的电路图是电子工程领域中的一种创新设计,旨在捕捉老鼠并对其进行“殴打”。这种电路图的设计基于电子工程的基本原理,包括电路分析、电子元件的应用和安全设计等方面。 首先,...

    的说明文作文四篇.docx

    第三篇文章描述了一个铅笔刀的外观和使用方法,提到了它的设计特点和保养方式,这是关于日常用品设计与使用技巧的知识。文章中还提到了铅笔刀因使用不当导致损坏的情况,提醒人们要妥善使用和保养物品。 第四篇文章...

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

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

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

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

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

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

    三年级上册语文园地四习作观察日记公开课PPT学习教案.pptx

    这篇PPT是一个针对小学三年级学生的语文课程,主题是教授如何撰写观察日记,特别是关于观察动物的习作。观察日记是一种记录个人对周围事物细致观察的写作形式,它可以帮助孩子们提高观察力、思考力和表达力。 在...

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

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

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

    1. 设计理念:袖珍式简易捕鼠器的设计主要针对传统药物灭鼠和大型捕鼠器存在的问题,旨在提供一个体积小、结构简单、高效且环保的捕鼠解决方案。 2. 结构原理:捕鼠器采用V字形弹簧钢丝制成,弹簧两端设有弯折,...

Global site tag (gtag.js) - Google Analytics