linux input子系统的细节
2012-04-10 15:25
197 查看
网上很多教程都是分析linux输入子系统的架构,但是很少有文章介绍编写实际代码时应用注意什么。首先输入子系统支持
/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
以上这么多事件。
但是需要你的系统支持那类事件就要设置
struct input_dev {
。。。。。。
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
。。。。。。
}
set_bit(EV_KEY, buttons_dev->evbit);
set_bit(KEY_L, buttons_dev->keybit);
evbit数组是利用位图来表示支持那些事件(比如要是支持EV_KEY,就要把第数组下标为1设为1),然后还要设置每类事件里所支持哪些事件,因为一类事件可以支持很多事件,比如,按键事件,里面可以包含很多按键。
set_bit(EV_REP, buttons_dev->evbit);
这里是设置发送重复事件,所谓的重复事件,就是像我们平时电脑打字一样,上面按住某个按键不放,就会一直出现字符。这里就是在上报事件那里实现的,当你上报的事件为按下的时候,就会一直上报 input_event(buttons_dev, EV_KEY, KEY_L, 1); /* 松开 : 最后一个参数: 0-松开, 1-按下 */,直到你再次上报 input_event(buttons_dev, EV_KEY, KEY_L, 0); 这时候才认为按键松开了,才停止上报
/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
以上这么多事件。
但是需要你的系统支持那类事件就要设置
struct input_dev {
。。。。。。
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
。。。。。。
}
set_bit(EV_KEY, buttons_dev->evbit);
set_bit(KEY_L, buttons_dev->keybit);
evbit数组是利用位图来表示支持那些事件(比如要是支持EV_KEY,就要把第数组下标为1设为1),然后还要设置每类事件里所支持哪些事件,因为一类事件可以支持很多事件,比如,按键事件,里面可以包含很多按键。
set_bit(EV_REP, buttons_dev->evbit);
这里是设置发送重复事件,所谓的重复事件,就是像我们平时电脑打字一样,上面按住某个按键不放,就会一直出现字符。这里就是在上报事件那里实现的,当你上报的事件为按下的时候,就会一直上报 input_event(buttons_dev, EV_KEY, KEY_L, 1); /* 松开 : 最后一个参数: 0-松开, 1-按下 */,直到你再次上报 input_event(buttons_dev, EV_KEY, KEY_L, 0); 这时候才认为按键松开了,才停止上报
相关文章推荐
- Linux输入子系统(2):input.c实现细节
- Linux输入子系统(2):input.c实现细节
- Linux Input子系统第二篇之A/B(Slot)协议
- Linux设备模型之input子系统详解
- 如何读取Linux键值,输入子系统,key,dev/input/event,dev/event,C语言键盘
- Linux2.6 input子系统分析
- Linux驱动修炼之道-INPUT子系统(上)
- driver: Linux设备模型之input子系统具体解释
- Linux_10th_input子系统
- [input] linux输入子系统(一)
- Linux的input输入子系统:总体框架
- driver: Linux设备模型之input子系统详解
- linux input 子系统分析 二
- Linux设备模型之input子系统详解(一)
- Linux input子系统
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- 转载:linux内核input子系统代码实现流程
- Linux kernel input子系统
- Linux设备模型之input子系统详解
- Linux输入子系统:输入设备编程指南 -- input-programming.txt