From 61533da1b6a40f947dc7cdb40d6b63affe2f16c7 Mon Sep 17 00:00:00 2001 From: Ole Odendahl Date: Sun, 28 Apr 2024 14:49:23 +0200 Subject: [PATCH] Added separate ota config file based on the prj file. Parameters are based on the zigbee light switch example from nrf-connect toolkit. clang-format with vs code. --- code/nrf-connect/samples/zigbee/prj_ota.conf | 89 +++++++++++++++++++ code/nrf-connect/samples/zigbee/src/main.c | 91 ++++++++++---------- 2 files changed, 133 insertions(+), 47 deletions(-) create mode 100644 code/nrf-connect/samples/zigbee/prj_ota.conf diff --git a/code/nrf-connect/samples/zigbee/prj_ota.conf b/code/nrf-connect/samples/zigbee/prj_ota.conf new file mode 100644 index 0000000..4a10f2f --- /dev/null +++ b/code/nrf-connect/samples/zigbee/prj_ota.conf @@ -0,0 +1,89 @@ + +CONFIG_LOG=y +CONFIG_PWM=y +CONFIG_I2C=y +CONFIG_ADC=y +CONFIG_GPIO=y + +CONFIG_USE_SEGGER_RTT=y +CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096 + +CONFIG_NEWLIB_LIBC=y +CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y + +CONFIG_SERIAL=n + +CONFIG_HEAP_MEM_POOL_SIZE=2048 +CONFIG_MAIN_THREAD_PRIORITY=7 + +CONFIG_ZIGBEE=y +CONFIG_ZIGBEE_APP_UTILS=y +CONFIG_ZIGBEE_ROLE_END_DEVICE=y + +# This example requires more workqueue stack +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 + +# Enable nRF ECB driver +CONFIG_CRYPTO=y +CONFIG_CRYPTO_NRF_ECB=y +CONFIG_CRYPTO_INIT_PRIORITY=80 + +# Networking +CONFIG_NET_IPV6=n +CONFIG_NET_IPV6_MLD=n +CONFIG_NET_IPV6_NBR_CACHE=n +CONFIG_NET_IPV6_RA_RDNSS=n +CONFIG_NET_IP_ADDR_CHECK=n +CONFIG_NET_UDP=n + +## +## ZigBee Channel Selection +## +# Get Zigbee to scan every channel. +CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y +# By default only scans channel 11 (ZigBee2MQTT default) and 15 (ZHA default). +# Comment to scan all channels - this will make pairing consume more energy. +# CONFIG_ZIGBEE_CHANNEL_MASK=0x8800 + +# Uncomment to set a specific channel - this will make pairing more energy efficient. +# CONFIG_ZIGBEE_CHANNEL=15 + +# Enable API for powering down unused RAM parts. +# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/nrf/ug_zigbee_configuring.html#power-saving-during-sleep +CONFIG_RAM_POWER_DOWN_LIBRARY=y + +# LittleFS. +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_FLASH=y +CONFIG_FLASH_MAP=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FILE_SYSTEM=y +CONFIG_FILE_SYSTEM_LITTLEFS=y + +CONFIG_WATCHDOG=y +CONFIG_HWINFO=y +CONFIG_ASSERT=y + +# Uncomment for debug log level. +# CONFIG_LOG_DEFAULT_LEVEL=4 + +# Factory reset method selection. Only hardware revision 2.0.0+ has button SW1. Earlier +# revisions must select a different method. See Kconfig for options. +# CONFIG_PRST_ZB_FACTORY_RESET_VIA_SW1=y +# Disable factory reset. + +# OTA update configuration. This is based on the zigbee light switch example from the nrf-connect toolkit. +CONFIG_ZIGBEE_FOTA=y +CONFIG_ZIGBEE_FOTA_ENDPOINT=5 +CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="1.0.0" # Increase this version for generating an update for the devices. +CONFIG_ZIGBEE_FOTA_COMMENT="b_parasite" + +# Ensure an MCUboot-compatible binary is generated. +CONFIG_IMG_MANAGER=y +CONFIG_STREAM_FLASH=y +CONFIG_DFU_TARGET_MCUBOOT=y +CONFIG_IMG_ERASE_PROGRESSIVELY=y +CONFIG_ZIGBEE_FOTA_PROGRESS_EVT=y + +# Increase the number of RX buffers +CONFIG_NRF_802154_RX_BUFFERS=32 diff --git a/code/nrf-connect/samples/zigbee/src/main.c b/code/nrf-connect/samples/zigbee/src/main.c index 379fd29..68c9d13 100644 --- a/code/nrf-connect/samples/zigbee/src/main.c +++ b/code/nrf-connect/samples/zigbee/src/main.c @@ -17,9 +17,9 @@ #include #if CONFIG_ZIGBEE_FOTA -#include -#include #include +#include +#include #endif #include "debug_counters.h" @@ -123,8 +123,8 @@ PRST_ZB_DECLARE_ENDPOINT( #ifndef CONFIG_ZIGBEE_FOTA ZBOSS_DECLARE_DEVICE_CTX_1_EP( - app_template_ctx, - app_template_ep); + app_template_ctx, + app_template_ep); #else extern zb_af_endpoint_desc_t zigbee_fota_client_ep; @@ -134,51 +134,48 @@ ZBOSS_DECLARE_DEVICE_CTX_2_EP( zigbee_fota_client_ep, app_template_ep); -static void confirm_image(void) -{ - if (!boot_is_img_confirmed()) { - int ret = boot_write_img_confirmed(); - - if (ret) { - LOG_ERR("Couldn't confirm image: %d", ret); - } else { - LOG_INF("Marked image as OK"); - } - } +static void confirm_image(void) { + if (!boot_is_img_confirmed()) { + int ret = boot_write_img_confirmed(); + + if (ret) { + LOG_ERR("Couldn't confirm image: %d", ret); + } else { + LOG_INF("Marked image as OK"); + } + } } -static void ota_evt_handler(const struct zigbee_fota_evt *evt) -{ - switch (evt->id) { +static void ota_evt_handler(const struct zigbee_fota_evt *evt) { + switch (evt->id) { case ZIGBEE_FOTA_EVT_PROGRESS: - // dk_set_led(OTA_ACTIVITY_LED, evt->dl.progress % 2); + // dk_set_led(OTA_ACTIVITY_LED, evt->dl.progress % 2); prst_led_flash(1); - break; + break; case ZIGBEE_FOTA_EVT_FINISHED: - LOG_INF("Reboot application."); - /* Power on unused sections of RAM to allow MCUboot to use it. */ - if (IS_ENABLED(CONFIG_RAM_POWER_DOWN_LIBRARY)) { - power_up_unused_ram(); - } - sys_reboot(SYS_REBOOT_COLD); - break; + LOG_INF("Reboot application."); + /* Power on unused sections of RAM to allow MCUboot to use it. */ + if (IS_ENABLED(CONFIG_RAM_POWER_DOWN_LIBRARY)) { + power_up_unused_ram(); + } + sys_reboot(SYS_REBOOT_COLD); + break; case ZIGBEE_FOTA_EVT_ERROR: - LOG_ERR("OTA image transfer failed."); - break; - } + LOG_ERR("OTA image transfer failed."); + break; + } } -static void zcl_device_cb(zb_bufid_t bufid) -{ - zb_zcl_device_callback_param_t *device_cb_param = - ZB_BUF_GET_PARAM(bufid, zb_zcl_device_callback_param_t); +static void zcl_device_cb(zb_bufid_t bufid) { + zb_zcl_device_callback_param_t *device_cb_param = + ZB_BUF_GET_PARAM(bufid, zb_zcl_device_callback_param_t); - if (device_cb_param->device_cb_id == ZB_ZCL_OTA_UPGRADE_VALUE_CB_ID) { - zigbee_fota_zcl_cb(bufid); - } else { - device_cb_param->status = RET_NOT_IMPLEMENTED; - } + if (device_cb_param->device_cb_id == ZB_ZCL_OTA_UPGRADE_VALUE_CB_ID) { + zigbee_fota_zcl_cb(bufid); + } else { + device_cb_param->status = RET_NOT_IMPLEMENTED; + } } #endif /* CONFIG_ZIGBEE_FOTA */ @@ -250,8 +247,8 @@ void zboss_signal_handler(zb_bufid_t bufid) { // See zigbee_default_signal_handler() for all available signals. #ifdef CONFIG_ZIGBEE_FOTA - /* Pass signal to the OTA client implementation. */ - zigbee_fota_signal_handler(bufid); + /* Pass signal to the OTA client implementation. */ + zigbee_fota_signal_handler(bufid); #endif /* CONFIG_ZIGBEE_FOTA */ zb_zdo_app_signal_hdr_t *sig_hndler = NULL; @@ -390,14 +387,14 @@ int main(void) { power_down_unused_ram(); #ifdef CONFIG_ZIGBEE_FOTA - /* Initialize Zigbee FOTA download service. */ - zigbee_fota_init(ota_evt_handler); + /* Initialize Zigbee FOTA download service. */ + zigbee_fota_init(ota_evt_handler); - /* Mark the current firmware as valid. */ - confirm_image(); + /* Mark the current firmware as valid. */ + confirm_image(); - /* Register callback for handling ZCL commands. */ - ZB_ZCL_REGISTER_DEVICE_CB(zcl_device_cb); + /* Register callback for handling ZCL commands. */ + ZB_ZCL_REGISTER_DEVICE_CB(zcl_device_cb); #endif /* CONFIG_ZIGBEE_FOTA */ ZB_AF_REGISTER_DEVICE_CTX(&app_template_ctx);