30 #define swap_data(a, b ,type) { type t = a; a = b; b = t; } 32 extern const uint8_t *s_font6x8;
43 #define YADDR8(y) (static_cast<uint16_t>(y) * m_w) 51 m_buf[YADDR8(y) + x] = m_color;
69 if ((x1 < 0) || (x1 >= (
lcdint_t)m_w))
return;
70 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
72 uint8_t *buf = m_buf + YADDR8(y1) + x1;
91 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
92 if ((y1 < 0) || (y1 >= (
lcdint_t)m_h))
return;
95 uint8_t *buf = m_buf + YADDR8(y1) + x1;
96 for (
lcdint_t x = 0; x <= x2 - x1; x++)
130 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
131 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
136 uint8_t *buf = m_buf + YADDR8(y1) + x1;
144 buf += ((
lcdint_t)(m_w) - (x2 - x1 + 1));
164 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
165 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
175 offs = ((-y1) & 0x07);
186 uint8_t offs2 = 8 - offs;
192 for (
lcdint_t x = x1; x <= x2; x++ )
194 uint8_t data = pgm_read_byte( bitmap );
195 uint16_t addr = YADDR8(y) + x;
196 for (uint8_t n = 0; n <
min(y2 - y + 1, 8); n++)
198 if ( data & (1<<(n + offs)) )
199 m_buf[addr] = m_color;
200 else if (!(m_textMode & CANVAS_MODE_TRANSPARENT))
206 bitmap += (w - (x2 - x1 + 1));
221 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
222 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
245 for (
lcdint_t x = x1; x <= x2; x++ )
247 uint8_t data = pgm_read_byte( bitmap );
248 if ( (data) || (!(m_textMode & CANVAS_MODE_TRANSPARENT)) )
250 m_buf[YADDR8(y) + x] = data;
254 bitmap += (w - (x2 - x1 + 1));
309 char c = pgm_read_byte(ch);
318 uint8_t *buf = m_buf;
319 for(uint16_t n = 0; n < YADDR8(m_h); n++)
343 #define YADDR1(y) (static_cast<uint16_t>((y) >> 3) << m_p) 344 #define BANK_ADDR1(b) ((b) << m_p) 350 if ((x<0) || (y<0))
return;
354 m_buf[YADDR1(y) + x] |= (1 << (y & 0x7));
358 m_buf[YADDR1(y) + x] &= ~(1 << (y & 0x7));
369 if (x2 < x1) swap_data(x2, x1,
lcdint_t);
373 if ((y1 >= (
lcdint_t)m_h) || (y1 < 0))
return;
374 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
381 m_buf[YADDR1(y1) + x] |= (1 << (y1 & 0x7));
385 m_buf[YADDR1(y1) + x] &= ~(1 << (y1 & 0x7));
392 if (y2 < y1) swap_data(y2, y1,
lcdint_t);
396 if ((x1 >= (
lcdint_t)m_w) || (x1 < 0))
return;
397 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
404 m_buf[YADDR1(y) + x1] |= (1 << (y & 0x7));
408 m_buf[YADDR1(y) + x1] &= ~(1 << (y & 0x7));
428 if (x2 < x1) swap_data(x2, x1,
lcdint_t);
429 if (y2 < y1) swap_data(y2, y1,
lcdint_t);
434 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
435 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
440 uint8_t bank1 = (y1 >> 3);
441 uint8_t bank2 = (y2 >> 3);
442 for (uint8_t bank = bank1; bank<=bank2; bank++)
447 mask = (mask >> ((y1 & 7) + 7 - (y2 & 7))) << (y1 & 7);
449 else if (bank1 == bank)
451 mask = (mask << (y1 & 7));
453 else if (bank2 == bank)
455 mask = (mask >> (7 - (y2 & 7)));
457 for (uint8_t x=x1; x<=x2; x++)
461 m_buf[BANK_ADDR1(bank) + x] |= mask;
465 m_buf[BANK_ADDR1(bank) + x] &= ~mask;
478 for(uint16_t i=0; i< YADDR1(m_h); i++)
490 uint8_t offs = y & 0x07;
491 uint8_t complexFlag = 0;
492 uint8_t mainFlag = 1;
499 bitmap += ((
lcduint_t)((-y) + 7) >> 3) * w;
510 uint8_t max_pages = (
lcduint_t)(h + 15 - offs) >> 3;
519 uint8_t pages = ((y + h - 1) >> 3) - (y >> 3) + 1;
523 for(j=0; j < pages; j++)
525 uint16_t addr = YADDR1(y + ((uint16_t)j<<3)) + x;
526 if ( j == max_pages - 1 ) mainFlag = !offs;
527 for( i=w; i > 0; i--)
531 if ( mainFlag ) { data |= (pgm_read_byte(bitmap) << offs); mask |= (0xFF << offs); }
532 if ( complexFlag ) { data |= (pgm_read_byte(bitmap - origin_width) >> (8 - offs)); mask |= (0xFF >> (8 - offs)); }
533 if (CANVAS_MODE_TRANSPARENT != (m_textMode & CANVAS_MODE_TRANSPARENT))
535 m_buf[addr] &= ~mask;
536 m_buf[addr] |= m_color ==
BLACK ? ~data: data;
540 if (m_color ==
BLACK)
541 m_buf[addr] &= ~data;
548 bitmap += origin_width - w;
604 char c = pgm_read_byte(ch);
629 #define YADDR16(y) (static_cast<uint16_t>(y) * (m_w << 1)) 637 m_buf[YADDR16(y) + (x<<1)] = m_color >> 8;
638 m_buf[YADDR16(y) + (x<<1) + 1] = m_color & 0xFF;
656 if ((x1 < 0) || (x1 >= (
lcdint_t)m_w))
return;
657 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
659 uint8_t *buf = m_buf + YADDR16(y1) + (x1 << 1);
663 buf[0] = m_color >> 8;
664 buf[1] = m_color & 0xFF;
679 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
680 if ((y1 < 0) || (y1 >= (
lcdint_t)m_h))
return;
683 uint8_t *buf = m_buf + YADDR16(y1) + (x1<<1);
684 for (
lcdint_t x = 0; x <= x2 - x1; x++)
686 buf[0] = m_color >> 8;
687 buf[1] = m_color & 0xFF;
719 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
720 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
725 uint8_t *buf = m_buf + YADDR16(y1) + (x1<<1);
730 buf[0] = m_color >> 8;
731 buf[1] = m_color & 0xFF;
734 buf += ( ((
lcdint_t)(m_w) - (x2 - x1 + 1)) <<1 );
754 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
755 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
765 offs = ((-y1) & 0x07);
776 uint8_t offs2 = 8 - offs;
782 for (
lcdint_t x = x1; x <= x2; x++ )
784 uint8_t data = pgm_read_byte( bitmap );
785 uint16_t addr = YADDR16(y) + (x<<1);
786 for (uint8_t n = 0; n <
min(y2 - y + 1, 8); n++)
788 if ( data & (1<<(n + offs)) )
790 m_buf[addr] = m_color >> 8;
791 m_buf[addr+1] = m_color & 0xFF;
793 else if (!(m_textMode & CANVAS_MODE_TRANSPARENT))
796 m_buf[addr+1] = 0x00;
802 bitmap += (w - (x2 - x1 + 1));
817 if ((x2 < 0) || (x1 >= (
lcdint_t)m_w))
return;
818 if ((y2 < 0) || (y1 >= (
lcdint_t)m_h))
return;
841 for (
lcdint_t x = x1; x <= x2; x++ )
843 uint8_t data = pgm_read_byte( bitmap );
844 if ( (data) || (!(m_textMode & CANVAS_MODE_TRANSPARENT)) )
846 uint16_t color = (((uint16_t)data & 0b11100000) << 8) |
847 (((uint16_t)data & 0b00011100) << 6) |
848 (((uint16_t)data & 0b00000011) << 3);
849 m_buf[YADDR16(y) + (x<<1)] = color;
853 bitmap += (w - (x2 - x1 + 1));
908 char c = pgm_read_byte(ch);
917 uint8_t *buf = m_buf;
918 for(uint16_t n = 0; n < YADDR16(m_h); n++)
void drawHLine(lcdint_t x1, lcdint_t y1, lcdint_t x2)
void printFixedPgm(lcdint_t xpos, lcdint_t y, const char *ch)
void drawVLine(lcdint_t x1, lcdint_t y1, lcdint_t y2)
void printFixedPgm(lcdint_t xpos, lcdint_t y, const char *ch)
void printFixed(lcdint_t xpos, lcdint_t y, const char *ch)
void fillRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
void putPixel(lcdint_t x, lcdint_t y)
void putPixel(lcdint_t x, lcdint_t y)
void putPixel(lcdint_t x, lcdint_t y)
void drawVLine(lcdint_t x1, lcdint_t y1, lcdint_t y2)
void ssd1331_fastDrawBuffer16(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *data)
SFixedFontInfo s_fixedFont
void printFixed(lcdint_t xpos, lcdint_t y, const char *ch)
void drawRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
uint8_t ascii_offset
ascii offset
void fillRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
void printFixed(lcdint_t xpos, lcdint_t y, const char *ch)
void fillRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
void drawBitmap1(lcdint_t x, lcdint_t y, lcduint_t w, lcduint_t h, const uint8_t *bitmap)
Draws monochrome bitmap in color buffer using color, specified via setColor() method Draws monochrome...
void drawVLine(lcdint_t x1, lcdint_t y1, lcdint_t y2)
void drawBitmap8(lcdint_t x, lcdint_t y, lcduint_t w, lcduint_t h, const uint8_t *bitmap)
Draws 8-bit color bitmap in color buffer. Draws 8-bit color bitmap in color buffer.
void drawBitmap1(lcdint_t x, lcdint_t y, lcduint_t w, lcduint_t h, const uint8_t *bitmap)
Draws monochrome bitmap in color buffer using color, specified via setColor() method Draws monochrome...
void drawHLine(lcdint_t x1, lcdint_t y1, lcdint_t x2)
uint8_t width
width in pixels
void drawBitmap8(lcdint_t x, lcdint_t y, lcduint_t w, lcduint_t h, const uint8_t *bitmap)
Draws 8-bit color bitmap in color buffer. Draws 8-bit color bitmap in color buffer.
void drawRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
void printChar(uint8_t c)
void drawRect(lcdint_t x1, lcdint_t y1, lcdint_t x2, lcdint_t y2)
void printFixedPgm(lcdint_t xpos, lcdint_t y, const char *ch)
void printChar(uint8_t c)
const uint8_t * data
font chars bits
uint8_t pages
height in pages (each page height is 8-pixels)
void ssd1306_drawBuffer(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void printChar(uint8_t c)
void drawBitmap1(lcdint_t x, lcdint_t y, lcduint_t w, lcduint_t h, const uint8_t *bitmap)
Draws monochrome bitmap in color buffer using color, specified via setColor() method Draws monochrome...
void drawHLine(lcdint_t x1, lcdint_t y1, lcdint_t x2)
uint8_t height
height in pixels
void ssd1331_fastDrawBuffer8(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *data)