/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/
/**
*
* @file     lcd.c
* @brief    The LCD driver for the ST7637.
* @author   FL
* @date     07/2007
*
**/
/******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "lcd.h"
#include "circle.h"

/// @cond Internal

/* Private define ------------------------------------------------------------*/
#define V9_MADCTRVAL                0x90     /*!< Left orientation value.     */
#define V12_MADCTRVAL               0x30     /*!< Up orientation value.       */
#define V3_MADCTRVAL                0x50     /*!< Right orientation value.    */
#define V6_MADCTRVAL                0xF0     /*!< Bottom orientation value.   */
#define BACKLIGHT_DIVIDER           500      /*!< LCD handler step.           */

/* Private variables ---------------------------------------------------------*/

// vars for timer dedicated for lcd backlight
static TIM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;
static TIM_OCInitTypeDef            TIM_OCInitStructure;
static int                          HandlerDivider             = 0;

int                                 Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;

/* External variable ---------------------------------------------------------*/
extern GPIO_InitTypeDef             GPIO_InitStructure;
extern u16                          CCR_BackLight_Tab[5];
extern int                          CurrentRotateScreen;
extern Rotate_H12_V_Match_TypeDef   CurrentScreenOrientation;

/*! ASCII Table. Each character is 7 column (7dots large) on two pages (16dots high)
    7 column character: Two 8 bit data to display one column*/
