diff --git a/Dockerfile b/Dockerfile
index c8cedaa4..62526621 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -51,11 +51,11 @@ RUN \
&& unzip -q -d simplicity_sdk_2024.6.2 simplicity_sdk_2024.6.2.zip \
&& rm simplicity_sdk_2024.6.2.zip
-# Gecko SDK 4.4.4
+# Gecko SDK 4.4.5
RUN \
- curl -o gecko_sdk_4.4.4.zip -L https://github.com/SiliconLabs/gecko_sdk/releases/download/v4.4.4/gecko-sdk.zip \
- && unzip -q -d gecko_sdk_4.4.4 gecko_sdk_4.4.4.zip \
- && rm gecko_sdk_4.4.4.zip
+ curl -o gecko_sdk_4.4.5.zip -L https://github.com/SiliconLabs/gecko_sdk/releases/download/v4.4.5/gecko-sdk.zip \
+ && unzip -q -d gecko_sdk_4.4.5 gecko_sdk_4.4.5.zip \
+ && rm gecko_sdk_4.4.5.zip
# ZCL Advanced Platform (ZAP) v2024.09.27
RUN \
diff --git a/manifests/nabucasa/skyconnect_bootloader.yaml b/manifests/nabucasa/skyconnect_bootloader.yaml
index b6547fb9..0e87a008 100644
--- a/manifests/nabucasa/skyconnect_bootloader.yaml
+++ b/manifests/nabucasa/skyconnect_bootloader.yaml
@@ -2,7 +2,7 @@ name: SkyConnect Bootloader
device: EFR32MG21A020F512IM32
base_project: src/bootloader
filename: "{manifest_name}_{gecko_bootloader_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/skyconnect_openthread_rcp.yaml b/manifests/nabucasa/skyconnect_openthread_rcp.yaml
index 284e2993..d2703e90 100644
--- a/manifests/nabucasa/skyconnect_openthread_rcp.yaml
+++ b/manifests/nabucasa/skyconnect_openthread_rcp.yaml
@@ -2,7 +2,7 @@ name: SkyConnect OpenThread RCP
device: EFR32MG21A020F512IM32
base_project: src/openthread_rcp
filename: "{manifest_name}_{ot_rcp_version.split('/')[-1]}_gsdk_{sdk_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/skyconnect_zigbee_ncp.yaml b/manifests/nabucasa/skyconnect_zigbee_ncp.yaml
index 44d707f1..eac0e301 100644
--- a/manifests/nabucasa/skyconnect_zigbee_ncp.yaml
+++ b/manifests/nabucasa/skyconnect_zigbee_ncp.yaml
@@ -2,7 +2,7 @@ name: SkyConnect Zigbee
device: EFR32MG21A020F512IM32
base_project: src/zigbee_ncp
filename: "{manifest_name}_{ezsp_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/yellow_bootloader.yaml b/manifests/nabucasa/yellow_bootloader.yaml
index 2859c852..aa9cb51a 100644
--- a/manifests/nabucasa/yellow_bootloader.yaml
+++ b/manifests/nabucasa/yellow_bootloader.yaml
@@ -2,7 +2,7 @@ name: Yellow Bootloader
device: MGM210PA32JIA
base_project: src/bootloader
filename: "{manifest_name}_{gecko_bootloader_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/yellow_openthread_rcp.yaml b/manifests/nabucasa/yellow_openthread_rcp.yaml
index d0ee8200..47bfaaab 100644
--- a/manifests/nabucasa/yellow_openthread_rcp.yaml
+++ b/manifests/nabucasa/yellow_openthread_rcp.yaml
@@ -2,7 +2,7 @@ name: Yellow OpenThread RCP
device: MGM210PA32JIA
base_project: src/openthread_rcp
filename: "{manifest_name}_{ot_rcp_version.split('/')[-1]}_gsdk_{sdk_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/yellow_zigbee_ncp.yaml b/manifests/nabucasa/yellow_zigbee_ncp.yaml
index 1cbdd0ae..4ed12d48 100644
--- a/manifests/nabucasa/yellow_zigbee_ncp.yaml
+++ b/manifests/nabucasa/yellow_zigbee_ncp.yaml
@@ -2,7 +2,7 @@ name: Yellow Zigbee
device: MGM210PA32JIA
base_project: src/zigbee_ncp
filename: "{manifest_name}_{ezsp_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "gecko_sdk:4.4.5"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/src/zigbee_ncp/config/zigbee_watchdog_periodic_refresh_config.h b/src/zigbee_ncp/config/zigbee_watchdog_periodic_refresh_config.h
new file mode 100644
index 00000000..e317fedb
--- /dev/null
+++ b/src/zigbee_ncp/config/zigbee_watchdog_periodic_refresh_config.h
@@ -0,0 +1,34 @@
+/***************************************************************************//**
+ * @brief Sample watchdog refresh event component configuration header.
+ ********************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * The licensor of this software is Silicon Laboratories Inc. Your use of this
+ * software is governed by the terms of Silicon Labs Master Software License
+ * Agreement (MSLA) available at
+ * www.silabs.com/about-us/legal/master-software-license-agreement. This
+ * software is distributed to you in Source Code format and is governed by the
+ * sections of the MSLA applicable to Source Code.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Zigbee Watchdog reset component configuration
+
+// Enable periodic watchdog refresh
+// Default: TRUE
+// This allows for enabling or disabling periodic watchdog refresh
+#define SL_ZIGBEE_WATCHDOG_PERIODIC_REFRESH_ENABLE 1
+
+// Watchdog refresh duration <50-5000>
+// Default: 1000
+// Defines the periodic interval at which the watchdog timer is reset in the application
+#define SL_ZIGBEE_WATCHDOG_REFRESH_DURATION_MS 1000
+
+//
+//
+
+// <<< end of configuration section >>>
diff --git a/src/zigbee_ncp/sl_zigbee_watchdog_periodic_refresh.c b/src/zigbee_ncp/sl_zigbee_watchdog_periodic_refresh.c
new file mode 100644
index 00000000..e3251c3c
--- /dev/null
+++ b/src/zigbee_ncp/sl_zigbee_watchdog_periodic_refresh.c
@@ -0,0 +1,59 @@
+/***************************************************************************//**
+ * @file
+ * @brief Sample watchdog refresh event implementation and related configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * The licensor of this software is Silicon Laboratories Inc. Your use of this
+ * software is governed by the terms of Silicon Labs Master Software License
+ * Agreement (MSLA) available at
+ * www.silabs.com/about-us/legal/master-software-license-agreement. This
+ * software is distributed to you in Source Code format and is governed by the
+ * sections of the MSLA applicable to Source Code.
+ *
+ ******************************************************************************/
+#include PLATFORM_HEADER
+#include "hal.h"
+#include "ember.h"
+#include "zigbee_app_framework_event.h"
+#include "zigbee_app_framework_common.h"
+#include "zigbee_watchdog_periodic_refresh_config.h"
+
+#if (SL_ZIGBEE_WATCHDOG_PERIODIC_REFRESH_ENABLE == 1)
+
+static sl_zigbee_event_t watchdog_refresh_event;
+static void watchdog_refresh_event_handler(sl_zigbee_event_t *event);
+
+// Initialization of watchdog refresh event
+void sli_zigbee_watchdog_refresh_handler_init(uint8_t init_level)
+{
+ switch (init_level) {
+ case SL_ZIGBEE_INIT_LEVEL_EVENT:
+ {
+ sl_zigbee_event_init(&watchdog_refresh_event, watchdog_refresh_event_handler);
+ sl_zigbee_event_set_active(&watchdog_refresh_event);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+// In RTOS-based applications, the Zigbee task refreshes the watchdog.
+// However, when the node is not on a network the Zigbee task does not run.
+// Therefore, there needs to be a way to ensure that the watchdog does not fire
+// and reset the node unnecessarily. Below we provide an example of an application
+// event that periodically resets the watchdog.
+// Note, such a periodic event gets the node out of EM1/EM2 low power modes,
+// which may result in unnecessary energy consumption.
+// The application should ultimately own the refreshing of the watchdog and tailor
+// it based on the specific use case.
+// In the bare-metal case, this is done in the zigbee stack and app framework ticks
+static void watchdog_refresh_event_handler(sl_zigbee_event_t *event)
+{
+ halResetWatchdog();
+ sl_zigbee_event_set_delay_ms(&watchdog_refresh_event, SL_ZIGBEE_WATCHDOG_REFRESH_DURATION_MS);
+}
+#endif //(SL_ZIGBEE_WATCHDOG_PERIODIC_REFRESH_ENABLE == 1)
diff --git a/src/zigbee_ncp/zigbee_ncp.slcp b/src/zigbee_ncp/zigbee_ncp.slcp
index 5ac2ad92..ca6b87cd 100644
--- a/src/zigbee_ncp/zigbee_ncp.slcp
+++ b/src/zigbee_ncp/zigbee_ncp.slcp
@@ -60,19 +60,28 @@ configuration:
value: 1
- name: EMBER_AF_PLUGIN_PACKET_HANDOFF_ALLOW_ALL_PACKETS
value: 1
+ - name: SL_LEGACY_HAL_DISABLE_WATCHDOG
+ value: 0
+ - name: SL_ZIGBEE_WATCHDOG_PERIODIC_REFRESH_ENABLE
+ value: 1
source:
- path: main.c
- path: app.c
+ - path: sl_zigbee_watchdog_periodic_refresh.c
config_file:
- path: config/xncp_config.h
file_id: xncp_config
+ - path: config/zigbee_watchdog_periodic_refresh_config.h
template_contribution:
- name: zigbee_stack_callback
priority: -9999
value: {callback_type: override_append_source_route, function_name: nc_zigbee_override_append_source_route}
+- name: zigbee_af_callback
+ value: {callback_type: event_init, function_name: sli_zigbee_watchdog_refresh_handler_init}
+
filter:
- name: Wireless Technology