這裡簡單的描述一下如何寫一個user program去讀去input device data,基本上,就是直接open /dev/inputN,然後將data mapping成struct input_event。
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
type: event typecode: key code for EV_KEY
摘入一段/usr/include/linux/input-event-codes.h
/* * Event types */ #define EV_SYN 0x00 #define EV_KEY 0x01 #define EV_REL 0x02 #define EV_ABS 0x03 #define EV_MSC 0x04 #define EV_SW 0x05 #define EV_LED 0x11 #define EV_SND 0x12 #define EV_REP 0x14 #define EV_FF 0x15 #define EV_PWR 0x16 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f #define EV_CNT (EV_MAX+1) /* * Key code */ #define KEY_RESERVED 0 #define KEY_ESC 1 #define KEY_1 2 #define KEY_2 3 ... #define BTN_MISC 0x100 #define BTN_0 0x100 #define BTN_1 0x101 #define BTN_2 0x102 ... #define KEY_OK 0x160 #define KEY_SELECT 0x161 ...
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <linux/input.h>
int main(int argc, char *argv[])
{
struct input_event evt;
int fd;
fd = open(argv[1], O_RDONLY);
if (fd < 0) {
printf("open %s failed: %s/%d\n", argv[0], strerror(errno), errno);
return -1;
}
while (1) {
if (sizeof(evt) == read(fd, &evt, sizeof(evt))) {
printf("type:%d, code:%d, val:%d\n", evt.type, evt.code, evt.value);
} else {
printf("read failed: %s/%d\n", strerror(errno), errno);
}
}
return 0;
}
-
參考資料:
- Documentation/input/event-codes.rst

沒有留言:
張貼留言