Linux按键数据解析

应用程序打开输入设备对应的设备文件,向其发起读操作,那么这个读操作获取到的

是什么样的数据呢? 其实每一次 read 操作获取的都是一个 struct input_event 结构体类型数据, 该结构体定

义在<linux/input.h>头文件中

struct input_event {

struct timeval time;

__u16 type;

__u16 code;

__s32 value;

};

type:用于描述发生了哪一类型的事件

#define EV_SYN

#define EV_KEY

#define EV_REL

#define EV_ABS

#define EV_MSC

#define EV_SW

#define EV_LED

#define EV_SND

#define EV_REP

#define EV_FF  

#define EV_PWR

#define EV_FF_STATUS 0x17

#define EV_MAX      0x1f

0x00

0x01

0x02

0x03

0x04

0x05

0x11//LED

0x12//声音

0x14//Repeat自动重复设备

0x15//力反馈

0x16

//同步类事件,用于同步事件

//按键类事件

//相对位移类事件(譬如鼠标)

//绝对位移类事件(譬如触摸屏)

//其它杂类事件

 

#define EV_CNT

(EV_MAX+1)

设置支持按键事件:

set_bit(EV_KEY, input_dev.evbit);

code:表示该类事件中哪一个具体的事件,告知应用程序是哪一个按键发生了输入事件

按键类

#define KEY_RESERVED

#define KEY_ESC

#define KEY_1

#define KEY_2

#define KEY_TAB

#define KEY_Q

#define KEY_W

#define KEY_E

#define KEY_R

0

1

2

3

15

16

17

18

19

 

//ESC 键

//数字 1 键

//数字 2 键

//TAB 键

//字母 Q 键

//字母 W 键

//字母 E 键

//字母 R 键

相对位移事件

#define REL_X

#define REL_Y

#define REL_Z

#define REL_RX

#define REL_RY

0x00  //X轴

0x01  //Y轴

0x02  //Z轴

0x03

0x04

#define REL_RZ

0x05

#define REL_HWHEEL

0x06

#define REL_DIAL

0x07

#define REL_WHEEL

#define REL_MISC

0x08

0x09

#define REL_MAX

#define REL_CNT

0x0f

(REL_MAX+1)

 

多点触控(MT)协议

ABS_MT_SLOT

多点触控(MT)协议的一种功能,标识不同的触摸点,通知接收者准备更新所给的slot

ABS_MT_POSITION_X

报告触摸椭圆的中心的x坐标,用于追踪多个触点,最小值和最大值定义了设备活动区域的边界

 

ABS_MT_TRACKING_ID

用于报告工具的跟踪ID,是一个任一的非负整数,由输入驱动生成,正值代表与之关联的slotdown事件,-1代表与之关联的slotup事件,用于追踪已识别的触点在时间上的变化
用于识别多点触摸,并贯穿生命周期,值由input Drive生成,正值代表按下,-1代表抬起

绝对

结构体:

struct input_absinfo {

__s32 value;

__s32 minimum;

__s32 maximum;

__s32 fuzz;         //模糊值

__s32 flat;          //平均值

//最新的报告值

//最小值

//最大值

__s32 resolution;

//分辨率

};

存储绝对轴的信息,当前值,最大值最小值,平均值,模糊值,分辨率,是input_dev结构体的成员,通过input_alloc_absinfo函数分配

获取触摸屏支持的最大触摸点数

struct input_absinfo info;

int max_slots; //最大触摸点数

 

if  (0 > ioctl(fd, EVIOCGABS(ABS_MT_SLOT), &info))

perror("ioctl error");

max_slots = info.maximum + 1 - info.minimum;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值