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如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
随机推荐
- Excel实现双击插入当前日期时间
用vba做一个事件驱动程序. 第一步:点击开发工具-visual basic. 第二步:在当前工作表中编制程序如下: Private Sub Worksheet_BeforeDoubleClick(B ...
- 《java技术》第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...
- RandomAccessFile读取文本简介
RandomAccessFile类的常用的操作方法 1.public RandomAccessFile(File file, String mode)throws FileNotFoundExcep ...
- Ubuntu16.04下安装jdk1.8过程
笔者环境:腾讯云服务器 Ubuntu16.04 x64 一 . 去oracle官网下载对应的jdk 下载地址:http://www.oracle.com/technetwork/java/javase ...
- fireBug引入JQuery,方便书写jq调试代码
在控制台执行下段代码,等到网络中加载完成后,即可正常运行jq代码.也可以根据需要进行修改引入其他js代码. javascript:(function(url) { var s = document.c ...
- Spring + mybatis 集成
具体项目可参照:https://github.com/LuoXiaoyi/springmvc 一.环境准备:Spring4.3.5 + Mybatis3.4.6 + Mybatis-Spring 1. ...
- 无忧代理免费ip爬取(端口js加密)
起因 为了训练爬虫技能(其实主要还是js技能-),翻了可能有反爬的网站挨个摧残,现在轮到这个网站了:http://www.data5u.com/free/index.shtml 解密过程 打开网站,在 ...
- Docker其它安全特性
除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等. Docker 当前默认只启用了能力机制. ...
- jboss规则引擎KIE Drools 6.3.0 Final 教程(1)
前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5 ...
- ZooKeeper之(一)ZooKeeper是什么
1.1 产生背景 当今是个分布式.集群.云计算等名词满天飞的时代.造成这种局面的一个重要因素就是,单一机器的处理能力已经不能满足我们的需求,不得不采用由多台机器组成的服务集群.服务集群对外提供服务的过 ...