驱动开发----输入系统

介绍

在linux系统中输入设备有很多,想鼠标,按键,触摸屏等都是输入设备的典型案例
学习输入设备驱动主要学习框架就搞定了开发大部分工作

使用步骤:

1)初始化输入结构体,分配结构体内存

2)输入设备注册到内核

3)设置输入设备的能力:即输入类型type,类型中的具体事件code

4)申请中断

5)在中断中上报输入事件

通用输入设备(evdev.c)识别
  • /dev/input/event0
  • /dev/input/event1
    一般情况下当我们的输入设备有了驱动之后就可以在/dev/input目录下找到对应的文件设备,这样我们应用层就可以利用
查看输入设备名和event对应关系

cat /proc/bus/input/devices
通过命令即可以查看所有的输入设备的信息,比如总线,版本

事件类型type

include/linux/input.h

#define EV_SYN 0x00 //同步事件
#define EV_KEY 0x01 //按键事件
#define EV_REL 0x02 //相对事件
#define EV_ABS 0x03 //绝对事件

#define EV_CNT (EV_MAX+1)

具体事件code

这个是在时间类型基础上来说的,
比如前面的type为按键类型,那么code就表示具体的按键,比如按键1,按键2…
比如前面的type为绝对事件,那么code表示的就有,x坐标轴,坐标轴…

具体分析步骤内容

1)初始化输入结构体,分配结构体内存

struct input_dev *input_allocate_device(void)

2)输入设备注册到内核

int input_register_device(struct input_dev *dev)

3)设置输入设备的能力:即输入类型type,类型中的具体事件code

void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)

4)申请中断

5)在中断中上报输入事件

一般来说输入设备的上报需要再中断里面上报,所以我们还需要结合中断的知识

input_event()函数 通用事件上报接口(所有上报事件都可以用)

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

input_report_key()函数 按键上报事件

static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
{
	input_event(dev, EV_KEY, code, !!value);
}

input_report_rel()函数 相对坐标事件

input_report_abs()函数 绝对坐标事件

input_sync()函数

include/linux/input.h

同步事件上报接口 我们使用上面的上报事件并不是立马就上报了,等使用 input_sync()函数之后才会同步上报

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知道起个啥名“”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值