From ade0faf09812cd1b626426ecccaaa814ad597863 Mon Sep 17 00:00:00 2001 From: Michel-FK Date: Thu, 22 Apr 2021 16:15:07 +0200 Subject: [PATCH] add SAVE command Signed-off-by: Michel-FK --- mapping_list.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ mapping_list.h | 2 ++ parse_config.c | 6 ++++++ parse_config.h | 1 + 4 files changed, 54 insertions(+) diff --git a/mapping_list.c b/mapping_list.c index d185e62..768c445 100644 --- a/mapping_list.c +++ b/mapping_list.c @@ -297,3 +297,48 @@ void dump_mapping_list(mapping_list_t *list) printf("\n"); } } + +/* Save a mapping */ +void save_mapping(mapping_t *mapping) +{ + int i, length; + uint32_t gpio_mask; + + printf("MAP "); + for (i = 0, length = 0, gpio_mask = mapping->gpio_mask; i < MAX_NUM_GPIO; + i++, gpio_mask >>= 1) { + if (gpio_mask & 1) { + printf("%s%s", gpio_name(i), gpio_mask == 1 ? " " : "+"); + length += strlen(gpio_name(i)) + 1; + } + } + for (i = 9 - length; i > 0; i--) { + printf(" "); + } + switch (mapping->type) { + case MAPPING_COMMAND: + printf("TO COMMAND %s\n", mapping->value.command); + break; + + case MAPPING_KEY: + printf("TO KEY %s\n", keycode_name(mapping->value.keycode)); + break; + + default: + FK_ERROR("Unknown mapping type %d\n", mapping->type); + break; + } +} + +/* Save a mapping list */ +void save_mapping_list(mapping_list_t *list) +{ + struct mapping_list_t *p; + mapping_t *tmp; + + printf("CLEAR\n"); + list_for_each(p, list) { + tmp = list_entry(p, mapping_t, mappings); + save_mapping(tmp); + } +} diff --git a/mapping_list.h b/mapping_list.h index 371746b..f064c09 100644 --- a/mapping_list.h +++ b/mapping_list.h @@ -68,5 +68,7 @@ mapping_t *find_mapping(mapping_list_t *list, uint32_t gpio_mask); bool remove_mapping(mapping_list_t *list, mapping_t *mapping); void dump_mapping(mapping_t *mapping); void dump_mapping_list(mapping_list_t *list); +void save_mapping(mapping_t *mapping); +void save_mapping_list(mapping_list_t *list); #endif // _MAPPING_LIST_H_ diff --git a/parse_config.c b/parse_config.c index a05961d..c89002c 100644 --- a/parse_config.c +++ b/parse_config.c @@ -88,6 +88,7 @@ static const keyword_t valid_commands[] = { {"KEYPRESS", STATE_KEYPRESS}, {"TYPE", STATE_TYPE}, {"DUMP", STATE_DUMP}, + {"SAVE", STATE_SAVE}, {"", STATE_INVALID} }; @@ -285,6 +286,7 @@ bool parse_config_line(char *line, mapping_list_t *list, case STATE_CLEAR: case STATE_DUMP: + case STATE_SAVE: break; case STATE_SLEEP: @@ -458,6 +460,10 @@ bool parse_config_line(char *line, mapping_list_t *list, dump_mapping_list(list); break; + case STATE_SAVE: + save_mapping_list(list); + break; + case STATE_INIT: case STATE_MAP: break; diff --git a/parse_config.h b/parse_config.h index d257ffb..156d7b7 100644 --- a/parse_config.h +++ b/parse_config.h @@ -72,6 +72,7 @@ typedef enum {GPIOS} button_t; X(STATE_KEY, "KEY") \ X(STATE_COMMAND, "COMMAND")\ X(STATE_DUMP, "DUMP") \ + X(STATE_SAVE, "SAVE") \ X(STATE_INVALID, "INVALID") /* Enumeration of the different parse states */