input事件--->按键事件的基本实现
本程序基于TINY4412开发板,程序已经验证过,完全正确:
那么,如何来写这样的一个驱动程序呢?
1、分配一个input_dev结构体
2、设置
3、注册
4、硬件相关的代码,比如中断,定时器,休眠等等的操作
#include <linux/module.h> #include <linux/fs.h> #include <linux/sched.h> #include <linux/delay.h> #include <linux/atomic.h> #include <linux/types.h> #include <linux/interrupt.h> #include <linux/kthread.h> #include <linux/slab.h> #include <linux/io.h> #include <linux/gpio.h> #include <linux/dma-mapping.h> #include <linux/platform_device.h> #include <linux/ioport.h> #include <linux/miscdevice.h> #include <linux/uaccess.h> #include <linux/input.h> #define DEV_NAME "test-dev" //中断处理函数 irqreturn_t handler(int num, void *data) { struct input_dev *dev; dev = data; printk("%d: irq handler\n", num); //input_report_key(dev, KEY_ESC, 1); //上报事件 #if 1 input_report_key(dev, KEY_ESC, !gpio_get_value(EXYNOS4_GPX3(2))); #endif input_sync(dev); return IRQ_HANDLED; } void input_dev_init(struct input_dev *dev) { __set_bit(EV_SYN, dev->evbit); //设置位 __set_bit(EV_KEY, dev->evbit); //设置一个按键类事件,表示能够产生按键事件。 __set_bit(KEY_ESC, dev->keybit);//表示能产生哪些按键 } struct input_dev *dev; int test_init(void) { int ret; printk("test init\n"); //分配一个input_dev结构体 dev = input_allocate_device(); //如果分配失败就返回 if(IS_ERR_OR_NULL(dev)) { ret = -ENOMEM; goto ERR_alloc; } //初始化设备 input_dev_init(dev); //注册这个设备 ret = input_register_device(dev); if(IS_ERR_VALUE(ret)) { goto ERR_input_reg; } //注册中断--->中断号26代表tiny4412板子上的第一个按键 ret = request_irq(IRQ_EINT(26), handler, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, DEV_NAME, dev); if(IS_ERR_VALUE(ret)) { goto ERR_request_irq; } return 0; //对错误返回进行处理 ERR_request_irq: input_unregister_device(dev); ERR_input_reg: input_free_device(dev); ERR_alloc: return ret; } //出口函数 void test_exit(void) { printk("test exit\n"); free_irq(IRQ_EINT(26), dev); input_unregister_device(dev); input_free_device(dev); } module_init(test_init); module_exit(test_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Y.X.YANG"); MODULE_VERSION("1.1");
input事件--->按键事件的基本实现的更多相关文章
- Android按键事件传递流程(二)
5 应用层如何从Framework层接收按键事件 由3.2和4.5.4节可知,当InputDispatcher通过服务端管道向socket文件描述符发送消息后,epoll机制监听到了I/O事件, ...
- JavaScript中按键事件的e.keyCode || e.which || e.charCode
1.浏览器的按键事件 浏览器有3种按键事件——keydown,keypress和keyup,分别对应onkeydown.onkeypress和onkeyup3个事件句柄. 一个典型的按键会产生所有这三 ...
- keydown、input 和 keyup 事件
keydown.keyup 属于键盘事件,input 属于文本事件. keydown:当用户按下键盘上的任意按键时触发,如果按住不放,会重复触发此事件. keyup:当用户释放键盘上的按键时触发. i ...
- 编写按键驱动以及在framework层上报按键事件
平台信息:内核:linux3.10 系统:android6.0平台:RK3288 前言:本文主要实现的功能是在android系统中添加一个按键,在驱动层使用定时器,每隔1秒钟向上层发送按键实现,fra ...
- 关于解决JQUERY对INPUT元素Change事件不兼容的问题
最近开发一个项目,需要实现用户在WEB表单里的多个INPUT框中输入数量后,立即自动计算加总各项输入的数量之和,并显示在指定的INPUT框中,这个功能实现的原理是简单的,就是只需要在INPUT的onc ...
- android 模拟按键事件
模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...
- 安卓 Input Events(输入事件)
在安卓中,有不止一种方法从你的应用截取用户交互事件.在你的用户界面中考虑事件,途径就是从用户界面中的一个指定的view对象中捕获事件.该view提供了这样做的方法. 在你用来组成你布局的不同的view ...
- Android如何监听蓝牙耳机的按键事件
写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
随机推荐
- RabbitMQ-Spring AMQP
上篇文章RabbitMQ基础入门学习了rabbitMQ一些基础的api,当然spring也在原生代码的基础上做了更多的封装,这篇文章就基于spring-rabbit,学习一下spring的实现. p. ...
- wpf中静态资源和动态资源的区别
静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了. 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源.
- Python中tuple的功能介绍
Tuple的功能介绍 1. 元祖的两种方法 1. 元祖的内置方法 两个元祖的相加 格式:x.__add__(y)等同于x+y 例如:tu1 = (1,2,3,) print(tu1.__add__(( ...
- Oracle VM VirtualBox虚拟机内Linux系统硬盘扩容步骤(CentOS6.5)
1.首先获取要扩容的虚拟机的 UUID VBoxManage 改命令在C:\Program Files\Oracle\VirtualBox目录内,可先添加该目录到环境变量.C:\Users\yzkj- ...
- c# 复制dataset中table结构跟数据
DataTable dt = new DataTable(); dt = ds.Tables[0].Copy();
- AutoMagic-开源自动化平台构建思路
最近在github上看到AutoMagic自动化平台开源了,一时手痒,就试着搭了一套环境,现在把思路和大家说一说. AutoMagic从其工作分工分两部分: 1:Web端管理平台 管理平台基于Pyth ...
- python复杂网络库networkx:绘图draw
http://blog.csdn.net/pipisorry/article/details/54291831 networkx使用matplotlib绘制函数 draw(G[, pos, ax, h ...
- springMVC源码分析--ModelFactory
ModelFactory是用来维护Model的,具体包含两个功能 (1)初始化Model (2)处理器执行后将Model中相应的参数更新到SessionAttributes中 1.初始化Model其实 ...
- android Spinner控件详解
Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner ...
- Mac小技巧:快速查看指定应用程序的所有窗口
我们知道在Mac中快速在系统所有程序中切换得快捷键为: cmd + tab 不过有时我们需要快速查看某一个程序的所有窗口,那又该如何呢? 以下方法在MacOS 10.12中测试成功! Mac默认该功能 ...