Skip to content
Snippets Groups Projects
Select Git revision
  • 40f3c026823f8951a2fa04e9c7fc93c75bc27bec
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

builtin.c

Blame
  • 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);