输入系统框架及调试

1.框架概述

  1. APP发起读操作,若无数据则休眠
  2. 用户操作设备,硬件上产生中断;
  3. 输入系统驱动层对应的驱动程序处理中断:读取到数据,转换为标准的输入事件,向核心层汇报,就是汇报一个“struct_input_event”结构体
  4. 核心层可以决定把输入事件转发给上面某一个handler来处理:一般有evdev_handler、kbd_handler、joydev_handler。常用evdev_handler:它只把input_event结构体保存在内核buffer。APP来读取时就本地返回。支持多个APP同时访问。
  5. APP对输入事件处理:APP可以直接访问设备节点(/dev/input/event0,1,2)或者通过tslib、libinput这类库来间接访问。

2.使用input_dev结构体来表示输入设备

3.APP可以得到什么数据

得到一系列输入事件:“struct_input_event”

timeval time:表示时间,内有两个成员:秒和微妙
type:类型
例如:EV_KEY表示按键类、EV_REL表示相对位移(鼠标)


code:哪个事件
该类型下的事件,比如EV_KEY类事件,表示键盘,所以就是表示是哪一个按键


value:事件值
例如:0和1表示按键的按下和松开

事件之间的界线
驱动程序上报完一系列数据后,会上报一个同步事件,表示数据上班完毕。同步事件也是一个input_event结构体,type、code、value都是0。

4.调试技巧

1.确定设备信息
ls /dev/input/* -l
查看设备节点对应的硬件
cat /proc/bus/input/devices

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="venus_DMIC"
P: Phys=venus/input2
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=event1
B: PROP=0
B: EV=23
B: KEY=40000 0 0 4000
B: SW=4000

对应含义:

I:id of the device(设备ID),该参数由结构体input_id表示

N:name of the device(设备名称)
P:physical path to the device(系统层次结构中设备的物理路径)
S:sysfs path(位于sys文件系统的路径)
U:unique identific code(设备唯一标识码)
H:list of input handles associated with the device(与设备关联的输入句柄列表)
B:bitmaps
举例:KEY=40000 0 0 4000,每一个都是32位数据,转换位二进制,即可找对应支持的事件
KEY表示类型。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值