summaryrefslogtreecommitdiff
path: root/fw/app/src/settings.c
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-05-07 19:03:22 +0200
committerxengineering <me@xengineering.eu>2025-05-07 19:03:22 +0200
commita5aafcbd0398ae3893a83827cf66d4352eaee8f0 (patch)
tree36506463a33aa274dc56f8332269eab096eb73c7 /fw/app/src/settings.c
parent015972d873627466bd7e40f8d5dbb5951fb0f36a (diff)
parent184a41809c66868992c90ce9d420b8e4dc46253b (diff)
downloadiot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.tar
iot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.tar.zst
iot-contact-a5aafcbd0398ae3893a83827cf66d4352eaee8f0.zip
Merge branch 'settings'HEADmain
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.c77
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;
+}