|
发表于 2015-1-21 22:15:04
|
显示全部楼层
本帖最后由 jiangdou 于 2015-1-21 22:22 编辑
如果实现"L"按键值,供应用程序使用,,必须驱动上报到/dev/input/event_x
按键值,参考内核linux3.3/include/linux/input.h
#define KEY_L 38
驱动层,GPIO必须配置成INT,中断模式
按键上报
input_event(input, type, button->code, bdata->state); //button->code = 38 .对应就是L按键值
input_sync(input);
request_irq(irq, buttons_irq, ...) 这里必须注册成功,
或者 cat /dev/input/event_x
或者读按键程序:- #include <stdio.h>
- #include <unistd.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <linux/input.h>
- #define INPUT_DEV "/dev/input/event0"
- int main(int argc, char *argv[])
- {
- int devfd;
- struct input_event input_event;
- devfd = open(INPUT_DEV, O_RDONLY);
- if(devfd <= 0){
- printf("Open INPUT_DEV Error!\n");
- return -1;
- }
- while(1){
- read(devfd, &input_event, sizeof(input_event));
-
- printf("EventType:");
- switch(input_event.type){
- case EV_SYN:
- printf("EV_SYN, ");
- break;
- case EV_KEY:
- printf("EV_KEY, ");
- break;
- default:
- printf("<Others>, ");
- break;
- }
- printf("EventCode:");
- switch(input_event.code){
- case KEY_LEFT:
- printf("KEY_LEFT, ");
- break;
- case KEY_RIGHT:
- printf("KEY_RIGHT, ");
- break;
- case KEY_UP:
- printf("KEY_UP, ");
- break;
- case KEY_DOWN:
- printf("KEY_DOWN, ");
- break;
- case KEY_ENTER:
- printf("KEY_ENTER, ");
- break;
- case KEY_ESC:
- printf("KEY_ESC, ");
- break;
- default:
- printf("<Others input_event.code = %d>,",input_event.code);
- break;
- }
- printf("EventValue:");
- switch(input_event.value){
- case 0:
- printf("UP.\n");
- break;
- case 1:
- printf("DOWN.\n");
- break;
- default:
- printf("<Others>.\n");
- break;
- }
- }
- close(devfd);
- return 0;
- }
复制代码 |
|