Select Git revision
bootloader-display.c
Forked from
card10 / firmware
Source project has a limited visibility.
-
danukeru authored
Fix #104 - Add error message to update write fail to flash. Added bootloader specific error splash page function, for seamless reporting.
danukeru authoredFix #104 - Add error message to update write fail to flash. Added bootloader specific error splash page function, for seamless reporting.
bootloader-display.c 2.02 KiB
#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);