static const u8 AsciiDotsTable[95 * 14 ] = {
  /* ASCII 32  */  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 33  */  0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 34  */  0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00,
  /* ASCII 35  */  0x00,0x00,0x35,0x00,0x0f,0x80,0x35,0x60,0x0f,0x80,0x05,0x60,0x00,0x00,
  /* ASCII 36  */  0x00,0x00,0x0d,0x80,0x0a,0x40,0x3a,0x60,0x06,0x40,0x00,0x00,0x00,0x00,
  /* ASCII 37  */  0x00,0x00,0x02,0x40,0x02,0xa0,0x0a,0x40,0x15,0x00,0x09,0x00,0x00,0x00,
  /* ASCII 38  */  0x00,0x00,0x0c,0x00,0x13,0x00,0x14,0x80,0x08,0x80,0x14,0x00,0x00,0x00,
  /* ASCII 39  */  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 40  */  0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x60,0x60,0x00,0x00,0x00,0x00,
  /* ASCII 41  */  0x00,0x00,0x00,0x00,0x60,0x60,0x1f,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 42  */  0x00,0x00,0x00,0x40,0x03,0x40,0x00,0xe0,0x03,0x40,0x00,0x40,0x00,0x00,
  /* ASCII 43  */  0x02,0x00,0x02,0x00,0x02,0x00,0x1f,0xc0,0x02,0x00,0x02,0x00,0x02,0x00,
  /* ASCII 44  */  0x00,0x00,0x00,0x00,0x60,0x00,0x38,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 45  */  0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
  /* ASCII 46  */  0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 47  */  0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x00,
  /* ASCII 48  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00,
  /* ASCII 49  */  0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00,
  /* ASCII 50  */  0x00,0x00,0x18,0x40,0x14,0x20,0x12,0x20,0x11,0x20,0x18,0xc0,0x00,0x00,
  /* ASCII 51  */  0x00,0x00,0x08,0x40,0x10,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,
  /* ASCII 52  */  0x00,0x00,0x06,0x00,0x05,0x00,0x04,0xc0,0x14,0x20,0x1f,0xe0,0x14,0x00,
  /* ASCII 53  */  0x00,0x00,0x08,0x00,0x11,0xe0,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00,
  /* ASCII 54  */  0x00,0x00,0x0f,0x80,0x11,0x40,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00,
  /* ASCII 55  */  0x00,0x00,0x00,0x60,0x00,0x20,0x18,0x20,0x07,0x20,0x00,0xe0,0x00,0x00,
  /* ASCII 56  */  0x00,0x00,0x0e,0xc0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,
  /* ASCII 57  */  0x00,0x00,0x11,0xc0,0x12,0x20,0x12,0x20,0x0a,0x20,0x07,0xc0,0x00,0x00,
  /* ASCII 58  */  0x00,0x00,0x00,0x00,0x19,0x80,0x19,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 59  */  0x00,0x00,0x00,0x00,0x30,0x00,0x19,0x80,0x09,0x80,0x00,0x00,0x00,0x00,
  /* ASCII 60  */  0x02,0x00,0x05,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x10,0x40,0x00,0x00,
  /* ASCII 61  */  0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x00,0x00,
  /* ASCII 62  */  0x10,0x40,0x10,0x40,0x08,0x80,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
  /* ASCII 63  */  0x00,0x00,0x00,0x00,0x10,0x80,0x14,0x40,0x02,0x40,0x01,0x80,0x00,0x00,
  /* ASCII 64  */  0x00,0x00,0x1f,0xe0,0x20,0x10,0x23,0x10,0x24,0x90,0x17,0xe0,0x00,0x00,
  /* ASCII 65  */  0x10,0x00,0x1c,0x00,0x17,0xa0,0x04,0x60,0x17,0x80,0x1c,0x00,0x10,0x00,
  /* ASCII 66  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,
  /* ASCII 67  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x08,0x60,0x00,0x00,
  /* ASCII 68  */  0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x08,0x40,0x07,0x80,0x00,0x00,
  /* ASCII 69  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x13,0xa0,0x10,0x20,0x18,0x60,0x00,0x00,
  /* ASCII 70  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x11,0x20,0x03,0xa0,0x00,0x20,0x00,0x60,
  /* ASCII 71  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x12,0x20,0x0e,0x60,0x02,0x00,
  /* ASCII 72  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x01,0x00,0x11,0x20,0x1f,0xe0,0x10,0x20,
  /* ASCII 73  */  0x00,0x00,0x10,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x00,0x00,
  /* ASCII 74  */  0x00,0x00,0x0e,0x00,0x10,0x20,0x10,0x20,0x0f,0xe0,0x00,0x20,0x00,0x00,
  /* ASCII 75  */  0x10,0x20,0x1f,0xe0,0x12,0x20,0x03,0x00,0x04,0xa0,0x18,0x60,0x10,0x20,
  /* ASCII 76  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x00,0x1c,0x00,0x00,0x00,
  /* ASCII 77  */  0x10,0x20,0x1f,0xe0,0x10,0xe0,0x03,0x00,0x10,0xe0,0x1f,0xe0,0x10,0x20,
  /* ASCII 78  */  0x10,0x20,0x1f,0xe0,0x10,0xe0,0x07,0x00,0x18,0x20,0x1f,0xe0,0x00,0x20,
  /* ASCII 79  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00,
  /* ASCII 80  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x01,0xc0,0x00,0x00,
  /* ASCII 81  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x30,0x20,0x30,0x20,0x2f,0xc0,0x00,0x00,
  /* ASCII 82  */  0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x06,0x20,0x09,0xc0,0x10,0x00,
  /* ASCII 83  */  0x00,0x00,0x18,0xc0,0x09,0x20,0x11,0x20,0x11,0x40,0x0e,0x60,0x00,0x00,
  /* ASCII 84  */  0x00,0x60,0x00,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x00,0x20,0x00,0x60,
  /* ASCII 85  */  0x00,0x20,0x0f,0xe0,0x10,0x20,0x10,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20,
  /* ASCII 86  */  0x00,0x20,0x00,0xe0,0x07,0x20,0x18,0x00,0x07,0x20,0x00,0xe0,0x00,0x20,
  /* ASCII 87  */  0x00,0x20,0x0f,0xe0,0x10,0x20,0x0f,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20,
  /* ASCII 88  */  0x10,0x20,0x18,0x60,0x04,0x80,0x03,0x00,0x04,0x80,0x18,0x60,0x10,0x20,
  /* ASCII 89  */  0x00,0x20,0x00,0x60,0x11,0xa0,0x1e,0x00,0x11,0xa0,0x00,0x60,0x00,0x20,
  /* ASCII 90  */  0x00,0x00,0x18,0x60,0x14,0x20,0x13,0x20,0x10,0xa0,0x18,0x60,0x00,0x00,
  /* ASCII 91  */  0x00,0x00,0x00,0x00,0x7f,0xe0,0x40,0x20,0x40,0x20,0x00,0x00,0x00,0x00,
  /* ASCII 92  */  0x00,0x00,0x00,0x20,0x01,0xc0,0x06,0x00,0x38,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 93  */  0x00,0x00,0x00,0x00,0x40,0x20,0x40,0x20,0x7f,0xe0,0x00,0x00,0x00,0x00,
  /* ASCII 94  */  0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x60,0x00,0x80,0x01,0x00,0x00,0x00,
  /* ASCII 95  */  0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
  /* ASCII 96  */  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,
  /* ASCII 97  */  0x00,0x00,0x0d,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x1f,0x00,0x10,0x00,
  /* ASCII 98  */  0x10,0x20,0x1f,0xe0,0x11,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,
  /* ASCII 99  */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x09,0x80,0x00,0x00,
  /* ASCII 100 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x11,0x20,0x1f,0xe0,0x10,0x00,
  /* ASCII 101 */  0x00,0x00,0x0f,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x13,0x00,0x00,0x00,
  /* ASCII 102 */  0x00,0x00,0x10,0x80,0x1f,0xc0,0x10,0xa0,0x10,0xa0,0x10,0xa0,0x00,0x00,
  /* ASCII 103 */  0x00,0x00,0x0f,0x00,0x50,0x80,0x50,0x80,0x51,0x00,0x3f,0x80,0x00,0x80,
  /* ASCII 104 */  0x10,0x20,0x1f,0xe0,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00,
  /* ASCII 105 */  0x00,0x00,0x10,0x80,0x10,0x80,0x1f,0xa0,0x10,0x00,0x10,0x00,0x00,0x00,
  /* ASCII 106 */  0x00,0x00,0x40,0x80,0x40,0x80,0x40,0xa0,0x3f,0x80,0x00,0x00,0x00,0x00,
  /* ASCII 107 */  0x10,0x20,0x1f,0xe0,0x02,0x00,0x16,0x80,0x19,0x80,0x10,0x80,0x00,0x00,
  /* ASCII 108 */  0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00,
  /* ASCII 109 */  0x10,0x80,0x1f,0x80,0x10,0x80,0x1f,0x00,0x10,0x80,0x1f,0x00,0x10,0x00,
  /* ASCII 110 */  0x10,0x80,0x1f,0x80,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00,
  /* ASCII 111 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,
  /* ASCII 112 */  0x40,0x80,0x7f,0x80,0x51,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,
  /* ASCII 113 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x51,0x00,0x7f,0x80,0x40,0x80,
  /* ASCII 114 */  0x00,0x00,0x10,0x80,0x1f,0x80,0x11,0x00,0x10,0x80,0x10,0x80,0x00,0x00,
  /* ASCII 115 */  0x00,0x00,0x19,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x0d,0x80,0x00,0x00,
  /* ASCII 116 */  0x00,0x00,0x00,0x80,0x0f,0xc0,0x10,0x80,0x10,0x80,0x10,0x80,0x08,0x00,
  /* ASCII 117 */  0x00,0x80,0x0f,0x80,0x10,0x00,0x10,0x00,0x08,0x80,0x1f,0x80,0x10,0x00,
  /* ASCII 118 */  0x00,0x80,0x03,0x80,0x0c,0x80,0x10,0x00,0x0c,0x80,0x03,0x80,0x00,0x80,
  /* ASCII 119 */  0x00,0x80,0x0f,0x80,0x10,0x80,0x0e,0x00,0x10,0x80,0x0f,0x80,0x00,0x80,
  /* ASCII 120 */  0x10,0x80,0x19,0x80,0x06,0x00,0x06,0x00,0x19,0x80,0x10,0x80,0x00,0x00,
  /* ASCII 121 */  0x00,0x80,0x41,0x80,0x46,0x80,0x78,0x00,0x4c,0x80,0x03,0x80,0x00,0x80,
  /* ASCII 122 */  0x00,0x00,0x19,0x80,0x14,0x80,0x12,0x80,0x11,0x80,0x18,0x80,0x00,0x00,
  /* ASCII 123 */  0x00,0x00,0x00,0x00,0x04,0x00,0x3b,0xc0,0x40,0x20,0x00,0x00,0x00,0x00,
  /* ASCII 124 */  0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 125 */  0x00,0x00,0x00,0x00,0x40,0x20,0x3b,0xc0,0x04,0x00,0x00,0x00,0x00,0x00,
  /* ASCII 126 */  0x00,0x00,0x04,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x00,0x00};

