From bb4b8d729b2c8540bb19ebf1cf5b478911924228 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 18 Sep 2015 11:08:37 -0400 Subject: [PATCH] roccat-drv: fix macro parsing If the time is not given in the macro, the device still accepts it and works properly by setting 10 ms of delay after a key press and 50 ms between the keys. Problem is: without this, the RATBAG_MACRO_EVENT_WAIT is not set during parsing, so we end up having a RATBAG_MACRO_EVENT_NONE between 2 key events, and the library ends up truncating the macro after the first RATBAG_MACRO_EVENT_NONE. Signed-off-by: Benjamin Tissoires --- src/driver-roccat.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/driver-roccat.c b/src/driver-roccat.c index 5617afae..d114d3c2 100644 --- a/src/driver-roccat.c +++ b/src/driver-roccat.c @@ -643,7 +643,7 @@ roccat_read_button(struct ratbag_button *button) struct roccat_macro *macro; struct roccat_data *drv_data; uint8_t *buf; - unsigned j; + unsigned j, time; int rc; device = button->profile->device; @@ -708,10 +708,13 @@ roccat_read_button(struct ratbag_button *button) macro->keys[j].flag & 0x01 ? RATBAG_MACRO_EVENT_KEY_PRESSED : RATBAG_MACRO_EVENT_KEY_RELEASED, macro_mapping[macro->keys[j].keycode]); if (macro->keys[j].time) - ratbag_button_set_macro_event(button, - j * 2 + 1, - RATBAG_MACRO_EVENT_WAIT, - macro->keys[j].time); + time = macro->keys[j].time; + else + time = macro->keys[j].flag & 0x01 ? 10 : 50; + ratbag_button_set_macro_event(button, + j * 2 + 1, + RATBAG_MACRO_EVENT_WAIT, + time); log_raw(device->ratbag, " - %s %s\n",