Remove legacy fonts and make the bootloader compile with LVGL

This commit is contained in:
Raphael Coeffic
2022-06-11 15:38:08 +02:00
committed by Raphael Coeffic
parent 0404919667
commit ee0c37157d
74 changed files with 2027 additions and 775 deletions
@@ -19,9 +19,14 @@
* GNU General Public License for more details.
*/
#include "opentx.h"
#include "../../common/arm/stm32/bootloader/boot.h"
#include "../../common/arm/stm32/bootloader/bin_files.h"
#include "board.h"
#include "fw_version.h"
#include "lcd.h"
#include "targets/common/arm/stm32/bootloader/boot.h"
#include "targets/common/arm/stm32/bootloader/bin_files.h"
#include <lvgl/lvgl.h>
const uint8_t __bmp_plug_usb_rle[] {
#include "bmp_plug_usb.lbm"
@@ -38,26 +43,12 @@ const uint8_t __bmp_background_rle[] {
};
RLEBitmap BMP_BACKGROUND(BMP_ARGB4444, __bmp_background_rle);
const uint8_t LBM_FLASH[] = {
#include "icon_flash.lbm"
};
const uint8_t LBM_EXIT[] = {
#include "icon_exit.lbm"
};
const uint8_t LBM_SD[] = {
#include "icon_sd.lbm"
};
//TODO: replace with LV_SYMBOL_FILE
const uint8_t LBM_FILE[] = {
#include "icon_file.lbm"
};
const uint8_t LBM_ERROR[] = {
#include "icon_error.lbm"
};
//TODO: replace with LV_SYMBOL_OK
const uint8_t LBM_OK[] = {
#include "icon_ok.lbm"
};
@@ -68,11 +59,12 @@ const uint8_t LBM_OK[] = {
#define BL_FOREGROUND COLOR2FLAGS(WHITE)
#define BL_SELECTED COLOR2FLAGS(RGB(11, 65, 244)) // deep blue
extern BitmapBuffer * lcd;
void bootloaderInitScreen()
{
backlightEnable(BACKLIGHT_LEVEL_MAX);
// TODO: init LVGL
lcdInitDisplayDriver();
}
static void bootloaderDrawTitle(unsigned int x, const char* text)
@@ -113,18 +105,21 @@ static void bootloaderDrawBackground()
void bootloaderDrawScreen(BootloaderState st, int opt, const char* str)
{
lcdInitDirectDrawing();
bootloaderDrawBackground();
if (st == ST_START) {
bootloaderDrawTitle(88, BOOTLOADER_TITLE);
bootloaderDrawTitle(88, BOOTLOADER_TITLE);
lcd->drawBitmapPattern(90, 72, LBM_FLASH, BL_FOREGROUND);
lcd->drawText(124, 75, "Write Firmware", BL_FOREGROUND);
lcd->drawText(102, 75, LV_SYMBOL_CHARGE, BL_FOREGROUND);
coord_t pos = lcd->drawText(124, 75, "Write Firmware", BL_FOREGROUND);
pos += 8;
lcd->drawBitmapPattern(90, 107, LBM_EXIT, BL_FOREGROUND);
lcd->drawText(100, 110, LV_SYMBOL_NEW_LINE, BL_FOREGROUND);
lcd->drawText(124, 110, "Exit", BL_FOREGROUND);
lcd->drawSolidRect(119, (opt == 0) ? 72 : 107, 270, 26, 2, BL_SELECTED);
pos -= 92;
lcd->drawSolidRect(92, (opt == 0) ? 72 : 107, pos, 26, 2, BL_SELECTED);
lcd->drawBitmap(60, 166, &BMP_PLUG_USB);
lcd->drawText(195, 175, "Or plug in a USB cable", BL_FOREGROUND);
@@ -141,62 +136,55 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char* str)
else if (st == ST_FILE_LIST || st == ST_DIR_CHECK || st == ST_FLASH_CHECK ||
st == ST_FLASHING || st == ST_FLASH_DONE) {
bootloaderDrawTitle(126, "SD>FIRMWARE");
lcd->drawBitmapPattern(87, 16, LBM_SD, BL_FOREGROUND);
bootloaderDrawTitle(88, LV_SYMBOL_SD_CARD " /FIRMWARE");
if (st == ST_FLASHING || st == ST_FLASH_DONE) {
LcdFlags color = BL_RED;
LcdFlags color = BL_RED;
if (st == ST_FLASH_DONE) {
color = BL_GREEN;
opt = 100; // Completed > 100%
}
if (st == ST_FLASH_DONE) {
color = BL_GREEN;
opt = 100; // Completed > 100%
}
lcd->drawRect(70, 120, 340, 31, 2, SOLID, BL_SELECTED);
lcd->drawSolidFilledRect(74, 124, (332 * opt) / 100, 23, color);
} else if (st == ST_DIR_CHECK) {
if (opt == FR_NO_PATH) {
lcd->drawText(90, 168, LV_SYMBOL_CLOSE " Directory is missing",
BL_FOREGROUND);
} else {
lcd->drawText(90, 168, LV_SYMBOL_CLOSE " Directory is empty",
BL_FOREGROUND);
}
} else if (st == ST_FLASH_CHECK) {
bootloaderDrawFilename(str, 0, true);
lcd->drawRect(70, 120, 340, 31, 2, SOLID, BL_SELECTED);
lcd->drawSolidFilledRect(74, 124, (332 * opt) / 100, 23, color);
if (opt == FC_ERROR) {
lcd->drawText(94, 168, LV_SYMBOL_CLOSE " " STR_INVALID_FIRMWARE,
BL_FOREGROUND);
} else if (opt == FC_OK) {
VersionTag tag;
memset(&tag, 0, sizeof(tag));
extractFirmwareVersion(&tag);
lcd->drawText(168, 138, "Fork:", RIGHT | BL_FOREGROUND);
lcd->drawSizedText(174, 138, tag.fork, 6, BL_FOREGROUND);
lcd->drawText(168, 158, "Version:", RIGHT | BL_FOREGROUND);
lcd->drawText(174, 158, tag.version, BL_FOREGROUND);
lcd->drawText(168, 178, "Radio:", RIGHT | BL_FOREGROUND);
lcd->drawText(174, 178, tag.flavour, BL_FOREGROUND);
lcd->drawBitmapPattern(356, 158, LBM_OK, BL_GREEN);
}
}
else if (st == ST_DIR_CHECK) {
if (opt == FR_NO_PATH) {
lcd->drawText(90, 168, "Directory is missing", BL_FOREGROUND);
}
else {
lcd->drawText(90, 168, "Directory is empty", BL_FOREGROUND);
}
lcd->drawBitmapPattern(356, 158, LBM_ERROR, BL_RED);
}
else if (st == ST_FLASH_CHECK) {
bootloaderDrawFilename(str, 0, true);
if (opt == FC_ERROR) {
lcd->drawText(94, 168, STR_INVALID_FIRMWARE, BL_FOREGROUND);
lcd->drawBitmapPattern(356, 158, LBM_ERROR, BL_RED);
}
else if (opt == FC_OK) {
VersionTag tag;
memset(&tag, 0, sizeof(tag));
extractFirmwareVersion(&tag);
lcd->drawText(168, 138, "Fork:", RIGHT | BL_FOREGROUND);
lcd->drawSizedText(174, 138, tag.fork, 6, BL_FOREGROUND);
lcd->drawText(168, 158, "Version:", RIGHT | BL_FOREGROUND);
lcd->drawText(174, 158, tag.version, BL_FOREGROUND);
lcd->drawText(168, 178, "Radio:", RIGHT | BL_FOREGROUND);
lcd->drawText(174, 178, tag.flavour, BL_FOREGROUND);
lcd->drawBitmapPattern(356, 158, LBM_OK, BL_GREEN);
}
}
bootloaderDrawFooter();
if ( st != ST_DIR_CHECK && (st != ST_FLASH_CHECK || opt == FC_OK)) {
lcd->drawBitmapPattern(28, 242, LBM_FLASH, BL_FOREGROUND);
lcd->drawText(28, 242, LV_SYMBOL_CHARGE, BL_FOREGROUND);
if (st == ST_FILE_LIST) {
lcd->drawText(56, 244, "[ENT] to select file", BL_FOREGROUND);
@@ -213,14 +201,11 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char* str)
}
if (st != ST_FLASHING) {
lcd->drawBitmapPattern(305, 242, LBM_EXIT, BL_FOREGROUND);
//lcd->drawBitmapPattern(305, 242, LBM_EXIT, BL_FOREGROUND);
lcd->drawText(305, 244, LV_SYMBOL_NEW_LINE, BL_FOREGROUND);
lcd->drawText(335, 244, "[RTN] to exit", BL_FOREGROUND);
}
}
// wait for next frame
// while ((LTDC->CDSR & LTDC_CDSR_VSYNCS) == 0);
// while ((LTDC->CDSR & LTDC_CDSR_VSYNCS) != 0);
}
void bootloaderDrawFilename(const char* str, uint8_t line, bool selected)