diff options
author | xengineering <me@xengineering.eu> | 2025-05-07 19:03:22 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2025-05-07 19:03:22 +0200 |
commit | a5aafcbd0398ae3893a83827cf66d4352eaee8f0 (patch) | |
tree | 36506463a33aa274dc56f8332269eab096eb73c7 /fw/app/src/settings.c | |
parent | 015972d873627466bd7e40f8d5dbb5951fb0f36a (diff) | |
parent | 184a41809c66868992c90ce9d420b8e4dc46253b (diff) | |
download | iot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.tar iot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.tar.zst iot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.zip |
This adds the HTTP GET /settings.json API. Writing settings is only
supported via the Zephyr shell.
Diffstat (limited to 'fw/app/src/settings.c')
-rw-r--r-- | fw/app/src/settings.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c new file mode 100644 index 0000000..4b2c248 --- /dev/null +++ b/fw/app/src/settings.c @@ -0,0 +1,77 @@ +/* + * 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,}; + settings.syslog.target.ip = (char *)settings.syslog.target.ip_array; + + int ret = settings_runtime_get("syslog/target/ip", + settings.syslog.target.ip_array, + sizeof(settings.syslog.target.ip_array)); + if (ret < 0) { + LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret); + return ret; + } + + 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; +} |