int OrientationOffsetX [] = { 0 /* V12*/,0 /* V3*/,+4 /* V6*/,+4 /* V9*/ };
int OrientationOffsetY [] = { +4 /* V12*/,0 /* V3*/,0 /* V6*/,+4 /* V9*/ };

/* Private function prototypes -----------------------------------------------*/
static void LCD_7637_Controller( void );
static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8 *bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff );
static void LCD_BackLightChange( void );
static void LCD_BackLightConfig( void );
static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal );

/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
*
*                                LCD_DataLinesConfig
*
*******************************************************************************/
/**
*  Configure data lines D0~D7 in Input Floating mode for read from LCD or in
*  Output Push-Pull mode for write on LCD
*
*  @param[in]  Mode Specifies the configuration mode for data lines D0~D7.
*                @n @c Input: configure in Input Floating mode
*                @n @c Output: configure in Output Push-Pul mode
*
**/
/******************************************************************************/
static void LCD_DataLinesConfig( DataConfigMode_TypeDef Mode )
   {
   GPIO_InitTypeDef             GPIO_InitStructure;
	   
   GPIO_InitStructure.GPIO_Pin   =  LCD_DATA_PINS;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   if( Mode == Input )
      {
      /* Configure D0~D7 lines as Input */
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      }
   else
      {
      /* Configure D0~D7 lines in Output Push-Pull mode */
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      }

   GPIO_Init( GPIOx_D_LCD, &GPIO_InitStructure );
   }

/*******************************************************************************
*
*                                LCD_DataLinesWrite
*
*******************************************************************************/
/**
*  Write a value on D0~D7
*
*  @param[in]  GPIOx    GPIO port to write on.
*  @param[in]  PortVal  The value to write. Only the lowest 8 bits are taken into
*                       account.
*
**/
/******************************************************************************/
static void LCD_DataLinesWrite( GPIO_TypeDef* GPIOx, u32 PortVal )
   {
   // Write only the lowest 8 bits!
   GPIOx->ODR = ( (GPIOx->ODR) & 0xFF00 ) | (u8)PortVal;
   }

/*******************************************************************************
*
*                                LCD_CtrlLinesConfig
*
*******************************************************************************/
/**
*  Configure control lines in Output Push-Pull mode.
*
**/
/******************************************************************************/
static void LCD_CtrlLinesConfig( void )
   {
   GPIO_InitTypeDef             GPIO_InitStructure;
	   
   GPIO_InitStructure.GPIO_Pin   =  LCD_CTRL_PINS;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;

   GPIO_Init( GPIOx_CTRL_LCD, &GPIO_InitStructure );

   GPIO_InitStructure.GPIO_Pin   =  CtrlPin_CS;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;

   GPIO_Init( GPIOx_CS_LCD, &GPIO_InitStructure );

   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS,  Bit_SET );    /* RS = 1   */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD,  Bit_SET );    /* RD = 1   */
   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS,  Bit_SET );    /* CS = 1   */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR,  Bit_SET );    /* WR = 1   */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */
   }

