一、input子系统相关结构体
二、input子系统实例实现:
static struct input_dev *key_input;
static void my_timer_handle(unsigned long data)
{
......
/* 5.input子系统上报事件 */
//第三个参数要变,如果两次上报value相同,则input子系统不会响应
input_report_key(key_input, key_gpio_irq->key, key_gpio_irq->value);
/* 6.同步事件 */
input_sync(key_input);
}
static irqreturn_t key_irq_handler(int irq, void *dev_id)
{
mod_timer(xxx_timer , jiffies+HZ/50);
return IRQ_HANDLED;
}
......
......
static int key_drv_init(void)
{
......
......
/* 1.申请空间 */
key_input = input_allocate_device();
if(key_input == NULL){
printk("input alloc failed\n");
return -ENOMEM;
}
/* 2.设置事件类型 */
set_bit(EV_KEY, key_input->evbit);
set_bit(EV_SYN, key_input->evbit);
/* 3.设置子事件:具体按键 */
set_bit(KEY_L,key_input->keybit);
set_bit(KEY_S,key_input->keybit);
set_bit(KEY_ENTER,key_input->keybit);
/* 4.注册input子系统 */
err = input_register_device(key_input);
if(err){
printk("input register failed\n");
return -EAGAIN;
}
}
三、测试结果
自定义了三个按键
按键1:l 键
按键2:s键
按键3:Enter键
如 果 在 ubuntu上 看 到 现 象
ctrl+alt+F1 (虚 拟 终 端 )
ctrl+alt+F7 (退 出 虚 拟 终 端)
如果想在板子上看到现象
exec 0</dev/tty1
input子系统详细介绍刊此链接:Linux input 子系统详解