From 286f39876359c6c65db5f21432b4fc204572d8c9 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Tue, 8 Sep 2015 20:13:50 -0400 Subject: [PATCH] tools: add a (currently fake) way of addressing a macro change We need to implement a parsing of the given macro... Signed-off-by: Benjamin Tissoires --- tools/ratbag-command.c | 53 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tools/ratbag-command.c b/tools/ratbag-command.c index 6652450e..85f4a6e9 100644 --- a/tools/ratbag-command.c +++ b/tools/ratbag-command.c @@ -362,6 +362,37 @@ static const struct ratbag_cmd cmd_switch_etekcity = { .help = "Switch the Etekcity mouse active profile", }; +struct macro { + const char *name; + struct { + enum ratbag_macro_event_type type; + unsigned data; + } events[64]; +}; + +static int +str_to_macro(const char *action_arg, struct macro *m) +{ + if (!action_arg) + return -EINVAL; + + m->name = "foo"; + m->events[0].type = RATBAG_MACRO_EVENT_KEY_PRESSED; + m->events[0].data = KEY_F; + m->events[1].type = RATBAG_MACRO_EVENT_KEY_RELEASED; + m->events[1].data = KEY_F; + m->events[2].type = RATBAG_MACRO_EVENT_KEY_PRESSED; + m->events[2].data = KEY_O; + m->events[3].type = RATBAG_MACRO_EVENT_KEY_RELEASED; + m->events[3].data = KEY_O; + m->events[4].type = RATBAG_MACRO_EVENT_KEY_PRESSED; + m->events[4].data = KEY_O; + m->events[5].type = RATBAG_MACRO_EVENT_KEY_RELEASED; + m->events[5].data = KEY_O; + + return 0; +} + static int ratbag_cmd_change_button(struct ratbag *ratbag, uint32_t flags, int argc, char **argv) { @@ -374,6 +405,7 @@ ratbag_cmd_change_button(struct ratbag *ratbag, uint32_t flags, int argc, char * int rc = 1; unsigned int btnkey; enum ratbag_button_action_special special; + struct macro macro = {0}; int i; if (argc != 4) { @@ -402,6 +434,12 @@ ratbag_cmd_change_button(struct ratbag *ratbag, uint32_t flags, int argc, char * error("Invalid special command '%s'\n", action_arg); return 1; } + } else if (streq(action_str, "macro")) { + action_type = RATBAG_BUTTON_ACTION_TYPE_MACRO; + if (str_to_macro(action_arg, ¯o)) { + error("Invalid special command '%s'\n", action_arg); + return 1; + } } else { usage(); return 1; @@ -449,6 +487,19 @@ ratbag_cmd_change_button(struct ratbag *ratbag, uint32_t flags, int argc, char * case RATBAG_BUTTON_ACTION_TYPE_SPECIAL: rc = ratbag_button_set_special(button, special); break; + case RATBAG_BUTTON_ACTION_TYPE_MACRO: + rc = ratbag_button_set_macro(button, macro.name); + for (i = 0; i < ARRAY_LENGTH(macro.events); i++) { + if (macro.events[i].type == RATBAG_MACRO_EVENT_NONE) + break; + + ratbag_button_set_macro_event(button, + i, + macro.events[i].type, + macro.events[i].data); + } + rc = ratbag_button_write_macro(button); + break; default: error("well, that shouldn't have happened\n"); abort(); @@ -481,7 +532,7 @@ out: static const struct ratbag_cmd cmd_change_button = { .name = "change-button", .cmd = ratbag_cmd_change_button, - .args = "X ", + .args = "X ", .help = "Remap button X to the given action in the active profile", };