/*******************************************************************************
*
*                                LCD_CtrlLinesWrite
*
*******************************************************************************/
/**
*  Set or reset control lines.
*
*  @param[in]  GPIOx       Where x can be 0, 1 or 2 to select the GPIO peripheral.
*  @param[in]  CtrlPins    The Control line.
*  @param[in]  BitVal
*
**/
/******************************************************************************/
static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal )
   {
   /* Set or Reset the control line */
   GPIO_WriteBit( GPIOx, CtrlPins, BitVal );
   }

/*******************************************************************************
*
*                                LCD_CheckLCDStatus
*
*******************************************************************************/
/**
*  Check whether LCD LCD is busy or not.
*
**/
/******************************************************************************/
static void LCD_CheckLCDStatus( void )
   {
   unsigned char ID1;
   unsigned char ID2;
   unsigned char ID3;

   LCD_SendLCDCmd( ST7637_RDDID );

   /* Configure Data lines as Input */
   LCD_DataLinesConfig (Input );

   /* Start the LCD send data sequence */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET );     /* RS = 0 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */
   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );     /* CS = 0 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );       /* WR = 1 */

   /* Read data to the LCD */
   GPIO_ReadInputData( GPIOx_D_LCD );
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */

   ID1 = GPIO_ReadInputData( GPIOx_D_LCD );

   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */

   ID2 = GPIO_ReadInputData( GPIOx_D_LCD );

   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */

   ID3 = GPIO_ReadInputData( GPIOx_D_LCD );

   LCD_DataLinesConfig( Output );
   }

/*******************************************************************************
*
*                                LCD_DrawChar
*
*******************************************************************************/
/**
*  Draw a character on the LCD screen.
*
*  @param[in]  x           The line where to display the character shape.
*  @param[in]  y           The column start address.
*  @param[in]  width       The number of columns (dots) in a character width.
*  @param[in]  bmp         The character (monochrome) bitmap. A pointer of the dot matrix data.
*  @param[in]  textColor   The character color.
*  @param[in]  bGndColor   The character background color.
*  @param[in]  charMagniCoeff The character magnifying coefficient.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8* bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff )
   {
   int i;
   int j;
   int k1;
   int k2;

   // Select the area for LCD output.
   LCD_SetRect_For_Cmd( x, y, 7 * charMagniCoeff, 14 * charMagniCoeff );

   // Select LCD output mode.
   LCD_SendLCDCmd( ST7637_RAMWR );

   for( i = 0; i < 7; i++ )
      {
      for( k1 = 0; k1 < charMagniCoeff; k1++ )
         {
         for( j = 0x80; j; j >>= 1 ) // 8
            {
            for( k2 = 0; k2 < charMagniCoeff; k2++ )
               {
               LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor & 255 ) : ( bGndColor &  255 ) );
               LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor >> 8  ) : ( bGndColor >> 8 ) );
               }
            }

         for( j = 0x80; j > 2; j >>= 1 )  // 8
            {
            for( k2 = 0; k2 < charMagniCoeff; k2++ )
               {
               LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor & 255 ) : ( bGndColor & 255 ) );
               LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor >> 8  ) : ( bGndColor >> 8 ) );
               }
            }
         }
      }
   }

/*******************************************************************************
*
*                                LCD_DisplayRotate
*
*******************************************************************************/
/**
*  Configure the LCD controller for a given orientation.
*
*  @param[in]  H12 The new screen orientation.
*
**/
/******************************************************************************/
static void LCD_DisplayRotate( Rotate_H12_V_Match_TypeDef H12 )
   {
   // Memory Access Control 0x36
   LCD_SendLCDCmd( ST7637_MADCTR );

   switch( H12 )
      {
      case V3  :
         LCD_SendLCDData( V3_MADCTRVAL );
         break;

      case V6  :
         LCD_SendLCDData( V6_MADCTRVAL );
         break;

      case V9  :
         LCD_SendLCDData( V9_MADCTRVAL );
         break;

      case V12 :
      default  :
         LCD_SendLCDData( V12_MADCTRVAL );
         break;
      }
   }

