parent
f8b8f423f9
commit
e0a64d75c7
@ -0,0 +1,67 @@ |
||||
#include <stdlib.h> |
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include <sys/types.h> |
||||
#include <sys/stat.h> |
||||
#include <fcntl.h> |
||||
#include <dirent.h> |
||||
#include <unistd.h> |
||||
#include <linux/input.h> |
||||
|
||||
#define test_bit(yalv, abs_b) ((((char *)abs_b)[yalv/8] & (1<<yalv%8)) > 0) |
||||
|
||||
const char ev_root[] = "/dev/input/"; |
||||
|
||||
int main (void) |
||||
{ |
||||
/* Open the event directory */ |
||||
DIR *ev_dir = opendir(ev_root); |
||||
if (!ev_dir)
|
||||
exit(-1); |
||||
|
||||
for (;;) { |
||||
struct dirent *file_ent; |
||||
char ev_path[sizeof(ev_root) + NAME_MAX + 1]; |
||||
int tmp_fd; |
||||
unsigned char evtype_b[EV_MAX]; |
||||
|
||||
if ((file_ent = readdir(ev_dir)) == NULL) |
||||
break; |
||||
/* Filter out non character devices */ |
||||
if (file_ent->d_type != DT_CHR) |
||||
continue; |
||||
|
||||
/* Compose absolute path from relative */ |
||||
memset(ev_path, 0, sizeof(ev_path)); |
||||
strncpy(ev_path, ev_root, sizeof(ev_root) + NAME_MAX); |
||||
strncat(ev_path, file_ent->d_name, sizeof(ev_root) + NAME_MAX); |
||||
fprintf(stderr, "%s\n", ev_path); |
||||
|
||||
/* Open device and check if it can give key events otherwise ignore it */ |
||||
tmp_fd = open(ev_path, O_RDONLY | O_NONBLOCK); |
||||
if (tmp_fd < 0) { |
||||
fprintf(stdout, "Could not open device %s\n", ev_path); |
||||
continue; |
||||
} |
||||
fprintf(stderr, "%s\n", ev_path); |
||||
|
||||
memset(evtype_b, 0, sizeof(evtype_b)); |
||||
if (ioctl(tmp_fd, EVIOCGBIT(0, EV_MAX), evtype_b) < 0) { |
||||
fprintf(stdout, "Could not read capabilities of device %s\n", |
||||
ev_path); |
||||
close(tmp_fd); |
||||
continue; |
||||
} |
||||
fprintf(stderr, "%s\n", ev_path); |
||||
|
||||
if (test_bit(EV_KEY, evtype_b)) |
||||
fprintf(stdout, "device %s has it!\n", ev_path); |
||||
|
||||
|
||||
fprintf(stdout, "\n\n\n\n"); |
||||
close(tmp_fd); |
||||
} |
||||
|
||||
printf("%d", EV_MAX); |
||||
closedir(ev_dir); |
||||
} |
Loading…
Reference in new issue