驱动篇:Linux 输入子系统(摘录)
发布日期:2021-06-29 11:34:52
浏览次数:2
分类:技术文章
本文共 1871 字,大约阅读时间需要 6 分钟。
驱动篇:Linux 输入子系统
Linux 系统提供了 input 子系统,按键、触摸屏、键盘、 鼠标等输入都可以利用 input接口函数来实现设备驱动
input 设备用 input_dev 结构体描述,使用 input 子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过 input_event 结构体描述),不再需要关心文件操作接口,因为 input子系统已经完成了文件操作接口。驱动报告的事件经过 InputCore 和 Eventhandler 最终到达用户空间在模块加载函数中告知 input 子系统它可以报告的事件,设备驱动通过 set_bit()告诉 input 子系统它支持哪些事件,如下所示:set_bit(EV_KEY, button_dev.evbit); 在模块加载函数中注册输入设备,注册输入设备的函数为:int input_register_device(struct input_dev *dev); 在键被按下/抬起、触摸屏被触摸/抬起/移动、鼠标被移动/单击/抬起时通过input_report_xxx()报告发生的事件及对应的键值/坐标等状态。
主要的事件类型包括 EV_KEY(按键事件)、EV_REL(相对值,如光标移动,报告的是相对最后一次位置的偏移)和 EV_ABS(绝对值,如触摸屏和操纵杆,它们工作在绝对坐标系统)。
用于报告 EV_KEY、EV_REL 和 EV_ABS 事件的函数分别为:void input_report_key(struct input_dev *dev, unsigned int code, intvalue);void input_report_rel(struct input_dev *dev, unsigned int code, intvalue);void input_report_abs(struct input_dev *dev, unsigned int code, intvalue);
nput_sync()用于事件同步,它告知事件的接收者驱动已经发出了一个完整的报告。
例如,在触摸屏设备驱动中,一次坐标及按下状态的整个报告过程如下:input_report_abs(input_dev, ABS_X, x); //X 坐标input_report_abs(input_dev, ABS_Y, y);//Y 坐标input_report_abs(input_dev, ABS_PRESSURE, pres); //压力input_sync(input_dev); //同步
注销输入设备的函数为:
void input_unregister_device(struct input_dev *dev);
最简单的 input 设备驱动
/在按键中断中报告事件/static void button_interrupt(int irq, void *dummy, struct pt_regs *fp) { input_report_key(&button_dev, BTN_1, inb(BUTTON_PORT) &1); input_sync(&button_dev); } static int __init button_init(void) { /*申请中断*/ if (request_irq(BUTTON_IRQ, button_interrupt, 0, "button", NULL)) { printk(KERN_ERR "button.c: Can't allocate irq %d\n", button_irq); return - EBUSY;}//支持 EV_KEY 事件 button_dev.evbit[0] = BIT(EV_KEY); button_dev.keybit[LONG(BTN_0)] = BIT(BTN_0);input_register_device(&button_dev);//注册 input 设备 } static void _ _exit button_exit(void) { //注销 input 设备 input_unregister_device(&button_dev); free_irq(BUTTON_IRQ, button_interrupt); //释放中断 }
转载地址:https://blog.csdn.net/zytgg123456/article/details/110129297 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月28日 03时10分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解决为什么用SpringMVC做框架上传图片却不显示的问题
2019-04-29
如何用SpringMVC做一个简单登录页面思路
2019-04-29
SpringMVC如果上传图片进去却没办法在网页上显示,有两种方法
2019-04-29
直接访问jsp页面的方法
2019-04-29
关于Controller的方法
2019-04-29
做项目的一些思路(针对小白)
2019-04-29
什么是重定向
2019-04-29
@RequestMapping的URL地址
2019-04-29
@RequestMapping后面的URL地址的多种写法
2019-04-29
@RequestMapping中的URL占位符详解
2019-04-29
关于GET和POST方法
2019-04-29
CRM第二天:用户登陆和客户管理保存客户功能实现
2019-04-29
CRM第四天:联系人查找和保存功能实现
2019-04-29
Git的简介与使用
2019-04-29
CRM第五天:联系人管理,修改联系人,删除联系人,按条件查询联系人和通用Dao的抽取
2019-04-29
CRM第六天:客户拜访管理,权限配置,验证码实现
2019-04-29
高并发高可用秒杀系统(一)
2019-04-29
秒杀系统(三)——基础知识回顾之SpringMVC
2019-04-29