diff --git a/radio/src/bitmaps/480x272/bootloader/bmp_background.png b/radio/src/bitmaps/480x272/bootloader/bmp_background.png new file mode 100644 index 000000000..b2b1a4840 Binary files /dev/null and b/radio/src/bitmaps/480x272/bootloader/bmp_background.png differ diff --git a/radio/src/targets/horus/bootloader/boot_menu.cpp b/radio/src/targets/horus/bootloader/boot_menu.cpp index ae0d771df..a4ae513d1 100644 --- a/radio/src/targets/horus/bootloader/boot_menu.cpp +++ b/radio/src/targets/horus/bootloader/boot_menu.cpp @@ -12,6 +12,11 @@ const uint8_t __bmp_usb_plugged_rle[] { }; RLEBitmap BMP_USB_PLUGGED(BMP_ARGB4444, __bmp_usb_plugged_rle); +const uint8_t __bmp_background_rle[] { +#include "bmp_background.lbm" +}; +RLEBitmap BMP_BACKGROUND(BMP_ARGB4444, __bmp_background_rle); + const uint8_t LBM_FLASH[] = { #include "icon_flash.lbm" }; @@ -63,6 +68,31 @@ static void bootloaderDrawFooter() lcd->drawSolidFilledRect(28, 234, 422, 2, BL_FOREGROUND); } +static void bootloaderDrawBackground() +{ + // we have plenty of memory, let's cache that background + static BitmapBuffer* _background = nullptr; + + if (!_background) { + _background = new BitmapBuffer(BMP_RGB565, LCD_W, LCD_H); + + for (int i=0; idrawBitmap(i, j, &BMP_BACKGROUND); + } + } + _background->drawFilledRect(0, 0, LCD_W, LCD_H, SOLID, + COLOR2FLAGS(BLACK), OPACITY(4)); + } + + if (_background) { + lcd->drawBitmap(0, 0, _background); + } + else { + lcd->clear(BL_BACKGROUND); + } +} + void bootloaderDrawScreen(BootloaderState st, int opt, const char* str) { // shows current layer on LCD @@ -70,7 +100,8 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char* str) // swap back & front buffers lcdNextLayer(); - lcd->clear(BL_BACKGROUND); + + bootloaderDrawBackground(); if (st == ST_START) { bootloaderDrawTitle(88, BOOTLOADER_TITLE);