diff --git a/src/keyboard.c b/src/keyboard.c index aae2042..af05fdf 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -88,26 +88,7 @@ static void send_key(struct keyboard *kbd, uint8_t code, uint8_t pressed) kbd->keystate[code] = pressed; - switch (code) { - case KEYD_LEFT_MOUSE: - vkbd_send_button(vkbd, 1, pressed); - break; - case KEYD_MIDDLE_MOUSE: - vkbd_send_button(vkbd, 2, pressed); - break; - case KEYD_RIGHT_MOUSE: - vkbd_send_button(vkbd, 3, pressed); - break; - case KEYD_MOUSE_1: - vkbd_send_button(vkbd, 4, pressed); - break; - case KEYD_MOUSE_2: - vkbd_send_button(vkbd, 5, pressed); - break; - default: - vkbd_send_key(vkbd, code, pressed); - break; - } + vkbd_send_key(vkbd, code, pressed); } static void set_mods(struct keyboard *kbd, uint8_t mods) diff --git a/src/vkbd.h b/src/vkbd.h index 999977e..3f2c0ad 100644 --- a/src/vkbd.h +++ b/src/vkbd.h @@ -17,7 +17,6 @@ void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y); void vkbd_mouse_scroll(const struct vkbd *vkbd, int x, int y); void vkbd_send_key(const struct vkbd *vkbd, uint8_t code, int state); -void vkbd_send_button(const struct vkbd *vkbd, uint8_t btn, int state); void free_vkbd(struct vkbd *vkbd); diff --git a/src/vkbd/stdout.c b/src/vkbd/stdout.c index 3d79666..4440af9 100644 --- a/src/vkbd/stdout.c +++ b/src/vkbd/stdout.c @@ -37,11 +37,6 @@ void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y) printf("absolute mouse movement: x: %d, y: %d\n", x, y); } -void vkbd_send_button(const struct vkbd *vkbd, uint8_t btn, int state) -{ - printf("mouse button: %d, state: %d\n", btn, state); -} - void vkbd_send_key(const struct vkbd *vkbd, uint8_t code, int state) { printf("key: %s, state: %d\n", keycode_table[code].name, state); diff --git a/src/vkbd/uinput.c b/src/vkbd/uinput.c index 0c80079..d7bb38f 100644 --- a/src/vkbd/uinput.c +++ b/src/vkbd/uinput.c @@ -35,12 +35,6 @@ pthread_mutex_t repeater_mtx = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t repeater_cond = PTHREAD_COND_INITIALIZER; static uint8_t repeat_key = 0; -static int is_mouse_button(size_t code) -{ - return (((code) >= BTN_LEFT && (code) <= BTN_TASK) || - ((code) >= BTN_0 && (code) <= BTN_9)); -} - static int create_virtual_keyboard(const char *name) { int ret; @@ -72,6 +66,12 @@ static int create_virtual_keyboard(const char *name) } } + for (code = BTN_LEFT; code <= BTN_TASK; code++) + ioctl(fd, UI_SET_KEYBIT, code); + + for (code = BTN_0; code <= BTN_9; code++) + ioctl(fd, UI_SET_KEYBIT, code); + udev.id.bustype = BUS_USB; udev.id.vendor = 0x0FAC; udev.id.product = 0x0ADE; @@ -179,8 +179,19 @@ void write_key_event(const struct vkbd *vkbd, uint8_t code, int state) pthread_mutex_lock(&mtx); + + ev.type = EV_KEY; - ev.code = code; + + switch (code) { + case KEYD_LEFT_MOUSE: ev.code = BTN_LEFT; break; + case KEYD_MIDDLE_MOUSE: ev.code = BTN_MIDDLE; break; + case KEYD_RIGHT_MOUSE: ev.code = BTN_RIGHT; break; + case KEYD_MOUSE_1: ev.code = BTN_SIDE; break; + case KEYD_MOUSE_2: ev.code = BTN_EXTRA; break; + default: ev.code = code; break; + } + ev.value = state; ev.time.tv_sec = 0; @@ -348,50 +359,6 @@ void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y) write(vkbd->pfd, &ev, sizeof(ev)); } - -void vkbd_send_button(const struct vkbd *vkbd, uint8_t btn, int state) -{ - struct input_event ev; - - if (vkbd->pfd == -1) { - ((struct vkbd *)vkbd)->pfd = create_virtual_pointer("keyd virtual pointer"); - } - - switch (btn) { - case 1: - ev.code = BTN_LEFT; - break; - case 2: - ev.code = BTN_MIDDLE; - break; - case 3: - ev.code = BTN_RIGHT; - break; - case 4: - ev.code = BTN_SIDE; - break; - case 5: - ev.code = BTN_EXTRA; - break; - default: - return; - } - - ev.type = EV_KEY; - ev.value = state; - - ev.time.tv_sec = 0; - ev.time.tv_usec = 0; - - write(vkbd->pfd, &ev, sizeof(ev)); - - ev.type = EV_SYN; - ev.code = 0; - ev.value = 0; - - write(vkbd->pfd, &ev, sizeof(ev)); -} - void vkbd_send_key(const struct vkbd *vkbd, uint8_t code, int state) { if (state) { diff --git a/src/vkbd/usb-gadget.c b/src/vkbd/usb-gadget.c index 834ced6..6b9853b 100644 --- a/src/vkbd/usb-gadget.c +++ b/src/vkbd/usb-gadget.c @@ -134,12 +134,6 @@ struct vkbd *vkbd_init(const char *name) return vkbd; } - -void vkbd_send_button(const struct vkbd *vkbd, uint8_t btn, int state) -{ - fprintf(stderr, "usb-gadget: mouse support is not implemented\n"); -} - void vkbd_mouse_move(const struct vkbd *vkbd, int x, int y) { fprintf(stderr, "usb-gadget: mouse support is not implemented\n");