summaryrefslogtreecommitdiff
path: root/fw/app/src/settings.c
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-04-16 21:58:20 +0200
committerxengineering <me@xengineering.eu>2025-04-16 21:58:20 +0200
commit04b2fd43f67cd191e5b38c93ec6f20b06b7946e1 (patch)
tree986a3bef59a2aefbc5d5314c96691b8117ccac1c /fw/app/src/settings.c
parentf4faa103108356bcf53fb7c8829e95f012b21a4a (diff)
downloadiot-contact-04b2fd43f67cd191e5b38c93ec6f20b06b7946e1.tar
iot-contact-04b2fd43f67cd191e5b38c93ec6f20b06b7946e1.tar.zst
iot-contact-04b2fd43f67cd191e5b38c93ec6f20b06b7946e1.zip
WIP: fw: app: Encode settings with JSON lib
TODO: SEGFAULT in json_escape_internal (grrrrr)
Diffstat (limited to 'fw/app/src/settings.c')
-rw-r--r--fw/app/src/settings.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c
index 89f2f88..72cea12 100644
--- a/fw/app/src/settings.c
+++ b/fw/app/src/settings.c
@@ -5,8 +5,7 @@
*/
-#include <stdio.h>
-
+#include <zephyr/data/json.h>
#include <zephyr/init.h>
#include <zephyr/logging/log.h>
#include <zephyr/settings/settings.h>
@@ -36,27 +35,41 @@ int init_settings(void) {
}
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)
{
- static const char format[] = "{\"syslog\":{\"target\":{\"ip\":\"%s\"}}}\n";
+ struct settings settings = {0,};
- char ip[100];
- int ret = settings_runtime_get("syslog/target/ip", ip, sizeof(ip));
+ int ret = settings_runtime_get("syslog/target/ip",
+ settings.syslog.target.ip,
+ sizeof(settings.syslog.target.ip));
if (ret < 0) {
LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret);
return ret;
}
- ret = snprintf(buffer, len, format, ip);
-
- if (ret >= len) {
- LOG_ERR("Buffer too small to serialize settings as JSON");
- return -ENOMEM;
- }
-
+ ret = json_obj_encode_buf(
+ settings_syslog_target_descr,
+ ARRAY_SIZE(settings_syslog_target_descr),
+ &(settings.syslog.target),
+ buffer,
+ len
+ );
if (ret < 0) {
LOG_ERR("Failed to serialize settings as JSON");
+ return ret;
}
- return ret;
+ return 0;
}