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_inverseByte);
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_inverseByte;
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; bank2<=(y2 >> 3); 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_inverseByte;
121 uint8_t c = ch[j] - 32;
127 if ( style == STYLE_NORMAL )
129 data = pgm_read_byte(&s_font6x8[c*6+i]);
131 else if ( style == STYLE_BOLD )
133 data = pgm_read_byte(&s_font6x8[c*6+i]);
134 uint8_t temp = data | ldata;
140 data = pgm_read_byte(&s_font6x8[c*6+i + 1]);
141 uint8_t temp = (data & 0xF0) | ldata;
142 ldata = (data & 0x0F);
145 m_bytes[YADDR(y) + x] |= (data << (y & 0x7));
147 m_bytes[YADDR(y) + m_w + x] |= (data >> (8 - (y & 0x7)));
160 if (x >= m_w) { x++;
continue; }
161 uint8_t d = pgm_read_byte(&sprite[i]);
163 m_bytes[YADDR(y) + x] |= (d << (y & 0x7));
164 if ((uint8_t)(y + 8) < m_h)
165 m_bytes[YADDR((uint8_t)(y + 8)) + x] |= (d >> (8 - (y & 0x7)));
176 if (x>=m_w) { x++;
continue; }
177 uint8_t d = sprite[i];
178 if (uint8_t(y) < m_h)
179 m_bytes[YADDR(y) + x] |= (d << (y & 0x7));
180 if ((uint8_t)(y+8) < m_h)
181 m_bytes[YADDR((uint8_t)(y + 8)) + x] |= (d >> (8 - (y & 0x7)));
189 for(i = 0; i < sprite->
w; i++)
191 if ((sprite->
x + i) >= m_w) {
continue; }
192 uint8_t d = pgm_read_byte(&sprite->
data[i]);
194 m_bytes[YADDR(sprite->
y) + sprite->
x + i] |= (d << (sprite->
y & 0x7));
195 if (uint8_t(sprite->
y + 8) < m_h)
196 m_bytes[YADDR(uint8_t(sprite->
y + 8)) + sprite->
x + i] |= (d >> (8 - (sprite->
y & 0x7)));
207 for(uint16_t i=0; i<m_w* (m_h >> 3); i++)
208 m_bytes[i] = ~m_bytes[i];
213 for (uint8_t y=0; y<(m_h>>3); y++)
214 for (uint8_t x=0; x<m_w>>1; x++)
216 uint8_t temp = m_bytes[YADDR(y) + x];
217 m_bytes[YADDR(y) + x] = m_bytes[YADDR(y) + m_w - x -1];
218 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)