(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.
This commit is contained in:
ccMSC
2016-04-27 23:32:37 -06:00
parent 80c0805ae5
commit 153d93ca7e
5 changed files with 19 additions and 19 deletions
+1 -1
View File
@@ -1 +1 @@
beta-v0.2.5+t02
beta-v0.2.5+t03
-1
View File
@@ -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);
}
-2
View File
@@ -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);
+18 -11
View File
@@ -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;
-4
View File
@@ -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;