diff --git a/EPD/EPD_driver.c b/EPD/EPD_driver.c index c301713..e8ce3b1 100644 --- a/EPD/EPD_driver.c +++ b/EPD/EPD_driver.c @@ -206,14 +206,14 @@ uint8_t EPD_ReadByte(void) return value; } -void EPD_FillRAM(uint8_t cmd, uint8_t value) +void EPD_FillRAM(uint8_t cmd, uint8_t value, uint32_t len) { uint8_t buffer[BUFFER_SIZE]; for (uint8_t i = 0; i < BUFFER_SIZE; i++) buffer[i] = value; EPD_WriteCmd(cmd); - uint16_t remaining = ((EPD->width + 7) / 8) * EPD->height; + uint16_t remaining = len; while (remaining > 0) { uint16_t chunk_size = (remaining > BUFFER_SIZE) ? BUFFER_SIZE : remaining; EPD_WriteData(buffer, chunk_size); diff --git a/EPD/EPD_driver.h b/EPD/EPD_driver.h index 3d78836..f793648 100644 --- a/EPD/EPD_driver.h +++ b/EPD/EPD_driver.h @@ -94,7 +94,7 @@ uint8_t EPD_ReadByte(void); EPD_WriteCmd(cmd); \ EPD_WriteData(_data, sizeof(_data)); \ } while (0) -void EPD_FillRAM(uint8_t cmd, uint8_t value); +void EPD_FillRAM(uint8_t cmd, uint8_t value, uint32_t len); void EPD_Reset(uint32_t value, uint16_t duration); void EPD_WaitBusy(uint32_t value, uint16_t timeout); diff --git a/EPD/SSD1619.c b/EPD/SSD1619.c index 6a56655..270471b 100644 --- a/EPD/SSD1619.c +++ b/EPD/SSD1619.c @@ -146,11 +146,12 @@ static void SSD1619_Refresh(void) void SSD1619_Clear(bool refresh) { epd_model_t *EPD = epd_get(); + uint32_t ram_bytes = ((EPD->width + 7) / 8) * EPD->height; _setPartialRamArea(0, 0, EPD->width, EPD->height); - EPD_FillRAM(CMD_WRITE_RAM1, 0xFF); - EPD_FillRAM(CMD_WRITE_RAM2, 0xFF); + EPD_FillRAM(CMD_WRITE_RAM1, 0xFF, ram_bytes); + EPD_FillRAM(CMD_WRITE_RAM2, 0xFF, ram_bytes); if (refresh) SSD1619_Refresh(); diff --git a/EPD/UC8176.c b/EPD/UC8176.c index 49865cb..3e1ba85 100644 --- a/EPD/UC8176.c +++ b/EPD/UC8176.c @@ -163,8 +163,11 @@ void UC8176_Init() void UC8176_Clear(bool refresh) { - EPD_FillRAM(CMD_DTM1, 0xFF); - EPD_FillRAM(CMD_DTM2, 0xFF); + epd_model_t *EPD = epd_get(); + uint32_t ram_bytes = ((EPD->width + 7) / 8) * EPD->height; + + EPD_FillRAM(CMD_DTM1, 0xFF, ram_bytes); + EPD_FillRAM(CMD_DTM2, 0xFF, ram_bytes); if (refresh) UC8176_Refresh();