Mercurial > code > home > repos > front-door-display
diff esp/update_lcd_block.h @ 7:b46679798c51
mv esp code to this repo. still trying to get correct refreshes
author | drewp@bigasterisk.com |
---|---|
date | Sun, 10 Mar 2024 15:03:53 -0700 |
parents | |
children | 47795c3121f1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/esp/update_lcd_block.h Sun Mar 10 15:03:53 2024 -0700 @@ -0,0 +1,51 @@ +#include <string> + +#include "esphome.h" +#include "esphome/components/ili9xxx/ili9xxx_display.h" +void update_lcd_block(esphome::ili9xxx::ILI9XXXDisplay *lcd, std::string &x) { + id(lcd).update(); + +#if 1 + std::string localPayload = x; + const char *buf = localPayload.data(); +#else + const char *buf = x.data(); +#endif + uint16_t seq, xp, yp, w, h; +#define readu16() \ + (static_cast<const uint16_t>(*(buf++)) | \ + (static_cast<const uint16_t>(*(buf++)) << 8)) + seq = readu16(); + xp = readu16(); + yp = readu16(); + w = readu16(); + h = readu16(); + char seqDia[] = " "; + seqDia[seq % 10] = '%'; + ESP_LOGD("dbg", + "seq=%hu%s xp=%hu, yp=%hu, w=%hu, h=%hu, full payload=%d bytes", seq, + seqDia, xp, yp, w, h, x.size()); +#if 1 + ///// v1 + id(lcd).draw_pixels_at(320+w-1-xp, yp, w, h, + reinterpret_cast<const uint8_t*>(buf), + COLOR_ORDER_BGR, + COLOR_BITNESS_888, + /*big_endian=*/false, + /*x_offset=*/0, + /*y_offset=*/0, + /*x_pad=*/0); +#elif 0 + ///// v2 + for (uint16_t y = 0; y < h; y++) { + uint16_t row = yp + y; + for (uint16_t x = 0; x < w; x++) { + id(lcd).draw_pixel_at(320-1-(xp + w-1 - x), row, Color(*buf++, *buf++, *buf++)); + } + // App.feed_wdt(); + } + #else + +#endif + id(lcd).update(); +} \ No newline at end of file