From f768bbea419506cf0815d3dc6e0c8e02ebddda4a Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 20 Feb 2022 16:04:16 +0100 Subject: [PATCH] Fixed compiling NV14 --- radio/src/audio.cpp | 13 +- radio/src/targets/nv14/board.h | 7 +- .../src/targets/nv14/bootloader/boot_menu.cpp | 260 +++++++----------- radio/src/translations.cpp | 2 +- 4 files changed, 107 insertions(+), 175 deletions(-) diff --git a/radio/src/audio.cpp b/radio/src/audio.cpp index b8ef99456..729ace1c1 100644 --- a/radio/src/audio.cpp +++ b/radio/src/audio.cpp @@ -324,7 +324,6 @@ void getSwitchAudioFile(char * filename, swsrc_t index) { char * str = getModelAudioPath(filename); -#if defined(PCBFRSKY) if (index <= SWSRC_LAST_SWITCH) { div_t swinfo = switchInfo(index); *str++ = 'S'; @@ -332,6 +331,7 @@ void getSwitchAudioFile(char * filename, swsrc_t index) const char * positions[] = { "-up", "-mid", "-down" }; strcpy(str, positions[swinfo.rem]); } +#if NUM_XPOTS > 0 else { div_t swinfo = div(int(index - SWSRC_FIRST_MULTIPOS_SWITCH), XPOTS_MULTIPOS_COUNT); *str++ = 'S'; @@ -339,11 +339,6 @@ void getSwitchAudioFile(char * filename, swsrc_t index) *str++ = '1' + swinfo.rem; *str = '\0'; } -#else - int len = STR_VSWITCHES[0]; - strncpy(str, &STR_VSWITCHES[1+(len*index)], len); - str += len; - *str = '\0'; #endif strcat(str, SOUNDS_EXT); } @@ -352,7 +347,6 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) { char * str = getModelAudioPath(filename); -#if defined(PCBFRSKY) *str++ = 'L'; if (index >= 9) { div_t qr = div(index+1, 10); @@ -362,11 +356,6 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event) else { *str++ = '1' + index; } -#else - int len = STR_VSWITCHES[0]; - strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_LOGICAL_SWITCH)], len); - str += len; -#endif strcpy(str, suffixes[event]); strcat(str, SOUNDS_EXT); diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index 29501f8a3..0007780a2 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -396,12 +396,15 @@ uint32_t pwrPressedDuration();; const etx_serial_port_t* auxSerialGetPort(int port_nr); // LCD driver -#define LCD_W 480 -#define LCD_H 320 +#define LCD_W 320 +#define LCD_H 480 + #define LCD_PHYS_W 320 #define LCD_PHYS_H 480 + #define LCD_DEPTH 16 #define LCD_CONTRAST_DEFAULT 20 + void lcdInit(); void lcdCopy(void * dest, void * src); void DMAFillRect(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color); diff --git a/radio/src/targets/nv14/bootloader/boot_menu.cpp b/radio/src/targets/nv14/bootloader/boot_menu.cpp index 6bd79c144..f5e8b623a 100644 --- a/radio/src/targets/nv14/bootloader/boot_menu.cpp +++ b/radio/src/targets/nv14/bootloader/boot_menu.cpp @@ -21,6 +21,7 @@ #include "board.h" #include "fw_version.h" +#include "lcd.h" #include "../../common/arm/stm32/bootloader/boot.h" #include "../../common/arm/stm32/bootloader/bin_files.h" @@ -47,26 +48,10 @@ 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" -}; - const uint8_t LBM_FILE[] = { #include "icon_file.lbm" }; -const uint8_t LBM_ERROR[] = { -#include "icon_error.lbm" -}; - const uint8_t LBM_OK[] = { #include "icon_ok.lbm" }; @@ -77,69 +62,12 @@ const uint8_t LBM_OK[] = { #define BL_FOREGROUND COLOR2FLAGS(WHITE) #define BL_SELECTED COLOR2FLAGS(RGB(11, 65, 244)) // deep blue -extern BitmapBuffer * lcdFront; extern BitmapBuffer * lcd; -static lv_disp_t* disp = nullptr; -static lv_disp_drv_t disp_drv; -static lv_disp_draw_buf_t disp_buf; - -void newLcdRefresh(uint16_t* buffer, const rect_t& copy_area); -static void flushLcd(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) -{ - lv_area_t refr_area; - lv_area_copy(&refr_area, area); - -#if defined(LCD_VERTICAL_INVERT) - lv_coord_t tmp_coord; - tmp_coord = refr_area.y2; - refr_area.y2 = LCD_H - refr_area.y1 - 1; - refr_area.y1 = LCD_H - tmp_coord - 1; - tmp_coord = refr_area.x2; - refr_area.x2 = LCD_W - refr_area.x1 - 1; - refr_area.x1 = LCD_W - tmp_coord - 1; -#endif - - if (refr_area.x1 != 0 || refr_area.x2 != 479 || refr_area.y1 != 0 || - refr_area.y2 != 271) { - TRACE("partial refresh @ 0x%p {%d,%d,%d,%d}", color_p, refr_area.x1, - refr_area.y1, refr_area.x2, refr_area.y2); - } else { - TRACE("full refresh @ 0x%p", color_p); - } - - rect_t copy_area = {refr_area.x1, refr_area.y1, - refr_area.x2 - refr_area.x1 + 1, - refr_area.y2 - refr_area.y1 + 1}; - - newLcdRefresh((uint16_t*)color_p, copy_area); - lv_disp_flush_ready(disp_drv); -} - -static void init_disp_drv() -{ - lv_disp_draw_buf_init(&disp_buf, lcdFront->getData(), lcd->getData(), LCD_W*LCD_H); - lv_disp_drv_init(&disp_drv); /*Basic initialization*/ - disp_drv.draw_buf = &disp_buf; /*Set an initialized buffer*/ - disp_drv.flush_cb = flushLcd; /*Set a flush callback to draw to the display*/ - disp_drv.hor_res = LCD_W; /*Set the horizontal resolution in pixels*/ - disp_drv.ver_res = LCD_H; /*Set the vertical resolution in pixels*/ - disp_drv.full_refresh = 0; - disp_drv.direct_mode = 0; -#if defined (LCD_VERTICAL_INVERT) - disp_drv.rotated = LV_DISP_ROT_180; -#endif - disp_drv.sw_rotate = 1; - - // Register the driver and save the created display objects - disp = lv_disp_drv_register(&disp_drv); -} - void bootloaderInitScreen() { backlightEnable(BACKLIGHT_LEVEL_MAX); - lv_init(); - init_disp_drv(); + lcdInitDisplayDriver(); } static void bootloaderDrawTitle(const char* text) @@ -180,7 +108,7 @@ static void bootloaderDrawBackground() void bootloaderDrawScreen(BootloaderState st, int opt, const char* str) { - // clear screen + lcdInitDirectDrawing(); bootloaderDrawBackground(); int center = LCD_W/2; @@ -188,105 +116,117 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char* str) bootloaderDrawTitle(BOOTLOADER_TITLE); - lcd->drawBitmapPattern(50, 72, LBM_FLASH, BL_FOREGROUND); - lcd->drawText(84, 75, "Write Firmware", BL_FOREGROUND); + lcd->drawText(62, 75, LV_SYMBOL_CHARGE, BL_FOREGROUND); + coord_t pos = lcd->drawText(84, 75, "Write Firmware", BL_FOREGROUND); + pos += 8; - lcd->drawBitmapPattern(50, 107, LBM_EXIT, BL_FOREGROUND); + lcd->drawText(60, 110, LV_SYMBOL_NEW_LINE, BL_FOREGROUND); lcd->drawText(84, 110, "Exit", BL_FOREGROUND); - lcd->drawSolidRect(79, (opt == 0) ? 72 : 107, LCD_W - 79 - 28, 26, 2, BL_SELECTED); + pos -= 79; + lcd->drawSolidRect(79, (opt == 0) ? 72 : 107, pos, 26, 2, BL_SELECTED); lcd->drawBitmap(center - 55, 165, &BMP_PLUG_USB); lcd->drawText(center, 250, "Or plug in a USB cable", CENTERED | BL_FOREGROUND); lcd->drawText(center, 275, "for mass storage", CENTERED | BL_FOREGROUND); bootloaderDrawFooter(); - lcd->drawText(center, LCD_H - DOUBLE_PADDING, "Current Firmware:", CENTERED | BL_FOREGROUND); - lcd->drawText(center, LCD_H - DEFAULT_PADDING, getFirmwareVersion(nullptr), CENTERED | BL_FOREGROUND); - } - else if (st == ST_USB) { - lcd->drawBitmap(center - 26, 98, &BMP_USB_PLUGGED); - lcd->drawText(center, 168, "USB Connected", CENTERED | BL_FOREGROUND); - } - else if (st == ST_FILE_LIST || st == ST_DIR_CHECK || st == ST_FLASH_CHECK || - st == ST_FLASHING || st == ST_FLASH_DONE) { + lcd->drawText(center, LCD_H - DOUBLE_PADDING, + "Current Firmware:", CENTERED | BL_FOREGROUND); + lcd->drawText(center, LCD_H - DEFAULT_PADDING, + getFirmwareVersion(nullptr), CENTERED | BL_FOREGROUND); + } else if (st == ST_USB) { + lcd->drawBitmap(center - 26, 98, &BMP_USB_PLUGGED); + lcd->drawText(center, 168, "USB Connected", CENTERED | BL_FOREGROUND); + } else if (st == ST_FILE_LIST || st == ST_DIR_CHECK || + st == ST_FLASH_CHECK || st == ST_FLASHING || + st == ST_FLASH_DONE) { - bootloaderDrawTitle("SD>FIRMWARE"); - lcd->drawBitmapPattern(DEFAULT_PADDING, 16, LBM_SD, BL_FOREGROUND); + bootloaderDrawTitle(LV_SYMBOL_SD_CARD " /FIRMWARE"); - if (st == ST_FLASHING || st == ST_FLASH_DONE) { + if (st == ST_FLASHING || st == ST_FLASH_DONE) { + LcdFlags color = BL_RED; // red - LcdFlags color = BL_RED; // red - - if (st == ST_FLASH_DONE) { - color = BL_GREEN/* green */; - opt = 100; // Completed > 100% - } - - lcd->drawRect(DEFAULT_PADDING, 120, LCD_W - DOUBLE_PADDING, 31, 2, SOLID, BL_SELECTED); - lcd->drawSolidFilledRect(DEFAULT_PADDING+4, 124, ((LCD_W - DOUBLE_PADDING - 8) * opt) / 100, 23, color); - } - else if (st == ST_DIR_CHECK) { - - if (opt == FR_NO_PATH) { - lcd->drawText(20, MESSAGE_TOP, "Directory is missing", BL_FOREGROUND); - } - else { - lcd->drawText(20, MESSAGE_TOP, "Directory is empty", BL_FOREGROUND); - } - - lcd->drawBitmapPattern(LCD_W - DOUBLE_PADDING, MESSAGE_TOP-10, LBM_ERROR, BL_RED); - } - else if (st == ST_FLASH_CHECK) { - - bootloaderDrawFilename(str, 0, true); - - if (opt == FC_ERROR) { - lcd->drawText(20, MESSAGE_TOP, STR_INVALID_FIRMWARE, BL_FOREGROUND); - lcd->drawBitmapPattern(LCD_W - DOUBLE_PADDING, MESSAGE_TOP-10, LBM_ERROR, BL_RED); - } - else if (opt == FC_OK) { - VersionTag tag; - memset(&tag, 0, sizeof(tag)); - extractFirmwareVersion(&tag); - - lcd->drawText(LCD_W/4 + DEFAULT_PADDING, MESSAGE_TOP - DEFAULT_PADDING, "Fork:", RIGHT | BL_FOREGROUND); - lcd->drawSizedText(LCD_W/4 + 6 + DEFAULT_PADDING, MESSAGE_TOP - DEFAULT_PADDING, tag.fork, 6, BL_FOREGROUND); - - lcd->drawText(LCD_W/4 + DEFAULT_PADDING, MESSAGE_TOP, "Version:", RIGHT | BL_FOREGROUND); - lcd->drawText(LCD_W/4 + 6 + DEFAULT_PADDING, MESSAGE_TOP, tag.version, BL_FOREGROUND); - - lcd->drawText(LCD_W/4 + DEFAULT_PADDING, MESSAGE_TOP + DEFAULT_PADDING, "Radio:", RIGHT | BL_FOREGROUND); - lcd->drawText(LCD_W/4 + 6 + DEFAULT_PADDING, MESSAGE_TOP + DEFAULT_PADDING, tag.flavour, BL_FOREGROUND); - - lcd->drawBitmapPattern(LCD_W - DOUBLE_PADDING, MESSAGE_TOP-10, LBM_OK, BL_GREEN); - } - } - - bootloaderDrawFooter(); - - if ( st != ST_DIR_CHECK && (st != ST_FLASH_CHECK || opt == FC_OK)) { - - lcd->drawBitmapPattern(DEFAULT_PADDING, LCD_H - DOUBLE_PADDING - 2, LBM_FLASH, BL_FOREGROUND); - - if (st == ST_FILE_LIST) { - lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, "[R TRIM] to select file", BL_FOREGROUND); - } - else if (st == ST_FLASH_CHECK && opt == FC_OK) { - lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, "Hold [R TRIM] long to flash", BL_FOREGROUND); - } - else if (st == ST_FLASHING) { - lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, "Writing Firmware ...", BL_FOREGROUND); - } - else if (st == ST_FLASH_DONE) { - lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, "Writing Completed", BL_FOREGROUND); - } + if (st == ST_FLASH_DONE) { + color = BL_GREEN /* green */; + opt = 100; // Completed > 100% } - if (st != ST_FLASHING) { - lcd->drawBitmapPattern(DEFAULT_PADDING, LCD_H - DEFAULT_PADDING - 2, LBM_EXIT, BL_FOREGROUND); - lcd->drawText(DOUBLE_PADDING, LCD_H - DEFAULT_PADDING, "[L TRIM] to exit", BL_FOREGROUND); - } + lcd->drawRect(DEFAULT_PADDING, 120, LCD_W - DOUBLE_PADDING, 31, 2, + SOLID, BL_SELECTED); + lcd->drawSolidFilledRect(DEFAULT_PADDING + 4, 124, + ((LCD_W - DOUBLE_PADDING - 8) * opt) / 100, 23, + color); + } else if (st == ST_DIR_CHECK) { + if (opt == FR_NO_PATH) { + lcd->drawText(20, MESSAGE_TOP, + LV_SYMBOL_CLOSE " Directory is missing", BL_FOREGROUND); + } else { + lcd->drawText(20, MESSAGE_TOP, LV_SYMBOL_CLOSE " Directory is empty", + BL_FOREGROUND); + } + } else if (st == ST_FLASH_CHECK) { + bootloaderDrawFilename(str, 0, true); + + if (opt == FC_ERROR) { + lcd->drawText(20, MESSAGE_TOP, + LV_SYMBOL_CLOSE " " STR_INVALID_FIRMWARE, + BL_FOREGROUND); + } else if (opt == FC_OK) { + VersionTag tag; + memset(&tag, 0, sizeof(tag)); + extractFirmwareVersion(&tag); + + lcd->drawText(LCD_W / 4 + DEFAULT_PADDING, + MESSAGE_TOP - DEFAULT_PADDING, + "Fork:", RIGHT | BL_FOREGROUND); + lcd->drawSizedText(LCD_W / 4 + 6 + DEFAULT_PADDING, + MESSAGE_TOP - DEFAULT_PADDING, tag.fork, 6, + BL_FOREGROUND); + + lcd->drawText(LCD_W / 4 + DEFAULT_PADDING, MESSAGE_TOP, + "Version:", RIGHT | BL_FOREGROUND); + lcd->drawText(LCD_W / 4 + 6 + DEFAULT_PADDING, MESSAGE_TOP, + tag.version, BL_FOREGROUND); + + lcd->drawText(LCD_W / 4 + DEFAULT_PADDING, + MESSAGE_TOP + DEFAULT_PADDING, + "Radio:", RIGHT | BL_FOREGROUND); + lcd->drawText(LCD_W / 4 + 6 + DEFAULT_PADDING, + MESSAGE_TOP + DEFAULT_PADDING, tag.flavour, + BL_FOREGROUND); + + lcd->drawBitmapPattern(LCD_W - DOUBLE_PADDING, MESSAGE_TOP - 10, + LBM_OK, BL_GREEN); + } + } + + bootloaderDrawFooter(); + + if (st != ST_DIR_CHECK && (st != ST_FLASH_CHECK || opt == FC_OK)) { + + lcd->drawText(DEFAULT_PADDING, LCD_H - DOUBLE_PADDING - 2, + LV_SYMBOL_CHARGE, BL_FOREGROUND); + + if (st == ST_FILE_LIST) { + lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, + "[R TRIM] to select file", BL_FOREGROUND); + } else if (st == ST_FLASH_CHECK && opt == FC_OK) { + lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, + "Hold [R TRIM] long to flash", BL_FOREGROUND); + } else if (st == ST_FLASHING) { + lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, + "Writing Firmware ...", BL_FOREGROUND); + } else if (st == ST_FLASH_DONE) { + lcd->drawText(DOUBLE_PADDING, LCD_H - DOUBLE_PADDING, + "Writing Completed", BL_FOREGROUND); + } + } + + if (st != ST_FLASHING) { + lcd->drawText(DOUBLE_PADDING, LCD_H - DEFAULT_PADDING, + LV_SYMBOL_NEW_LINE " [L TRIM] to exit", BL_FOREGROUND); + } } } diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index cbe24b7ed..cd9c3ea2c 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -972,7 +972,7 @@ const char STR_PROTOCOL[] = TR_PROTOCOL; const char STR_RACING_MODE[] = TR_RACING_MODE; #if defined(PCBNV14) -const char STR_RFPOWER_AFHDS2[] = TR_RFPOWER_AFHDS2; +ISTR(RFPOWER_AFHDS2); #endif const char STR_USE_THEME_COLOR[] = TR_USE_THEME_COLOR;