SSD1963 Initial code & test fill screen.

Dependencies:   mbed

SSD1963/SSD1963.h

Committer:
techstep
Date:
2014-04-18
Revision:
0:2714fcd95190

File content as of revision 0:2714fcd95190:

/*****************************************************************************
 * Project      : 7" TFT LCD 800x480 [AT070TN92]
 * Compiler     : mbed Online
 * Type         : Libraries
 * Comment      : Support mbed ST Nucleo Board.
 *              : Support Chip = SSD1963
 * File         : SSD1963.h
 *
 * Author       : Mr.Thongchai Artsamart [Bird Techstep]
 * E-Mail       : t.artsamart@gmail.com
 *              : tbird_th@hotmail.com
 * Start Date   : 20/03/2014 [dd/mm/yyyy]
 * Version Date : 20/03/2014 [dd/mm/yyyy]
 * Licensed under a Creative Commons Attribution-ShareAlike 3.0 License.
 *****************************************************************************
 * Remark    : Thank you -. no1wudi [CooCox]
 *                       -.
 *****************************************************************************/
#ifndef __SSD1963_H_
#define __SSD1963_H_
//#include "mbed.h"

    /*********************************************************************
    * Overview: Image orientation (can be 0, 90, 180, 270 degrees).
    *********************************************************************/  
    #define DISP_ORIENTATION    0
    /*********************************************************************
    * Overview: Panel Data Width (R,G,B) in (6,6,6)
    *********************************************************************/
    #define DISP_DATA_WIDTH                 18
    /*********************************************************************
    * Overview: Horizontal and vertical display resolution
    *                  (from the glass datasheet).
    *********************************************************************/
    #define DISP_HOR_RESOLUTION 800
    #define DISP_VER_RESOLUTION 480
    /*********************************************************************
    * Overview: Horizontal synchronization timing in pixels
    *                  (from the glass datasheet).
    *********************************************************************/
    #define DISP_HOR_PULSE_WIDTH        1
    #define DISP_HOR_BACK_PORCH         210
    #define DISP_HOR_FRONT_PORCH        45  
    /*********************************************************************
    * Overview: Vertical synchronization timing in lines
    *                  (from the glass datasheet).
    *********************************************************************/
    #define DISP_VER_PULSE_WIDTH        1
    #define DISP_VER_BACK_PORCH         34  
    #define DISP_VER_FRONT_PORCH        10

/*********************************************************************
* Overview: Some basic colors definitions.
*********************************************************************/
#define BLACK               RGB565CONVERT(0,    0,      0)
#define BRIGHTBLUE          RGB565CONVERT(0,    0,      255)
#define BRIGHTGREEN         RGB565CONVERT(0,    255,    0)
#define BRIGHTCYAN          RGB565CONVERT(0,    255,    255)
#define BRIGHTRED           RGB565CONVERT(255,  0,      0)
#define BRIGHTMAGENTA       RGB565CONVERT(255,  0,      255)
#define BRIGHTYELLOW        RGB565CONVERT(255,  255,    0)
#define BLUE                RGB565CONVERT(0,    0,      128)
#define GREEN               RGB565CONVERT(0,    128,    0)
#define CYAN                RGB565CONVERT(0,    128,    128)
#define RED                 RGB565CONVERT(128,  0,      0)
#define MAGENTA             RGB565CONVERT(128,  0,      128)
#define BROWN               RGB565CONVERT(255,  128,    0)
#define LIGHTGRAY           RGB565CONVERT(128,  128,    128)
#define DARKGRAY            RGB565CONVERT(64,   64,     64)
#define LIGHTBLUE           RGB565CONVERT(128,  128,    255)
#define LIGHTGREEN          RGB565CONVERT(128,  255,    128)
#define LIGHTCYAN           RGB565CONVERT(128,  255,    255)
#define LIGHTRED            RGB565CONVERT(255,  128,    128)
#define LIGHTMAGENTA        RGB565CONVERT(255,  128,    255)
#define YELLOW              RGB565CONVERT(255,  255,    128)
#define WHITE               RGB565CONVERT(255,  255,    255)
                            
#define GRAY0               RGB565CONVERT(224,  224,    224)
#define GRAY1               RGB565CONVERT(192,  192,    192)   
#define GRAY2               RGB565CONVERT(160,  160,    160)   
#define GRAY3               RGB565CONVERT(128,  128,    128)
#define GRAY4               RGB565CONVERT(96,   96,     96)
#define GRAY5               RGB565CONVERT(64,   64,     64)
#define GRAY6               RGB565CONVERT(32,   32,     32)

