#include "bootloader.h" /* Autogenerated */ #include "splash-screen.h" #include "card10-version.h" #include "gfx.h" #include "display.h" /* * "Decompress" splash-screen image. The algorithm works as follows: * * Each byte encodes up to 127 pixels in either white or black. The most * significant bit determines the color, the remaining 7 bits determine the * amount. */ static void bootloader_display_splash(void) { int idx = 0; Color white = gfx_color(&display_screen, WHITE); Color black = gfx_color(&display_screen, BLACK); for (int i = 0; i < sizeof(splash); i++) { Color color = (splash[i] & 0x80) ? white : black; uint8_t length = splash[i] & 0x7f; for (int j = 0; j < length; j++) { uint16_t x = idx % 160; uint16_t y = idx / 160; gfx_setpixel(&display_screen, x, y, color); idx++; } } gfx_update(&display_screen); } /* * Initialize the display. */ void bootloader_display_init(void) { bootloader_display_splash(); } /* * Show the bootloader version on the display. */ void bootloader_display_header(void) { gfx_clear(&display_screen); Color white = gfx_color(&display_screen, WHITE); bootloader_display_line(0, "Bootloader", white); bootloader_display_line(1, __DATE__, white); bootloader_display_line(2, CARD10_VERSION, white); } void bootloader_display_error(char *errtype, char *line1, char *line2) { gfx_clear(&display_screen); Color red = gfx_color(&display_screen, RED); Color yellow = gfx_color(&display_screen, YELLOW); Color white = gfx_color(&display_screen, WHITE); bootloader_display_line(0, "[FATAL ERROR]", red); bootloader_display_line(1, errtype, yellow); bootloader_display_line(2, CARD10_VERSION, white); bootloader_display_line(3, line1, white); bootloader_display_line(4, line2, white); } /* * Display a line of text on the display. */ void bootloader_display_line(int line, char *string, uint16_t color) { Color black = gfx_color(&display_screen, BLACK); gfx_puts(&Font16, &display_screen, 0, 16 * line, string, color, black); gfx_update(&display_screen); }