|
@@ -246,7 +246,7 @@ static void vfdc_handler( u8_t *_data, int bytes_read) {
|
|
|
void grfe_handler( u8_t *data, int len) {
|
|
|
data += 8;
|
|
|
len -= 8;
|
|
|
-
|
|
|
+
|
|
|
#ifndef FULL_REFRESH
|
|
|
// force addressing mode by lines
|
|
|
if (AddressMode != AddressMode_Horizontal) {
|
|
@@ -255,7 +255,7 @@ void grfe_handler( u8_t *data, int len) {
|
|
|
}
|
|
|
|
|
|
// try to minmize I2C traffic which is very slow
|
|
|
- int rows = Display.Height / 8;
|
|
|
+ int rows = (Display.Height > 32) ? 4 : Display.Height / 8;
|
|
|
for (int r = 0; r < rows; r++) {
|
|
|
uint8_t first = 0, last;
|
|
|
uint8_t *optr = Display.Framebuffer + r*Display.Width, *iptr = data + r;
|
|
@@ -281,12 +281,15 @@ void grfe_handler( u8_t *data, int len) {
|
|
|
// to be verified, but this is as fast as using a pointer on data
|
|
|
for (int i = len - 1; i >= 0; i--) data[i] = BitReverseTable256[data[i]];
|
|
|
|
|
|
+ if (Display.Height > 32) SSD1306_SetPageAddress( &Display, 0, 32/8-1);
|
|
|
+
|
|
|
// force addressing mode by columns
|
|
|
if (AddressMode != AddressMode_Vertical) {
|
|
|
AddressMode = AddressMode_Vertical;
|
|
|
SSD1306_SetDisplayAddressMode( &Display, AddressMode );
|
|
|
}
|
|
|
- SSD1306_WriteRawData( &Display, data, len);
|
|
|
+
|
|
|
+ SSD1306_WriteRawData(&Display, data, len);
|
|
|
#endif
|
|
|
}
|
|
|
|