// PB0 PB1 PB2 PB6 PB7
// RST nCS nRD nWR nRS
  // - LCD_CS -----------------------------------------------------------------
  #define CS_HIGH    {GPIOB->BSRRL = GPIO_BSRR_BS_1;}
  #define CS_LOW     {GPIOB->BSRRH = GPIO_BSRR_BS_1;}
  // - LCD_RS -----------------------------------------------------------------
  #define RS_HIGH    {GPIOB->BSRRL = GPIO_BSRR_BS_7;}
  #define RS_LOW     {GPIOB->BSRRH = GPIO_BSRR_BS_7;}
  // - LCD_WR -----------------------------------------------------------------
  #define WR_HIGH    {GPIOB->BSRRL = GPIO_BSRR_BS_6;}
  #define WR_LOW     {GPIOB->BSRRH = GPIO_BSRR_BS_6;}
  #define WR_STROBE  {WR_LOW; WR_HIGH;}
  // - LCD_RD -----------------------------------------------------------------
  #define RD_HIGH    {GPIOB->BSRRL = GPIO_BSRR_BS_2;}
  #define RD_LOW     {GPIOB->BSRRH = GPIO_BSRR_BS_2;}
  // - LCD_RST ----------------------------------------------------------------
  #define RST_HIGH   {GPIOB->BSRRL = GPIO_BSRR_BS_0;}
  #define RST_LOW    {GPIOB->BSRRH = GPIO_BSRR_BS_0;}
  
/*
// Section : SSD1963 Command --------------------------------------------------
// - HX83XX Register Names ----------------------------------------------------
#define COL_ADD_START_HI  0x02  // W/R -   SC[15:8] (8'b0000_0000)
#define COL_ADD_START_LO  0x03  // W/R -   SC[7:0] (8'b0000_0000)

#define COL_ADD_END_HI    0x04  // W/R -   EC[15:8] (8'b0000_0000)
#define COL_ADD_END_LO    0x05  // W/R -   EC[7:0] (8'b1110_1111)

#define ROW_ADD_START_HI  0x06  // W/R -   SP[15:8] (8'b0000_0000)
#define ROW_ADD_START_LO  0x07  // W/R -   SP[7:0] (8'b0000_00000)

#define ROW_ADD_END_HI    0x08  // W/R -   EP[15:8] (8'b0000_0001)
#define ROW_ADD_END_LO    0x09  // W/R -   EP[7:0] (8'b0011_1111)

//#define MEM_ACCESS        0x16  // W/R -   MY(0) MX(0) MV(0) ML(0) BGR(0) - - -
#define MEM_ACCESS        0x36
//#define SRAM_WRITE        0x22  // W/R SRAM Write
#define SRAM_WRITE        0x2C
*/
/*
#define Com_NOP                 0x00   // brief No opeation
#define Com_Reset               0x01   // brief Software reset
#define Com_GetPowerMode        0x0A   // brief Get power mode
#define Com_GetAddressMode      0x0B   // brief Get the frame memory t the display panel read order
#define Com_GetPixelFormat      0x0C   // brief Get the current pixel format
#define Com_GetDisplayModule    0x0D   // brief Get the current display format
#define Com_GetSignalMode       0x0E   // brief Get the display mode from peripharel
#define Com_EnterSleepMode      0x10   // brief Enter the sleep mode
#define Com_ExitSleepMode       0x11   // brief Turn on the panel
#define Com_EnterPartialMode    0x12   // brief Enter partial mode
#define Com_EnterNormalMode     0x13   // brief Enter normal mode
#define Com_ExitInvertMode      0x20   // brief Exit the invert mode
#define Com_EnterInvertMode     0x21

#define Com_SetGammaCurve       0x26

#define Com_SetDisplayOff       0x28
#define Com_SetDisplayOn        0x29

#define Com_SetColumnAddress    0x2A

#define Com_SetPageAddress      0x2B

#define Com_WriteMemory         0x2C

#define Com_ReadMomery          0x2E

#define Com_SetPartialArea      0x30

#define Com_SetScrollArea       0x33

#define Com_SetTearOff          0x34
#define Com_SetTearOn           0x35

#define Com_SetAddressMode      0x36

#define Com_SetScrollStart      0x37

#define Com_ExtiIdleMode        0x38
#define Com_EnterIdleMode       0x39

#define Com_SetPixelFormat      0x3A

#define Com_WriteMemoryContinue 0x3C

#define Com_ReadMemoryContinue  0x3E

#define Com_SetTearScanLine     0x44
#define Com_GetTearScanLine     0x45

#define Com_GetDDB              0xA1

#define Com_SetLCDMode          0xB0
#define Com_GetLCDMode          0xB1

#define Com_SetHoriPeriod       0xB4
#define Com_GetHoriPeriod       0xB5

#define Com_SetVertPeriod       0xB6
#define Com_GetVertPeriod       0xB7

#define Com_SetGPIOConf         0xB8
#define Com_GetGPIOConf         0xB9

#define Com_SetGPIOValue        0xBA

#define Com_GetGPIOStatus       0xBB

#define Com_SetPostProcessor    0xBC
#define Com_GetPostProcessor    0xBD

#define Com_SetPWMConf          0xBE
#define Com_GetPWMConf          0xBF

#define Com_SetLCDGenerator0    0xC0
#define Com_GetLCDGenerator0    0xC1

#define Com_SetLCDGenerator1    0xC2
#define Com_GetLCDGenerator1    0xC3

#define Com_SetLCDGenerator2    0xC4
#define Com_GetLCDGenerator2    0xC5

#define Com_SetLCDGenerator3    0xC6
#define Com_GetLCDGenerator3    0xC7

#define Com_SetDynamicBackLightConf      0xD0
#define Com_GetDynamicBackLightConf      0xD1

#define Com_SetDynamicBackLightThreshold 0xD4
#define Com_GetDynamicBackLightThreshold 0xD5

#define Com_SetPLLStart         0xE0

#define Com_SetPLLConfig        0xE2
#define Com_GetPLLConfig        0xE3

#define Com_GetPLLStatus        0xE4

#define Com_SetDeepSleepMode    0xE5

#define Com_GetPixelClock       0xE7
#define Com_SetPixelClock       0xE6

#define Com_SetPixelInterface   0xF0
#define Com_GetPixelInterface   0xF1
*/
// End : SSD1963 Command ------------------------------------------------------

