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-05-07 18:14:05 +0200
commit993996ab2b9dc7332d06453e2de7315b06ce2458 (patch)
tree1653fd7b8f87b362a1663ecc9c21ba6f126285b1 /fw/app/src/settings.c
parentf4faa103108356bcf53fb7c8829e95f012b21a4a (diff)
downloadiot-contact-993996ab2b9dc7332d06453e2de7315b06ce2458.tar
iot-contact-993996ab2b9dc7332d06453e2de7315b06ce2458.tar.zst
iot-contact-993996ab2b9dc7332d06453e2de7315b06ce2458.zip
fw: app: Encode settings with JSON lib
Diffstat (limited to 'fw/app/src/settings.c')
-rw-r--r--fw/app/src/settings.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c
index 89f2f88..4b2c248 100644
--- a/fw/app/src/settings.c
+++ b/fw/app/src/settings.c
@@ -4,9 +4,9 @@
* obtain one at https://mozilla.org/MPL/2.0/.
*/
+#include <string.h>
-#include <stdio.h>
-
+#include <zephyr/data/json.h>
#include <zephyr/init.h>
#include <zephyr/logging/log.h>
#include <zephyr/settings/settings.h>
@@ -36,27 +36,42 @@ 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,};
+ settings.syslog.target.ip = (char *)settings.syslog.target.ip_array;
- 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_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 = 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_descr,
+ ARRAY_SIZE(settings_descr),
+ &settings,
+ buffer,
+ len
+ );
if (ret < 0) {
LOG_ERR("Failed to serialize settings as JSON");
+ return ret;
}
- return ret;
+ return 0;
}