标准的 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 键,需要另做处理。
阅读(5629) | 评论(0) | 转发(0) |