Moved frame buffers to lcd.cpp
This commit is contained in:
committed by
Raphael Coeffic
parent
df7db43940
commit
b827376acb
@@ -22,6 +22,23 @@
|
||||
#include "lcd.h"
|
||||
#include <lvgl/lvgl.h>
|
||||
|
||||
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*/
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <utility>
|
||||
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user