diff options
author | Daniel Friesel <derf@finalrewind.org> | 2021-10-20 21:37:08 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2021-10-20 21:37:08 +0200 |
commit | 567cf679633bb81b63c8081315c9cc76cdbef0a0 (patch) | |
tree | 2a8eb24484876b24eb970d082897b7237c5cbb35 /src/driver | |
parent | 399c5385d5c449cc3cde314e7a4e42f7a242a4cb (diff) |
pervasive_aurora_mb: add partial update support
Diffstat (limited to 'src/driver')
-rw-r--r-- | src/driver/pervasive_aurora_mb.cc | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/driver/pervasive_aurora_mb.cc b/src/driver/pervasive_aurora_mb.cc index c244a72..c83f16b 100644 --- a/src/driver/pervasive_aurora_mb.cc +++ b/src/driver/pervasive_aurora_mb.cc @@ -56,7 +56,7 @@ void PervasiveAuroraMb::initialize(signed char temperature) spiWrite(0xe3, (const unsigned char[]){0x88}, 1); } -void PervasiveAuroraMb::sendImage(unsigned char *frame) +void PervasiveAuroraMb::sendImage(unsigned char *frame, unsigned int x, unsigned int y, unsigned int w, unsigned int h) { unsigned char null_int[2] = {0x00, 0x00}; spiWrite(0x10, 0, 0); @@ -71,8 +71,30 @@ void PervasiveAuroraMb::sendImage(unsigned char *frame) */ spiWrite(0x13, 0, 0); gpio.write(PERVASIVE_AURORA_CS_PIN, 0); - for (unsigned int i = 0; i < 300*(400/16); i++) { - spi.xmit(2, null_int, 0, frame); + if (w == 0 || h == 0) { + for (unsigned int i = 0; i < 300*(400/16); i++) { + spi.xmit(2, null_int, 0, frame); + } + } else { + unsigned int y1_mod = y % 8; + unsigned int y2_mod = (y + h) % 8; + for (unsigned int x_pos = 0; x_pos < 300; x_pos++) { + for (unsigned int y_pos = 0; y_pos < 400/8; y_pos++) { + if (x_pos < x || x_pos >= x+w || y_pos < y/8 || y_pos > (y+h)/8) { + // outside of update area + null_int[0] = 0xff; + } else if (y/8 == (y+h)/8) { + null_int[0] = (0xff << y2_mod) | (0xff >> (8-y1_mod)); + } else if (y_pos == y/8) { + null_int[0] = 0xff << y1_mod; + } else if (y_pos == (y+h)/8) { + null_int[0] = 0xff >> (8-y2_mod); + } else { + null_int[0] = 0x00; + } + spi.xmit(1, null_int, 0, frame); + } + } } gpio.write(PERVASIVE_AURORA_CS_PIN, 1); } |