33 static uint8_t s_invertByte = 0x00000000;
34 const uint8_t *s_font6x8 = ssd1306xled_font6x8;
48 fill_Data ^= s_invertByte;
96 uint8_t c = ch[j] - 32;
106 if ( style == STYLE_NORMAL )
108 data = pgm_read_byte(&s_font6x8[c*6+i]);
110 else if ( style == STYLE_BOLD )
112 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i]);
118 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i + 1]);
119 data = (temp & 0xF0) | ldata;
120 ldata = (temp & 0x0F);
134 uint8_t text_index = 0;
166 uint8_t c = ch[j] - 32;
171 if ( style == STYLE_NORMAL )
173 data = pgm_read_byte(&s_font6x8[c*6+i]);
175 else if ( style == STYLE_BOLD )
177 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i]);
183 uint8_t temp = pgm_read_byte(&s_font6x8[c*6+i + 1]);
184 data = (temp & 0xF0) | ldata;
185 ldata = (temp & 0x0F);
188 data = ((data & 0x01) ? 0x03: 0x00) |
189 ((data & 0x02) ? 0x0C: 0x00) |
190 ((data & 0x04) ? 0x30: 0x00) |
191 ((data & 0x08) ? 0xC0: 0x00);
209 uint8_t text_end_pos = len * 6 + left;
210 if (text_end_pos <= right)
219 s_font6x8 = progmemFont;
242 for (uint8_t x = x1; x <= x2; x++)
251 if ((y1 >> 3) == (y2 >> 3)) {
252 uint8_t b = ((0xFF >> (7-(y2-y1))) << (y1 & 0x07))^s_invertByte;
260 for ( y = ((y1 >> 3) + 1); y <= ((y2 >> 3) - 1); y++)
283 for(j=0; j<(h >> 3); j++)
299 for(j=0; j<(h >> 3); j++)
316 for(j=0; j<(h >> 3); j++)
343 uint8_t offsety = sprite->
y & 0x7;
348 for (uint8_t i=0; i < sprite->
w; i++)
358 for (uint8_t i=0; i < sprite->
w; i++)
364 sprite->
lx = sprite->
x;
365 sprite->
ly = sprite->
y;
371 uint8_t posy = sprite->
y >> 3;
372 uint8_t offsety = sprite->
y & 0x7;
375 for (uint8_t i=0; i < sprite->
w; i++)
384 for (uint8_t i=0; i < sprite->
w; i++)
395 uint8_t y1 = sprite->
ly >> 3;
396 uint8_t y2 = (sprite->
ly + 7) >> 3;
397 if (sprite->
ly < sprite->
y)
398 y2 = min(y2, (uint8_t)((sprite->
y >> 3) - 1));
400 y1 = max(y1, (sprite->
ly + 7) >> 3);
401 for(uint8_t y = y1; y <= y2; y++)
405 for(uint8_t x = sprite->
lx; x < sprite->lx + sprite->
w; x++)
411 if (sprite->
lx != sprite->
x)
413 uint8_t x1 = sprite->
lx;
414 uint8_t x2 = sprite->
lx + sprite->
w - 1;
415 if (sprite->
x < sprite->
lx)
416 x1 = max(x1, sprite->
x + sprite->
w);
418 x2 = min((uint8_t)(sprite->
x - 1), x2);
419 for(uint8_t y = sprite->
ly >> 3; y <= (sprite->
ly + 7) >> 3; y++)
423 for(uint8_t x = x1; x <= x2; x++)
434 return {x,y,w,x,y,data,
nullptr};
void ssd1306_drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void ssd1306_negativeMode()
const uint8_t * data
Pointer to PROGMEM data, representing sprite image.
void(* ssd1306_sendByte)(uint8_t data)
void ssd1306_displayOff()
void(* ssd1306_dataStart)()
void(* ssd1306_endTransmission)()
uint8_t ssd1306_displayHeight()
void ssd1306_replaceSprite(SPRITE *sprite, const uint8_t *data)
void ssd1306_drawHLine(uint8_t x1, uint8_t y1, uint8_t x2)
void(* ssd1306_nextRamPage)()
void ssd1306_setFont6x8(const uint8_t *progmemFont)
uint8_t ssd1306_charF6x8_eol(uint8_t left, uint8_t y, const char ch[], EFontStyle style, uint8_t right)
void ssd1306_drawVLine(uint8_t x1, uint8_t y1, uint8_t y2)
void ssd1306_positiveMode()
void ssd1306_putPixels(uint8_t x, uint8_t y, uint8_t pixels)
SPRITE ssd1306_createSprite(uint8_t x, uint8_t y, uint8_t w, const uint8_t *data)
void ssd1306_drawSpriteEx(uint8_t x, uint8_t y, uint8_t w, const uint8_t *sprite)
void ssd1306_sendCommand(uint8_t command)
void ssd1306_fillScreen(uint8_t fill_Data)
void ssd1306_drawRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
void ssd1306_clearScreen()
uint8_t y
draw position Y on the screen
uint8_t ssd1306_charF12x16(uint8_t xpos, uint8_t y, const char ch[], EFontStyle style)
uint8_t ssd1306_charF6x8(uint8_t x, uint8_t y, const char ch[], EFontStyle style)
void ssd1306_clearBlock(uint8_t x, uint8_t y, uint8_t w, uint8_t h)
void ssd1306_invertMode()
uint8_t x
draw position X on the screen
uint8_t ssd1306_displayWidth()
void ssd1306_drawSprite(SPRITE *sprite)
void ssd1306_eraseTrace(SPRITE *sprite)
void ssd1306_drawBuffer(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *buf)
void ssd1306_eraseSprite(SPRITE *sprite)
void ssd1306_normalMode()
void(* ssd1306_setRamBlock)(uint8_t x, uint8_t y, uint8_t w)
void ssd1306_putPixel(uint8_t x, uint8_t y)
uint8_t lx
last draw position X on the screen
uint8_t ly
last draw position Y on the screen