本文共 2849 字,大约阅读时间需要 9 分钟。
程序编写步骤:
(1)分配一个 input device 对象 (2)初始化 input device 对象 (3)注册 input device 对象void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
参数1:当前input device 上报数据
参数2:上报的是那种数据类型 EV_KEY,EV_ABS 参数3:具体数据时什么:KEY_POWER 参数4:值是什么struct input_event{ struct timeval time; //时间戳 __u16 type; //数据类型 __u16 code; //具体数据是什么 __s32 value; //值是什么}
#include#include #include struct input_dev *inputdev;static int __init simple_input_init(void){ //编写输入子系统代码 /* *(1)分配一个 input device 对象 *(2)初始化 input device 对象 *(3)注册 input device 对象 * */ int ret; inputdev = input_allocate_device(); if(inputdev == NULL) { printk(KERN_ERR "input allocate device error\n"); return -ENOMEM; } //当前设备能够产生按键数据 __set_bit(EV_KEY,inputdev->evbit); //表示当前设备能够产生power按键 __set_bit(KEY_POWER,inputdev->keybit); ret = input_register_device(inputdev); if(ret != 0) { printk(KERN_ERR "input register device error\n"); goto err_0; return ret; } return 0;err_0: input_free_device(inputdev); return ret;}static void __exit simple_input_exit(){ input_unregister_device(inputdev); input_free_device(inputdev);}module_init(simple_input_init);module_exit(simple_input_exit);MODULE_LICENSE("GPL");
用户空间应用程序:
#include#include #include #include #include #include #include #include int main(void){ int fd; int ret; struct input_event event; fd = open("/dev/event0",O_RDWR); if(fd < 0) { perror("open"); exit(1); } while(1) { ret = read(fd,&event,sizeof(struct input_event)); if(ret < 0) { perror("read"); exit(1); } if(event.type == EV_KEY) { if(event.code == KEY_POWER) { if(event.value) //按键按下 { printf("__APP_USER__:power pressed\n"); } else //按键抬起 { printf("__APP_USER__:power up\n"); } } } } close(fd); return 0;}
转载地址:http://escrn.baihongyu.com/