天天看點

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

完整執行個體:按鍵的輸入子系統

   測試程式

本文出自 “” 部落格,請務必保留此出處

繼續閱讀