@@ -207,153 +207,151 @@ void bootloader_dfu_update_process(dfu_update_status_t update_status)
207207 __attribute__((aligned (4 ))) static bootloader_settings_t settings ;
208208 bootloader_settings_t const * p_bootloader_settings ;
209209
210- bootloader_util_settings_get (& p_bootloader_settings );
210+ bootloader_util_settings_get (& p_bootloader_settings );
211211
212- if (update_status .status_code == DFU_UPDATE_APP_COMPLETE )
213- {
214- settings .bank_0_crc = update_status .app_crc ;
215- settings .bank_0_size = update_status .app_size ;
216- settings .bank_0 = BANK_VALID_APP ;
217- settings .bank_1 = BANK_INVALID_APP ;
212+ if (update_status .status_code == DFU_UPDATE_APP_COMPLETE )
213+ {
214+ settings .bank_0_crc = update_status .app_crc ;
215+ settings .bank_0_size = update_status .app_size ;
216+ settings .bank_0 = BANK_VALID_APP ;
217+ settings .bank_1 = BANK_INVALID_APP ;
218218
219- m_update_status = BOOTLOADER_SETTINGS_SAVING ;
220- bootloader_settings_save (& settings );
221- }
222- else if (update_status .status_code == DFU_UPDATE_SD_COMPLETE )
223- {
224- settings .bank_0_crc = update_status .app_crc ;
225- settings .bank_0_size = update_status .sd_size +
226- update_status . bl_size +
227- update_status . app_size ;
228- settings .bank_0 = BANK_VALID_SD ;
229- settings .bank_1 = BANK_INVALID_APP ;
230- settings .sd_image_size = update_status .sd_size ;
231- settings .bl_image_size = update_status .bl_size ;
232- settings . app_image_size = update_status . app_size ;
233- settings . sd_image_start = update_status . sd_image_start ;
234-
235- m_update_status = BOOTLOADER_SETTINGS_SAVING ;
236- bootloader_settings_save ( & settings );
237- }
238- else if ( update_status . status_code == DFU_UPDATE_BOOT_COMPLETE )
239- {
240- settings .bank_0 = p_bootloader_settings -> bank_0 ;
241- settings . bank_0_crc = p_bootloader_settings -> bank_0_crc ;
242- settings .bank_0_size = p_bootloader_settings -> bank_0_size ;
243- settings .bank_1 = BANK_VALID_BOOT ;
244- settings .sd_image_size = update_status .sd_size ;
245- settings . bl_image_size = update_status . bl_size ;
246- settings . app_image_size = update_status . app_size ;
247-
248- m_update_status = BOOTLOADER_SETTINGS_SAVING ;
249- bootloader_settings_save ( & settings );
250- }
251- else if (update_status . status_code == DFU_UPDATE_SD_SWAPPED )
219+ m_update_status = BOOTLOADER_SETTINGS_SAVING ;
220+ bootloader_settings_save (& settings );
221+ }
222+ else if (update_status .status_code == DFU_UPDATE_SD_COMPLETE )
223+ {
224+ settings .bank_0_crc = update_status .app_crc ;
225+ settings .bank_0_size = update_status .sd_size + update_status . bl_size + update_status . app_size ;
226+ settings . bank_0 = BANK_VALID_SD ;
227+ settings . bank_1 = BANK_INVALID_APP ;
228+ settings .sd_image_size = update_status . sd_size ;
229+ settings .bl_image_size = update_status . bl_size ;
230+ settings .app_image_size = update_status .app_size ;
231+ settings .sd_image_start = update_status .sd_image_start ;
232+
233+ m_update_status = BOOTLOADER_SETTINGS_SAVING ;
234+ bootloader_settings_save ( & settings );
235+ }
236+ else if ( update_status . status_code == DFU_UPDATE_BOOT_COMPLETE )
237+ {
238+ settings . bank_0 = p_bootloader_settings -> bank_0 ;
239+ settings . bank_0_crc = p_bootloader_settings -> bank_0_crc ;
240+ settings .bank_0_size = p_bootloader_settings -> bank_0_size ;
241+ settings . bank_1 = BANK_VALID_BOOT ;
242+ settings .sd_image_size = update_status . sd_size ;
243+ settings .bl_image_size = update_status . bl_size ;
244+ settings .app_image_size = update_status .app_size ;
245+
246+ m_update_status = BOOTLOADER_SETTINGS_SAVING ;
247+ bootloader_settings_save ( & settings );
248+ }
249+ else if ( update_status . status_code == DFU_UPDATE_SD_SWAPPED )
250+ {
251+ if (p_bootloader_settings -> bank_0 == BANK_VALID_SD )
252252 {
253- if (p_bootloader_settings -> bank_0 == BANK_VALID_SD )
254- {
255- settings .bank_0_crc = 0 ;
256- settings .bank_0_size = 0 ;
257- settings .bank_0 = BANK_INVALID_APP ;
258- }
259- // This handles cases where SoftDevice was not updated, hence bank0 keeps its settings.
260- else
261- {
262- settings .bank_0 = p_bootloader_settings -> bank_0 ;
263- settings .bank_0_crc = p_bootloader_settings -> bank_0_crc ;
264- settings .bank_0_size = p_bootloader_settings -> bank_0_size ;
265- }
266-
267- settings .bank_1 = BANK_INVALID_APP ;
268- settings .sd_image_size = 0 ;
269- settings .bl_image_size = 0 ;
270- settings .app_image_size = 0 ;
271-
272- m_update_status = BOOTLOADER_SETTINGS_SAVING ;
273- bootloader_settings_save (& settings );
253+ settings .bank_0_crc = 0 ;
254+ settings .bank_0_size = 0 ;
255+ settings .bank_0 = BANK_INVALID_APP ;
274256 }
275- else if (update_status .status_code == DFU_TIMEOUT )
257+ // This handles cases where SoftDevice was not updated, hence bank0 keeps its settings.
258+ else
276259 {
277- // Timeout has occurred. Close the connection with the DFU Controller.
278- uint32_t err_code ;
279- if ( is_ota () )
280- {
281- err_code = dfu_transport_ble_close ();
282- }else
283- {
284- err_code = dfu_transport_serial_close ();
285- }
286- APP_ERROR_CHECK (err_code );
287-
288- m_update_status = BOOTLOADER_TIMEOUT ;
260+ settings .bank_0 = p_bootloader_settings -> bank_0 ;
261+ settings .bank_0_crc = p_bootloader_settings -> bank_0_crc ;
262+ settings .bank_0_size = p_bootloader_settings -> bank_0_size ;
289263 }
290- else if (update_status .status_code == DFU_BANK_0_ERASED )
291- {
292- settings .bank_0_crc = 0 ;
293- settings .bank_0_size = 0 ;
294- settings .bank_0 = BANK_INVALID_APP ;
295- settings .bank_1 = p_bootloader_settings -> bank_1 ;
296264
297- bootloader_settings_save (& settings );
298- }
299- else if (update_status .status_code == DFU_RESET )
265+ settings .bank_1 = BANK_INVALID_APP ;
266+ settings .sd_image_size = 0 ;
267+ settings .bl_image_size = 0 ;
268+ settings .app_image_size = 0 ;
269+
270+ m_update_status = BOOTLOADER_SETTINGS_SAVING ;
271+ bootloader_settings_save (& settings );
272+ }
273+ else if (update_status .status_code == DFU_TIMEOUT )
274+ {
275+ // Timeout has occurred. Close the connection with the DFU Controller.
276+ uint32_t err_code ;
277+ if ( is_ota () )
300278 {
301- m_update_status = BOOTLOADER_RESET ;
302- }
303- else
279+ err_code = dfu_transport_ble_close ();
280+ }else
304281 {
305- // No implementation needed.
282+ err_code = dfu_transport_serial_close ();
306283 }
284+ APP_ERROR_CHECK (err_code );
285+
286+ m_update_status = BOOTLOADER_TIMEOUT ;
287+ }
288+ else if (update_status .status_code == DFU_BANK_0_ERASED )
289+ {
290+ settings .bank_0_crc = 0 ;
291+ settings .bank_0_size = 0 ;
292+ settings .bank_0 = BANK_INVALID_APP ;
293+ settings .bank_1 = p_bootloader_settings -> bank_1 ;
294+
295+ bootloader_settings_save (& settings );
296+ }
297+ else if (update_status .status_code == DFU_RESET )
298+ {
299+ m_update_status = BOOTLOADER_RESET ;
300+ }
301+ else
302+ {
303+ // No implementation needed.
304+ }
307305}
308306
309307
310308uint32_t bootloader_init (void )
311309{
312- uint32_t err_code ;
313- pstorage_module_param_t storage_params = {.cb = pstorage_callback_handler };
310+ uint32_t err_code ;
311+ pstorage_module_param_t storage_params = {.cb = pstorage_callback_handler };
314312
315- err_code = pstorage_init ();
316- VERIFY_SUCCESS (err_code );
313+ err_code = pstorage_init ();
314+ VERIFY_SUCCESS (err_code );
317315
318- m_bootsettings_handle .block_id = BOOTLOADER_SETTINGS_ADDRESS ;
319- err_code = pstorage_register (& storage_params , & m_bootsettings_handle );
316+ m_bootsettings_handle .block_id = BOOTLOADER_SETTINGS_ADDRESS ;
317+ err_code = pstorage_register (& storage_params , & m_bootsettings_handle );
320318
321- return err_code ;
319+ return err_code ;
322320}
323321
324322
325323uint32_t bootloader_dfu_start (bool ota , uint32_t timeout_ms , bool cancel_timeout_on_usb )
326324{
327- uint32_t err_code ;
325+ uint32_t err_code ;
328326
329- m_cancel_timeout_on_usb = cancel_timeout_on_usb && !ota ;
327+ m_cancel_timeout_on_usb = cancel_timeout_on_usb && !ota ;
330328
331- // Clear swap if banked update is used.
332- err_code = dfu_init ();
333- VERIFY_SUCCESS (err_code );
329+ // Clear swap if banked update is used.
330+ err_code = dfu_init ();
331+ VERIFY_SUCCESS (err_code );
334332
335- if ( ota )
336- {
337- err_code = dfu_transport_ble_update_start ();
338- }else
333+ if ( ota )
334+ {
335+ err_code = dfu_transport_ble_update_start ();
336+ }else
337+ {
338+ // DFU mode with timeout can be
339+ // - Forced startup DFU for nRF52832 or
340+ // - Makecode single tap reset but no enumerated (battery power)
341+ if ( timeout_ms )
339342 {
340- // DFU mode with timeout can be
341- // - Forced startup DFU for nRF52832 or
342- // - Makecode single tap reset but no enumerated (battery power)
343- if ( timeout_ms )
344- {
345- dfu_startup_packet_received = false;
346-
347- app_timer_create (& _dfu_startup_timer , APP_TIMER_MODE_SINGLE_SHOT , dfu_startup_timer_handler );
348- app_timer_start (_dfu_startup_timer , APP_TIMER_TICKS (timeout_ms ), NULL );
349- }
350-
351- err_code = dfu_transport_serial_update_start ();
343+ dfu_startup_packet_received = false;
344+
345+ app_timer_create (& _dfu_startup_timer , APP_TIMER_MODE_SINGLE_SHOT , dfu_startup_timer_handler );
346+ app_timer_start (_dfu_startup_timer , APP_TIMER_TICKS (timeout_ms ), NULL );
352347 }
353348
354- wait_for_events ();
349+ err_code = dfu_transport_serial_update_start ();
350+ }
351+
352+ wait_for_events ();
355353
356- return err_code ;
354+ return err_code ;
357355}
358356
359357void bootloader_app_start (void )
@@ -408,70 +406,70 @@ bool bootloader_dfu_sd_in_progress(void)
408406{
409407 bootloader_settings_t const * p_bootloader_settings ;
410408
411- bootloader_util_settings_get (& p_bootloader_settings );
409+ bootloader_util_settings_get (& p_bootloader_settings );
412410
413- if (p_bootloader_settings -> bank_0 == BANK_VALID_SD ||
414- p_bootloader_settings -> bank_1 == BANK_VALID_BOOT )
415- {
416- return true;
417- }
411+ if (p_bootloader_settings -> bank_0 == BANK_VALID_SD ||
412+ p_bootloader_settings -> bank_1 == BANK_VALID_BOOT )
413+ {
414+ return true;
415+ }
418416
419- return false;
417+ return false;
420418}
421419
422420
423421uint32_t bootloader_dfu_sd_update_continue (void )
424422{
425- uint32_t err_code ;
423+ uint32_t err_code ;
426424
427- if ((dfu_sd_image_validate () == NRF_SUCCESS ) &&
428- (dfu_bl_image_validate () == NRF_SUCCESS ))
429- {
430- return NRF_SUCCESS ;
431- }
425+ if ((dfu_sd_image_validate () == NRF_SUCCESS ) &&
426+ (dfu_bl_image_validate () == NRF_SUCCESS ))
427+ {
428+ return NRF_SUCCESS ;
429+ }
432430
433- // Ensure that flash operations are not executed within the first 100 ms seconds to allow
434- // a debugger to be attached.
435- NRFX_DELAY_MS (100 );
431+ // Ensure that flash operations are not executed within the first 100 ms seconds to allow
432+ // a debugger to be attached.
433+ NRFX_DELAY_MS (100 );
436434
437- err_code = dfu_sd_image_swap ();
438- APP_ERROR_CHECK (err_code );
435+ err_code = dfu_sd_image_swap ();
436+ APP_ERROR_CHECK (err_code );
439437
440- err_code = dfu_sd_image_validate ();
441- APP_ERROR_CHECK (err_code );
438+ err_code = dfu_sd_image_validate ();
439+ APP_ERROR_CHECK (err_code );
442440
443- err_code = dfu_bl_image_swap ();
444- APP_ERROR_CHECK (err_code );
441+ err_code = dfu_bl_image_swap ();
442+ APP_ERROR_CHECK (err_code );
445443
446- return err_code ;
444+ return err_code ;
447445}
448446
449447
450448uint32_t bootloader_dfu_sd_update_finalize (void )
451449{
452- dfu_update_status_t update_status = { 0 };
453- update_status .status_code = DFU_UPDATE_SD_SWAPPED ;
450+ dfu_update_status_t update_status = { 0 };
451+ update_status .status_code = DFU_UPDATE_SD_SWAPPED ;
454452
455- bootloader_dfu_update_process (update_status );
453+ bootloader_dfu_update_process (update_status );
456454
457- wait_for_events ();
455+ wait_for_events ();
458456
459- return NRF_SUCCESS ;
457+ return NRF_SUCCESS ;
460458}
461459
462460
463461void bootloader_settings_get (bootloader_settings_t * const p_settings )
464462{
465463 bootloader_settings_t const * p_bootloader_settings ;
466464
467- bootloader_util_settings_get (& p_bootloader_settings );
465+ bootloader_util_settings_get (& p_bootloader_settings );
468466
469- p_settings -> bank_0 = p_bootloader_settings -> bank_0 ;
470- p_settings -> bank_0_crc = p_bootloader_settings -> bank_0_crc ;
471- p_settings -> bank_0_size = p_bootloader_settings -> bank_0_size ;
472- p_settings -> bank_1 = p_bootloader_settings -> bank_1 ;
473- p_settings -> sd_image_size = p_bootloader_settings -> sd_image_size ;
474- p_settings -> bl_image_size = p_bootloader_settings -> bl_image_size ;
475- p_settings -> app_image_size = p_bootloader_settings -> app_image_size ;
476- p_settings -> sd_image_start = p_bootloader_settings -> sd_image_start ;
467+ p_settings -> bank_0 = p_bootloader_settings -> bank_0 ;
468+ p_settings -> bank_0_crc = p_bootloader_settings -> bank_0_crc ;
469+ p_settings -> bank_0_size = p_bootloader_settings -> bank_0_size ;
470+ p_settings -> bank_1 = p_bootloader_settings -> bank_1 ;
471+ p_settings -> sd_image_size = p_bootloader_settings -> sd_image_size ;
472+ p_settings -> bl_image_size = p_bootloader_settings -> bl_image_size ;
473+ p_settings -> app_image_size = p_bootloader_settings -> app_image_size ;
474+ p_settings -> sd_image_start = p_bootloader_settings -> sd_image_start ;
477475}
0 commit comments