您的位置:首页 > 运维架构 > Linux

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); 这时候才认为按键松开了,才停止上报
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: