From c13641ab1f37caabd0f2a7ca240801149d91db06 Mon Sep 17 00:00:00 2001 From: Shuanglei Tao Date: Fri, 21 Feb 2025 22:02:34 +0800 Subject: [PATCH] always power off after refresh --- EPD/EPD_4in2.c | 36 +++++++++++++++++++----------------- EPD/EPD_4in2b_V2.c | 29 +++++++++++++++++++---------- EPD/EPD_ble.c | 2 +- EPD/EPD_driver.h | 2 +- GUI/Calendar.c | 2 +- 5 files changed, 41 insertions(+), 30 deletions(-) diff --git a/EPD/EPD_4in2.c b/EPD/EPD_4in2.c index 4beadad..33bb210 100644 --- a/EPD/EPD_4in2.c +++ b/EPD/EPD_4in2.c @@ -61,15 +61,29 @@ void EPD_4IN2_ReadBusy(void) } } +void EPD_4IN2_PowerOn(void) +{ + EPD_WriteCommand(0x04); + EPD_4IN2_ReadBusy(); +} + +void EPD_4IN2_PowerOff(void) +{ + EPD_WriteCommand(0x02); + EPD_4IN2_ReadBusy(); +} + /****************************************************************************** function : Turn On Display parameter: ******************************************************************************/ -void EPD_4IN2_TurnOnDisplay(void) +void EPD_4IN2_Refresh(void) { + EPD_4IN2_PowerOn(); EPD_WriteCommand(0x12); DEV_Delay_ms(100); EPD_4IN2_ReadBusy(); + EPD_4IN2_PowerOff(); } /****************************************************************************** @@ -83,16 +97,8 @@ void EPD_4IN2_Init(void) EPD_WriteCommand(0x00); // panel setting EPD_WriteByte(0x1f); // 400x300 B/W mode, LUT from OTP - EPD_WriteCommand(0x61); // resolution setting - EPD_WriteByte (EPD_4IN2_WIDTH / 256); - EPD_WriteByte (EPD_4IN2_WIDTH % 256); - EPD_WriteByte (EPD_4IN2_HEIGHT / 256); - EPD_WriteByte (EPD_4IN2_HEIGHT % 256); - EPD_WriteCommand(0x50); // VCOM AND DATA INTERVAL SETTING EPD_WriteByte(0x97); // LUTB=0 LUTW=1 interval=10 - - EPD_WriteCommand(0x04); // POWER ON } /****************************************************************************** @@ -119,7 +125,7 @@ void EPD_4IN2_Clear(void) } } - EPD_4IN2_TurnOnDisplay(); + EPD_4IN2_Refresh(); } static void _setPartialRamArea(UWORD x, UWORD y, UWORD w, UWORD h) @@ -162,13 +168,9 @@ parameter: ******************************************************************************/ void EPD_4IN2_Sleep(void) { - EPD_WriteCommand(0x50); // DEEP_SLEEP - EPD_WriteByte(0XF7); + EPD_4IN2_PowerOff(); - EPD_WriteCommand(0x02); // POWER_OFF - EPD_4IN2_ReadBusy(); - - EPD_WriteCommand(0x07); // DEEP_SLEEP + EPD_WriteCommand(0x07); // deep sleep EPD_WriteByte(0XA5); } @@ -182,6 +184,6 @@ const epd_driver_t epd_driver_4in2 = { .send_byte = EPD_WriteByte, .send_data = EPD_WriteData, .write_image = EPD_4IN2_Write_Image, - .display = EPD_4IN2_TurnOnDisplay, + .refresh = EPD_4IN2_Refresh, .sleep = EPD_4IN2_Sleep, }; diff --git a/EPD/EPD_4in2b_V2.c b/EPD/EPD_4in2b_V2.c index 7972688..e8018ac 100644 --- a/EPD/EPD_4in2b_V2.c +++ b/EPD/EPD_4in2b_V2.c @@ -60,15 +60,29 @@ void EPD_4IN2B_V2_ReadBusy(void) DEV_Delay_ms(50); } +void EPD_4IN2B_V2_PowerOn(void) +{ + EPD_WriteCommand(0x04); + EPD_4IN2B_V2_ReadBusy(); +} + +void EPD_4IN2B_V2_PowerOff(void) +{ + EPD_WriteCommand(0x02); + EPD_4IN2B_V2_ReadBusy(); +} + /****************************************************************************** function : Turn On Display parameter: ******************************************************************************/ -void EPD_4IN2B_V2_TurnOnDisplay(void) +void EPD_4IN2B_V2_Refresh(void) { + EPD_4IN2B_V2_PowerOn(); EPD_WriteCommand(0x12); // DISPLAY_REFRESH DEV_Delay_ms(100); EPD_4IN2B_V2_ReadBusy(); + EPD_4IN2B_V2_PowerOff(); } /****************************************************************************** @@ -81,8 +95,6 @@ void EPD_4IN2B_V2_Init(void) EPD_WriteCommand(0x00); EPD_WriteByte(0x0f); - - EPD_WriteCommand(0x04); } /****************************************************************************** @@ -109,7 +121,7 @@ void EPD_4IN2B_V2_Clear(void) } } - EPD_4IN2B_V2_TurnOnDisplay(); + EPD_4IN2B_V2_Refresh(); } static void _setPartialRamArea(UWORD x, UWORD y, UWORD w, UWORD h) @@ -159,12 +171,9 @@ parameter: ******************************************************************************/ void EPD_4IN2B_V2_Sleep(void) { - EPD_WriteCommand(0X50); - EPD_WriteByte(0xf7); //border floating + EPD_4IN2B_V2_PowerOff(); - EPD_WriteCommand(0X02); //power off - EPD_4IN2B_V2_ReadBusy(); //waiting for the electronic paper IC to release the idle signal - EPD_WriteCommand(0X07); //deep sleep + EPD_WriteCommand(0X07); // deep sleep EPD_WriteByte(0xA5); } @@ -178,6 +187,6 @@ const epd_driver_t epd_driver_4in2bv2 = { .send_byte = EPD_WriteByte, .send_data = EPD_WriteData, .write_image = EPD_4IN2B_V2_Write_Image, - .display = EPD_4IN2B_V2_TurnOnDisplay, + .refresh = EPD_4IN2B_V2_Refresh, .sleep = EPD_4IN2B_V2_Sleep, }; diff --git a/EPD/EPD_ble.c b/EPD/EPD_ble.c index 477843f..1b9f270 100644 --- a/EPD/EPD_ble.c +++ b/EPD/EPD_ble.c @@ -142,7 +142,7 @@ static void epd_service_process(ble_epd_t * p_epd, uint8_t * p_data, uint16_t le break; case EPD_CMD_DISPLAY: - p_epd->driver->display(); + p_epd->driver->refresh(); break; case EPD_CMD_SLEEP: diff --git a/EPD/EPD_driver.h b/EPD/EPD_driver.h index ee6c8bf..9bc78ad 100644 --- a/EPD/EPD_driver.h +++ b/EPD/EPD_driver.h @@ -53,7 +53,7 @@ typedef struct void (*send_byte)(UBYTE Reg); /**< send byte */ void (*send_data)(UBYTE *Data, UBYTE Len); /**< send data */ void (*write_image)(UBYTE *black, UBYTE *color, UWORD x, UWORD y, UWORD w, UWORD h); /**< write image */ - void (*display)(void); /**< Sends the image buffer in RAM to e-Paper and displays */ + void (*refresh)(void); /**< Sends the image buffer in RAM to e-Paper and displays */ void (*sleep)(void); /**< Enter sleep mode */ } epd_driver_t; diff --git a/GUI/Calendar.c b/GUI/Calendar.c index f597787..faefa6c 100644 --- a/GUI/Calendar.c +++ b/GUI/Calendar.c @@ -103,6 +103,6 @@ void DrawCalendar(uint32_t timestamp) GFX_end(&gfx); NRF_LOG_PRINTF("display start\n"); - driver->display(); + driver->refresh(); NRF_LOG_PRINTF("display end\n"); }