diff options
Diffstat (limited to 'fw/app/src')
-rw-r--r-- | fw/app/src/settings.c | 39 | ||||
-rw-r--r-- | fw/app/src/settings.h | 20 | ||||
-rw-r--r-- | fw/app/src/syslog.c | 3 |
3 files changed, 48 insertions, 14 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; } 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; |