/*******************************************************************************
*
*                                LCD_7637_Controller
*
*******************************************************************************/
/**
*  Initialization of the controller registers.
*
*  @note See ST7637.PDF for more information.
*
**/
/******************************************************************************/
static void LCD_7637_Controller( void )
   {
   extern void starting_delay ( long unsigned  );

   /** Apply hardware reset **/
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */
   starting_delay( 0x500 );

   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */
   starting_delay( 0x500 );

   //default mode is output
   LCD_DataLinesConfig( Output );

   LCD_CheckLCDStatus();

   LCD_SendLCDCmd( ST7637_SWRESET );

   //-----------disable autoread + Manual read once ----------------------------
   LCD_SendLCDCmd( ST7637_AUTOLOADSET );  // Auto Load Set 0xD7
   LCD_SendLCDData( 0xBF );               // Auto Load Disable

   LCD_SendLCDCmd( ST7637_EPCTIN );       // EE Read/write mode 0xE0
   LCD_SendLCDData( 0x00 );               // Set read mode

   LCD_SendLCDCmd( ST7637_EPMRD );        // Read active 0xE3
   LCD_SendLCDCmd( ST7637_EPCTOUT );      // Cancel control 0xE1

   //---------------------------------- Sleep OUT ------------------------------
   LCD_SendLCDCmd( ST7637_DISPOFF );      // display off 0x28
   LCD_SendLCDCmd( ST7637_SLPOUT );       // Sleep Out 0x11

   //--------------------------------Vop setting--------------------------------
   LCD_SendLCDCmd( ST7637_VOPSET );       // Set Vop by initial Module 0xC0
   LCD_SendLCDData( 0xFB );               // Vop = 13.64
   LCD_SendLCDData( 0x00 );               // base on Module

   //----------------------------Set Register-----------------------------------
   LCD_SendLCDCmd( ST7637_BIASSEL );      // Bias select 0xC3
   LCD_SendLCDData( 0x00 );               // 1/12 Bias, base on Module

   LCD_SendLCDCmd( ST7637_BSTBMPXSEL );   // Setting Booster times 0xC4
   LCD_SendLCDData( 0x05 );               // Booster X 8

   LCD_SendLCDCmd( ST7637_BSTEFFSEL );    // Booster eff 0xC5
   LCD_SendLCDData( 0x11 );               // BE = 0x01 (Level 2)

   LCD_SendLCDCmd( ST7637_VGSORCSEL );    // Vg with booster x2 control 0xcb
   LCD_SendLCDData( 0x01 );               // Vg from Vdd2

   LCD_SendLCDCmd( ST7637_ID1SET );       // ID1 = 00 0xcc
   LCD_SendLCDData( 0x00 );               //

   LCD_SendLCDCmd( ST7637_ID3SET );       // ID3 = 00 0xce
   LCD_SendLCDData( 0x00 );               //

   LCD_SendLCDCmd( 0xB7 );                // Glass direction
   LCD_SendLCDData( 0xC0 );               //

   LCD_SendLCDCmd( ST7637_ANASET );       // Analog circuit setting 0xd0
   LCD_SendLCDData( 0x1D );               //

   LCD_SendLCDCmd( 0xB4 );                // PTL mode set
   LCD_SendLCDData( 0x18 );               // power normal mode
   LCD_SendLCDCmd( ST7637_INVOFF );       // Display Inversion OFF 0x20

   LCD_SendLCDCmd( 0x2A );                // column range
   LCD_SendLCDData( 0x04 );               //
   LCD_SendLCDData( 0x83 );               //

   LCD_SendLCDCmd( 0x2B );                // raw range
   LCD_SendLCDData( 0x04 );               //
   LCD_SendLCDData( 0x83 );               //


   LCD_SendLCDCmd( ST7637_COLMOD );       // Color mode = 65k 0x3A
   LCD_SendLCDData( 0x05 );               //

   LCD_SendLCDCmd( ST7637_MADCTR );       // Memory Access Control 0x36
   LCD_SendLCDData( V9_MADCTRVAL );

   LCD_SendLCDCmd( ST7637_DUTYSET );      // Duty = 132 duty 0xb0
   LCD_SendLCDData( 0x7F );

   LCD_SendLCDCmd( 0x29 );                // Display ON
   LCD_SendLCDCmd( 0xF9 );                // Gamma
   LCD_SendLCDData( 0x00 );               //
   LCD_SendLCDData( 0x03 );               //
   LCD_SendLCDData( 0x05 );               //
   LCD_SendLCDData( 0x07 );               //
   LCD_SendLCDData( 0x09 );               //
   LCD_SendLCDData( 0x0B );               //
   LCD_SendLCDData( 0x0D );               //
   LCD_SendLCDData( 0x0F );               //
   LCD_SendLCDData( 0x11 );               //
   LCD_SendLCDData( 0x13 );               //
   LCD_SendLCDData( 0x15 );               //
   LCD_SendLCDData( 0x17 );               //
   LCD_SendLCDData( 0x19 );               //
   LCD_SendLCDData( 0x1B );               //
   LCD_SendLCDData( 0x1D );               //
   LCD_SendLCDData( 0x1F );               //
   }

/*******************************************************************************
*
*                                LCD_BackLightConfig
*
*******************************************************************************/
/**
*  Setting of the PWM that drives the backlight intensity.
*
**/
/******************************************************************************/
static void LCD_BackLightConfig( void )
   {
   GPIO_InitTypeDef GPIO_InitStructure;

   /* Enable GPIOB clock  */
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );

   /* GPIOB Configuration:TIM4 2 in Output */
   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_Init( GPIOB, &GPIO_InitStructure );

   /* TIM4 Configuration -----------------------------------------------------*/
   /* TIM4CLK = 12 MHz, Prescaler = 0x0 */

   /* Enable TIM4 clock */
   RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE );

   TIM_DeInit( TIM4 );
   TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );
   TIM_OCStructInit( &TIM_OCInitStructure );

   /* Time base configuration */
   TIM_TimeBaseStructure.TIM_Period          = 0xFFFF;
   TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;
   TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;
   TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;

   TIM_TimeBaseInit( TIM4, &TIM_TimeBaseStructure );

   /* Output Compare Toggle Mode configuration: Channel2 */
   TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_PWM1;
   TIM_OCInitStructure.TIM_Channel  = TIM_Channel_2;
   TIM_OCInitStructure.TIM_Pulse    = Current_CCR_BackLightStart;

   TIM_OCInit( TIM4, &TIM_OCInitStructure );
   TIM_OC4PreloadConfig( TIM4, TIM_OCPreload_Disable );

   TIM_ARRPreloadConfig( TIM4, ENABLE );

   /* Enable TIM4 IT */
   TIM_ITConfig( TIM4, TIM_IT_CC2, ENABLE );

   // Go !!!
   TIM_Cmd( TIM4, ENABLE );
   }

