mirror of
https://github.com/ckb-next/ckb-next.git
synced 2026-10-10 12:27:21 -04:00
(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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user