23 extern const uint8_t *s_font6x8;
25 #define YADDR(y) (((y) >> 3) << m_p) 26 #define BADDR(b) ((b) << m_p) 30 if ((x>=m_w) || (y>=m_h))
return;
33 m_bytes[YADDR(y) + x] &= ((1 << (y & 0x7))^m_invertByte);
37 m_bytes[YADDR(y) + x] |= (1 << (y & 0x7));
43 if (y1 >= m_h)
return;
45 if (x1 >= m_w)
return;
46 if (x2 >= m_w) x2 = m_w - 1;
47 for(uint8_t x = x1; x<=x2; x++)
48 m_bytes[YADDR(y1) + x] |= (1 << (y1 & 0x7));
53 if (x1 >= m_w)
return;
55 if (y1 >= m_h)
return;
56 if (y2 >= m_h) y2 = m_h - 1;
57 for(uint8_t y = y1; y<=y2; y++)
58 m_bytes[YADDR(y) + x1] |= (1 << (y & 0x7));
72 templ ^= m_invertByte;
73 if ((x1 < x2) && (x1 >= m_w))
return;
74 if ((y1 < y2) && (y1 >= m_h))
return;
77 if (x2 >= m_w) x2 = m_w -1;
78 if (y2 >= m_h) y2 = m_h -1;
79 uint8_t bank1 = (y1 >> 3);
80 uint8_t bank2 = (y2 >> 3);
81 for (uint8_t bank = bank1; bank<=bank2; bank++)
86 mask = (mask >> ((y1 & 7) + 7 - (y2 & 7))) << (7 - (y2 & 7));
88 else if (bank1 == bank)
90 mask = (mask << (y1 & 7));
92 else if (bank2 == bank)
94 mask = (mask >> (7 - (y2 & 7)));
96 for (uint8_t x=x1; x<x2; x++)
98 m_bytes[BADDR(bank) + x] &= ~mask;
99 m_bytes[BADDR(bank) + x] |= (templ & mask);
107 for(uint16_t i=0; i<m_w* (m_h >> 3); i++)
109 m_bytes[i] = m_invertByte;
116 uint8_t i, j, topMask, bottomMask;
119 topMask = (0xFF >> (8 - (y & 0x7)));
120 bottomMask = (0xFF << (y & 0x7));
123 uint8_t c = ch[j] - 32;
129 if ( style == STYLE_NORMAL )
131 data = pgm_read_byte(&s_font6x8[c*6+i]);
133 else if ( style == STYLE_BOLD )
135 data = pgm_read_byte(&s_font6x8[c*6+i]);
136 uint8_t temp = data | ldata;
142 data = pgm_read_byte(&s_font6x8[c*6+i + 1]);
143 uint8_t temp = (data & 0xF0) | ldata;
144 ldata = (data & 0x0F);
147 m_bytes[YADDR(y) + x] &= topMask;
148 m_bytes[YADDR(y) + x] |= (data << (y & 0x7));
151 m_bytes[YADDR(y) + m_w + x] &= bottomMask;
152 m_bytes[YADDR(y) + m_w + x] |= (data >> (8 - (y & 0x7)));
166 if (x >= m_w) { x++;
continue; }
167 uint8_t d = pgm_read_byte(&sprite[i]);
169 m_bytes[YADDR(y) + x] |= (d << (y & 0x7));
170 if ((uint8_t)(y + 8) < m_h)
171 m_bytes[YADDR((uint8_t)(y + 8)) + x] |= (d >> (8 - (y & 0x7)));
182 if (x>=m_w) { x++;
continue; }
183 uint8_t d = sprite[i];
184 if (uint8_t(y) < m_h)
185 m_bytes[YADDR(y) + x] |= (d << (y & 0x7));
186 if ((uint8_t)(y+8) < m_h)
187 m_bytes[YADDR((uint8_t)(y + 8)) + x] |= (d >> (8 - (y & 0x7)));
195 for(i = 0; i < sprite->
w; i++)
197 if ((sprite->
x + i) >= m_w) {
continue; }
198 uint8_t d = pgm_read_byte(&sprite->
data[i]);
200 m_bytes[YADDR(sprite->
y) + sprite->
x + i] |= (d << (sprite->
y & 0x7));
201 if (uint8_t(sprite->
y + 8) < m_h)
202 m_bytes[YADDR(uint8_t(sprite->
y + 8)) + sprite->
x + i] |= (d >> (8 - (sprite->
y & 0x7)));
213 for(uint16_t i=0; i<m_w* (m_h >> 3); i++)
214 m_bytes[i] = ~m_bytes[i];
219 for (uint8_t y=0; y<(m_h>>3); y++)
220 for (uint8_t x=0; x<m_w>>1; x++)
222 uint8_t temp = m_bytes[YADDR(y) + x];
223 m_bytes[YADDR(y) + x] = m_bytes[YADDR(y) + m_w - x -1];
224 m_bytes[YADDR(y) + m_w - x -1] = temp;
void charF6x8(uint8_t x, uint8_t y, const char ch[], EFontStyle style=STYLE_NORMAL)
void fillRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t templ)
const uint8_t * data
Pointer to PROGMEM data, representing sprite image.
void drawSpritePgm(uint8_t x, uint8_t y, const uint8_t sprite[])
void drawSprite(uint8_t x, uint8_t y, const uint8_t sprite[])
void drawVLine(uint8_t x1, uint8_t y1, uint8_t y2)
uint8_t y
draw position Y on the screen
void drawRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
uint8_t x
draw position X on the screen
void ssd1306_drawBuffer(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void blt(uint8_t x, uint8_t y)
void putPixel(uint8_t x, uint8_t y)
void drawHLine(uint8_t x1, uint8_t y1, uint8_t x2)