/*******************************************************************************
*
*                                LCD_BackLightChange
*
*******************************************************************************/
/**
*  Modify the PWM rate.
*
**/
/******************************************************************************/
static void LCD_BackLightChange( void )
   {
   /* Output Compare Toggle Mode configuration: Channel2 */
   TIM_OCInitStructure.TIM_Pulse = Current_CCR_BackLightStart;

   TIM_OCInit( TIM4, &TIM_OCInitStructure );
   }

/* Public functions for CircleOS ---------------------------------------------*/

/*******************************************************************************
*
*                                LCD_Init
*
*******************************************************************************/
/**
*
*  Initialize LCD. Called at CircleOS startup.
*
*  @attention  This function must <b>NOT</b> be called by the user.
*
**/
/******************************************************************************/
void LCD_Init( void )
   {
   LCD_SetBackLight( UTIL_ReadBackupRegister( BKP_BKLIGHT ) );

   /* Do some gpio configs*/
   GPIO_InitTypeDef GPIO_InitStructure;

   /* Enable GPIO clock for LCD */
   RCC_APB2PeriphClockCmd( GPIO_LCD_CTRL_PERIPH, ENABLE );
   RCC_APB2PeriphClockCmd( GPIO_LCD_D_PERIPH, ENABLE );
   RCC_APB2PeriphClockCmd( GPIO_LCD_CS_PERIPH, ENABLE );

   /* Enable GPIOC clock */
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );

   /* Init BackLight*/
   LCD_BackLightConfig();

   /* Configure control lines signals as output mode */
   LCD_CtrlLinesConfig();

   /* LCD LCD Init */
   LCD_7637_Controller();
   }

/*******************************************************************************
*
*                                LCD_Handler
*
*******************************************************************************/
/**
*
*  Called by the CircleOS scheduler to manage LCD tasks.
*
*  @attention  This function must <b>NOT</b> be called by the user.
*
**/
/******************************************************************************/
void LCD_Handler( void )
   {
   if( ++HandlerDivider % BACKLIGHT_DIVIDER )
      {
      return;
      }

   LCD_BackLightChange();
   }


/// @endcond

/* Public functions ----------------------------------------------------------*/

/*******************************************************************************
*
*                                LCD_SendLCDCmd
*
*******************************************************************************/
/**
*
*  Send on command byte to the LCD.
*
*  @param[in]  Cmd   An unsigned char containing the user command to send to the LCD.
*
**/
/******************************************************************************/
void LCD_SendLCDCmd( u8 Cmd )
   {
   /* Start the LCD send data sequence */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET );     /* RS = 0 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */
   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );     /* CS = 0 */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET );     /* WR = 0 */

   /* Write data to the LCD */
   LCD_DataLinesWrite( GPIOx_D_LCD, (u32)Cmd );
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );       /* WR = 1 */
   }

/*******************************************************************************
*
*                                LCD_SendLCDData
*
*******************************************************************************/
/**
*
*  Send one data byte to the LCD.
*
*  @param[in]  Data  An unsigned character containing the data to send to the LCD.
*  @pre        An LCD_SendLCDCmd was done with a command waiting for data.
*
*
**/
/******************************************************************************/
void LCD_SendLCDData( u8 Data )
   {
   /* Configure Data lines as Output */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_SET );
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );
   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET );

   /* Write data to the LCD */
   LCD_DataLinesWrite( GPIOx_D_LCD,(u32)Data );
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );
   }

/***********************************************************************************
*
*                                LCD_ReadLCDData
*
************************************************************************************/
/**
*
*  Read one data byte from the LCD.
*
*  @return     An unsigned 32 bit word containing the data returned by a LCD command.
*  @pre        An LCD_SendLCDCmd was done with a command returning data.
*
**/
/********************************************************************************/
u32 LCD_ReadLCDData( void )
   {
   u32 LCDData = 0;

   /* Configure Data lines as Input */
   LCD_DataLinesConfig(Input);

   /* Start the LCD send data sequence */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );         /* RS = 1 */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );         /* WR = 1 */
   LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET );       /* CS = 0 */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );       /* RD = 0 */

   /* Read data from the LCD */
   LCDData = (GPIO_ReadInputData( GPIOx_D_LCD ) & LCD_DATA_PINS );

   LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET );          /* RD = 1 */

   /* Read the LCD returned data */
   LCD_DataLinesConfig( Output );

   return LCDData;
   }

