摘要:先讲一下基本一般的输入处理方式的知识。一般的输入输出采用生产者,消费者模式,并构造队列进行处理,如下图 这种输入模型在android的系统中很多地方采用,先从最底层说起:为了由于触屏事件频率很高,android设计者讲一个循环线程,拆分为两级循环,并做了个队列来进行缓冲。InputDispatcherThread和InputReaderThread InputDispatcherThread在自己的循环中对InputReaderThread请求同步,InputReaderThread收到同步信号后,把事件放入InputDispatcher的队列中。具体代码如下:InputReader.cpp中
阅读全文
随笔分类 - 输入子系统
摘要:简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息。使用说明 单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_MT_POSITION_Y,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。最后调用 input...
阅读全文
摘要:Android2.3的输入事件流程与以前版本有了较大的不同,这里做一下详细的分析,最后我把自己分析时用的演示代码放在了这里:http://code.google.com/p/flying-on-android/下面的分析都是基于这些源码的,大家可以下载下来一边看源码一边看文档。源码里只要关注FlyingEvent这个类就可以了。如果只想看一下演示结果,可以直接把包里的flying放到机器的/system/bin目录执行,打开logcat后就可以看到演示输出。运行程序时,机器屏幕会有异象产生,很正常,因为这个程序原本是用于显示SurfaceFlinger的,这次为了演示EventHub稍微改了一
阅读全文
摘要:最近玩了下Android-x86的eclair,主题风格相对之前的1.6好看了很多,而且还加了不少之前没有的功能。但是触摸屏不能用,在终端下用getevent命令查看事件信息,发现得到的绝对坐标有很大出入(4096*4096)。于是想自己试着去解决这个问题。同时在Ubuntu下测试,发现居然没有getevent命令,当然可以用cat /dev/inpu/eventX查看事件信息,但是显示出来的是一堆乱码,怎么办?那就自己编写个Linux输入设备的测试小程序来检测问题所在吧,最后测试结果发现和在Android下一样的问题-没有校正,总算也小有成就。接下来应该再dig触摸屏的校正问题:-) 现在.
阅读全文
摘要:分析一下 Android 是如何读取按键及Touch Panel 的驱动的。主要在$(ANDROID_DIR)/frameworks/base/libs/ui/EventHub.cpp这个文件中,这是在 HAL 层,将一步步分析 Android 上层是如何接受事件的。一, 先看一下 Android HALClass EventHub 在$(ANDROID_DIR)/frameworks/base/include/ui/eventhub.h 定义.i. scan_dir(const char *dirname) // dirname = "/dev/input" 扫描 dir
阅读全文
摘要:Android键盘系统 Android中的键盘系统的生命周期从系统的启动开始到系统的关闭一直存在着,因为,在这整个过程中我们希望按下的没一个按键都会有相应的事件发生。通过调研发现,Android键盘系统贯穿着Android框架的最底层——Linux内核(驱动)到上层JAVA架构层——SystemServer。与android键盘系统关系紧密的几个文件从下层往上层依次为:Goldfish_event.c(处于Linux内核)、EventHub.cpp(硬件抽象层)、com_android_server_KeyInputQueue.cpp(JNI本地方法)KeyInputQueue.java、Wi
阅读全文
摘要:EventHub.cpp文件中open_device函数浅析 用户态中,与内核态联系紧密的一个函数是open_device,它位于EventHub.cpp文件中,该函数有大量的底层操作,以完成上层对硬件的操作。该函数的首部为:int EventHub::open_device(const char *deviceName)其中参数有scan_dir()函数获得。在这里,deviceName=”/dev/input/event0”for (attempt = 0; attempt < 10; attempt++) {fd = open(deviceName, O_RDWR);if (fd
阅读全文
摘要:Android事件处理分析http://blog.csdn.net/linweig/archive/2010/02/27/5330391.aspx按键事件 对于按键事件,调用mDevices->layoutMap->map进行映射。映射实际是由 KeyLayoutMap::map完成的,KeyLayoutMap类里读取配置文件qwerty.kl ,由配置 文件 qwerty.kl 决定键值的映射关系。你可以通过修 改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系。 JNI 函数 在 frameworks/base/service
阅读全文
摘要:Android 事件处理--学习笔记2(金海建)目的:通过全面的分析Android的鼠标和键盘事件。了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件。主要学习内容:1. 接收并处理鼠标事件:按下、弹起、移动、双击、长按、滑动、滚动2. 接收并处理按键事件:按下、弹起3. 模拟鼠标/按键事件1. Android事件现代的用户界面,都是以事件来驱动的来实现人机交换的,而Android上的一套UI控件,无非就是派发鼠标和键盘事件,然后每个控件收到相应的事件之后,做相应的处理。如Button控件,就只需要处理Down、move、up这几个事件,Down的时候重绘控件,move
阅读全文
摘要:多点触摸协议 ------------------------- Copyright (C) 2009 Henrik Rydberg <rydberg@euromail.se > 讨论: datangsoc@hotmail.com 简介 为了使用功能强大的多点触控设备,一种方案是上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息。 使用说明 任何一个手指的触控数据都是打包成 ABS event 包按顺序发送,只有 ABS_MT event包能作为多点触控数据被识别,调用 input_mt_sync()函数可以产生一个 S
阅读全文
摘要:Linux 的 Input Device 是重要的一個 subsystem,在進行實例介紹前,先大略了解一下相關的 API。Linux Input Deviceinput.c是Linux的”input”驅動程式,主要支援鍵盤與滑鼠的輸入;input.c介面有趣的地方是採用了事件(event)的方式來處理輸入,以下是input.c介面重要的資料結構與函數:* struct input_dev* void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)* void input_
阅读全文
摘要:好久没来了!写点东西.关于linux 2.6下面的键盘驱动的实现. 2.6内核采用"input sub system" 的概念.将输入驱动分成三块: driver,input core和Event handler. "一个输入事件,如鼠标移动,键盘按键按下,joystick的移动等等通过 Driver -> InputCore -> Eventhandler -> userspace 的顺序到达用户空间传给应用程序。" 关于输入子系统详细的文章有一个老兄写了一篇: http://blog.csdn.net/colorant/archiv
阅读全文
摘要:--作者:老树--发布时间:2010-6-2 15:01:19--Android 架构解析及驱动 键盘篇一、用户空间 ADROID 2.1 架构解析 7 键盘 以上链接,详细介绍了Android用户空间按键的操作,最终通过不断轮询所有设备,直到读取有POLLIN事件产生的设备状态:if(mFDs[i].revents & POLLIN) {res = read(mFDs[i].fd, &iev, sizeof(iev));......二、底层驱动1.设备注册static struct resource s3c_keypad_resource[] = {[0] = { .star
阅读全文
摘要:Linux 的 Input Device 是重要的一个 subsystem,在进行实例介绍前,先大略了解一下相关的 API。 Linux Input Device input.c是Linux的"input"驱动程式,主要支援键盘与滑鼠的输入;input.c介面有趣的地方是采用了事件(event)的方式来处理输入,以下是input.c介面重要的资料结构与函数: * struct input_dev * void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
阅读全文
摘要:浅析linux下键盘设备工作和注册流程【浅析linux下鼠标驱动的实现】input_init()=>=>class_register(&input_class);注册input类input_proc_init();创建proc下的目录和文件register_chrdev(INPUT_MAJOR, "input", &input_fops);注册驱动程序到cdev_map上,以待驱动设备.drivers/input/keyboard/pxa3xx_keypad.c为我们的keyboard设备,pxa3xx_keypad_probe=>requ
阅读全文