summaryrefslogtreecommitdiff
path: root/fw/app
diff options
context:
space:
mode:
Diffstat (limited to 'fw/app')
-rw-r--r--fw/app/prj.conf2
-rw-r--r--fw/app/src/settings.c39
-rw-r--r--fw/app/src/settings.h20
-rw-r--r--fw/app/src/syslog.c3
4 files changed, 50 insertions, 14 deletions
diff --git a/fw/app/prj.conf b/fw/app/prj.conf
index 4981bea..6589ec0 100644
--- a/fw/app/prj.conf
+++ b/fw/app/prj.conf
@@ -57,3 +57,5 @@ CONFIG_SETTINGS_NVS=y
CONFIG_SETTINGS_SHELL=y
CONFIG_GNU_C_EXTENSIONS=y
+
+CONFIG_JSON_LIBRARY=y
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;
}
diff --git a/fw/app/src/settings.h b/fw/app/src/settings.h
index a5cf2ac..9d46132 100644
--- a/fw/app/src/settings.h
+++ b/fw/app/src/settings.h
@@ -4,8 +4,28 @@
* obtain one at https://mozilla.org/MPL/2.0/.
*/
+#ifndef SRC_SETTINGS_H
+#define SRC_SETTINGS_H
#include <stddef.h>
+#include <zephyr/data/json.h>
+
+#define IPV6_STRLEN_MAX 39 // excluding '\0'
+
+
+struct settings_syslog_target {
+ char ip[IPV6_STRLEN_MAX];
+};
+
+struct settings_syslog {
+ struct settings_syslog_target target;
+};
+
+struct settings {
+ struct settings_syslog syslog;
+};
int settings_to_json(void *buffer, size_t data);
+
+#endif // !SRC_SETTINGS_H
diff --git a/fw/app/src/syslog.c b/fw/app/src/syslog.c
index 700547b..22aa034 100644
--- a/fw/app/src/syslog.c
+++ b/fw/app/src/syslog.c
@@ -25,11 +25,12 @@
#include <zephyr/sys/reboot.h>
#endif // CONFIG_IOT_CONTACT_NETWORK_HACK
+#include "settings.h"
+
LOG_MODULE_REGISTER(syslog);
#define NETWORK_BUG_DELAY K_MSEC(4000)
#define L4_EVENT_MASK (NET_EVENT_L4_CONNECTED | NET_EVENT_L4_DISCONNECTED)
-#define IPV6_STRLEN_MAX 39 // excluding '\0'
#define SYSLOG_TARGET_PORT 514
struct net_mgmt_event_callback l4_cb;