text: /**
   *  @filename   :   epd5in83.h
   *  @brief      :   Header file for e-paper library epd5in83.cpp
   *  @author     :   MyMX from Waveshare
   *  
   *  Copyright (C) Waveshare     April 6 2018
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documnetation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to  whom the Software is
   * furished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  
  #ifndef EPD5IN83_H
  #define EPD5IN83_H
  
  #include "epdif.h"
  
  // Display resolution
  #define EPD_WIDTH       600
  #define EPD_HEIGHT      448
  
  // EPD7IN5 commands
  #define PANEL_SETTING                               0x00
  #define POWER_SETTING                               0x01
  #define POWER_OFF                                   0x02
  #define POWER_OFF_SEQUENCE_SETTING                  0x03
  #define POWER_ON                                    0x04
  #define POWER_ON_MEASURE                            0x05
  #define BOOSTER_SOFT_START                          0x06
  #define DEEP_SLEEP                                  0x07
  #define DATA_START_TRANSMISSION_1                   0x10
  #define DATA_STOP                                   0x11
  #define DISPLAY_REFRESH                             0x12
  #define IMAGE_PROCESS                               0x13
  #define LUT_FOR_VCOM                                0x20 
  #define LUT_BLUE                                    0x21
  #define LUT_WHITE                                   0x22
  #define LUT_GRAY_1                                  0x23
  #define LUT_GRAY_2                                  0x24
  #define LUT_RED_0                                   0x25
  #define LUT_RED_1                                   0x26
  #define LUT_RED_2                                   0x27
  #define LUT_RED_3                                   0x28
  #define LUT_XON                                     0x29
  #define PLL_CONTROL                                 0x30
  #define TEMPERATURE_SENSOR_COMMAND                  0x40
  #define TEMPERATURE_CALIBRATION                     0x41
  #define TEMPERATURE_SENSOR_WRITE                    0x42
  #define TEMPERATURE_SENSOR_READ                     0x43
  #define VCOM_AND_DATA_INTERVAL_SETTING              0x50
  #define LOW_POWER_DETECTION                         0x51
  #define TCON_SETTING                                0x60
  #define TCON_RESOLUTION                             0x61
  #define SPI_FLASH_CONTROL                           0x65
  #define REVISION                                    0x70
  #define GET_STATUS                                  0x71
  #define AUTO_MEASUREMENT_VCOM                       0x80
  #define READ_VCOM_VALUE                             0x81
  #define VCM_DC_SETTING                              0x82
  
  class Epd : EpdIf {
  public:
      Epd();
      ~Epd();
      int  Init(void);
      void WaitUntilIdle(void);
      void Reset(void);
      void SetLut(void);
      void DisplayFrame(const unsigned char** frame_buffer);
      void SendCommand(unsigned char command);
      void SendData(unsigned char data);
      void Sleep(void);
  private:
      unsigned int reset_pin;
      unsigned int dc_pin;
      unsigned int cs_pin;
      unsigned int busy_pin;
      unsigned long width;
      unsigned long height;
  };
  
  #endif /* EPD5IN83_H */
  
  /* END OF FILE */
  