Clone13

Dependents:   SignalProcessLab DigitalSignalAlgorithm_Lab DigitalSignal_Lab

RK043FN48H.cpp

Committer:
ngtkien
Date:
2019-08-28
Revision:
1:fc2dc08db78b
Parent:
0:ef139e18ca64

File content as of revision 1:fc2dc08db78b:

//
// RK043FN48H.h - DISCO_F746NG display
//

#include "RK043FN48H.h"

static Layer _selectedLayer = Foreground;

RK043FN48H::RK043FN48H()
{
    BSP_LCD_Init();

    FbBackgroundStartAdress = LCD_FB_START_ADDRESS;
    FbForegroundStartAdress = LCD_FB_START_ADDRESS+(BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4);

    BSP_LCD_LayerDefaultInit(0, FbBackgroundStartAdress);
    BSP_LCD_LayerDefaultInit(1, FbForegroundStartAdress);

    BSP_LCD_DisplayOn();

    actualDrawProp[0].TextColor = LCD_COLOR_WHITE;
    actualDrawProp[0].BackColor = LCD_COLOR_BLACK;
    actualDrawProp[0].pFont = &Font16; // &LCD_DEFAULT_FONT
    //_selectedFont[0] = GrFont(Courier16);

    actualDrawProp[1].TextColor = LCD_COLOR_WHITE & ALPHA_MASK;
    actualDrawProp[1].BackColor = LCD_COLOR_BLACK & ALPHA_MASK;
    actualDrawProp[1].pFont = &Font16; // &LCD_DEFAULT_FONT
    //_selectedFont[1] = GrFont(Courier16);

    // Initialize layer 0 properties
    SetActiveLayer(Background);
    SetBackgroundColor(actualDrawProp[0].BackColor);
    Clear();
    SetForegroundColor(actualDrawProp[0].TextColor);
    BSP_LCD_SetFont(&Font16);

    // Initialize layer 1 properties
    SetActiveLayer(Foreground);
    SetBackgroundColor(actualDrawProp[1].BackColor);
    Clear();
    SetForegroundColor(actualDrawProp[1].TextColor);
    BSP_LCD_SetFont(&Font16);

    // Set layers transparency
    SetLayersTransparency(0xFF, 0xFF);
    SetLayersVisibility(true, true);

/*
    _cursorPos[Background].X = 0;
    _cursorPos[Background].Y = 0;
    _cursorPos[Foreground].X = 0;
    _cursorPos[Foreground].Y = 0;
*/
}


RK043FN48H::~RK043FN48H()
{
    BSP_LCD_DeInit();
}


void RK043FN48H::Clear()
{
    BSP_LCD_Clear(actualDrawProp[_selectedLayer].BackColor);
}


void RK043FN48H::Clear(uint32_t color)
{
    BSP_LCD_Clear(color);
}


void RK043FN48H::ClearLayer(Layer layer, uint32_t color)
{
    Layer oldLayer = GetActiveLayer();

    SetActiveLayer(layer);
    Clear(color);
    SetActiveLayer(oldLayer);
}


void RK043FN48H::SetBackgroundColor(uint32_t color)
{
    actualDrawProp[_selectedLayer].BackColor = color;
    BSP_LCD_SetBackColor(actualDrawProp[_selectedLayer].BackColor);
}


void RK043FN48H::SetForegroundColor(uint32_t color)
{
    actualDrawProp[_selectedLayer].TextColor = color;
    BSP_LCD_SetTextColor(actualDrawProp[_selectedLayer].TextColor);
}


void RK043FN48H::SetDrawColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha)
{
    // Calculate display pixel value for selected color
    uint32_t color = red << 16 | green << 8 | blue | alpha << 24;
    SetForegroundColor(color);
}

uint32_t RK043FN48H::GetDrawColor()
{
    return actualDrawProp[_selectedLayer].TextColor;
}


void RK043FN48H::DrawPoint(int posX, int posY, uint32_t colorMask)
{
    if( posX >= 0 && posX < DisplayWidth() && posY >=0 && posY < DisplayHeight()) {
        BSP_LCD_DrawPixel(posX, posY, colorMask);
    }
}


//void RK043FN48H::DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
//{
//    BSP_LCD_DrawLine(x1, y1, x2, y2);
//}


