Linux 输入设备驱动上报按键值方法

来源:互联网 发布:zoomla 逐浪cms 编辑:程序博客网 时间:2024/05/02 04:44

          input_set_capability和input_event以及input_sync函数实现Linux 输入设备驱动上报按键值方法

input_report_key 函数貌似也有人用,这个demo 看看先!


  • static inline void input_report_key(struct input_dev *dev,unsigned int  
  • code, int value)  
  • {  
  •         input_event(dev, EV_KEY, code, !!value);  
  • }  

     input_report_key 调用input_event实现的!

    在 linux/include/uapi/linux/input.h 里面有

  • #define KEY_VOLUMEDOWN          114
    #define KEY_VOLUMEUP            115

    #define KEY_BACK                158     /* AC Back */
    #define KEY_FORWARD             159     /* AC Forward */


    #define KEY_RECORD              167

    #define KEY_CAMERA              212

    #define KEY_SOUND               213


    ./hexdump /dev/input/eventx (x 为01,2,3...) 根据实际情况而定。


  • 不过要注意Linux 上传按下信号,也要上传松开信号,否则Linux 系统会一直以为按键还在按下状态。

    /*获取按键值*/
    45     down = !s3c2410_gpio_getpin(button_irqs->pin);  //down: 1(按下),0(弹起)
    46    if (!down) {47    
    48     /*报告事件*/
    49     key_values = button_irqs->number; 50    //printk("====>rising key_values=%d\n",key_values);
    51   if(key_values==0) 52       input_report_key(button_dev, KEY_1,0); 53  if(key_values==1) 54       input_report_key(button_dev, KEY_2,0); 55  if(key_values==2) 56       input_report_key(button_dev, KEY_3,0); 57  if(key_values==3) 58       input_report_key(button_dev, KEY_4,0); 59  if(key_values==4) 60       input_report_key(button_dev, KEY_5,0); 61  if(key_values==5) 62       input_report_key(button_dev, KEY_6,0); 63  /*报告结束*/
    64 input_sync(button_dev);65} 66  
    67    else { 68     
    69         key_values = button_irqs->number; 70        //printk("====>falling key_values=%d\n",key_values);
    71   if(key_values==0) 72         input_report_key(button_dev, KEY_1,1); 73  if(key_values==1) 74         input_report_key(button_dev, KEY_2,1); 75  if(key_values==2) 76         input_report_key(button_dev, KEY_3,1); 77  if(key_values==3) 78         input_report_key(button_dev, KEY_4,1); 79  if(key_values==4) 80         input_report_key(button_dev, KEY_5,1); 81  if(key_values==5) 82         input_report_key(button_dev, KEY_6,1); 83input_sync(button_dev); 84
    85 }

  • 0 0