add SAVE command

Signed-off-by: Michel-FK <michel.stempin@funkey-project.com>
This commit is contained in:
Michel-FK 2021-04-22 16:15:07 +02:00
parent 8d635370a0
commit ade0faf098
4 changed files with 54 additions and 0 deletions

View File

@ -297,3 +297,48 @@ void dump_mapping_list(mapping_list_t *list)
printf("\n"); 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);
}
}

View File

@ -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); bool remove_mapping(mapping_list_t *list, mapping_t *mapping);
void dump_mapping(mapping_t *mapping); void dump_mapping(mapping_t *mapping);
void dump_mapping_list(mapping_list_t *list); 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_ #endif // _MAPPING_LIST_H_

View File

@ -88,6 +88,7 @@ static const keyword_t valid_commands[] = {
{"KEYPRESS", STATE_KEYPRESS}, {"KEYPRESS", STATE_KEYPRESS},
{"TYPE", STATE_TYPE}, {"TYPE", STATE_TYPE},
{"DUMP", STATE_DUMP}, {"DUMP", STATE_DUMP},
{"SAVE", STATE_SAVE},
{"", STATE_INVALID} {"", STATE_INVALID}
}; };
@ -285,6 +286,7 @@ bool parse_config_line(char *line, mapping_list_t *list,
case STATE_CLEAR: case STATE_CLEAR:
case STATE_DUMP: case STATE_DUMP:
case STATE_SAVE:
break; break;
case STATE_SLEEP: case STATE_SLEEP:
@ -458,6 +460,10 @@ bool parse_config_line(char *line, mapping_list_t *list,
dump_mapping_list(list); dump_mapping_list(list);
break; break;
case STATE_SAVE:
save_mapping_list(list);
break;
case STATE_INIT: case STATE_INIT:
case STATE_MAP: case STATE_MAP:
break; break;

View File

@ -72,6 +72,7 @@ typedef enum {GPIOS} button_t;
X(STATE_KEY, "KEY") \ X(STATE_KEY, "KEY") \
X(STATE_COMMAND, "COMMAND")\ X(STATE_COMMAND, "COMMAND")\
X(STATE_DUMP, "DUMP") \ X(STATE_DUMP, "DUMP") \
X(STATE_SAVE, "SAVE") \
X(STATE_INVALID, "INVALID") X(STATE_INVALID, "INVALID")
/* Enumeration of the different parse states */ /* Enumeration of the different parse states */