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
47
48 /*报告事件*/
49 key_values = button_irqs->number;
50 //printk("====>rising key_values=%d\n",key_values);
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 /*报告结束*/
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
65}
66
67 else {
68
68
69 key_values = button_irqs->number;
70 //printk("====>falling key_values=%d\n",key_values);
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
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 }
本文永久更新地址:http://www.linuxdiyf.com/linux/22776.html