@@ -19,6 +19,7 @@ bool GxEPDDisplay::begin() {
1919 display.fillScreen (GxEPD_WHITE);
2020 display.display (true );
2121 #if DISP_BACKLIGHT
22+ digitalWrite (DISP_BACKLIGHT, LOW);
2223 pinMode (DISP_BACKLIGHT, OUTPUT);
2324 #endif
2425 _init = true ;
@@ -27,14 +28,14 @@ bool GxEPDDisplay::begin() {
2728
2829void GxEPDDisplay::turnOn () {
2930 if (!_init) begin ();
30- #if DISP_BACKLIGHT
31+ #if defined( DISP_BACKLIGHT) && !defined(BACKLIGHT_BTN)
3132 digitalWrite (DISP_BACKLIGHT, HIGH);
3233#endif
3334 _isOn = true ;
3435}
3536
3637void GxEPDDisplay::turnOff () {
37- #if DISP_BACKLIGHT
38+ #if defined( DISP_BACKLIGHT) && !defined(BACKLIGHT_BTN)
3839 digitalWrite (DISP_BACKLIGHT, LOW);
3940#endif
4041 _isOn = false ;
@@ -43,14 +44,17 @@ void GxEPDDisplay::turnOff() {
4344void GxEPDDisplay::clear () {
4445 display.fillScreen (GxEPD_WHITE);
4546 display.setTextColor (GxEPD_BLACK);
47+ display_crc.reset ();
4648}
4749
4850void GxEPDDisplay::startFrame (Color bkg) {
4951 display.fillScreen (GxEPD_WHITE);
5052 display.setTextColor (_curr_color = GxEPD_BLACK);
53+ display_crc.reset ();
5154}
5255
5356void GxEPDDisplay::setTextSize (int sz) {
57+ display_crc.update <int >(sz);
5458 switch (sz) {
5559 case 1 : // Small
5660 display.setFont (&FreeSans9pt7b);
@@ -68,6 +72,7 @@ void GxEPDDisplay::setTextSize(int sz) {
6872}
6973
7074void GxEPDDisplay::setColor (Color c) {
75+ display_crc.update <Color> (c);
7176 // colours need to be inverted for epaper displays
7277 if (c == DARK) {
7378 display.setTextColor (_curr_color = GxEPD_WHITE);
@@ -77,22 +82,38 @@ void GxEPDDisplay::setColor(Color c) {
7782}
7883
7984void GxEPDDisplay::setCursor (int x, int y) {
85+ display_crc.update <int >(x);
86+ display_crc.update <int >(y);
8087 display.setCursor (x*SCALE_X, (y+10 )*SCALE_Y);
8188}
8289
8390void GxEPDDisplay::print (const char * str) {
91+ display_crc.update <char >(str, strlen (str));
8492 display.print (str);
8593}
8694
8795void GxEPDDisplay::fillRect (int x, int y, int w, int h) {
96+ display_crc.update <int >(x);
97+ display_crc.update <int >(y);
98+ display_crc.update <int >(w);
99+ display_crc.update <int >(h);
88100 display.fillRect (x*SCALE_X, y*SCALE_Y, w*SCALE_X, h*SCALE_Y, _curr_color);
89101}
90102
91103void GxEPDDisplay::drawRect (int x, int y, int w, int h) {
104+ display_crc.update <int >(x);
105+ display_crc.update <int >(y);
106+ display_crc.update <int >(w);
107+ display_crc.update <int >(h);
92108 display.drawRect (x*SCALE_X, y*SCALE_Y, w*SCALE_X, h*SCALE_Y, _curr_color);
93109}
94110
95111void GxEPDDisplay::drawXbm (int x, int y, const uint8_t * bits, int w, int h) {
112+ display_crc.update <int >(x);
113+ display_crc.update <int >(y);
114+ display_crc.update <int >(w);
115+ display_crc.update <int >(h);
116+ display_crc.update <uint8_t >(bits, w * h / 8 );
96117 // Calculate the base position in display coordinates
97118 uint16_t startX = x * SCALE_X;
98119 uint16_t startY = y * SCALE_Y;
@@ -136,5 +157,9 @@ uint16_t GxEPDDisplay::getTextWidth(const char* str) {
136157}
137158
138159void GxEPDDisplay::endFrame () {
139- display.display (true );
160+ uint32_t crc = display_crc.finalize ();
161+ if (crc != last_display_crc_value) {
162+ display.display (true );
163+ last_display_crc_value = crc;
164+ }
140165}
0 commit comments