input子系统

Android、X windows等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持越来越倾向于标准的input输入子系统。

Input子系统架构

(1)驱动层功能:负责和底层的硬件设备打交道,将底层硬件设备对用户输入的响应转换为标准的输入事件以后再向上发送给输入子系统核心层(Input Core)。

(2)Input系统核心层:Input Core即Input Layer,由driver/input/input.c及相关头文件实现,它对下提供了设备驱动层的接口,对上提供了事件处理层(Event Handler)的编程接口。

(3)事件处理层将硬件设备上报的事件分发到用户空间和内核。


Input子系统设备驱动

使用input子系统实现输入设备驱动的时候,驱动的工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作(open,read,write)接口,因为input子系统已经完成了文件操作接口。驱动报告的事件经过InputCore和 Eventhandler最终到达用户空间。


1.分配input_dev结构体,

struct input_dev *input_allocate_device(void)


2.初始化input_dev

  //设置上报哪类事件
set_bit(EV_KEY, btn_dev->evbit);//按键类事件
set_bit(EV_REP, btn_dev->evbit);//重复类事件 
//指定上报哪些按键
for (i = 0; i < ARRAY_SIZE(btn_info); i++) 

set_bit(btn_info[i].code, btn_dev->keybit);

    btn_dev->name = "my_button"; //设备名

keybit为按键码:在linux/input.h中有定义,即KEY_1 、KEY_2、KEY_A等标准的键值

evbit为事件类型:有EV_SYN 同步事件、EV_KEY按键事件、EV_REL 相对坐标(鼠标)、EV_ABS  绝对坐标(触摸屏)等


3.注册input_dev结构体

 int input_register_device(struct input_dev *dev)


4.申请中断,在中断处理函数中上报键值

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

type为事件类型:EV_SYN 、EV_KEY等

code为按键码:KEY_1、KEY_A等

value为值:自定义

上报后调用同步:

void input_sync(struct input_dev *dev)


相关头文件:

<linux/input.h>


用户程序:

open打开/dev/eventN或者/dev/input/eventN

read读取一个struct input_event

对键值进行判断即可


相关头文件:

<linux/input.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值