天天看点

[arm驱动]input system 子系统的驱动编写

更多可参考

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);

完整实例:按键的输入子系统

   测试程序

本文出自 “” 博客,请务必保留此出处

继续阅读