GxEPD2_GFX.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare.
  2. // Requires HW SPI and Adafruit_GFX. Caution: these e-papers require 3.3V supply AND data lines!
  3. //
  4. // based on Demo Example from Good Display: http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html
  5. //
  6. // Author: Jean-Marc Zingg
  7. //
  8. // Version: see library.properties
  9. //
  10. // Library: https://github.com/ZinggJM/GxEPD2
  11. #ifndef _GxEPD2_GFX_H_
  12. #define _GxEPD2_GFX_H_
  13. #include <Adafruit_GFX.h>
  14. #include <GxEPD2_EPD.h>
  15. class GxEPD2_GFX : public Adafruit_GFX
  16. {
  17. public:
  18. GxEPD2_GFX(GxEPD2_EPD& _epd2, int16_t w, int16_t h) : Adafruit_GFX(w, h), epd2(_epd2) {};
  19. virtual uint16_t pages() = 0;
  20. virtual uint16_t pageHeight() = 0;
  21. virtual bool mirror(bool m) = 0;
  22. virtual void init(uint32_t serial_diag_bitrate = 0) = 0; // serial_diag_bitrate = 0 : disabled
  23. // init method with additional parameters:
  24. // initial false for re-init after processor deep sleep wake up, if display power supply was kept
  25. // this can be used to avoid the repeated initial full refresh on displays with fast partial update
  26. // NOTE: garbage will result on fast partial update displays, if initial full update is omitted after power loss
  27. // pulldown_rst_mode true for alternate RST handling to avoid feeding 5V through RST pin
  28. virtual void init(uint32_t serial_diag_bitrate, bool initial, bool pulldown_rst_mode = false) = 0;
  29. virtual void fillScreen(uint16_t color) = 0; // 0x0 black, >0x0 white, to buffer
  30. // display buffer content to screen, useful for full screen buffer
  31. virtual void display(bool partial_update_mode = false) = 0;
  32. // display part of buffer content to screen, useful for full screen buffer
  33. // displayWindow, use parameters according to actual rotation.
  34. // x and w should be multiple of 8, for rotation 0 or 2,
  35. // y and h should be multiple of 8, for rotation 1 or 3,
  36. // else window is increased as needed,
  37. // this is an addressing limitation of the e-paper controllers
  38. virtual void displayWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) = 0;
  39. virtual void setFullWindow() = 0;
  40. // setPartialWindow, use parameters according to actual rotation.
  41. // x and w should be multiple of 8, for rotation 0 or 2,
  42. // y and h should be multiple of 8, for rotation 1 or 3,
  43. // else window is increased as needed,
  44. // this is an addressing limitation of the e-paper controllers
  45. virtual void setPartialWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) = 0;
  46. virtual void firstPage() = 0;
  47. virtual bool nextPage() = 0;
  48. virtual void drawPaged(void (*drawCallback)(const void*), const void* pv) = 0;
  49. virtual void drawInvertedBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) = 0;
  50. // Support for Bitmaps (Sprites) to Controller Buffer and to Screen
  51. virtual void clearScreen(uint8_t value = 0xFF) = 0; // init controller memory and screen (default white)
  52. virtual void writeScreenBuffer(uint8_t value = 0xFF) = 0; // init controller memory (default white)
  53. // write to controller memory, without screen refresh; x and w should be multiple of 8
  54. virtual void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false) = 0;
  55. virtual void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  56. int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false) = 0;
  57. virtual void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) = 0;
  58. virtual void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h) = 0; // default options false
  59. virtual void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  60. int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) = 0;
  61. virtual void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  62. int16_t x, int16_t y, int16_t w, int16_t h) = 0; // default options false
  63. // write to controller memory, with screen refresh; x and w should be multiple of 8
  64. virtual void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false) = 0;
  65. virtual void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  66. int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false) = 0;
  67. virtual void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) = 0;
  68. virtual void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h) = 0; // default options false
  69. virtual void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  70. int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) = 0;
  71. virtual void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
  72. int16_t x, int16_t y, int16_t w, int16_t h) = 0; // default options false
  73. virtual void refresh(bool partial_update_mode = false) = 0; // screen refresh from controller memory to full screen
  74. virtual void refresh(int16_t x, int16_t y, int16_t w, int16_t h) = 0; // screen refresh from controller memory, partial screen
  75. virtual void powerOff() = 0; // turns off generation of panel driving voltages, avoids screen fading over time
  76. virtual void hibernate() = 0; // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0)
  77. public:
  78. GxEPD2_EPD& epd2;
  79. };
  80. #endif