From 698832f42c11d1df2b955de37b6b130c980dadce Mon Sep 17 00:00:00 2001 From: xengineering Date: Tue, 15 Apr 2025 17:14:06 +0200 Subject: fw: app: syslog: Make target IP configurable --- fw/app/prj.conf | 1 + fw/app/src/settings.c | 9 +++++++- fw/app/src/syslog.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/fw/app/prj.conf b/fw/app/prj.conf index cd487f3..3258c0f 100644 --- a/fw/app/prj.conf +++ b/fw/app/prj.conf @@ -53,5 +53,6 @@ CONFIG_NVS=y CONFIG_NVS_DATA_CRC=y CONFIG_SETTINGS=y +CONFIG_SETTINGS_RUNTIME=y CONFIG_SETTINGS_NVS=y CONFIG_SETTINGS_SHELL=y diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c index 11cc162..916c7ad 100644 --- a/fw/app/src/settings.c +++ b/fw/app/src/settings.c @@ -21,6 +21,13 @@ int init_settings(void) { } 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); +SYS_INIT(init_settings, APPLICATION, 40); diff --git a/fw/app/src/syslog.c b/fw/app/src/syslog.c index e19a196..6dc0bd6 100644 --- a/fw/app/src/syslog.c +++ b/fw/app/src/syslog.c @@ -4,8 +4,10 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ +#include #include +#include #include #include #include @@ -14,6 +16,8 @@ #include #include #include +#include +#include #ifdef CONFIG_IOT_CONTACT_NETWORK_HACK #include @@ -23,9 +27,11 @@ 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 40 // including '\0' struct net_mgmt_event_callback l4_cb; static K_SEM_DEFINE(network_connected, 0, 1); +static char target_ip[IPV6_STRLEN_MAX] = CONFIG_LOG_BACKEND_NET_SERVER; void l4_event_handler( struct net_mgmt_event_callback *cb, @@ -79,6 +85,10 @@ int init_syslog(void) /* flush log messages to ensure first syslog message is reproducible */ while (log_process()); log_backend_init(backend); + LOG_INF("Setting syslog target to: '%s'", target_ip); + if (log_backend_net_set_addr(target_ip) == false) { + LOG_ERR("Could not set target IP to '%s'", target_ip); + } log_backend_enable(backend, backend->cb->ctx, CONFIG_LOG_MAX_LEVEL); LOG_INF("Syslog backend enabled"); } else { @@ -88,3 +98,50 @@ int init_syslog(void) return 0; } SYS_INIT(init_syslog, APPLICATION, 50); + +int syslog_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) +{ + const char* next = NULL; + + if (settings_name_steq(name, "target/ip", &next) && !next) { + memset(target_ip, '\0', sizeof(target_ip)); + ssize_t ret = read_cb(cb_arg, target_ip, MIN(sizeof(target_ip) - 1, len)); + if (ret < 0) { + LOG_ERR("Failed to read syslog/target/ip setting (%d)", ret); + return (int)ret; + } + LOG_INF("Setting target IP address to '%s'", target_ip); + return 0; + } + + return 0; +} + +int syslog_handle_commit(void) +{ + LOG_WRN("Settings commit not implemented"); + return 0; +} + +int syslog_handle_export(int (*cb)(const char *name, const void *value, + size_t val_len)) +{ + LOG_WRN("Settings export not implemented"); + return 0; +} + +int syslog_handle_get(const char *name, char *val, int val_len_max) +{ + LOG_WRN("Settings get not implemented"); + return 0; +} + +SETTINGS_STATIC_HANDLER_DEFINE( + syslog_settings_handler, + "syslog", + syslog_handle_get, + syslog_handle_set, + syslog_handle_commit, + syslog_handle_export +); -- cgit v1.2.3-70-g09d2