key_buffer_compare()
This commit is contained in:
parent
edaa6806d4
commit
9564915e08
42
hkd.c
42
hkd.c
@ -44,6 +44,7 @@ const char evdev_root_dir[] = "/dev/input/";
|
||||
|
||||
int key_buffer_add (struct key_buffer*, unsigned short);
|
||||
int key_buffer_remove (struct key_buffer*, unsigned short);
|
||||
int key_buffer_compare (struct key_buffer *haystack, struct key_buffer *needle);
|
||||
int convert_key_value (unsigned short);
|
||||
void int_handler (int signum);
|
||||
void exec_command(char *);
|
||||
@ -81,7 +82,6 @@ int main (void)
|
||||
/* MAIN EVENT LOOP */
|
||||
mainloop_begin:
|
||||
for (;;) {
|
||||
// TODO: better error reporting
|
||||
/* On linux use epoll(2) as it gives better performance */
|
||||
static struct epoll_event ev_type;
|
||||
if (epoll_wait(ev_fd, &ev_type, fd_num, -1) < 0 || dead)
|
||||
@ -108,7 +108,6 @@ int main (void)
|
||||
if (rb != sizeof(struct input_event)) continue;
|
||||
|
||||
/* Ignore touchpad events */
|
||||
// TODO: make a event blacklist system
|
||||
if (
|
||||
event.type == EV_KEY &&
|
||||
event.code != BTN_TOUCH &&
|
||||
@ -129,25 +128,22 @@ int main (void)
|
||||
}
|
||||
}
|
||||
|
||||
struct key_buffer comb1;
|
||||
unsigned short *tmp = malloc(sizeof(unsigned short) * 2);
|
||||
tmp[0] = 56;
|
||||
tmp[1] = 31;
|
||||
comb1.buf = tmp;
|
||||
comb1.size = 2;
|
||||
|
||||
if (pb.size != prev_size) {
|
||||
printf("Pressed keys: ");
|
||||
for (unsigned int i = 0; i < pb.size; i++)
|
||||
printf("%d ", pb.buf[i]);
|
||||
putchar('\n');
|
||||
switch (pb.size) {
|
||||
case 1:
|
||||
/* You can use keys defined in input.h */
|
||||
if (pb.buf[0] == KEY_MUTE)
|
||||
exec_command((char *)"/home/ale/hello");
|
||||
break;
|
||||
case 2:
|
||||
if (pb.buf[0] == 56 || pb.buf[0] == 31)
|
||||
if (pb.buf[1] == 31 || pb.buf[1] == 56)
|
||||
exec_command((char *)"/home/ale/hello");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (key_buffer_compare(&pb, &comb1))
|
||||
exec_command((char *)"/home/ale/hello");
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: better child handling, for now all children receive the same
|
||||
@ -321,3 +317,19 @@ int prepare_epoll(int *fds, int fd_num, int event_watcher)
|
||||
die("could not add file descriptor to the epoll list");
|
||||
return ev_fd;
|
||||
}
|
||||
|
||||
int key_buffer_compare (struct key_buffer *haystack, struct key_buffer *needle)
|
||||
{
|
||||
if (haystack->size != needle->size)
|
||||
return 0;
|
||||
int ff = 0;
|
||||
for (int x = needle->size - 1; x >= 0; x--) {
|
||||
for (int i = 0; i < haystack->size; i++)
|
||||
ff += (needle->buf[x] == haystack->buf[i]);
|
||||
if (!ff)
|
||||
return 0;
|
||||
ff = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user