Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505709
  • 博文数量: 77
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 689
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-12 08:40
文章分类

全部博文(77)

文章存档

2018年(1)

2016年(3)

2015年(24)

2014年(49)

我的朋友

分类: LINUX

2015-06-16 17:26:36

cat /proc/bus/input/devices
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input1
U: Uniq=
H: Handlers=sysrq kbd event1 
B: PROP=0
B: EV=120013
B: KEY=4 2000000 3803078 f800d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7
I line:这行包含身份信息,显示了 bus type是 3 (usb), vendor, product, version等信息。 
N line:这行包含了名字信息。 
P line:这行包含了物理设备信息。 
H line: 这行包含了与设备关联的 handler drivers。 
B line: 这些行包含了显示设备能力的一些位域 (bitfield)

在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为Input子系统已经完成了文件操作接口 。

linux/input.h 这个文件定义了event事件的结构体,API和标准按键的编码等; 
struct input_event { 
    struct timeval time;  //按键时间 
    __u16 type; //事件类型 
    __u16 code; //要模拟成什么按键 
    __s32 value;//是按下还是释放 
}; 

type: 事件类型。可以设置为:
#define EV_SYN          0x00    表示设备支持所有的事件
#define EV_KEY          0x01    键盘或者按键,表示一个键码 如键盘的按键(按下哪个键),鼠标的左键右键(是否击下)等 
#define EV_REL          0x02    鼠标设备,表示一个相对的光标位置结果
#define EV_ABS          0x03    手写板产生的值,其是一个绝对整数值 
#define EV_MSC          0x04    其他类型 
#define EV_LED          0x11    LED灯设备
#define EV_SND          0x12    蜂鸣器,输入声音 
#define EV_REP          0x14    允许重复按键类型 
#define EV_PWR          0x16    电源管理事件 
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
code: 根据Type的不同而含义不同。
例如:
Type为EV_KEY时,code表示键盘code(0~127为键盘上的键码)或者鼠标Button值。
取值范围:
#define EV_SYN 0x00
到:
#define KEY_MIN_INTERESTING KEY_MUTE
#define KEY_MAX 0x2ff
#define KEY_CNT (KEY_MAX+1)

Type为EV_REL时,code表示操作的是哪个坐标轴,如:REL_X,REL_Y。(因为鼠标有x,y两个轴向,所以一次鼠标移动,会产生两个input_event)
取值范围:
#define REL_X 0x00
#define REL_Y 0x01
#define REL_Z 0x02
#define REL_RX 0x03
#define REL_RY 0x04
#define REL_RZ 0x05
#define REL_HWHEEL 0x06
#define REL_DIAL 0x07
#define REL_WHEEL 0x08
#define REL_MISC 0x09
#define REL_MAX 0x0f
#define REL_CNT (REL_MAX+1)
Type为EV_ABS时,code表示绝对坐标轴向

value:根据Type的不同而含义不同。
例如:
Type为EV_KEY时,value: 0表示按键抬起。1表示按键按下。(4表示持续按下等)。
Type为EV_REL时,value: 表明移动的值和方向(正负值)。
Type为EV_ABS时,code表示绝对位置。


阅读(1799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~