25static_assert(
sizeof(
struct img_mgmt_upload_action) == 8,
"ABI mismatch");
26static_assert(
sizeof(
struct img_mgmt_upload_req) == 8,
"ABI mismatch");
27static_assert(offsetof(
struct img_mgmt_upload_req, image) == 0,
"ABI mismatch");
28static_assert(offsetof(
struct img_mgmt_upload_req, off) == 4,
"ABI mismatch");
30static const char *
const TAG =
"zephyr_mcumgr";
33static enum mgmt_cb_return mcumgr_img_mgmt_cb(
uint32_t event,
enum mgmt_cb_return prev_status, int32_t *rc,
34 uint16_t *group,
bool *abort_more,
void *data,
size_t data_size) {
35 if (MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK == event) {
36 const img_mgmt_upload_check &upload = *
static_cast<img_mgmt_upload_check *
>(data);
38 }
else if (MGMT_EVT_OP_IMG_MGMT_DFU_STARTED == event) {
40 }
else if (MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE == event) {
42 }
else if (MGMT_EVT_OP_IMG_MGMT_DFU_PENDING == event) {
44 }
else if (MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED == event) {
47 ESP_LOGD(TAG,
"MCUmgr Image Management Event with the %d ID", u32_count_trailing_zeros(MGMT_EVT_GET_ID(event)));
58#ifdef CONFIG_USB_DEVICE_STACK
63#ifndef USE_OTA_ROLLBACK
64 if (!boot_is_img_confirmed()) {
65 boot_write_img_confirmed();
70#ifdef ESPHOME_LOG_HAS_CONFIG
71static const char *swap_type_str(uint8_t
type) {
73 case BOOT_SWAP_TYPE_NONE:
75 case BOOT_SWAP_TYPE_TEST:
77 case BOOT_SWAP_TYPE_PERM:
79 case BOOT_SWAP_TYPE_REVERT:
81 case BOOT_SWAP_TYPE_FAIL:
91 "Over-The-Air Updates:\n"
92 " swap type after reboot: %s\n"
93 " image confirmed: %s",
94 swap_type_str(mcuboot_swap_type()), YESNO(boot_is_img_confirmed()));
98 float percentage = (upload.req->off * 100.0f) / upload.action->size;
103 this->
defer([
this]() {
104 ESP_LOGD(TAG,
"Starting update");
105#ifdef USE_OTA_STATE_LISTENER
115 this->
defer([
this]() {
116 ESP_LOGD(TAG,
"OTA in progress: %0.1f%%", this->
percentage_);
117#ifdef USE_OTA_STATE_LISTENER
125 this->
defer([
this]() {
126 ESP_LOGD(TAG,
"OTA pending");
127#ifdef USE_OTA_STATE_LISTENER
134 this->
defer([
this]() {
135 ESP_LOGD(TAG,
"OTA stopped");
136#ifdef USE_OTA_STATE_LISTENER
ESPDEPRECATED("Use const char* overload instead. Removed in 2026.7.0", "2026.1.0") void defer(const std voi defer)(const char *name, std::function< void()> &&f)
Defer a callback to the next loop() call.