@@ -103,7 +103,8 @@ static void state_waiting_for_image_apply_run(void *o);
103
103
104
104
static void state_reboot_needed_entry (void * o );
105
105
106
- static void state_canceled_entry (void * o );
106
+ static void state_canceling_entry (void * o );
107
+ static void state_canceling_run (void * o );
107
108
108
109
static struct fota_state fota_state = {
109
110
.fota_ctx .reboot_fn = fota_reboot ,
@@ -148,8 +149,8 @@ static const struct smf_state states[] = {
148
149
& states [STATE_RUNNING ],
149
150
NULL ),
150
151
[STATE_CANCELED ] =
151
- SMF_CREATE_STATE (state_canceled_entry ,
152
- NULL ,
152
+ SMF_CREATE_STATE (state_canceling_entry ,
153
+ state_canceling_run ,
153
154
NULL ,
154
155
& states [STATE_RUNNING ],
155
156
NULL ),
@@ -189,6 +190,11 @@ static void fota_status(enum nrf_cloud_fota_status status, const char *const sta
189
190
190
191
evt = FOTA_DOWNLOAD_FAILED ;
191
192
break ;
193
+ case NRF_CLOUD_FOTA_CANCELED :
194
+ LOG_WRN ("Firmware download canceled" );
195
+
196
+ evt = FOTA_CANCELED ;
197
+ break ;
192
198
case NRF_CLOUD_FOTA_TIMED_OUT :
193
199
LOG_WRN ("Firmware download timed out" );
194
200
@@ -214,14 +220,14 @@ static void fota_status(enum nrf_cloud_fota_status status, const char *const sta
214
220
215
221
err = zbus_chan_pub (& FOTA_CHAN , & evt , K_SECONDS (1 ));
216
222
if (err ) {
217
- LOG_DBG ("zbus_chan_pub, error: %d" , err );
223
+ LOG_ERR ("zbus_chan_pub, error: %d" , err );
218
224
SEND_FATAL_ERROR ();
219
225
}
220
226
}
221
227
222
228
static void task_wdt_callback (int channel_id , void * user_data )
223
229
{
224
- LOG_DBG ("Watchdog expired, Channel: %d, Thread: %s" ,
230
+ LOG_ERR ("Watchdog expired, Channel: %d, Thread: %s" ,
225
231
channel_id , k_thread_name_get ((k_tid_t )user_data ));
226
232
227
233
SEND_FATAL_ERROR_WATCHDOG_TIMEOUT ();
@@ -239,16 +245,16 @@ static void state_running_entry(void *o)
239
245
/* Initialize the FOTA context */
240
246
err = nrf_cloud_fota_poll_init (& state_object -> fota_ctx );
241
247
if (err ) {
242
- LOG_DBG ("nrf_cloud_fota_poll_init failed: %d" , err );
248
+ LOG_ERR ("nrf_cloud_fota_poll_init failed: %d" , err );
243
249
SEND_FATAL_ERROR ();
244
250
}
245
251
246
252
/* Process pending FOTA job, the FOTA type is returned */
247
253
err = nrf_cloud_fota_poll_process_pending (& state_object -> fota_ctx );
248
254
if (err < 0 ) {
249
- LOG_DBG ("nrf_cloud_fota_poll_process_pending failed: %d" , err );
255
+ LOG_ERR ("nrf_cloud_fota_poll_process_pending failed: %d" , err );
250
256
} else if (err != NRF_CLOUD_FOTA_TYPE__INVALID ) {
251
- LOG_DBG ("Processed pending FOTA job type: %d" , err );
257
+ LOG_ERR ("Processed pending FOTA job type: %d" , err );
252
258
}
253
259
}
254
260
@@ -306,7 +312,7 @@ static void state_polling_for_update_entry(void *o)
306
312
307
313
err = zbus_chan_pub (& FOTA_CHAN , & evt , K_SECONDS (1 ));
308
314
if (err ) {
309
- LOG_DBG ("zbus_chan_pub, error: %d" , err );
315
+ LOG_ERR ("zbus_chan_pub, error: %d" , err );
310
316
SEND_FATAL_ERROR ();
311
317
}
312
318
break ;
@@ -317,7 +323,7 @@ static void state_polling_for_update_entry(void *o)
317
323
LOG_DBG ("Job available, FOTA processing started" );
318
324
break ;
319
325
default :
320
- LOG_DBG ("nrf_cloud_fota_poll_process, error: %d" , err );
326
+ LOG_ERR ("nrf_cloud_fota_poll_process, error: %d" , err );
321
327
SEND_FATAL_ERROR ();
322
328
break ;
323
329
}
@@ -337,6 +343,11 @@ static void state_polling_for_update_run(void *o)
337
343
case FOTA_NO_AVAILABLE_UPDATE :
338
344
STATE_SET (fota_state , STATE_WAITING_FOR_POLL_REQUEST );
339
345
break ;
346
+ case FOTA_CANCEL :
347
+ LOG_DBG ("No ongoing FOTA update, nothing to cancel" );
348
+
349
+ STATE_EVENT_HANDLED (fota_state );
350
+ break ;
340
351
default :
341
352
/* Don't care */
342
353
break ;
@@ -395,7 +406,7 @@ static void state_waiting_for_image_apply_run(void *o)
395
406
int err = nrf_cloud_fota_poll_update_apply (& state_object -> fota_ctx );
396
407
397
408
if (err ) {
398
- LOG_DBG ("nrf_cloud_fota_poll_update_apply, error: %d" , err );
409
+ LOG_ERR ("nrf_cloud_fota_poll_update_apply, error: %d" , err );
399
410
SEND_FATAL_ERROR ();
400
411
}
401
412
@@ -417,16 +428,32 @@ static void state_reboot_needed_entry(void *o)
417
428
LOG_DBG ("Waiting for the application to reboot in order to apply the update" );
418
429
}
419
430
420
- static void state_canceled_entry (void * o )
431
+ static void state_canceling_entry (void * o )
421
432
{
422
433
ARG_UNUSED (o );
423
434
424
435
LOG_DBG ("%s" , __func__ );
425
- LOG_WRN ("Canceling download" );
436
+ LOG_DBG ("Canceling download" );
426
437
427
- ( void ) fota_download_cancel ();
438
+ int err = fota_download_cancel ();
428
439
429
- STATE_SET (fota_state , STATE_WAITING_FOR_POLL_REQUEST );
440
+ if (err ) {
441
+ LOG_ERR ("fota_download_cancel, error: %d" , err );
442
+ SEND_FATAL_ERROR ();
443
+ }
444
+ }
445
+
446
+ static void state_canceling_run (void * o )
447
+ {
448
+ const struct fota_state * state_object = (const struct fota_state * )o ;
449
+
450
+ if (& FOTA_CHAN == state_object -> chan ) {
451
+ const enum fota_msg_type msg = MSG_TO_FOTA_TYPE (state_object -> msg_buf );
452
+
453
+ if (msg == FOTA_CANCELED ) {
454
+ STATE_SET (fota_state , STATE_WAITING_FOR_POLL_REQUEST );
455
+ }
456
+ }
430
457
}
431
458
432
459
/* End of state handlers */
@@ -449,7 +476,7 @@ static void fota_task(void)
449
476
while (true) {
450
477
err = task_wdt_feed (task_wdt_id );
451
478
if (err ) {
452
- LOG_DBG ("task_wdt_feed, error: %d" , err );
479
+ LOG_ERR ("task_wdt_feed, error: %d" , err );
453
480
SEND_FATAL_ERROR ();
454
481
return ;
455
482
}
@@ -458,14 +485,14 @@ static void fota_task(void)
458
485
if (err == - ENOMSG ) {
459
486
continue ;
460
487
} else if (err ) {
461
- LOG_DBG ("zbus_sub_wait_msg, error: %d" , err );
488
+ LOG_ERR ("zbus_sub_wait_msg, error: %d" , err );
462
489
SEND_FATAL_ERROR ();
463
490
return ;
464
491
}
465
492
466
493
err = STATE_RUN (fota_state );
467
494
if (err ) {
468
- LOG_DBG ("handle_message, error: %d" , err );
495
+ LOG_ERR ("handle_message, error: %d" , err );
469
496
SEND_FATAL_ERROR ();
470
497
return ;
471
498
}
0 commit comments