Skip to content

Commit

Permalink
Added separate ota config file based on the prj file.
Browse files Browse the repository at this point in the history
Parameters are based on the zigbee light switch example from nrf-connect toolkit.
clang-format with vs code.
  • Loading branch information
oleo65 committed Apr 28, 2024
1 parent a15bd37 commit 61533da
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 47 deletions.
89 changes: 89 additions & 0 deletions code/nrf-connect/samples/zigbee/prj_ota.conf
Original file line number Diff line number Diff line change
@@ -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
91 changes: 44 additions & 47 deletions code/nrf-connect/samples/zigbee/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
#include <zigbee/zigbee_error_handler.h>

#if CONFIG_ZIGBEE_FOTA
#include <zigbee/zigbee_fota.h>
#include <zephyr/sys/reboot.h>
#include <zephyr/dfu/mcuboot.h>
#include <zephyr/sys/reboot.h>
#include <zigbee/zigbee_fota.h>
#endif

#include "debug_counters.h"
Expand Down Expand Up @@ -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;
Expand All @@ -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 */

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 61533da

Please sign in to comment.