diff options
Diffstat (limited to 'fw/app/src/settings.c')
-rw-r--r-- | fw/app/src/settings.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c new file mode 100644 index 0000000..04d309e --- /dev/null +++ b/fw/app/src/settings.c @@ -0,0 +1,79 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include <string.h> + +#include <zephyr/data/json.h> +#include <zephyr/init.h> +#include <zephyr/logging/log.h> +#include <zephyr/settings/settings.h> + +#include "settings.h" + + +LOG_MODULE_DECLARE(settings); + + +int init_settings(void) { + int ret = settings_subsys_init(); + if (ret < 0) { + LOG_ERR("Subsystem init failed (%d)", ret); + return ret; + } + LOG_INF("Subsystem initialized"); + + ret = settings_load(); + if (ret < 0) { + LOG_ERR("Failed to load settings (%d)", ret); + return ret; + } + LOG_INF("Loaded settings"); + + return 0; +} +SYS_INIT(init_settings, APPLICATION, 50); + +static const struct json_obj_descr settings_syslog_target_descr[] = { + JSON_OBJ_DESCR_PRIM(struct settings_syslog_target, ip, JSON_TOK_STRING), +}; + +static const struct json_obj_descr settings_syslog_descr[] = { + JSON_OBJ_DESCR_OBJECT(struct settings_syslog, target, settings_syslog_target_descr), +}; + +static const struct json_obj_descr settings_descr[] = { + JSON_OBJ_DESCR_OBJECT(struct settings, syslog, settings_syslog_descr), +}; + +int settings_to_json(void *buffer, size_t len) +{ + struct settings settings = {0,}; + + static char ip[IPV6_STRLEN_MAX]; + int ret = settings_runtime_get("syslog/target/ip", + ip, + sizeof(ip)); + if (ret < 0) { + LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret); + return ret; + } + + settings.syslog.target.ip = ip; + + ret = json_obj_encode_buf( + settings_descr, + ARRAY_SIZE(settings_descr), + &settings, + buffer, + len + ); + if (ret < 0) { + LOG_ERR("Failed to serialize settings as JSON"); + return ret; + } + + return 0; +} |