diff options
author | xengineering <me@xengineering.eu> | 2025-03-30 13:38:05 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2025-03-30 13:38:05 +0200 |
commit | 8bfece93b1e8835929d3f270cb61628abf2e3aef (patch) | |
tree | 3de1d22ccf1b33a60d7b1da086f09f524866c777 | |
parent | ff5d76084b1d10e780426b22e0bdb320e525bf79 (diff) | |
download | iot-contact-8bfece93b1e8835929d3f270cb61628abf2e3aef.tar iot-contact-8bfece93b1e8835929d3f270cb61628abf2e3aef.tar.zst iot-contact-8bfece93b1e8835929d3f270cb61628abf2e3aef.zip |
fw: app: Reboot in case of no network
Because of an issue likely related to hardware design on the
nucleo_f767zi board (see issue [1] for details) the firmware should
reboot in case network access cannot be established after 4 seconds.
This makes the firmware more robust at the moment. As soon as
iot-contact hardware without this issue exists the behavior can be
changed again.
[1]: https://github.com/zephyrproject-rtos/zephyr/issues/77794
-rw-r--r-- | fw/app/src/syslog.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fw/app/src/syslog.c b/fw/app/src/syslog.c index b1a1077..edc2839 100644 --- a/fw/app/src/syslog.c +++ b/fw/app/src/syslog.c @@ -14,9 +14,11 @@ #include <zephyr/logging/log_ctrl.h> #include <zephyr/logging/log_core.h> #include <zephyr/net/conn_mgr_connectivity.h> +#include <zephyr/sys/reboot.h> LOG_MODULE_REGISTER(syslog); +#define NETWORK_BUG_DELAY K_MSEC(4000) #define L4_EVENT_MASK (NET_EVENT_L4_CONNECTED | NET_EVENT_L4_DISCONNECTED) struct net_mgmt_event_callback l4_cb; @@ -55,10 +57,15 @@ int init_syslog(void) { LOG_DBG("Initializing syslog logging backend"); - LOG_DBG("Waiting for network ..."); - k_sem_take(&network_connected, K_FOREVER); + LOG_INF("Waiting for network ..."); + int ret = k_sem_take(&network_connected, NETWORK_BUG_DELAY); + if (ret == -EAGAIN) { + LOG_ERR("Could not connect to network - rebooting system"); + log_flush(); + sys_reboot(SYS_REBOOT_COLD); + } - LOG_DBG("Enabling syslog backend"); + LOG_INF("Enabling syslog backend"); const struct log_backend *backend = log_backend_net_get(); if (log_backend_is_active(backend) == false) { /* flush log messages to ensure first syslog message is reproducible */ |