void RK043FN48H::CopyBitmap(Layer layer, uint8_t * bitmap, uint32_t width, uint32_t height, uint32_t rgbGolorCode)
{
    // Check size
    if(width > DisplayWidth() || height > DisplayHeight())
        return;
    
    ClearLayer(layer, 0x00000000);

    uint16_t maxCol = width / 8;   // 60 columns
    if ((width % 8) != 0)
    {
        maxCol++;
    }
    
    for (int y = 0; y < height; y++) {
        for (int col = 0; col < maxCol; col++) {
            uint8_t shift = bitmap[y*maxCol + col];
            for (int pos = 0; pos < 8; pos++) {
                int x = (col << 3) + pos;   // x = col * 8 + pos
                if (x >= width)
                    break;

                if(shift & 1 << pos)
                {
                    DrawPoint(x, y, rgbGolorCode);
                }
            }
        }
    }
}


uint16_t RK043FN48H::DisplayWidth()
{
    return BSP_LCD_GetXSize();
}


uint16_t RK043FN48H::DisplayHeight()
{
    return BSP_LCD_GetYSize();
}


void RK043FN48H::SetActiveLayer(Layer layer)
{
    _selectedLayer = layer;
    
    BSP_LCD_SelectLayer((uint32_t)layer);
}


Layer RK043FN48H::GetActiveLayer()
{
    return _selectedLayer;
}


void RK043FN48H::SetLayersTransparency( uint8_t background, uint8_t foreground)
{
    BSP_LCD_SetTransparency(0, background);
    BSP_LCD_SetTransparency(1, foreground);
}


void RK043FN48H::SetLayersVisibility( bool background, bool foreground)
{
    BSP_LCD_SetLayerVisible(0, background ? ENABLE : DISABLE);
    BSP_LCD_SetLayerVisible(1, foreground ? ENABLE : DISABLE);
}



//New Function
//Add date: 25/08/2019

void RK043FN48H::DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
  BSP_LCD_DrawHLine(Xpos, Ypos, Length);
}

void RK043FN48H::DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
  BSP_LCD_DrawVLine(Xpos, Ypos, Length);
}

void RK043FN48H::DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
  BSP_LCD_DrawLine(x1, y1, x2, y2);
}

void RK043FN48H::DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
  BSP_LCD_DrawRect(Xpos, Ypos, Width, Height);
}

void RK043FN48H::DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
  BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
}

void RK043FN48H::DrawPolygon(pPoint Points, uint16_t PointCount)
{
  BSP_LCD_DrawPolygon(Points, PointCount);
}

void RK043FN48H::DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
{
  BSP_LCD_DrawEllipse(Xpos, Ypos, XRadius, YRadius);
}

void RK043FN48H::DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
{
  BSP_LCD_DrawBitmap(Xpos, Ypos, pbmp);
}

void RK043FN48H::FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
  BSP_LCD_FillRect(Xpos, Ypos, Width, Height);
}

void RK043FN48H::FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
  BSP_LCD_FillCircle(Xpos, Ypos, Radius);
}

void RK043FN48H::FillPolygon(pPoint Points, uint16_t PointCount)
{
  BSP_LCD_FillPolygon(Points, PointCount);
}

void RK043FN48H::FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
{
  BSP_LCD_FillEllipse(Xpos, Ypos, XRadius, YRadius);
}

void RK043FN48H::SetTextColor(uint32_t Color)
{
  BSP_LCD_SetTextColor(Color);
}

uint32_t RK043FN48H::GetTextColor(void)
{
  return BSP_LCD_GetTextColor();
}

void RK043FN48H::SetBackColor(uint32_t Color)
{
  BSP_LCD_SetBackColor(Color);
}

uint32_t RK043FN48H::GetBackColor(void)
{
  return BSP_LCD_GetBackColor();
}

void RK043FN48H::SetFont(sFONT *fonts)
{
  BSP_LCD_SetFont(fonts);
}

sFONT *RK043FN48H::GetFont(void)
{
  return BSP_LCD_GetFont();
}

uint32_t RK043FN48H::ReadPixel(uint16_t Xpos, uint16_t Ypos)
{
  return BSP_LCD_ReadPixel(Xpos, Ypos);
}

void RK043FN48H::DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel)
{
  BSP_LCD_DrawPixel(Xpos, Ypos, pixel);
}


void RK043FN48H::ClearStringLine(uint32_t Line)
{
  BSP_LCD_ClearStringLine(Line);
}

void RK043FN48H::DisplayStringAtLine(uint16_t Line, uint8_t *ptr)
{
  BSP_LCD_DisplayStringAtLine(Line, ptr);
}

void RK043FN48H::DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
{
  BSP_LCD_DisplayStringAt(Xpos, Ypos, Text, Mode);
}

void RK043FN48H::DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
{
  BSP_LCD_DisplayChar(Xpos, Ypos, Ascii);
}