diff --git a/radio/src/gui/colorlcd/lcd.cpp b/radio/src/gui/colorlcd/lcd.cpp index 839d71397..2eb64271f 100644 --- a/radio/src/gui/colorlcd/lcd.cpp +++ b/radio/src/gui/colorlcd/lcd.cpp @@ -22,6 +22,23 @@ #include "lcd.h" #include +uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; +uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; + +//TODO: this needs to go away... +uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; + +uint16_t* lcdGetBackupBuffer() +{ + return (uint16_t*)LCD_BACKUP_FRAME_BUFFER; +} + +BitmapBuffer lcdBuffer1(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_FIRST_FRAME_BUFFER); +BitmapBuffer lcdBuffer2(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_SECOND_FRAME_BUFFER); + +BitmapBuffer * lcdFront = &lcdBuffer1; +BitmapBuffer * lcd = &lcdBuffer2; + extern BitmapBuffer * lcdFront; extern BitmapBuffer * lcd; @@ -67,6 +84,10 @@ void lcdInitDisplayDriver() { lv_init(); + // Clear buffers first (is that really needed?) + memset(LCD_FIRST_FRAME_BUFFER, 0, sizeof(LCD_FIRST_FRAME_BUFFER)); + memset(LCD_SECOND_FRAME_BUFFER, 0, sizeof(LCD_SECOND_FRAME_BUFFER)); + lv_disp_draw_buf_init(&disp_buf, lcdFront->getData(), lcd->getData(), LCD_W*LCD_H); lv_disp_drv_init(&disp_drv); /*Basic initialization*/ diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index a0ef79ef1..a2cfecf5b 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -43,20 +43,7 @@ #define VFP 2 #endif -#define LCD_FIRST_LAYER 0 -#define LCD_SECOND_LAYER 1 - -uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t currentLayer = LCD_FIRST_LAYER; - -BitmapBuffer lcdBuffer1(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_FIRST_FRAME_BUFFER); -BitmapBuffer lcdBuffer2(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_SECOND_FRAME_BUFFER); -BitmapBuffer lcdBackup(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_BACKUP_FRAME_BUFFER); - -BitmapBuffer * lcdFront = &lcdBuffer1; -BitmapBuffer * lcd = &lcdBuffer2; +uint8_t LCD_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; inline void LCD_NRST_LOW() { @@ -291,7 +278,7 @@ void LCD_LayerInit() LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PHYS_H; /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */ - LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)LCD_FIRST_FRAME_BUFFER; + LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)LCD_FRAME_BUFFER; /* Initialize LTDC layer 1 */ LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct); @@ -320,24 +307,10 @@ void LCD_Init(void) LCD_Init_LTDC(); } -void LCD_SetLayer(uint32_t layer) -{ - if (layer == LCD_FIRST_LAYER) { - lcdFront = &lcdBuffer1; - lcd = &lcdBuffer2; - } - else { - lcdFront = &lcdBuffer2; - lcd = &lcdBuffer1; - } - currentLayer = layer; -} - void lcdInit() { - // Clear buffers first - memset(LCD_FIRST_FRAME_BUFFER, 0, sizeof(LCD_FIRST_FRAME_BUFFER)); - memset(LCD_SECOND_FRAME_BUFFER, 0, sizeof(LCD_SECOND_FRAME_BUFFER)); + // Clear buffer first + memset(LCD_FRAME_BUFFER, 0, sizeof(LCD_FRAME_BUFFER)); // Initialize the LCD LCD_Init(); @@ -609,27 +582,6 @@ void lcdCopy(void * dest, void * src) while (DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET); } -void lcdStoreBackupBuffer() -{ -#if 0 - lcdCopy(LCD_BACKUP_FRAME_BUFFER, lcd->getData()); -#endif -} - -int lcdRestoreBackupBuffer() -{ -#if 0 - lcdCopy(lcd->getData(), LCD_BACKUP_FRAME_BUFFER); -#endif - return 1; -} - -uint16_t* lcdGetBackupBuffer() -{ - return (uint16_t*)LCD_BACKUP_FRAME_BUFFER; -} - - static volatile uint8_t _frameBufferAddressReloaded = 0; extern "C" void LTDC_IRQHandler(void) diff --git a/radio/src/targets/nv14/lcd_driver.cpp b/radio/src/targets/nv14/lcd_driver.cpp index 04d0edfcf..a17d4ed6f 100644 --- a/radio/src/targets/nv14/lcd_driver.cpp +++ b/radio/src/targets/nv14/lcd_driver.cpp @@ -23,21 +23,7 @@ #include "libopenui_config.h" #include "lcd.h" -#define LCD_FIRST_LAYER 0 -#define LCD_SECOND_LAYER 1 - -uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t LCD_SCRATCH_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; -uint8_t currentLayer = LCD_FIRST_LAYER; - -BitmapBuffer lcdBackup(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_BACKUP_FRAME_BUFFER); -BitmapBuffer lcdBuffer1(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_FIRST_FRAME_BUFFER); -BitmapBuffer lcdBuffer2(BMP_RGB565, LCD_W, LCD_H, (uint16_t *)LCD_SECOND_FRAME_BUFFER); - -BitmapBuffer * lcdFront = &lcdBuffer1; -BitmapBuffer * lcd = &lcdBuffer2; +uint8_t LCD_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(pixel_t)] __SDRAM; lcdSpiInitFucPtr lcdInitFunction; lcdSpiInitFucPtr lcdOffFunction; @@ -1256,58 +1242,29 @@ void LCD_LayerInit() { LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_PHYS_H; /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */ - LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t) LCD_FIRST_FRAME_BUFFER; + LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t) LCD_FRAME_BUFFER; /* Initialize LTDC layer 1 */ LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct); -#if defined(LTDC_DOUBLELAYER) - /* Configure Layer 2 */ - LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA; - LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA; - - /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */ - LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t) LCD_SECOND_FRAME_BUFFER; - - /* Initialize LTDC layer 2 */ - LTDC_LayerInit(LTDC_Layer2, <DC_Layer_InitStruct); -#endif /* LTDC configuration reload */ LTDC_ReloadConfig(LTDC_IMReload); LTDC_LayerCmd(LTDC_Layer1, ENABLE); LTDC_LayerAlpha(LTDC_Layer1, 255); -#if defined(LTDC_DOUBLELAYER) - LTDC_LayerCmd(LTDC_Layer2, ENABLE); - LTDC_LayerAlpha(LTDC_Layer2, 0); -#endif - LTDC_ReloadConfig(LTDC_IMReload); + /* dithering activation */ LTDC_DitherCmd(ENABLE); } const char* boardLcdType = ""; -void LCD_SetLayer(uint32_t layer) -{ - if (layer == LCD_FIRST_LAYER) { - lcdFront = &lcdBuffer1; - lcd = &lcdBuffer2; - } - else { - lcdFront = &lcdBuffer2; - lcd = &lcdBuffer1; - } - currentLayer = layer; -} - void lcdInit(void) { // Clear buffers first - memset(LCD_FIRST_FRAME_BUFFER, 0, sizeof(LCD_FIRST_FRAME_BUFFER)); - memset(LCD_SECOND_FRAME_BUFFER, 0, sizeof(LCD_SECOND_FRAME_BUFFER)); + memset(LCD_FRAME_BUFFER, 0, sizeof(LCD_FRAME_BUFFER)); /* Configure the LCD SPI+RESET pins */ lcdSpiConfig(); @@ -1600,27 +1557,6 @@ void lcdCopy(void * dest, void * src) while (DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET); } -void lcdStoreBackupBuffer() -{ - lcdCopy(LCD_BACKUP_FRAME_BUFFER, lcd->getData()); -} - -int lcdRestoreBackupBuffer() -{ - lcdCopy(lcd->getData(), LCD_BACKUP_FRAME_BUFFER); - return 1; -} - -uint16_t* lcdGetBackupBuffer() -{ - return (uint16_t*)LCD_BACKUP_FRAME_BUFFER; -} - -uint16_t* lcdGetScratchBuffer() -{ - return (uint16_t*)LCD_SCRATCH_FRAME_BUFFER; -} - //static volatile uint8_t refreshRequested = 0; static volatile uint8_t _frameBufferAddressReloaded = 0; diff --git a/radio/src/targets/simu/simulcd.cpp b/radio/src/targets/simu/simulcd.cpp index cbaf3f9d4..e8a3b1f19 100644 --- a/radio/src/targets/simu/simulcd.cpp +++ b/radio/src/targets/simu/simulcd.cpp @@ -26,7 +26,6 @@ #include pixel_t simuLcdBuf[DISPLAY_BUFFER_SIZE]; -pixel_t simuLcdBackupBuf[DISPLAY_BUFFER_SIZE]; bool simuLcdRefresh = true; @@ -41,8 +40,6 @@ void lcdCopy(void *dest, void *src) memcpy(dest, src, DISPLAY_BUFFER_SIZE * sizeof(pixel_t)); } -uint16_t *lcdGetBackupBuffer() { return (uint16_t *)simuLcdBackupBuf; } - #if !defined(COLORLCD) void lcdInit() {} @@ -57,15 +54,6 @@ void lcdRefresh() #else -pixel_t displayBuf1[DISPLAY_BUFFER_SIZE]; -pixel_t displayBuf2[DISPLAY_BUFFER_SIZE]; - -BitmapBuffer _lcd1(BMP_RGB565, LCD_W, LCD_H, displayBuf1); -BitmapBuffer _lcd2(BMP_RGB565, LCD_W, LCD_H, displayBuf2); - -BitmapBuffer * lcd = &_lcd1; -BitmapBuffer * lcdFront = &_lcd2; - void newLcdRefresh(uint16_t *buffer, const rect_t& copy_area) { #if defined(LCD_VERTICAL_INVERT) @@ -102,8 +90,7 @@ void newLcdRefresh(uint16_t *buffer, const rect_t& copy_area) void lcdInit() { - memset(displayBuf1, 0, sizeof(displayBuf1)); - memset(displayBuf2, 0, sizeof(displayBuf2)); + memset(simuLcdBuf, 0, sizeof(simuLcdBuf)); } void DMAFillRect(uint16_t *dest, uint16_t destw, uint16_t desth, uint16_t x,