更多可參考
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);
完整執行個體:按鍵的輸入子系統
測試程式
本文出自 “” 部落格,請務必保留此出處