5
5
#if SOC_IEEE802154_SUPPORTED && CONFIG_ZB_ENABLED
6
6
7
7
#include " esp_ota_ops.h"
8
- #if CONFIG_ZB_DELTA_OTA // Delta OTA, code is prepared for this feature but not enabled by default
8
+ #if CONFIG_ZB_DELTA_OTA // Delta OTA, code is prepared for this feature but not enabled by default
9
9
#include " esp_delta_ota_ops.h"
10
10
#endif
11
11
12
12
// OTA Upgrade defines and variables
13
- #define OTA_ELEMENT_HEADER_LEN 6 /* OTA element format header size include tag identifier and length field */
13
+ #define OTA_ELEMENT_HEADER_LEN 6 /* OTA element format header size include tag identifier and length field */
14
14
15
15
/* *
16
16
* @name Enumeration for the tag identifier denotes the type and format of the data within the element
17
17
* @anchor esp_ota_element_tag_id_t
18
18
*/
19
19
typedef enum esp_ota_element_tag_id_e {
20
- UPGRADE_IMAGE = 0x0000 , /* !< Upgrade image */
20
+ UPGRADE_IMAGE = 0x0000 , /* !< Upgrade image */
21
21
} esp_ota_element_tag_id_t ;
22
22
23
23
static const esp_partition_t *s_ota_partition = NULL ;
@@ -36,7 +36,6 @@ static esp_err_t zb_window_covering_movement_resp_handler(const esp_zb_zcl_windo
36
36
static esp_err_t zb_ota_upgrade_status_handler (const esp_zb_zcl_ota_upgrade_value_message_t *message);
37
37
static esp_err_t zb_ota_upgrade_query_image_resp_handler (const esp_zb_zcl_ota_upgrade_query_image_resp_message_t *message);
38
38
39
-
40
39
// Zigbee action handlers
41
40
[[maybe_unused]]
42
41
static esp_err_t zb_action_handler (esp_zb_core_action_callback_id_t callback_id, const void *message) {
@@ -55,9 +54,7 @@ static esp_err_t zb_action_handler(esp_zb_core_action_callback_id_t callback_id,
55
54
case ESP_ZB_CORE_WINDOW_COVERING_MOVEMENT_CB_ID:
56
55
ret = zb_window_covering_movement_resp_handler ((esp_zb_zcl_window_covering_movement_message_t *)message);
57
56
break ;
58
- case ESP_ZB_CORE_OTA_UPGRADE_VALUE_CB_ID:
59
- ret = zb_ota_upgrade_status_handler ((esp_zb_zcl_ota_upgrade_value_message_t *)message);
60
- break ;
57
+ case ESP_ZB_CORE_OTA_UPGRADE_VALUE_CB_ID: ret = zb_ota_upgrade_status_handler ((esp_zb_zcl_ota_upgrade_value_message_t *)message); break ;
61
58
case ESP_ZB_CORE_OTA_UPGRADE_QUERY_IMAGE_RESP_CB_ID:
62
59
ret = zb_ota_upgrade_query_image_resp_handler ((esp_zb_zcl_ota_upgrade_query_image_resp_message_t *)message);
63
60
break ;
@@ -237,21 +234,20 @@ static esp_err_t zb_window_covering_movement_resp_handler(const esp_zb_zcl_windo
237
234
return ESP_OK;
238
235
}
239
236
240
- static esp_err_t esp_element_ota_data (uint32_t total_size, const void *payload, uint16_t payload_size, void **outbuf, uint16_t *outlen)
241
- {
237
+ static esp_err_t esp_element_ota_data (uint32_t total_size, const void *payload, uint16_t payload_size, void **outbuf, uint16_t *outlen) {
242
238
static uint16_t tagid = 0 ;
243
239
void *data_buf = NULL ;
244
240
uint16_t data_len;
245
241
246
242
if (!s_tagid_received) {
247
243
uint32_t length = 0 ;
248
244
if (!payload || payload_size <= OTA_ELEMENT_HEADER_LEN) {
249
- log_e (" Invalid element format" );
250
- return ESP_ERR_INVALID_ARG;
245
+ log_e (" Invalid element format" );
246
+ return ESP_ERR_INVALID_ARG;
251
247
}
252
248
253
249
const uint8_t *payload_ptr = (const uint8_t *)payload;
254
- tagid = *(const uint16_t *)payload_ptr;
250
+ tagid = *(const uint16_t *)payload_ptr;
255
251
length = *(const uint32_t *)(payload_ptr + sizeof (tagid));
256
252
if ((length + OTA_ELEMENT_HEADER_LEN) != total_size) {
257
253
log_e (" Invalid element length [%ld/%ld]" , length, total_size);
@@ -281,8 +277,7 @@ static esp_err_t esp_element_ota_data(uint32_t total_size, const void *payload,
281
277
return ESP_OK;
282
278
}
283
279
284
- static esp_err_t zb_ota_upgrade_status_handler (const esp_zb_zcl_ota_upgrade_value_message_t *message)
285
- {
280
+ static esp_err_t zb_ota_upgrade_status_handler (const esp_zb_zcl_ota_upgrade_value_message_t *message) {
286
281
static uint32_t total_size = 0 ;
287
282
static uint32_t offset = 0 ;
288
283
[[maybe_unused]]
@@ -291,94 +286,91 @@ static esp_err_t zb_ota_upgrade_status_handler(const esp_zb_zcl_ota_upgrade_valu
291
286
292
287
if (message->info .status == ESP_ZB_ZCL_STATUS_SUCCESS) {
293
288
switch (message->upgrade_status ) {
294
- case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_START:
295
- log_i (" Zigbee - OTA upgrade start" );
296
- start_time = esp_timer_get_time ();
297
- s_ota_partition = esp_ota_get_next_update_partition (NULL );
298
- assert (s_ota_partition);
289
+ case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_START:
290
+ log_i (" Zigbee - OTA upgrade start" );
291
+ start_time = esp_timer_get_time ();
292
+ s_ota_partition = esp_ota_get_next_update_partition (NULL );
293
+ assert (s_ota_partition);
299
294
#if CONFIG_ZB_DELTA_OTA
300
- ret = esp_delta_ota_begin (s_ota_partition, 0 , &s_ota_handle);
295
+ ret = esp_delta_ota_begin (s_ota_partition, 0 , &s_ota_handle);
301
296
#else
302
- ret = esp_ota_begin (s_ota_partition, 0 , &s_ota_handle);
297
+ ret = esp_ota_begin (s_ota_partition, 0 , &s_ota_handle);
303
298
#endif
304
- if (ret != ESP_OK) {
305
- log_e (" Zigbee - Failed to begin OTA partition, status: %s" , esp_err_to_name (ret));
306
- return ret;
307
- }
308
- break ;
309
- case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_RECEIVE:
310
- total_size = message->ota_header .image_size ;
311
- offset += message->payload_size ;
312
- log_i (" Zigbee - OTA Client receives data: progress [%ld/%ld]" , offset, total_size);
313
- if (message->payload_size && message->payload ) {
314
- uint16_t payload_size = 0 ;
315
- void *payload = NULL ;
316
- ret = esp_element_ota_data (total_size, message->payload , message->payload_size , &payload, &payload_size);
317
- if (ret != ESP_OK) {
318
- log_e (" Zigbee - Failed to element OTA data, status: %s" , esp_err_to_name (ret));
299
+ if (ret != ESP_OK) {
300
+ log_e (" Zigbee - Failed to begin OTA partition, status: %s" , esp_err_to_name (ret));
319
301
return ret;
320
302
}
303
+ break ;
304
+ case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_RECEIVE:
305
+ total_size = message->ota_header .image_size ;
306
+ offset += message->payload_size ;
307
+ log_i (" Zigbee - OTA Client receives data: progress [%ld/%ld]" , offset, total_size);
308
+ if (message->payload_size && message->payload ) {
309
+ uint16_t payload_size = 0 ;
310
+ void *payload = NULL ;
311
+ ret = esp_element_ota_data (total_size, message->payload , message->payload_size , &payload, &payload_size);
312
+ if (ret != ESP_OK) {
313
+ log_e (" Zigbee - Failed to element OTA data, status: %s" , esp_err_to_name (ret));
314
+ return ret;
315
+ }
321
316
#if CONFIG_ZB_DELTA_OTA
322
- ret = esp_delta_ota_write (s_ota_handle, payload, payload_size);
317
+ ret = esp_delta_ota_write (s_ota_handle, payload, payload_size);
323
318
#else
324
- ret = esp_ota_write (s_ota_handle, (const void *)payload, payload_size);
319
+ ret = esp_ota_write (s_ota_handle, (const void *)payload, payload_size);
325
320
#endif
326
- if (ret != ESP_OK) {
327
- log_e (" Zigbee - Failed to write OTA data to partition, status: %s" , esp_err_to_name (ret));
328
- return ret;
321
+ if (ret != ESP_OK) {
322
+ log_e (" Zigbee - Failed to write OTA data to partition, status: %s" , esp_err_to_name (ret));
323
+ return ret;
324
+ }
329
325
}
330
- }
331
- break ;
332
- case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_APPLY:
333
- log_i (" Zigbee - OTA upgrade apply" );
334
- break ;
335
- case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_CHECK:
336
- ret = offset == total_size ? ESP_OK : ESP_FAIL;
337
- offset = 0 ;
338
- total_size = 0 ;
339
- s_tagid_received = false ;
340
- log_i (" Zigbee - OTA upgrade check status: %s" , esp_err_to_name (ret));
341
- break ;
342
- case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_FINISH:
343
- log_i (" Zigbee - OTA Finish" );
344
- log_i (" Zigbee - OTA Information: version: 0x%lx, manufacturer code: 0x%x, image type: 0x%x, total size: %ld bytes, cost time: %lld ms," ,
345
- message->ota_header .file_version , message->ota_header .manufacturer_code , message->ota_header .image_type ,
346
- message->ota_header .image_size , (esp_timer_get_time () - start_time) / 1000 );
326
+ break ;
327
+ case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_APPLY: log_i (" Zigbee - OTA upgrade apply" ); break ;
328
+ case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_CHECK:
329
+ ret = offset == total_size ? ESP_OK : ESP_FAIL;
330
+ offset = 0 ;
331
+ total_size = 0 ;
332
+ s_tagid_received = false ;
333
+ log_i (" Zigbee - OTA upgrade check status: %s" , esp_err_to_name (ret));
334
+ break ;
335
+ case ESP_ZB_ZCL_OTA_UPGRADE_STATUS_FINISH:
336
+ log_i (" Zigbee - OTA Finish" );
337
+ log_i (
338
+ " Zigbee - OTA Information: version: 0x%lx, manufacturer code: 0x%x, image type: 0x%x, total size: %ld bytes, cost time: %lld ms," ,
339
+ message->ota_header .file_version , message->ota_header .manufacturer_code , message->ota_header .image_type , message->ota_header .image_size ,
340
+ (esp_timer_get_time () - start_time) / 1000
341
+ );
347
342
#if CONFIG_ZB_DELTA_OTA
348
- ret = esp_delta_ota_end (s_ota_handle);
343
+ ret = esp_delta_ota_end (s_ota_handle);
349
344
#else
350
- ret = esp_ota_end (s_ota_handle);
345
+ ret = esp_ota_end (s_ota_handle);
351
346
#endif
352
- if (ret != ESP_OK) {
353
- log_e (" Zigbee - Failed to end OTA partition, status: %s" , esp_err_to_name (ret));
354
- return ret;
355
- }
356
- ret = esp_ota_set_boot_partition (s_ota_partition);
357
- if (ret != ESP_OK) {
358
- log_e (" Zigbee - Failed to set OTA boot partition, status: %s" , esp_err_to_name (ret));
359
- return ret;
360
- }
361
- log_w (" Zigbee - Prepare to restart system" );
362
- esp_restart ();
363
- break ;
364
- default :
365
- log_i (" Zigbee - OTA status: %d" , message->upgrade_status );
366
- break ;
347
+ if (ret != ESP_OK) {
348
+ log_e (" Zigbee - Failed to end OTA partition, status: %s" , esp_err_to_name (ret));
349
+ return ret;
350
+ }
351
+ ret = esp_ota_set_boot_partition (s_ota_partition);
352
+ if (ret != ESP_OK) {
353
+ log_e (" Zigbee - Failed to set OTA boot partition, status: %s" , esp_err_to_name (ret));
354
+ return ret;
355
+ }
356
+ log_w (" Zigbee - Prepare to restart system" );
357
+ esp_restart ();
358
+ break ;
359
+ default : log_i (" Zigbee - OTA status: %d" , message->upgrade_status ); break ;
367
360
}
368
361
}
369
362
return ret;
370
363
}
371
364
372
- static esp_err_t zb_ota_upgrade_query_image_resp_handler (const esp_zb_zcl_ota_upgrade_query_image_resp_message_t *message)
373
- {
365
+ static esp_err_t zb_ota_upgrade_query_image_resp_handler (const esp_zb_zcl_ota_upgrade_query_image_resp_message_t *message) {
374
366
if (message->info .status == ESP_ZB_ZCL_STATUS_SUCCESS) {
375
367
log_i (" Zigbee - Queried OTA image from address: 0x%04hx, endpoint: %d" , message->server_addr .u .short_addr , message->server_endpoint );
376
368
log_i (" Zigbee - Image version: 0x%lx, manufacturer code: 0x%x, image size: %ld" , message->file_version , message->manufacturer_code , message->image_size );
377
- if (message->image_size == 0 ) {
369
+ if (message->image_size == 0 ) {
378
370
log_i (" Zigbee - Rejecting OTA image upgrade, image size is 0" );
379
371
return ESP_FAIL;
380
372
}
381
- if (message->file_version == 0 ) {
373
+ if (message->file_version == 0 ) {
382
374
log_i (" Zigbee - Rejecting OTA image upgrade, file version is 0" );
383
375
return ESP_FAIL;
384
376
}
0 commit comments