【NCS随笔】怎么打开DFU升级开始回调
在NCS上面开启DFU之后确认是否开始DFU以及传输过程
一、添加宏
在prj.conf添加如下宏
#enable MCUboot
CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y
#enable MCUboot_mamage
CONFIG_MODULE_BT_MGMT_DFU=y
CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS=y
CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK=y
CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS=y
二、在main添加如下内容
///添加宏定义
#include <zephyr/mgmt/mcumgr/grp/img_mgmt/img_mgmt.h>
#include <zephyr/mgmt/mcumgr/mgmt/callbacks.h>
#include <zephyr/mgmt/mcumgr/mgmt/mgmt.h>
///添加回调
static enum mgmt_cb_return upload_confirm_cb(uint32_t event,
enum mgmt_cb_return prev_status,
int32_t *rc, uint16_t *group,
bool *abort_more, void *data,
size_t data_size)
{
struct img_mgmt_upload_check *imgData = (struct img_mgmt_upload_check *)data;
switch (event) {
case MGMT_EVT_OP_IMG_MGMT_DFU_STARTED:
LOG_INF("BLE Download start");
break;
case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK:
LOG_INF("BLE Download %u/%llu bytes", imgData->req->off, imgData->action->size);
break;
case MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED:
LOG_INF("BLE Download stop");
break;
default:
LOG_ERR("Unknown event %u", event);
break;
}
return MGMT_CB_OK;
}
///初始化 DFU_update
static int app_update_init(void)
{
int err;
static struct mgmt_callback mgmt_callback = {
.callback = upload_confirm_cb,
.event_id = MGMT_EVT_OP_IMG_MGMT_DFU_STARTED | MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK | MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED,
};
mgmt_callback_register(&mgmt_callback);
return 0;
}
/////初始化
SYS_INIT(app_update_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);
三、在Cmakelist.txt添加DFU库
zephyr_link_libraries(MCUBOOT_BOOTUTIL)
四、测试
可以看到点击DFU之后LOG开始打印 文件开始下载,以及文件下载的过程


浙公网安备 33010602011771号