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");
时间: 2024-11-10 10:41:33

input事件---&gt;按键事件的基本实现的相关文章

javascript 按键事件

 本篇文章主要是对javascript中的按键事件进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 第一部分:浏览器的按键事件    用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown.onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup.    在这3种事件类型中,keydown和keyup比

javascript-Javascript写贪吃蛇:火狐下无法触发按键事件。

问题描述 Javascript写贪吃蛇:火狐下无法触发按键事件. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{margin: 0;padding: 0;font-family: 'Microsoft Yahei';text-align: c

javascript 按键事件(兼容各浏览器)_javascript技巧

第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown.onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级.这里所谓的高级是指,当用户按下shift + 1时,keypress是对这个按键事件进行解析后

js捕捉键盘事件和按键键值的方法_javascript技巧

如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

notification-android notifacation添加按键并响应按键事件

问题描述 android notifacation添加按键并响应按键事件 想在notification中添加几个控制音乐播放的next/prev/play/stop的按键,在网上查了好多方法,可是都没有解决,按键是在notification上面显示出来了,可是点击那些按键都没有响应.应该要怎么把按键和事件响应联系起来啊?

c#-C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神!

问题描述 C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神! 控件主要是想做一个显示速度的条,当按↑时格子文本框变色 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System

有关于c语言windows编程的按键事件的问题,求解答

问题描述 有关于c语言windows编程的按键事件的问题,求解答 刚开始学习windows编程,想要编写一个计算器,但是我不会实现点击数字就在文本框显示的功能,问了别人好像是有关按键事件的,求大家帮我解答. 解决方案 用setdlgitemtext可以设置文本,如果你完全没有基础,建议先找一个完整的代码,google下计算器的源代码有很多. 解决方案二: 建立按钮的点击事件,与按钮进行绑定,然后点击后将文字追加到文本框内

响应事件-android studio编译无错误,运行时显示,但点击button不响应按键事件

问题描述 android studio编译无错误,运行时显示,但点击button不响应按键事件 原因:自从Android 3.2(API 13),screen size也开始跟着设备的横竖切换而改变.这会导致activity重新加载方法:在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设 置""orientation"",你

linux-有root权限,如何实现后台服务监控所有按键事件

问题描述 有root权限,如何实现后台服务监控所有按键事件 开发中遇到这样的问题,想实现一个后台服务监控用户所有的操作. 最开始我用Runtime运行getevent命令来监控,发现的确是可行的,但是无法做到实时.并不是每次操作都会有信息反馈给你.不同的设备的情况还不同,有的设备需要操作2次事件,才会反馈信息给你,有的设备,需要操作很多次才一起把信息反馈给你.原因在于,反馈的信息会有一个缓存,缓存满了,你才会输出到流里面,你才可以读到.希望有大牛有更好的方法解决这个后台服务监控操作的问题.