22 *
33 * Test bare-metal application.
44 *
5- * Copyright (C) 2025 wolfSSL Inc.
5+ * Copyright (C) 2026 wolfSSL Inc.
66 *
77 * This file is part of wolfBoot.
88 *
2929#include "hal.h"
3030#include "hal_data.h"
3131#include "wolfboot/wolfboot.h"
32+ #include "image.h"
3233
3334extern bsp_leds_t g_bsp_leds ;
3435
3536void R_BSP_WarmStart (bsp_warm_start_event_t event );
3637int myprintf (const char * sFormat , ...);
3738
38- static void blink ( int interval )
39+ static const char * state2str ( uint8_t s )
3940{
41+ switch (s ) {
42+ case IMG_STATE_NEW : return "New" ;
43+ case IMG_STATE_UPDATING : return "Updating" ;
44+ case IMG_STATE_TESTING : return "Testing" ;
45+ case IMG_STATE_SUCCESS : return "Success" ;
46+ default : return "Unknown" ;
47+ }
48+ }
49+
50+ static const char * upFlag2str (uint8_t s )
51+ {
52+ switch (s ) {
53+ case SECT_FLAG_NEW : return "New" ;
54+ case SECT_FLAG_SWAPPING : return "Swapping" ;
55+ case SECT_FLAG_BACKUP : return "Backup" ;
56+ case SECT_FLAG_UPDATED : return "Updated" ;
57+ default : return "Unknown" ;
58+ }
59+ }
60+
61+ static void blink (int order )
62+ {
63+
64+ int start , end , step ;
65+ int i = 0 ;
4066
4167 /* LED type structure */
4268 bsp_leds_t leds = g_bsp_leds ;
4369
4470#if BSP_TZ_SECURE_BUILD
45-
4671 /* Enter non-secure code */
4772 R_BSP_NonSecureEnter ();
4873#endif
4974
5075 /* Define the units to be used with the software delay function */
51- const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS * interval ;
52- /* Calculate the delay in terms of bsp_delay_units */
53- const uint32_t delay = bsp_delay_units / 2 ;
54-
76+ const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS ;
77+ const uint32_t freq = 1 ;
78+ /* Calculate the delay: 500ms * interval per LED write */
79+ const uint32_t delay = (uint32_t )(bsp_delay_units / (freq * 2 ));
80+
5581 /* Holds level to set for pins */
5682 bsp_io_level_t pin_level = BSP_IO_LEVEL_LOW ;
83+ start = 0 ;
84+ end = leds .led_count ;
85+ step = (order == -1 )? -1 : 1 ;
86+
87+ if (order == -1 ) {
88+ start = end - 1 ;
89+ end = -1 ;
90+ }
5791
5892 while (1 )
5993 {
6094 /* Enable access to the PFS registers */
6195 R_BSP_PinAccessEnable ();
6296
63-
6497 /* Update each LEDs*/
65- for (uint32_t i = 0 ; i < leds .led_count ; i ++ )
98+ i = start ;
99+ for (;;)
66100 {
101+ if (i == end ) break ;
67102 /* Get pin to toggle */
68103 uint32_t pin = leds .p_leds [i ];
69-
70104 /* Write to this pin */
71105 R_BSP_PinWrite ((bsp_io_port_pin_t ) pin , pin_level );
72106
73- /* Delay */
74107 R_BSP_SoftwareDelay (delay , bsp_delay_units );
108+ i += step ;
75109 }
76110
77111 /* Protect PFS registers */
@@ -84,6 +118,8 @@ static void blink(int interval)
84118 else {
85119 pin_level = BSP_IO_LEVEL_LOW ;
86120 }
121+ /* Delay */
122+ R_BSP_SoftwareDelay (delay , bsp_delay_units );
87123 }
88124}
89125
@@ -96,15 +132,20 @@ static void printPart(uint8_t *part)
96132 uint8_t * magic ;
97133 uint8_t state ;
98134 uint32_t ver ;
135+ uint8_t upflag ;
99136
100137 magic = part ;
101138 myprintf ("Magic: %c%c%c%c\n" , magic [0 ], magic [1 ], magic [2 ], magic [3 ]);
102139 ver = wolfBoot_get_blob_version (part );
103140 myprintf ("Version: %02x\n" , ver );
104- state = * ( part + WOLFBOOT_PARTITION_SIZE - sizeof ( uint32_t ) - 1 );
105- myprintf ("Status: %02x\n" , state );
141+ wolfBoot_get_partition_state ( 0 , & state );
142+ myprintf ("Status: %02x(%s) \n" , state , state2str ( state ) );
106143 magic = part + WOLFBOOT_PARTITION_SIZE - sizeof (uint32_t );
107- myprintf ("Trailer Magic: %c%c%c%c\n" , magic [0 ], magic [1 ], magic [2 ], magic [3 ]);
144+ if (magic [0 ] != 0x42 )
145+ magic = part + WOLFBOOT_PARTITION_SIZE - WOLFBOOT_SECTOR_SIZE - sizeof (uint32_t );
146+ myprintf ("Trailer Mgc: %c%c%c%c\n" , magic [0 ], magic [1 ], magic [2 ], magic [3 ]);
147+ wolfBoot_get_update_sector_flag (0 , & upflag );
148+ myprintf ("Update flag: %02x (%s)\n" , upflag , upFlag2str (upflag ));
108149
109150#ifdef WOLFBOOT_DEBUG_PARTION
110151 v = (uint32_t * )part ;
@@ -130,6 +171,7 @@ void app_RA(void)
130171 uint8_t firmware_version = 0 ;
131172
132173 R_BSP_WarmStart (BSP_WARM_START_POST_C );
174+ SystemCoreClockUpdate ();
133175
134176 hal_init ();
135177
@@ -175,13 +217,13 @@ void app_RA(void)
175217
176218 if (firmware_version == 1 ) {
177219 wolfBoot_update_trigger ();
178- blink (1 );
220+ blink (- 1 );
179221 }
180222 else if (firmware_version == 2 ) {
181- blink (5 );
223+ blink (1 );
182224 }
183225 /* busy wait */
184226busy_idle :
185227 /* flashing LEDs in busy */
186- blink (1 );
228+ blink (- 1 );
187229}
0 commit comments