Fix requested changes from ldiy

This commit is contained in:
xoreo
2023-11-09 17:50:10 +01:00
parent 0924eede06
commit 4ea21bc4cf
28 changed files with 142 additions and 4366 deletions

View File

@@ -1,65 +1,60 @@
/**
* @file lcd_api.c
* @brief LCD API implementation
* @author Tim S.
* @todo Implement lcd_display_text(...)
* @todo Implement function to read images from fs
*/
#include "lcd_api.h"
static DMA2D_HandleTypeDef hDma2dHandler2;
void init_lcd(void){
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS);
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS + (BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4));
BSP_LCD_DisplayOn();
BSP_LCD_SelectLayer(0);
BSP_LCD_Clear(LCD_COLOR_BLACK);
BSP_LCD_SelectLayer(1);
BSP_LCD_Clear(LCD_COLOR_BLACK);
}
void init_lcd_with_layers(uint16_t amount_layers){
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
for (uint16_t i = 1; i < amount_layers; i++) {
BSP_LCD_LayerDefaultInit(i, LCD_FB_START_ADDRESS + ((BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4)*i));
}
BSP_LCD_DisplayOn();
for (uint16_t i = 0; i < amount_layers; i++) {
BSP_LCD_SelectLayer(i);
BSP_LCD_Clear(LCD_COLOR_BLACK);
}
}
void display_bmp_array(const uint8_t *bmp_data, uint16_t x_pos, uint16_t y_pos, uint16_t layer_idx){
BSP_LCD_SelectLayer(layer_idx);
BSP_LCD_DrawBitmap(x_pos, y_pos, (uint8_t *)bmp_data);
}
void WDA_LCD_DrawBmp(const void *pSrc, uint32_t xPos, uint32_t yPos, uint32_t xSize, uint32_t ySize, uint32_t ColorMode)
{
uint32_t address = hLtdcHandler.LayerCfg[1].FBStartAdress + (((480*yPos) + xPos)*(4));
void *pDst = (void *)address;
hDma2dHandler2.Init.Mode = DMA2D_M2M_PFC;
hDma2dHandler2.Init.ColorMode = DMA2D_ARGB8888;
hDma2dHandler2.Init.OutputOffset = 480-xSize;
hDma2dHandler2.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hDma2dHandler2.LayerCfg[1].InputAlpha = 0xFF;
hDma2dHandler2.LayerCfg[1].InputColorMode = ColorMode;
hDma2dHandler2.LayerCfg[1].InputOffset = 0;
hDma2dHandler2.Instance = DMA2D;
if(HAL_DMA2D_Init(&hDma2dHandler2) == HAL_OK)
{
if(HAL_DMA2D_ConfigLayer(&hDma2dHandler2, 1) == HAL_OK)
{
if (HAL_DMA2D_Start(&hDma2dHandler2, (uint32_t)pSrc, (uint32_t)pDst, xSize, ySize) == HAL_OK)
{
HAL_DMA2D_PollForTransfer(&hDma2dHandler2, 10);
}
void lcd_init(bool BL_On) {
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS);
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS + (BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4));
BSP_LCD_SelectLayer(0);
BSP_LCD_Clear(LCD_COLOR_BLACK);
BSP_LCD_SelectLayer(1);
BSP_LCD_Clear(LCD_COLOR_BLACK);
if (BL_On) {
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_RESET);
}
}
// TODO: implement this function
void lcd_display_text(const char* text, uint16_t x_pos, uint16_t y_pos, uint32_t color) {
BSP_LCD_SetTextColor(color);
}
void lcd_draw_bmp(const void* pSrc, uint32_t xPos, uint32_t yPos, uint32_t xSize, uint32_t ySize, uint32_t ColorMode) {
uint32_t address = hLtdcHandler.LayerCfg[1].FBStartAdress + (((BSP_LCD_GetXSize()*yPos) + xPos)*(4));
void *pDst = (void *)address;
hDma2dHandler2.Init.Mode = DMA2D_M2M_PFC;
hDma2dHandler2.Init.ColorMode = DMA2D_ARGB8888;
hDma2dHandler2.Init.OutputOffset = 480-xSize;
hDma2dHandler2.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hDma2dHandler2.LayerCfg[1].InputAlpha = 0xFF;
hDma2dHandler2.LayerCfg[1].InputColorMode = ColorMode;
hDma2dHandler2.LayerCfg[1].InputOffset = 0;
hDma2dHandler2.Instance = DMA2D;
if (HAL_DMA2D_Init(&hDma2dHandler2) == HAL_OK) {
if (HAL_DMA2D_ConfigLayer(&hDma2dHandler2, 1) == HAL_OK) {
if (HAL_DMA2D_Start(&hDma2dHandler2, (uint32_t)pSrc, (uint32_t)pDst, xSize, ySize) == HAL_OK) {
HAL_DMA2D_PollForTransfer(&hDma2dHandler2, 10);
}
}
}
}
}