27
27
#include <zephyr/dfu/flash_img.h>
28
28
#endif
29
29
30
- static img_mgmt_upload_fn img_mgmt_upload_cb ;
31
-
32
- const struct img_mgmt_dfu_callbacks_t * img_mgmt_dfu_callbacks_fn ;
30
+ #ifdef CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS
31
+ #include <zephyr/mgmt/mcumgr/mgmt/callbacks.h>
32
+ #endif
33
33
34
34
struct img_mgmt_state g_img_mgmt_state ;
35
35
@@ -295,7 +295,9 @@ img_mgmt_erase(struct smp_streamer *ctxt)
295
295
img_mgmt_reset_upload ();
296
296
297
297
if (rc != 0 ) {
298
- img_mgmt_dfu_stopped ();
298
+ #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS )
299
+ (void )mgmt_callback_notify (MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED , NULL , 0 );
300
+ #endif
299
301
return rc ;
300
302
}
301
303
@@ -355,7 +357,6 @@ img_mgmt_upload_log(bool is_first, bool is_last, int status)
355
357
static int
356
358
img_mgmt_upload (struct smp_streamer * ctxt )
357
359
{
358
- struct mgmt_evt_op_cmd_status_arg cmd_status_arg ;
359
360
zcbor_state_t * zsd = ctxt -> reader -> zs ;
360
361
bool ok ;
361
362
size_t decoded = 0 ;
@@ -381,6 +382,20 @@ img_mgmt_upload(struct smp_streamer *ctxt)
381
382
ZCBOR_MAP_DECODE_KEY_VAL (upgrade , zcbor_bool_decode , & req .upgrade )
382
383
};
383
384
385
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
386
+ struct mgmt_evt_op_cmd_arg cmd_status_arg = {
387
+ .group = MGMT_GROUP_ID_IMAGE ,
388
+ .id = IMG_MGMT_ID_UPLOAD ,
389
+ };
390
+ #endif
391
+
392
+ #if defined(CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK )
393
+ struct img_mgmt_upload_check upload_check_data = {
394
+ .action = & action ,
395
+ .req = & req ,
396
+ };
397
+ #endif
398
+
384
399
ok = zcbor_map_decode_bulk (zsd , image_upload_decode ,
385
400
ARRAY_SIZE (image_upload_decode ), & decoded ) == 0 ;
386
401
@@ -393,7 +408,10 @@ img_mgmt_upload(struct smp_streamer *ctxt)
393
408
/* Determine what actions to take as a result of this request. */
394
409
rc = img_mgmt_upload_inspect (& req , & action );
395
410
if (rc != 0 ) {
396
- img_mgmt_dfu_stopped ();
411
+ #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS )
412
+ (void )mgmt_callback_notify (MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED , NULL , 0 );
413
+ #endif
414
+
397
415
MGMT_CTXT_SET_RC_RSN (ctxt , IMG_MGMT_UPLOAD_ACTION_RC_RSN (& action ));
398
416
return rc ;
399
417
}
@@ -405,17 +423,18 @@ img_mgmt_upload(struct smp_streamer *ctxt)
405
423
return img_mgmt_upload_good_rsp (ctxt );
406
424
}
407
425
426
+ #if defined(CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK )
408
427
/* Request is valid. Give the application a chance to reject this upload
409
428
* request.
410
429
*/
411
- if ( img_mgmt_upload_cb != NULL ) {
412
- rc = img_mgmt_upload_cb ( req , action );
430
+ rc = mgmt_callback_notify ( MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK , & upload_check_data ,
431
+ sizeof ( upload_check_data ) );
413
432
414
- if (rc != 0 ) {
415
- IMG_MGMT_UPLOAD_ACTION_SET_RC_RSN (& action , img_mgmt_err_str_app_reject );
416
- goto end ;
417
- }
433
+ if (rc != MGMT_ERR_EOK ) {
434
+ IMG_MGMT_UPLOAD_ACTION_SET_RC_RSN (& action , img_mgmt_err_str_app_reject );
435
+ goto end ;
418
436
}
437
+ #endif
419
438
420
439
/* Remember flash area ID and image size for subsequent upload requests. */
421
440
g_img_mgmt_state .area_id = action .area_id ;
@@ -432,8 +451,13 @@ img_mgmt_upload(struct smp_streamer *ctxt)
432
451
433
452
g_img_mgmt_state .off = 0 ;
434
453
435
- img_mgmt_dfu_started ();
454
+ #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS )
455
+ (void )mgmt_callback_notify (MGMT_EVT_OP_IMG_MGMT_DFU_STARTED , NULL , 0 );
456
+ #endif
457
+
458
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
436
459
cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_START ;
460
+ #endif
437
461
438
462
/*
439
463
* We accept SHA trimmed to any length by client since it's up to client
@@ -456,8 +480,12 @@ img_mgmt_upload(struct smp_streamer *ctxt)
456
480
*/
457
481
g_img_mgmt_state .off = g_img_mgmt_state .size ;
458
482
img_mgmt_dfu_pending ();
459
- cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_COMPLETE ;
460
483
reset = true;
484
+
485
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
486
+ cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_COMPLETE ;
487
+ #endif
488
+
461
489
goto end ;
462
490
}
463
491
#endif
@@ -474,7 +502,9 @@ img_mgmt_upload(struct smp_streamer *ctxt)
474
502
}
475
503
#endif
476
504
} else {
505
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
477
506
cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_ONGOING ;
507
+ #endif
478
508
}
479
509
480
510
/* Write the image data to flash. */
@@ -490,31 +520,46 @@ img_mgmt_upload(struct smp_streamer *ctxt)
490
520
g_img_mgmt_state .off += action .write_bytes ;
491
521
} else {
492
522
/* Write failed, currently not able to recover from this */
523
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
493
524
cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_COMPLETE ;
525
+ #endif
526
+
494
527
IMG_MGMT_UPLOAD_ACTION_SET_RC_RSN (& action ,
495
528
img_mgmt_err_str_flash_write_failed );
496
529
reset = true;
530
+ IMG_MGMT_UPLOAD_ACTION_SET_RC_RSN (& action ,
531
+ img_mgmt_err_str_flash_write_failed );
532
+
497
533
goto end ;
498
534
}
499
535
500
536
if (g_img_mgmt_state .off == g_img_mgmt_state .size ) {
501
537
/* Done */
502
- img_mgmt_dfu_pending ();
503
- cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_COMPLETE ;
538
+ #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS )
539
+ (void )mgmt_callback_notify (MGMT_EVT_OP_IMG_MGMT_DFU_PENDING , NULL , 0 );
540
+ #endif
541
+
504
542
reset = true;
543
+
544
+ #if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
545
+ cmd_status_arg .status = IMG_MGMT_ID_UPLOAD_STATUS_COMPLETE ;
546
+ #endif
505
547
}
506
548
}
507
549
end :
508
550
509
551
img_mgmt_upload_log (req .off == 0 , g_img_mgmt_state .off == g_img_mgmt_state .size , rc );
510
552
511
553
#if defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS )
512
- (void )mgmt_callback_notify (MGMT_EVT_OP_CMD_STATUS , MGMT_GROUP_ID_IMAGE ,
513
- IMG_MGMT_ID_UPLOAD , & cmd_status_arg , false );
554
+ (void )mgmt_callback_notify (MGMT_EVT_OP_CMD_STATUS , & cmd_status_arg ,
555
+ sizeof ( cmd_status_arg ) );
514
556
#endif
515
557
516
558
if (rc != 0 ) {
517
- img_mgmt_dfu_stopped ();
559
+ #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS )
560
+ (void )mgmt_callback_notify (MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED , NULL , 0 );
561
+ #endif
562
+
518
563
return rc ;
519
564
}
520
565
@@ -528,50 +573,6 @@ img_mgmt_upload(struct smp_streamer *ctxt)
528
573
return rc ;
529
574
}
530
575
531
- void
532
- img_mgmt_dfu_stopped (void )
533
- {
534
- if (img_mgmt_dfu_callbacks_fn && img_mgmt_dfu_callbacks_fn -> dfu_stopped_cb ) {
535
- img_mgmt_dfu_callbacks_fn -> dfu_stopped_cb ();
536
- }
537
- }
538
-
539
- void
540
- img_mgmt_dfu_started (void )
541
- {
542
- if (img_mgmt_dfu_callbacks_fn && img_mgmt_dfu_callbacks_fn -> dfu_started_cb ) {
543
- img_mgmt_dfu_callbacks_fn -> dfu_started_cb ();
544
- }
545
- }
546
-
547
- void
548
- img_mgmt_dfu_pending (void )
549
- {
550
- if (img_mgmt_dfu_callbacks_fn && img_mgmt_dfu_callbacks_fn -> dfu_pending_cb ) {
551
- img_mgmt_dfu_callbacks_fn -> dfu_pending_cb ();
552
- }
553
- }
554
-
555
- void
556
- img_mgmt_dfu_confirmed (void )
557
- {
558
- if (img_mgmt_dfu_callbacks_fn && img_mgmt_dfu_callbacks_fn -> dfu_confirmed_cb ) {
559
- img_mgmt_dfu_callbacks_fn -> dfu_confirmed_cb ();
560
- }
561
- }
562
-
563
- void
564
- img_mgmt_set_upload_cb (img_mgmt_upload_fn cb )
565
- {
566
- img_mgmt_upload_cb = cb ;
567
- }
568
-
569
- void
570
- img_mgmt_register_callbacks (const struct img_mgmt_dfu_callbacks_t * cb_struct )
571
- {
572
- img_mgmt_dfu_callbacks_fn = cb_struct ;
573
- }
574
-
575
576
int
576
577
img_mgmt_my_version (struct image_version * ver )
577
578
{
0 commit comments