#define swap(a, b) { int16_t t = a; a = b; b = t; }

class SSD1963 {
  public:
    SSD1963();
    void init(void);
    void begin(void);
    void reset(void);
    
    //void drawPixel(uint16_t x, uint16_t y, uint16_t color);
    void fillScreen(uint16_t color);
    //void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
    //void drawVerticalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color);
    //void drawHorizontalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color);
    //void drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    //void fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    //void drawRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
    //void fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);
    //void drawRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
    //void fillRoundRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t radius, uint16_t color);
    //void drawCircle(uint16_t x0, uint16_t y0, uint16_t r,   uint16_t color);
    //void fillCircle(uint16_t x0, uint16_t y0, uint16_t r,   uint16_t color);
    
    //void setCursor(uint16_t x, uint16_t y);
    //void setTextColor(uint16_t c);
    //void setTextColor(uint16_t c, uint16_t bg);
    //void setTextSize(uint8_t s);
    //void setTextWrap(bool w);
    //void drawChar(uint16_t x, uint16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
    //void drawBitmap(uint16_t x, uint16_t y, const uint8_t *bitmap, uint16_t w, uint16_t h, uint16_t color);
    
    //virtual size_t write(uint8_t);
    
    uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
    //uint8_t readID(void);

    //void setRotation(uint8_t x);
    //uint8_t getRotation();
    // These methods are public in order for BMP examples to work:
    //void setAddrWindow(int x1, int y1, int x2, int y2);
    //void pushColors(uint16_t *data, uint8_t len, bool first);
    
    // - Low Level ------------------------------------------------------------
    void writeData(uint16_t data);
    void writeCommand(uint16_t cmd);
    uint16_t readData(void);
    void writeRegister(uint16_t addr, uint16_t data);

    //void writeData8(uint8_t d);
    //void writeData16(uint16_t d);
    //void writeCommand(uint8_t c);
    //uint8_t readData8(void);
    //uint16_t readData16(void);
    //void writeRegister(uint8_t addr, uint8_t data);
    //void writeRegisterPair(uint8_t aH, uint8_t aL, uint16_t d);
    
    //uint16_t width();
    //uint16_t height();
    
    static const uint16_t TFTWIDTH  = 800;
    static const uint16_t TFTHEIGHT = 480;
    
    //void writeData_unsafe(uint16_t d);
    //void setWriteDir(void);
    //void setReadDir(void);
    
    //void write8(uint8_t d);
    
  private:
    //void init(void);
    //void flood(uint16_t color, uint32_t len);
    
    //void drawCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t color);
    //void fillCircleHelper(uint16_t x0, uint16_t y0, uint16_t r, uint8_t corner, uint16_t delta, uint16_t color);
    
    //uint8_t read8(void);

  protected:
    //uint16_t _width, _height;
    //uint8_t  textsize;
    //uint16_t cursor_x, cursor_y;
    //uint16_t textcolor;
    //uint16_t textbgcolor;
    //uint8_t  rotation;
    //uint8_t  driver;
    //bool wrap;
};

#endif