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 | |
| parent | 399c5385d5c449cc3cde314e7a4e42f7a242a4cb (diff) | |
pervasive_aurora_mb: add partial update support
Diffstat (limited to 'src')
| -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);  }  | 
