From 153d93ca7e9f9f355cd82886cfdf777c2e6a7dcd Mon Sep 17 00:00:00 2001 From: ccMSC Date: Wed, 27 Apr 2016 23:32:37 -0600 Subject: [PATCH] (ckb-daemon) Moved SYN events from inputupdate to the actual event functions I noticed the SYN_events were never being posted during macro playback, which is possibly what caused the issue with some of the keys being dropped. It seems to work now even without the delays, but this will need further testing before I remove them. --- VERSION | 2 +- src/ckb-daemon/input.c | 1 - src/ckb-daemon/input.h | 2 -- src/ckb-daemon/input_linux.c | 29 ++++++++++++++++++----------- src/ckb-daemon/input_mac.c | 4 ---- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/VERSION b/VERSION index 70eeb6be..6091c702 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -beta-v0.2.5+t02 +beta-v0.2.5+t03 diff --git a/src/ckb-daemon/input.c b/src/ckb-daemon/input.c index 30d53141..78a5c394 100644 --- a/src/ckb-daemon/input.c +++ b/src/ckb-daemon/input.c @@ -136,7 +136,6 @@ void inputupdate(usbdevice* kb){ input->rel_x = input->rel_y = 0; } // Finish up - os_isync(kb); memcpy(input->prevkeys, input->keys, N_KEYBYTES_INPUT); } diff --git a/src/ckb-daemon/input.h b/src/ckb-daemon/input.h index 95447440..7625df5b 100644 --- a/src/ckb-daemon/input.h +++ b/src/ckb-daemon/input.h @@ -43,8 +43,6 @@ void cmd_macro(usbdevice* kb, usbmode* mode, const int notifynumber, const char* void os_keypress(usbdevice* kb, int scancode, int down); // Generate mouse movement void os_mousemove(usbdevice* kb, int x, int y); -// Synchronize input (called after sending key presses) -void os_isync(usbdevice* kb); // Perform OS-specific setup for indicator lights. Called when the device is created. Return 0 on success. int os_setupindicators(usbdevice* kb); diff --git a/src/ckb-daemon/input_linux.c b/src/ckb-daemon/input_linux.c index 20598ba9..b42347e3 100644 --- a/src/ckb-daemon/input_linux.c +++ b/src/ckb-daemon/input_linux.c @@ -97,6 +97,18 @@ void os_inputclose(usbdevice* kb){ kb->uinput_mouse = 0; } +// Generate SYN reports to synchronize device +static void isync(usbdevice* kb){ + struct input_event event; + memset(&event, 0, sizeof(event)); + event.type = EV_SYN; + event.code = SYN_REPORT; + if(write(kb->uinput_kb - 1, &event, sizeof(event)) <= 0) + ckb_warn("uinput write failed: %s\n", strerror(errno)); + if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) + ckb_warn("uinput write failed: %s\n", strerror(errno)); +} + void os_keypress(usbdevice* kb, int scancode, int down){ struct input_event event; memset(&event, 0, sizeof(event)); @@ -118,6 +130,8 @@ void os_keypress(usbdevice* kb, int scancode, int down){ } if(write((is_mouse ? kb->uinput_mouse : kb->uinput_kb) - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } void os_mousemove(usbdevice* kb, int x, int y){ @@ -129,26 +143,19 @@ void os_mousemove(usbdevice* kb, int x, int y){ event.value = x; if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } if(y != 0){ event.code = REL_Y; event.value = y; if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } } -void os_isync(usbdevice* kb){ - struct input_event event; - memset(&event, 0, sizeof(event)); - event.type = EV_SYN; - event.code = SYN_REPORT; - if(write(kb->uinput_kb - 1, &event, sizeof(event)) <= 0) - ckb_warn("uinput write failed: %s\n", strerror(errno)); - if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) - ckb_warn("uinput write failed: %s\n", strerror(errno)); -} - void* _ledthread(void* ctx){ usbdevice* kb = ctx; uchar ileds = 0; diff --git a/src/ckb-daemon/input_mac.c b/src/ckb-daemon/input_mac.c index 22f820ef..766424ab 100644 --- a/src/ckb-daemon/input_mac.c +++ b/src/ckb-daemon/input_mac.c @@ -400,10 +400,6 @@ void os_mousemove(usbdevice* kb, int x, int y){ postevent_mm(kb->event, x, y, HAS_FEATURES(kb, FEAT_MOUSEACCEL), kb->mousestate); } -void os_isync(usbdevice* kb){ - // OSX doesn't have any equivalent to the SYN_ events -} - int os_setupindicators(usbdevice* kb){ // Set NumLock on permanently kb->hw_ileds = kb->hw_ileds_old = kb->ileds = 1;