Skip to content
Snippets Groups Projects
Select Git revision
  • ea85141fe8993084882ffb945112e6891318f153
  • master default protected
  • electrodes
  • b-butwasntthisaboutchaos
  • fontcleanup
  • nodisplaynoproblem
  • fleur/improved_font_rendering
  • fleur/portexpander_fix
  • fleur/transprint
  • fleur/florapower
  • fleur/comicsans
  • fleur/leds
  • fleur/buttons
13 results

bootloader-display.c

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    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);