Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177788
  • 博文数量: 22
  • 博客积分: 1069
  • 博客等级: 准尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-01 13:40
文章分类

全部博文(22)

文章存档

2015年(4)

2011年(2)

2010年(12)

2009年(4)

我的朋友

分类: Android平台

2015-04-30 15:51:43

标准的 event 驱动只能发送单个按键的事件,
如要实现在通过 event 发送组合按键事件,可以用下面的方法实现:

static void keys_timer(unsigned long  button_data)
{
    struct keys_button *button = ((struct button_data *)button_data)->button;
......
    if(button->code == KEY_A)    // KEY_A 可以是 GPIO 键,或者 ADC 键
    {
        if ( get_KEY_B() )              // KEY_B 是 GPIO 键
        {
            //KEY_A + KEY_B = KEY_AB
            input->keybit[BIT_WORD(KEY_AB)] |= 1 << (KEY_AB & (BITS_PER_LONG-1));
            input->key[BIT_WORD(KEY_AB)] &= ~(1 << (KEY_AB & (BITS_PER_LONG-1)));
            input_event(input, EV_KEY, KEY_AB, 1);    //组合键按下
            input_sync(input);
            
            input->keybit[BIT_WORD(KEY_AB)] |= 1 << (KEY_AB & (BITS_PER_LONG-1));
            input->key[BIT_WORD(KEY_AB)] |= 1 << (KEY_AB & (BITS_PER_LONG-1));
            input_event(input, EV_KEY, KEY_AB, 0);    //组合键释放
            input_sync(input);
        }
    }
......
}

发送 组合键的按下事件后,须再发送释放事件,否则将被认为是按住不放,应用层不会收到第二次组合键的事件。
GPIO/ADC 键  +  GPIO 键, 可以在一次 key_timer 调用中发送组合键,ADC 键  +  ADC 键,需要另做处理。

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