From aa804d5ac60a29acdb864645c0cff7ee953c9cec Mon Sep 17 00:00:00 2001 From: IOsetting Date: Sun, 12 Mar 2023 02:36:33 +0800 Subject: [PATCH] refactor: epd lib enhancements --- Libraries/EPaper/Lib/EPD_1in54.c | 44 ++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/Libraries/EPaper/Lib/EPD_1in54.c b/Libraries/EPaper/Lib/EPD_1in54.c index 01c88b0..033b054 100644 --- a/Libraries/EPaper/Lib/EPD_1in54.c +++ b/Libraries/EPaper/Lib/EPD_1in54.c @@ -143,6 +143,28 @@ static void EPD_1IN54_SendData(UBYTE Data) EPD_Digital_Write(EPD_CS_PIN, 1); } +static void EPD_1IN54_SendDataArray(const UBYTE *Data, UWORD len) +{ + EPD_Digital_Write(EPD_DC_PIN, 1); + EPD_Digital_Write(EPD_CS_PIN, 0); + while (len--) + { + EPD_SPI_WriteByte(*Data++); + } + EPD_Digital_Write(EPD_CS_PIN, 1); +} + +static void EPD_1IN54_SendDataBurst(const UBYTE Data, UWORD len) +{ + EPD_Digital_Write(EPD_DC_PIN, 1); + EPD_Digital_Write(EPD_CS_PIN, 0); + while (len--) + { + EPD_SPI_WriteByte(Data); + } + EPD_Digital_Write(EPD_CS_PIN, 1); +} + /****************************************************************************** function : Wait until the busy_pin goes LOW parameter: @@ -235,13 +257,9 @@ void EPD_1IN54_Init(UBYTE Mode) //set the look-up table register EPD_1IN54_SendCommand(0x32); if(Mode == EPD_1IN54_FULL){ - for (UWORD i = 0; i < 30; i++) { - EPD_1IN54_SendData(EPD_1IN54_lut_full_update[i]); - } + EPD_1IN54_SendDataArray(EPD_1IN54_lut_full_update, 30); }else if(Mode == EPD_1IN54_PART){ - for (UWORD i = 0; i < 30; i++) { - EPD_1IN54_SendData(EPD_1IN54_lut_partial_update[i]); - } + EPD_1IN54_SendDataArray(EPD_1IN54_lut_partial_update, 30); }else{ EPD_Printf("error, the Mode is EPD_1IN54_FULL or EPD_1IN54_PART"); } @@ -261,9 +279,7 @@ void EPD_1IN54_Clear(void) for (UWORD j = 0; j < Height; j++) { EPD_1IN54_SetCursor(0, j); EPD_1IN54_SendCommand(0x24); - for (UWORD i = 0; i < Width; i++) { - EPD_1IN54_SendData(0XFF); - } + EPD_1IN54_SendDataBurst(0xFF, Width); } EPD_1IN54_TurnOnDisplay(); } @@ -278,16 +294,16 @@ void EPD_1IN54_Display(UBYTE *Image) Width = (EPD_1IN54_WIDTH % 8 == 0)? (EPD_1IN54_WIDTH / 8 ): (EPD_1IN54_WIDTH / 8 + 1); Height = EPD_1IN54_HEIGHT; - UDOUBLE Addr = 0; // UDOUBLE Offset = ImageName; EPD_1IN54_SetWindow(0, 0, EPD_1IN54_WIDTH, EPD_1IN54_HEIGHT); for (UWORD j = 0; j < Height; j++) { EPD_1IN54_SetCursor(0, j); EPD_1IN54_SendCommand(0x24); - for (UWORD i = 0; i < Width; i++) { - Addr = i + j * Width; - EPD_1IN54_SendData(Image[Addr]); - } + EPD_1IN54_SendDataArray(Image + (j * Width), Width); + // for (UWORD i = 0; i < Width; i++) { + // Addr = i + j * Width; + // EPD_1IN54_SendData(Image[Addr]); + // } } EPD_1IN54_TurnOnDisplay(); }