/*******************************************************************************
*
*                                LCD_FillRect
*
*******************************************************************************/
/**
*
*  Fill a rectangle with a provided color.
*
*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.
*  @param[in]  y        The vertical coordinate of the rectangle low left corner.
*  @param[in]  width    The rectangle width in pixels.
*  @param[in]  height   The rectangle height in pixels.
*  @param[in]  color    The RGB color to fill the rectangle with.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_FillRect( u16 x, u16 y, u16 width, u16 height, u16 color )
   {
   u8 Line;
   u8 Column;

   /* Select LCD screen area. */
   LCD_SetRect_For_Cmd( x, y, width, height );

   /* Send LCD RAM write command. */
   LCD_SendLCDCmd( ST7637_RAMWR );

   /* Fill selected LCD screen area with provided color. */
   for( Line = 0; Line < width; Line++ )
      {
      for( Column = 0; Column < height; Column++ )
         {
         LCD_SendLCDData( color & 0xff );
         LCD_SendLCDData( ( color >> 8 ) & 0xff );
         }
      }

   #ifdef TESTLCD
   /* Configure Data lines as Input */
   LCD_DataLinesConfig( Input );

   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */
   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */

   /* Start the LCD send data sequence */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_RESET );     /* RS = 0   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */

   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_RESET );     /* RS = 0   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */

   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );       /* WR = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_RESET );     /* WR = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );       /* WR = 1   */

   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );     /* RD = 0   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */

   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );     /* RD = 0   */
   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */

   /* Configure Data lines as Input */
   LCD_DataLinesConfig( Output );

   LCD_DataLinesWrite( GPIOx_D_LCD, ~0 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 0 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~1 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 1 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~2 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 2 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~4 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 4 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~8 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 8 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x10 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 0x10 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x20 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 0x20 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x40 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 0x40 );
   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x80 );
   LCD_DataLinesWrite( GPIOx_D_LCD, 0x80 );

   LCD_DataLinesConfig( Input );

   #endif
   }

/*******************************************************************************
*
*                                LCD_DrawRect
*
*******************************************************************************/
/**
*
*  Draw a rectangle with a provided color.
*
*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.
*  @param[in]  y        The vertical coordinate of the rectangle low left corner.
*  @param[in]  width    The rectangle width in pixels.
*  @param[in]  height   The rectangle height in pixels.
*  @param[in]  color    The RGB color to draw the rectangle with.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_DrawRect( u16 x, u16 y, u16 width, u16 height, u16 color )
   {
   // Draw horizontal sides.
   LCD_FillRect( x, y,              width, 1, color );
   LCD_FillRect( x, y + height - 1, width, 1, color );

   // Draw vertical sides.
   LCD_FillRect( x,              y, 1, height, color );
   LCD_FillRect( x + width - 1,  y, 1, height, color );
   }

/*******************************************************************************
*
*                                LCD_DrawPixel
*
*******************************************************************************/
/**
*
*  Draw a pixel on the LCD with the provided color.
*
*  @param[in]  XPos     The horizontal coordinate of the pixel.
*  @param[in]  YPos     The vertical coordinate of the pixel.
*  @param[in]  Color    The RGB color to draw the pixel with.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_DrawPixel( u8 XPos, u8 YPos, u16 Color )
   {
   /* Select LCD screen area. */
   LCD_SetRect_For_Cmd( XPos, YPos, 1, 1 );

   /* Send LCD RAM write command. */
   LCD_SendLCDCmd( ST7637_RAMWR );

   // Draw pixel.
   LCD_SendLCDData( Color );
   LCD_SendLCDData( Color >> 8 );
   }

/*******************************************************************************
*
*                                LCD_RectRead
*
*******************************************************************************/
/**
*
*  Save the pixels of a rectangle part of the LCD into a RAM variable.
*
*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.
*  @param[in]  y        The vertical coordinate of the rectangle low left corner.
*  @param[in]  width    The rectangle width in pixels.
*  @param[in]  height   The rectangle height in pixels.
*  @param[out] bmp      The variable to store the read data into.
*
*  @warning    One pixel weights 2 bytes.
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_RectRead( u16 x, u16 y, u16 width, u16 height, u8* bmp )
   {
   int i;
   int bytesize = (width * height) *2; // 2 bytes per pixel.

   /* Select LCD screen area. */
   LCD_SetRect_For_Cmd( x, y, width, height );

   /* Send LCD RAM write command. */
   LCD_SendLCDCmd(ST7637_RAMRD);

   // First read byte is dummy!
   LCD_ReadLCDData();

   // Read pixels from LCD screen.
   for( i = 0; i < bytesize; i++ )
      {
      *bmp++ = LCD_ReadLCDData();
      }
   }

/*******************************************************************************
*
*                                LCD_GetPixel
*
*******************************************************************************/
/**
*
*  Read the RGB color of the pixel the coordinate are provided in parameter.
*
*  @param[in]  x        The horizontal coordinate of the pixel.
*  @param[in]  y        The vertical coordinate of the pixel.
*  @return              An unsigned 16 bit word containing the RGB color of the pixel.
*
*  @warning    The (0x0) point in on the low left corner.
*  @see        LCD_RectRead
*
**/
/******************************************************************************/
u16 LCD_GetPixel( u8 x, u8 y )
   {
   u16 val;

   LCD_RectRead( x, y, 1, 1, (u8*)&val );

   return val;
   }

