@@ -299,7 +299,7 @@ static void _render_message(const char* message, int duration)
299299 delay_ms (duration );
300300}
301301
302- static void _render_default_screen (void )
302+ void bootloader_render_default_screen (void )
303303{
304304 UG_ClearBuffer ();
305305 _load_logo ();
@@ -310,6 +310,30 @@ static void _render_default_screen(void)
310310 UG_SendBuffer ();
311311}
312312
313+ extern bool bootloader_pairing_request ;
314+ extern uint8_t bootloader_pairing_code_bytes [16 ];
315+
316+ void bootloader_render_ble_confirm_screen (bool confirmed )
317+ {
318+ bootloader_pairing_request = true;
319+ uint32_t pairing_code_int = (* (uint32_t * )& bootloader_pairing_code_bytes [0 ]) % 1000000 ;
320+ char code_str [10 ] = {0 };
321+ snprintf (code_str , sizeof (code_str ), "%06u" , (unsigned )pairing_code_int );
322+ UG_ClearBuffer ();
323+ uint16_t check_width = IMAGE_DEFAULT_CHECKMARK_HEIGHT + IMAGE_DEFAULT_CHECKMARK_HEIGHT / 2 - 1 ;
324+ UG_FontSelect (& font_font_a_11X10 );
325+ if (confirmed ) {
326+ UG_PutString (15 , 0 , "Confirm on app" , false);
327+ } else {
328+ UG_PutString (30 , 0 , "Pairing code" , false);
329+ image_cross (SCREEN_WIDTH / 16 , 0 , IMAGE_DEFAULT_CROSS_HEIGHT );
330+ image_checkmark (SCREEN_WIDTH * 15 / 16 - check_width , 0 , IMAGE_DEFAULT_CHECKMARK_HEIGHT );
331+ }
332+ UG_FontSelect (& font_monogram_5X9 );
333+ UG_PutString (45 , SCREEN_HEIGHT / 2 - 9 , code_str , false);
334+ UG_SendBuffer ();
335+ }
336+
313337static void _render_progress (float progress )
314338{
315339 UG_ClearBuffer ();
@@ -378,7 +402,7 @@ static void _render_hash(const char* title, const uint8_t* hash)
378402 UG_SendBuffer ();
379403 delay_ms (1000 );
380404 }
381- _render_default_screen ();
405+ bootloader_render_default_screen ();
382406}
383407
384408// Sets _is_app_flash_empty by computing a "bare" hash, identical to _firmware_hash
@@ -786,7 +810,7 @@ static size_t _api_screen_rotate(uint8_t* output)
786810 return _report_status (OP_STATUS_ERR_LOAD_FLAG , output );
787811 }
788812 screen_rotate ();
789- _render_default_screen ();
813+ bootloader_render_default_screen ();
790814 return _report_status (OP_STATUS_OK , output );
791815}
792816
@@ -840,7 +864,7 @@ static size_t _api_command(const uint8_t* input, uint8_t* output, const size_t m
840864 uint8_t chunk_num = input [1 ];
841865 len = _api_write_chunk (input + 2 , chunk_num , output );
842866 if (output [1 ] != OP_STATUS_OK ) {
843- _render_default_screen ();
867+ bootloader_render_default_screen ();
844868 } else {
845869 _render_progress ((float )chunk_num / (float )(_firmware_num_chunks - 1 ));
846870 }
@@ -1021,7 +1045,7 @@ void bootloader_jump(void)
10211045 // App not entered. Start USB API to receive boot commands
10221046 util_log ("Not jumping to firmware" );
10231047 _compute_is_app_flash_empty ();
1024- _render_default_screen ();
1048+ bootloader_render_default_screen ();
10251049 if (usb_start (_api_setup ) != ERR_NONE ) {
10261050 _render_message ("Failed to initialize USB" , 0 );
10271051 }
0 commit comments