linux按键驱动(input子系统)

目录

一、设备树修改

二、初始化

三、上报输入事件

四、应用程序


一、设备树修改

1、跟按键中断驱动一样

二、初始化

1、设备树和硬件相关的初始化跟按键中断驱动一样;但注册设备节点不需要字符设备那一套,有自己的封装函数注册设备节点:

(1) 获取设备树信息,GPIO初始化,中断初始化,定时器初始化

(2) 申请input_dev 结构体,初始化事件类型(evbit)和事件值(keybit),向 Linux 内核注册注册输入设备( input_dev)

 三、上报输入事件

1、需要在按键中断处理函数,或者消抖定时器中断函数中将按键值上报给 Linux 内核:

 void input_report_key(struct input_dev *dev, unsigned int code, int value);

函数参数:

dev:需要上报的 input_dev。
code: 事件码,也就是我们注册的按键值,比如 KEY_0、 KEY_1 等等。
value:事件值,比如 1 表示按键按下, 0 表示按键松开。

2、当我们上报事件以后还需要使用 input_sync 函数来告诉 Linux 内核 input 子系统上报结束,input_sync 函数本质是上报一个同步事件

void input_sync(struct input_dev *dev); 

四、应用程序

1、 Linux 内核会使用 input_event 结构体来表示输入事件,所以我们要获取按键输入信息,那么必须借助于 input_event 结构体:

2、当我们向 Linux 内核成功注册 input_dev 设备以后,会在/dev/input 目录下生成一个名为“eventX(X=0….n)”的文件。

3、直接使用 hexdump 命令来查看/dev/input/event1 文件内容:hexdump /dev/input/event1  

gitee代码链接:gitee_linux_driver: 个人理解编写的linux驱动 - Gitee.com

github代码链接:Can/20_input at master · CanvMo/Can · GitHub

 附件:

1、Linux 内核也提供了其他的针对具体事件的上报函数,这些函数其实都用到了 input_event 函数

(1)void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value); 

dev:需要上报的 input_dev。
type: 上报的事件类型,比如 EV_KEY。
code: 事件码,也就是我们注册的按键值,比如 KEY_0、 KEY_1 等等。
value:事件值,比如 1 表示按键按下, 0 表示按键松开。

input_event 函数可以上报所有的事件类型和事件值

(2)void input_report_key(struct input_dev *dev, unsigned int code, int value);   //提交按键事件的函数 

(3)void input_report_rel(struct input_dev *dev, unsigned int code, int value);   //提交相对坐标事件的函数 


(4)void input_report_abs(struct input_dev *dev, unsigned int code, int value);   //提交绝对坐标事件的函数 

(5)void input_mt_sync(struct input_dev *dev);  //隔离不同的触摸点数据信息,函数会触发SYN_MT_REPORT事件,此事件会通知接收者获取当前触摸数据,并且准备接收下一个触摸点数据

(6)void input_mt_slot(struct input_dev *dev, int slot);  //区分不同的触摸点数据信息,input_mt_slot 函数会触发ABS_MT_SLOT事件,此事件会告诉接收者当前正在更新的是哪个触摸点 (slot) 的数据

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值