更多可参考
1、定义一个static struct input_dev结构体
static struct input_dev *mybutton_dev;
2、初始化时分配input_dev结构体
mybutton_dev = input_allocate_device();//分配 input_dev
set_bit(ev_key, mybutton_dev->evbit);
set_bit(ev_rep, mybutton_dev->evbit);
//设置支持的按键值
set_bit(key_l, mybutton_dev->keybit);
set_bit(key_s, mybutton_dev->keybit);
set_bit(key_enter, mybutton_dev->keybit);
error = input_register_device(mybutton_dev);//注册驱动
3、//输入子系统的事件handle函数
static void inputsystemtimer_handle(unsigned long data){
struct pin_desc * pino_desc = irq_pd;
unsigned int pinval;
if (!pino_desc)
return;
pinval = s3c2410_gpio_getpin(pino_desc->pin);
if (pinval)
{
/* 松开 : 最后一个参数: 0-松开, 1-按下 */
input_report_key(mybutton_dev, pino_desc->key_val, 0);
//貌似必须这样,如果val填pinval会一直报告事件
//貌似必须这样,如果val填inb(pino_desc->pin) & 1会一直报告事件有延迟
input_sync(mybutton_dev);
}
else
/* 按下 */
input_report_key(mybutton_dev, pino_desc->key_val, 1);//必须填1
input_sync(mybutton_dev);
printk("press button is %s\n", pino_desc->name);
4、//注销驱动
input_unregister_device(mybutton_dev);//注销驱动
input_free_device(mybutton_dev);
完整实例:按键的输入子系统
测试程序
本文出自 “” 博客,请务必保留此出处