linux input子系统的细节

网上很多教程都是分析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); 这时候才认为按键松开了,才停止上报 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值