/*******************************************************************************
*
*                                LCD_DisplayChar
*
*******************************************************************************/
/**
*
*  Display at provided coordinates the provided ASCII character with the provided
*  text and background colors and with the provided magnify coefficient.
*
*  @param[in]  x              The horizontal coordinate of the character.
*  @param[in]  y              The vertical coordinate of the character.
*  @param[in]  Ascii          The ASCII code of the character to display.
*                             @n Ascii must be higher than 31 and lower than 127.
*  @param[in]  TextColor      The color used to draw the character.
*  @param[in]  BGndColor      The background color of the drawn character.
*  @param[in]  CharMagniCoeff The magnify coefficient used to draw the character.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_DisplayChar( u8 x, u8 y, u8 Ascii, u16 TextColor, u16 BGndColor, u16 CharMagniCoeff)
   {
   // Display the selected bitmap according to the provided ASCII character.
   LCD_DrawChar( x, y, 7, (u8*)&AsciiDotsTable[ (Ascii-32) * 14 ], TextColor, BGndColor, CharMagniCoeff );
   }

/*******************************************************************************
*
*                                LCD_SetRect_For_Cmd
*
*******************************************************************************/
/**
*
*  Define the rectangle for the next command to be applied.
*
*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.
*  @param[in]  y        The vertical coordinate of the rectangle low left corner.
*  @param[in]  width    The rectangle width in pixels.
*  @param[in]  height   The rectangle height in pixels.
*
*  @warning    The (0x0) point in on the low left corner.
*
**/
/******************************************************************************/
void LCD_SetRect_For_Cmd( s16 x, s16 y, s16 width, s16 height )
   {
   LCD_SendLCDCmd( ST7637_CASET );
   LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] );
   LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] + height - 1 );

   LCD_SendLCDCmd( ST7637_RASET );
   LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] );
   LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] + width - 1 );
   }

/*******************************************************************************
*
*                                LCD_SetBackLight
*
*******************************************************************************/
/**
*
*  Modify the PWM rate. Any value below BACKLIGHTMIN reset the value to the
*  default value (DEFAULT_CCR_BACKLIGHTSTART).
*
*  @param[in]  newBacklightStart The new PWM rate.
*
**/
/******************************************************************************/
void LCD_SetBackLight( u32 newBacklightStart )
   {
   if( newBacklightStart >= BACKLIGHTMIN )
      {
      Current_CCR_BackLightStart = newBacklightStart;
      }
   else
      {
      Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;
      }
   }

/*******************************************************************************
*
*                                LCD_SetBackLightOff
*
*******************************************************************************/
/**
*
*  Switch the LCD back light off.
*
**/
/******************************************************************************/
void LCD_SetBackLightOff( void )
   {
   Current_CCR_BackLightStart = 0;
   }

/*******************************************************************************
*
*                                LCD_SetBackLightOn
*
*******************************************************************************/
/**
*
*  Switch the LCD back light on.
*
**/
/******************************************************************************/
void LCD_SetBackLightOn( void )
   {
   Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;
   }

/*******************************************************************************
*
*                                LCD_GetBackLight
*
*******************************************************************************/
/**
*
*  Returns le LCD PWM rate.
*
*  @return The current LCD PWM rate.
*
**/
/******************************************************************************/
u32 LCD_GetBackLight( void )
   {
   return Current_CCR_BackLightStart;
   }

/*******************************************************************************
*
*                                LCD_SetRotateScreen
*
*******************************************************************************/
/**
*
*  Enable or disable the ability of the screen display to rotate according to
*  the MEMs information.
*
*  @param[in]  RotateScreen 0 to disable screen rotation and 1 to enable.
*
**/
/******************************************************************************/
void LCD_SetRotateScreen( u8 RotateScreen)
   {
   CurrentRotateScreen = RotateScreen;
   }

/*******************************************************************************
*
*                                LCD_GetRotateScreen
*
*******************************************************************************/
/**
*
*  Return the screen rotation mode.
*
*  @retval 0 screen rotation is disabled.
*  @retval 1 screen rotation is enabled.
*
**/
/******************************************************************************/
u8 LCD_GetRotateScreen( void )
   {
   return CurrentRotateScreen;
   }

/*******************************************************************************
*
*                                LCD_SetScreenOrientation
*
*******************************************************************************/
/**
*
*  Set the screen orientation.
*
*  @param[in]  ScreenOrientation The new screen orientation.
*
**/
/******************************************************************************/
void LCD_SetScreenOrientation( Rotate_H12_V_Match_TypeDef ScreenOrientation )
   {
   CurrentScreenOrientation = ScreenOrientation;

   LCD_DisplayRotate( CurrentScreenOrientation );
   }

/*******************************************************************************
*
*                                LCD_GetScreenOrientation
*
*******************************************************************************/
/**
*
*  Return current screen orientation.
*
*  @return   A Rotate_H12_V_Match_TypeDef telling the current screen orientation.
*
**/
/******************************************************************************/
Rotate_H12_V_Match_TypeDef LCD_GetScreenOrientation( void )
   {
   return CurrentScreenOrientation;
   }

