輸入子系統學習筆記

來源:互聯網
上載者:User

標籤:

1.聲明input_dev結構體

  static struct input_dev *buttons_dev;

2.init函數中分配input_dev結構體並對其設定、註冊

/* 1. 分配一個input_dev結構體 */    buttons_dev = input_allocate_device();;    /* 2. 設定 */    /* 2.1 能產生哪類事件 */    set_bit(EV_KEY, buttons_dev->evbit);    set_bit(EV_REP, buttons_dev->evbit);        /* 2.2 能產生這類操作裡的哪些事件: L,S,ENTER,LEFTSHIT */    set_bit(KEY_L, buttons_dev->keybit);    set_bit(KEY_S, buttons_dev->keybit);    set_bit(KEY_ENTER, buttons_dev->keybit);    set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);    /* 3. 註冊 */    input_register_device(buttons_dev);

3.exit函數裝置,釋放分配的input_dev結構體

    input_unregister_device(buttons_dev);    input_free_device(buttons_dev);    

4.樣本

  1 /* 參考drivers\input\keyboard\gpio_keys.c */  2   3 #include <linux/module.h>  4 #include <linux/version.h>  5   6 #include <linux/init.h>  7 #include <linux/fs.h>  8 #include <linux/interrupt.h>  9 #include <linux/irq.h> 10 #include <linux/sched.h> 11 #include <linux/pm.h> 12 #include <linux/sysctl.h> 13 #include <linux/proc_fs.h> 14 #include <linux/delay.h> 15 #include <linux/platform_device.h> 16 #include <linux/input.h> 17 #include <linux/irq.h> 18  19 #include <asm/gpio.h> 20 #include <asm/io.h> 21 #include <asm/arch/regs-gpio.h> 22  23 struct pin_desc{ 24     int irq; 25     char *name; 26     unsigned int pin; 27     unsigned int key_val; 28 }; 29  30 struct pin_desc pins_desc[4] = { 31     {IRQ_EINT0,  "S2", S3C2410_GPF0,   KEY_L}, 32     {IRQ_EINT2,  "S3", S3C2410_GPF2,   KEY_S}, 33     {IRQ_EINT11, "S4", S3C2410_GPG3,   KEY_ENTER}, 34     {IRQ_EINT19, "S5",  S3C2410_GPG11, KEY_LEFTSHIFT}, 35 }; 36  37 static struct input_dev *buttons_dev; 38 static struct pin_desc *irq_pd; 39 static struct timer_list buttons_timer; 40  41 static irqreturn_t buttons_irq(int irq, void *dev_id) 42 { 43     /* 10ms後啟動定時器 */ 44     irq_pd = (struct pin_desc *)dev_id; 45     mod_timer(&buttons_timer, jiffies+HZ/100); 46     return IRQ_RETVAL(IRQ_HANDLED); 47 } 48  49 static void buttons_timer_function(unsigned long data) 50 { 51     struct pin_desc * pindesc = irq_pd; 52     unsigned int pinval; 53  54     if (!pindesc) 55         return; 56      57     pinval = s3c2410_gpio_getpin(pindesc->pin); 58  59     if (pinval) 60     { 61         /* 鬆開 : 最後一個參數: 0-鬆開, 1-按下 */ 62         input_event(buttons_dev, EV_KEY, pindesc->key_val, 0); 63         input_sync(buttons_dev); 64     } 65     else 66     { 67         /* 按下 */ 68         input_event(buttons_dev, EV_KEY, pindesc->key_val, 1); 69         input_sync(buttons_dev); 70     } 71 } 72  73 static int buttons_init(void) 74 { 75     int i; 76      77     /* 1. 分配一個input_dev結構體 */ 78     buttons_dev = input_allocate_device();; 79  80     /* 2. 設定 */ 81     /* 2.1 能產生哪類事件 */ 82     set_bit(EV_KEY, buttons_dev->evbit); 83     set_bit(EV_REP, buttons_dev->evbit); 84      85     /* 2.2 能產生這類操作裡的哪些事件: L,S,ENTER,LEFTSHIT */ 86     set_bit(KEY_L, buttons_dev->keybit); 87     set_bit(KEY_S, buttons_dev->keybit); 88     set_bit(KEY_ENTER, buttons_dev->keybit); 89     set_bit(KEY_LEFTSHIFT, buttons_dev->keybit); 90  91     /* 3. 註冊 */ 92     input_register_device(buttons_dev); 93      94     /* 4. 硬體相關的操作 */ 95     init_timer(&buttons_timer);  //初始化定時器 96     buttons_timer.function = buttons_timer_function;  //定時器處理函數 97     add_timer(&buttons_timer);  //添加定時器 98     /* 註冊中斷 */ 99     for (i = 0; i < 4; i++)100     {101         request_irq(pins_desc[i].irq, buttons_irq, IRQT_BOTHEDGE, pins_desc[i].name, &pins_desc[i]);102     }103     104     return 0;105 }106 107 static void buttons_exit(void)108 {109     int i;110     for (i = 0; i < 4; i++)111     {112         free_irq(pins_desc[i].irq, &pins_desc[i]);  //釋放中斷113     }114 115     del_timer(&buttons_timer);116     input_unregister_device(buttons_dev);117     input_free_device(buttons_dev);    118 }119 120 module_init(buttons_init);121 122 module_exit(buttons_exit);123 124 MODULE_LICENSE("GPL");

 

輸入子系統學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.