Paperd.Ink Library 0.0.5
Library for interacting with Paperd.Ink devices.
Loading...
Searching...
No Matches
GxEPD2_420_M01 Class Reference

#include <GxEPD2_420_M01.h>

Inheritance diagram for GxEPD2_420_M01:
GxEPD2_EPD

Public Member Functions

 GxEPD2_420_M01 (int16_t cs, int16_t dc, int16_t rst, int16_t busy)
 
void clearScreen (uint8_t value=0xFF)
 
void writeScreenBuffer (uint8_t value=0xFF)
 
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)
 
void writeImagePart (const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
void writeImage (const uint8_t *black, const uint8_t *color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
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, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
void writeNative (const uint8_t *data1, const uint8_t *data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
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)
 
void drawImagePart (const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
void drawImage (const uint8_t *black, const uint8_t *color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
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, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
void drawNative (const uint8_t *data1, const uint8_t *data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
void refresh (bool partial_update_mode=false)
 
void refresh (int16_t x, int16_t y, int16_t w, int16_t h)
 
void powerOff ()
 
void hibernate ()
 
- Public Member Functions inherited from GxEPD2_EPD
 GxEPD2_EPD (int16_t cs, int16_t dc, int16_t rst, int16_t busy, int16_t busy_level, uint32_t busy_timeout, uint16_t w, uint16_t h, GxEPD2::Panel p, bool c, bool pu, bool fpu)
 
virtual void init (uint32_t serial_diag_bitrate=0)
 
virtual void init (uint32_t serial_diag_bitrate, bool initial, uint16_t reset_duration=10, bool pulldown_rst_mode=false)
 
virtual void writeImageForFullRefresh (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)
 
virtual void writeScreenBufferAgain (uint8_t value=0xFF)
 
virtual void writeImageAgain (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)
 
virtual void writeImagePartAgain (const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
 
virtual void setPaged ()
 
void setBusyCallback (void(*busyCallback)(const void *), const void *busy_callback_parameter=0)
 
void selectSPI (SPIClass &spi, SPISettings spi_settings)
 

Static Public Attributes

static const uint16_t WIDTH = 400
 
static const uint16_t HEIGHT = 300
 
static const GxEPD2::Panel panel = GxEPD2::GDEW042M01
 
static const bool hasColor = false
 
static const bool hasPartialUpdate = true
 
static const bool usePartialUpdateWindow = false
 
static const bool hasFastPartialUpdate = true
 
static const uint16_t power_on_time = 100
 
static const uint16_t power_off_time = 20
 
static const uint16_t full_refresh_time = 5000
 
static const uint16_t partial_refresh_time = hasPartialUpdate ? 1200 : full_refresh_time
 

Additional Inherited Members

- Static Public Member Functions inherited from GxEPD2_EPD
static uint16_t gx_uint16_min (uint16_t a, uint16_t b)
 
static uint16_t gx_uint16_max (uint16_t a, uint16_t b)
 
- Public Attributes inherited from GxEPD2_EPD
const uint16_t WIDTH
 
const uint16_t HEIGHT
 
const GxEPD2::Panel panel
 
const bool hasColor
 
const bool hasPartialUpdate
 
const bool hasFastPartialUpdate
 
- Protected Member Functions inherited from GxEPD2_EPD
void _reset ()
 
void _waitWhileBusy (const char *comment=0, uint16_t busy_time=5000)
 
void _writeCommand (uint8_t c)
 
void _writeData (uint8_t d)
 
void _writeData (const uint8_t *data, uint16_t n)
 
void _writeDataPGM (const uint8_t *data, uint16_t n, int16_t fill_with_zeroes=0)
 
void _writeDataPGM_sCS (const uint8_t *data, uint16_t n, int16_t fill_with_zeroes=0)
 
void _writeCommandData (const uint8_t *pCommandData, uint8_t datalen)
 
void _writeCommandDataPGM (const uint8_t *pCommandData, uint8_t datalen)
 
void _startTransfer ()
 
void _transfer (uint8_t value)
 
void _endTransfer ()
 
- Protected Attributes inherited from GxEPD2_EPD
int16_t _cs
 
int16_t _dc
 
int16_t _rst
 
int16_t _busy
 
int16_t _busy_level
 
uint32_t _busy_timeout
 
bool _diag_enabled
 
bool _pulldown_rst_mode
 
SPIClass * _pSPIx
 
SPISettings _spi_settings
 
bool _initial_write
 
bool _initial_refresh
 
bool _power_is_on
 
bool _using_partial_mode
 
bool _hibernating
 
uint16_t _reset_duration
 
void(* _busy_callback )(const void *)
 
const void * _busy_callback_parameter
 

Detailed Description

Definition at line 19 of file GxEPD2_420_M01.h.

Constructor & Destructor Documentation

◆ GxEPD2_420_M01()

GxEPD2_420_M01::GxEPD2_420_M01 ( int16_t cs,
int16_t dc,
int16_t rst,
int16_t busy )

Definition at line 16 of file GxEPD2_420_M01.cpp.

16 :
17 GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
18{
19}
static const uint16_t HEIGHT
static const bool hasColor
static const bool hasFastPartialUpdate
static const GxEPD2::Panel panel
static const bool hasPartialUpdate
static const uint16_t WIDTH
GxEPD2_EPD(int16_t cs, int16_t dc, int16_t rst, int16_t busy, int16_t busy_level, uint32_t busy_timeout, uint16_t w, uint16_t h, GxEPD2::Panel p, bool c, bool pu, bool fpu)

Member Function Documentation

◆ clearScreen()

void GxEPD2_420_M01::clearScreen ( uint8_t value = 0xFF)
virtual

Implements GxEPD2_EPD.

Definition at line 21 of file GxEPD2_420_M01.cpp.

22{
23 writeScreenBuffer(value);
24 refresh(true);
25 writeScreenBuffer(value);
26}
void writeScreenBuffer(uint8_t value=0xFF)
void refresh(bool partial_update_mode=false)

◆ drawImage() [1/2]

void GxEPD2_420_M01::drawImage ( const uint8_t * black,
const uint8_t * color,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 198 of file GxEPD2_420_M01.cpp.

199{
200 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
201 refresh(x, y, w, h);
202 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
203}
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)

◆ drawImage() [2/2]

void GxEPD2_420_M01::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 )

Definition at line 183 of file GxEPD2_420_M01.cpp.

184{
185 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
186 refresh(x, y, w, h);
187 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
188}

◆ drawImagePart() [1/2]

void GxEPD2_420_M01::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,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 205 of file GxEPD2_420_M01.cpp.

207{
208 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
209 refresh(x, y, w, h);
210 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
211}
void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)

◆ drawImagePart() [2/2]

void GxEPD2_420_M01::drawImagePart ( const uint8_t bitmap[],
int16_t x_part,
int16_t y_part,
int16_t w_bitmap,
int16_t h_bitmap,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 190 of file GxEPD2_420_M01.cpp.

192{
193 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
194 refresh(x, y, w, h);
195 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
196}

◆ drawNative()

void GxEPD2_420_M01::drawNative ( const uint8_t * data1,
const uint8_t * data2,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 213 of file GxEPD2_420_M01.cpp.

214{
215 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
216 refresh(x, y, w, h);
217 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
218}
void writeNative(const uint8_t *data1, const uint8_t *data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)

◆ hibernate()

void GxEPD2_420_M01::hibernate ( )
virtual

Implements GxEPD2_EPD.

Definition at line 258 of file GxEPD2_420_M01.cpp.

259{
260 _PowerOff();
261 if (_rst >= 0)
262 {
263 _writeCommand(0x07); // deep sleep
264 _writeData(0xA5); // check code
265 _hibernating = true;
266 }
267}
void _writeCommand(uint8_t c)
void _writeData(uint8_t d)
int16_t _rst
Definition GxEPD2_EPD.h:112
bool _hibernating
Definition GxEPD2_EPD.h:118

◆ powerOff()

void GxEPD2_420_M01::powerOff ( void )
virtual

Implements GxEPD2_EPD.

Definition at line 253 of file GxEPD2_420_M01.cpp.

254{
255 _PowerOff();
256}

◆ refresh() [1/2]

void GxEPD2_420_M01::refresh ( bool partial_update_mode = false)
virtual

Implements GxEPD2_EPD.

Definition at line 220 of file GxEPD2_420_M01.cpp.

221{
222 if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT);
223 else
224 {
225 if (_using_partial_mode) _Init_Full();
226 _Update_Full();
227 _initial_refresh = false; // initial full update done
228 }
229}
bool _using_partial_mode
Definition GxEPD2_EPD.h:118
bool _initial_refresh
Definition GxEPD2_EPD.h:117

◆ refresh() [2/2]

void GxEPD2_420_M01::refresh ( int16_t x,
int16_t y,
int16_t w,
int16_t h )
virtual

Implements GxEPD2_EPD.

Definition at line 231 of file GxEPD2_420_M01.cpp.

232{
233 if (_initial_refresh) return refresh(false); // initial update needs be full update
234 // intersection with screen
235 int16_t w1 = x < 0 ? w + x : w; // reduce
236 int16_t h1 = y < 0 ? h + y : h; // reduce
237 int16_t x1 = x < 0 ? 0 : x; // limit
238 int16_t y1 = y < 0 ? 0 : y; // limit
239 w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
240 h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
241 if ((w1 <= 0) || (h1 <= 0)) return;
242 // make x1, w1 multiple of 8
243 w1 += x1 % 8;
244 if (w1 % 8 > 0) w1 += 8 - w1 % 8;
245 x1 -= x1 % 8;
246 if (!_using_partial_mode) _Init_Part();
247 if (usePartialUpdateWindow) _writeCommand(0x91); // partial in
248 _setPartialRamArea(x1, y1, w1, h1);
249 _Update_Part();
250 if (usePartialUpdateWindow) _writeCommand(0x92); // partial out
251}
static const bool usePartialUpdateWindow

◆ writeImage() [1/2]

void GxEPD2_420_M01::writeImage ( const uint8_t * black,
const uint8_t * color,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 158 of file GxEPD2_420_M01.cpp.

159{
160 if (black)
161 {
162 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
163 }
164}

◆ writeImage() [2/2]

void GxEPD2_420_M01::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 )
virtual

Implements GxEPD2_EPD.

Definition at line 51 of file GxEPD2_420_M01.cpp.

52{
53 if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean
54 delay(1); // yield() to avoid WDT on ESP8266 and ESP32
55 int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded
56 x -= x % 8; // byte boundary
57 w = wb * 8; // byte boundary
58 int16_t x1 = x < 0 ? 0 : x; // limit
59 int16_t y1 = y < 0 ? 0 : y; // limit
60 int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit
61 int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit
62 int16_t dx = x1 - x;
63 int16_t dy = y1 - y;
64 w1 -= dx;
65 h1 -= dy;
66 if ((w1 <= 0) || (h1 <= 0)) return;
67 if (!_using_partial_mode) _Init_Part();
68 //uint32_t start = micros();
69 _writeCommand(0x91); // partial in
70 _setPartialRamArea(x1, y1, w1, h1);
71 _writeCommand(0x13);
73 for (int16_t i = 0; i < h1; i++)
74 {
75 for (int16_t j = 0; j < w1 / 8; j++)
76 {
77 uint8_t data;
78 // use wb, h of bitmap for index!
79 int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb;
80 if (pgm)
81 {
82#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
83 data = pgm_read_byte(&bitmap[idx]);
84#else
85 data = bitmap[idx];
86#endif
87 }
88 else
89 {
90 data = bitmap[idx];
91 }
92 if (invert) data = ~data;
93 _transfer(data);
94 }
95 }
97 _writeCommand(0x92); // partial out
98 //Serial.print("GxEPD2_420_M01::writeImage took "); Serial.println(micros() - start);
99 delay(1); // yield() to avoid WDT on ESP8266 and ESP32
100}
void _endTransfer()
void _startTransfer()
void _transfer(uint8_t value)
bool _initial_write
Definition GxEPD2_EPD.h:117

◆ writeImagePart() [1/2]

void GxEPD2_420_M01::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,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 166 of file GxEPD2_420_M01.cpp.

168{
169 if (black)
170 {
171 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
172 }
173}

◆ writeImagePart() [2/2]

void GxEPD2_420_M01::writeImagePart ( const uint8_t bitmap[],
int16_t x_part,
int16_t y_part,
int16_t w_bitmap,
int16_t h_bitmap,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )
virtual

Implements GxEPD2_EPD.

Definition at line 102 of file GxEPD2_420_M01.cpp.

104{
105 if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean
106 delay(1); // yield() to avoid WDT on ESP8266 and ESP32
107 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return;
108 if ((x_part < 0) || (x_part >= w_bitmap)) return;
109 if ((y_part < 0) || (y_part >= h_bitmap)) return;
110 int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded
111 x_part -= x_part % 8; // byte boundary
112 w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit
113 h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit
114 x -= x % 8; // byte boundary
115 w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded
116 int16_t x1 = x < 0 ? 0 : x; // limit
117 int16_t y1 = y < 0 ? 0 : y; // limit
118 int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit
119 int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit
120 int16_t dx = x1 - x;
121 int16_t dy = y1 - y;
122 w1 -= dx;
123 h1 -= dy;
124 if ((w1 <= 0) || (h1 <= 0)) return;
125 if (!_using_partial_mode) _Init_Part();
126 _writeCommand(0x91); // partial in
127 _setPartialRamArea(x1, y1, w1, h1);
128 _writeCommand(0x13);
130 for (int16_t i = 0; i < h1; i++)
131 {
132 for (int16_t j = 0; j < w1 / 8; j++)
133 {
134 uint8_t data;
135 // use wb_bitmap, h_bitmap of bitmap for index!
136 int16_t idx = mirror_y ? x_part / 8 + j + dx / 8 + ((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + (y_part + i + dy) * wb_bitmap;
137 if (pgm)
138 {
139#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
140 data = pgm_read_byte(&bitmap[idx]);
141#else
142 data = bitmap[idx];
143#endif
144 }
145 else
146 {
147 data = bitmap[idx];
148 }
149 if (invert) data = ~data;
150 _transfer(data);
151 }
152 }
153 _endTransfer();
154 _writeCommand(0x92); // partial out
155 delay(1); // yield() to avoid WDT on ESP8266 and ESP32
156}

◆ writeNative()

void GxEPD2_420_M01::writeNative ( const uint8_t * data1,
const uint8_t * data2,
int16_t x,
int16_t y,
int16_t w,
int16_t h,
bool invert = false,
bool mirror_y = false,
bool pgm = false )

Definition at line 175 of file GxEPD2_420_M01.cpp.

176{
177 if (data1)
178 {
179 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
180 }
181}

◆ writeScreenBuffer()

void GxEPD2_420_M01::writeScreenBuffer ( uint8_t value = 0xFF)
virtual

Implements GxEPD2_EPD.

Definition at line 28 of file GxEPD2_420_M01.cpp.

29{
30 _initial_write = false; // initial full screen buffer clean done
31 if (!_using_partial_mode) _Init_Part();
33 {
34 _writeCommand(0x10); // init old data
36 for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++)
37 {
38 _transfer(value);
39 }
41 }
42 _writeCommand(0x13);
44 for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++)
45 {
46 _transfer(value);
47 }
49}

Member Data Documentation

◆ full_refresh_time

const uint16_t GxEPD2_420_M01::full_refresh_time = 5000
static

Definition at line 32 of file GxEPD2_420_M01.h.

◆ hasColor

const bool GxEPD2_420_M01::hasColor = false
static

Definition at line 26 of file GxEPD2_420_M01.h.

◆ hasFastPartialUpdate

const bool GxEPD2_420_M01::hasFastPartialUpdate = true
static

Definition at line 29 of file GxEPD2_420_M01.h.

◆ hasPartialUpdate

const bool GxEPD2_420_M01::hasPartialUpdate = true
static

Definition at line 27 of file GxEPD2_420_M01.h.

◆ HEIGHT

const uint16_t GxEPD2_420_M01::HEIGHT = 300
static

Definition at line 24 of file GxEPD2_420_M01.h.

◆ panel

const GxEPD2::Panel GxEPD2_420_M01::panel = GxEPD2::GDEW042M01
static

Definition at line 25 of file GxEPD2_420_M01.h.

◆ partial_refresh_time

const uint16_t GxEPD2_420_M01::partial_refresh_time = hasPartialUpdate ? 1200 : full_refresh_time
static

Definition at line 33 of file GxEPD2_420_M01.h.

◆ power_off_time

const uint16_t GxEPD2_420_M01::power_off_time = 20
static

Definition at line 31 of file GxEPD2_420_M01.h.

◆ power_on_time

const uint16_t GxEPD2_420_M01::power_on_time = 100
static

Definition at line 30 of file GxEPD2_420_M01.h.

◆ usePartialUpdateWindow

const bool GxEPD2_420_M01::usePartialUpdateWindow = false
static

Definition at line 28 of file GxEPD2_420_M01.h.

◆ WIDTH

const uint16_t GxEPD2_420_M01::WIDTH = 400
static

Definition at line 23 of file GxEPD2_420_M01.h.


The documentation for this class was generated from the following files: