From 2fa32adea49dd400ef26530d7c471ca32e688daf Mon Sep 17 00:00:00 2001 From: nopnop2002 Date: Thu, 12 Sep 2024 16:21:27 +0900 Subject: [PATCH] added ssd1306_rotate_image/ssd1306_display_rotate_text function --- components/ssd1306/ssd1306.c | 46 ++++++++++++++++++++++++++++++++++++ components/ssd1306/ssd1306.h | 2 ++ 2 files changed, 48 insertions(+) diff --git a/components/ssd1306/ssd1306.c b/components/ssd1306/ssd1306.c index 08854a4..d45b99a 100644 --- a/components/ssd1306/ssd1306.c +++ b/components/ssd1306/ssd1306.c @@ -672,6 +672,52 @@ void ssd1306_fadeout(SSD1306_t * dev) } } +// Rotate character image +// Only valid for 8 dots x 8 dots +void ssd1306_rotate_image(uint8_t *image, bool flip) { + uint8_t _image[8]; + uint8_t _smask = 0x01; + for (int i=0;i<8;i++) { + uint8_t _dmask = 0x80; + _image[i] = 0; + for (int j=0;j<8;j++) { + uint8_t _wk = image[j] & _smask; + ESP_LOGD(TAG, "image[%d]=0x%x _smask=0x%x _wk=0x%x", j, image[j], _smask, _wk); + if (_wk != 0) { + _image[i] = _image[i] + _dmask; + } + _dmask = _dmask >> 1; + } + _smask = _smask << 1; + } + + for (int i=0;i<8;i++) { + image[i] = _image[i]; + } + if (flip) ssd1306_flip(image, 8); +#if 0 + for (int i=0;i<8;i++) { + ESP_LOGI(TAG, "image[%d]=0x%x", i, image[i]); + } +#endif +} + +void ssd1306_display_rotate_text(SSD1306_t * dev, int seg, char * text, int text_len, bool invert) { + int _text_len = text_len; + if (_text_len > 8) _text_len = 8; + uint8_t image[8]; + int _page = dev->_pages-1; + for (uint8_t i = 0; i < _text_len; i++) { + memcpy(image, font8x8_basic_tr[(uint8_t)text[i]], 8); + ssd1306_rotate_image(image, dev->_flip); + ESP_LOGD(TAG, "_page=%d seg=%d", _page, seg); + if (invert) ssd1306_invert(image, 8); + ssd1306_display_image(dev, _page, seg, image, 8); + _page--; + if (_page < 0) return; + } +} + void ssd1306_dump(SSD1306_t dev) { printf("_address=%x\n",dev._address); diff --git a/components/ssd1306/ssd1306.h b/components/ssd1306/ssd1306.h index 9b77ff9..fe8ff3f 100644 --- a/components/ssd1306/ssd1306.h +++ b/components/ssd1306/ssd1306.h @@ -145,6 +145,8 @@ void ssd1306_flip(uint8_t *buf, size_t blen); uint8_t ssd1306_copy_bit(uint8_t src, int srcBits, uint8_t dst, int dstBits); uint8_t ssd1306_rotate_byte(uint8_t ch1); void ssd1306_fadeout(SSD1306_t * dev); +void ssd1306_rotate_image(uint8_t *image, bool flip); +void ssd1306_display_rotate_text(SSD1306_t * dev, int seg, char * text, int text_len, bool invert); void ssd1306_dump(SSD1306_t dev); void ssd1306_dump_page(SSD1306_t * dev, int page, int seg);