mirror of
https://github.com/FunKey-Project/fkgpiod.git
synced 2026-05-01 18:39:36 +02:00
add optional file argument to sAVE command
Signed-off-by: Michel-FK <michel.stempin@funkey-project.com>
This commit is contained in:
@@ -36,6 +36,7 @@ KEYUP <key_code> Send a key up event with the
|
|||||||
LOAD <configuration_file> Load a configuration file
|
LOAD <configuration_file> Load a configuration file
|
||||||
MAP <button_combination> TO KEY <key_code> Map a button combination to a keycode
|
MAP <button_combination> TO KEY <key_code> Map a button combination to a keycode
|
||||||
MAP <button_combination> TO COMMAND <shell_command> Map a button combination to a Shell command
|
MAP <button_combination> TO COMMAND <shell_command> Map a button combination to a Shell command
|
||||||
|
SAVE <configuration_file> Save to a configuration file
|
||||||
SLEEP <delays_ms> Sleep for the given delay in ms
|
SLEEP <delays_ms> Sleep for the given delay in ms
|
||||||
TYPE <character_string> Type in a character string
|
TYPE <character_string> Type in a character string
|
||||||
UNMAP <button_combination> Unmap a button combination
|
UNMAP <button_combination> Unmap a button combination
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
* This file contains the mapping list handling functions
|
* This file contains the mapping list handling functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -303,46 +304,84 @@ void dump_mapping_list(mapping_list_t *list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Save a mapping */
|
/* Save a mapping */
|
||||||
void save_mapping(mapping_t *mapping)
|
bool save_mapping(FILE *fp, mapping_t *mapping)
|
||||||
{
|
{
|
||||||
int i, length;
|
int i, length;
|
||||||
uint32_t gpio_mask;
|
uint32_t gpio_mask;
|
||||||
|
|
||||||
printf("MAP ");
|
if (fprintf(fp, "MAP ") < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
for (i = 0, length = 0, gpio_mask = mapping->gpio_mask; i < MAX_NUM_GPIO;
|
for (i = 0, length = 0, gpio_mask = mapping->gpio_mask; i < MAX_NUM_GPIO;
|
||||||
i++, gpio_mask >>= 1) {
|
i++, gpio_mask >>= 1) {
|
||||||
if (gpio_mask & 1) {
|
if (gpio_mask & 1) {
|
||||||
printf("%s%s", gpio_name(i), gpio_mask == 1 ? " " : "+");
|
if (fprintf(fp, "%s%s", gpio_name(i), gpio_mask == 1 ? " " : "+") < 0) {
|
||||||
length += strlen(gpio_name(i)) + 1;
|
return false;
|
||||||
|
}
|
||||||
|
length += strlen(gpio_name(i)) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 9 - length; i > 0; i--) {
|
for (i = 9 - length; i > 0; i--) {
|
||||||
printf(" ");
|
if (fprintf(fp, " ") < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
switch (mapping->type) {
|
switch (mapping->type) {
|
||||||
case MAPPING_COMMAND:
|
case MAPPING_COMMAND:
|
||||||
printf("TO COMMAND %s\n", mapping->value.command);
|
if (fprintf(fp, "TO COMMAND %s\n", mapping->value.command) < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAPPING_KEY:
|
case MAPPING_KEY:
|
||||||
printf("TO KEY %s\n", keycode_name(mapping->value.keycode));
|
if (fprintf(fp, "TO KEY %s\n",
|
||||||
|
keycode_name(mapping->value.keycode)) < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FK_ERROR("Unknown mapping type %d\n", mapping->type);
|
FK_ERROR("Unknown mapping type %d\n", mapping->type);
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save a mapping list */
|
/* Save a mapping list */
|
||||||
void save_mapping_list(mapping_list_t *list)
|
bool save_mapping_list(const char *name, mapping_list_t *list)
|
||||||
{
|
{
|
||||||
struct mapping_list_t *p;
|
struct mapping_list_t *p;
|
||||||
mapping_t *tmp;
|
mapping_t *tmp;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
printf("CLEAR\n");
|
if (name[0] == '\0') {
|
||||||
|
fp = stdout;
|
||||||
|
} else {
|
||||||
|
fp = fopen(name, "w");
|
||||||
|
}
|
||||||
|
if (fp == NULL) {
|
||||||
|
FK_ERROR("Cannot open save file \"%s\": %s\n", name, strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
fprintf(fp, "CLEAR\n");
|
||||||
list_for_each_prev(p, list) {
|
list_for_each_prev(p, list) {
|
||||||
tmp = list_entry(p, mapping_t, mappings);
|
tmp = list_entry(p, mapping_t, mappings);
|
||||||
save_mapping(tmp);
|
if (save_mapping(fp, tmp) == false) {
|
||||||
|
FK_ERROR("Cannot write to save file \"%s\": %s\n", name,
|
||||||
|
strerror(errno));
|
||||||
|
if (fp != stdout) {
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (fp == stdout) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (fclose(fp) < 0) {
|
||||||
|
FK_ERROR("Cannot close save file \"%s\": %s\n", name, strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#ifndef _MAPPING_LIST_H_
|
#ifndef _MAPPING_LIST_H_
|
||||||
#define _MAPPING_LIST_H_
|
#define _MAPPING_LIST_H_
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
@@ -68,7 +69,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);
|
bool save_mapping(FILE *fp, mapping_t *mapping);
|
||||||
void save_mapping_list(mapping_list_t *list);
|
bool save_mapping_list(const char *name, mapping_list_t *list);
|
||||||
|
|
||||||
#endif // _MAPPING_LIST_H_
|
#endif // _MAPPING_LIST_H_
|
||||||
|
|||||||
@@ -286,7 +286,6 @@ 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:
|
||||||
@@ -297,6 +296,7 @@ bool parse_config_line(char *line, mapping_list_t *list,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case STATE_LOAD:
|
case STATE_LOAD:
|
||||||
|
case STATE_SAVE:
|
||||||
case STATE_TYPE:
|
case STATE_TYPE:
|
||||||
if (buffer[0] != '\0') {
|
if (buffer[0] != '\0') {
|
||||||
strncat(buffer, " ", MAX_LINE_LENGTH);
|
strncat(buffer, " ", MAX_LINE_LENGTH);
|
||||||
@@ -461,7 +461,8 @@ bool parse_config_line(char *line, mapping_list_t *list,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_SAVE:
|
case STATE_SAVE:
|
||||||
save_mapping_list(list);
|
FK_DEBUG("SAVE file \"%s\"\n", buffer);
|
||||||
|
return save_mapping_list(buffer, list);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_INIT:
|
case STATE_INIT:
|
||||||
|
|||||||
Reference in New Issue
Block a user