fix write image command

This commit is contained in:
Shuanglei Tao
2025-06-07 10:58:00 +08:00
parent 07f8e91cdc
commit bc8cf3b160
5 changed files with 36 additions and 13 deletions

View File

@@ -33,12 +33,11 @@ typedef struct
void (*init)(); /**< Initialize the e-Paper register */ void (*init)(); /**< Initialize the e-Paper register */
void (*clear)(bool refresh); /**< Clear screen */ void (*clear)(bool refresh); /**< Clear screen */
void (*write_image)(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y, uint16_t w, uint16_t h); /**< write image */ void (*write_image)(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y, uint16_t w, uint16_t h); /**< write image */
void (*write_ram)(bool begin, bool black, uint8_t *data, uint8_t len); /* write data to epd ram */
void (*refresh)(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 */ void (*sleep)(void); /**< Enter sleep mode */
int8_t (*read_temp)(void); /**< Read temperature from driver chip */ int8_t (*read_temp)(void); /**< Read temperature from driver chip */
void (*force_temp)(int8_t value); /**< Force temperature (will trigger OTP LUT switch) */ void (*force_temp)(int8_t value); /**< Force temperature (will trigger OTP LUT switch) */
uint8_t cmd_write_ram1; /**< Command to write black ram */
uint8_t cmd_write_ram2; /**< Command to write red ram */
} epd_driver_t; } epd_driver_t;
typedef enum typedef enum

View File

@@ -161,11 +161,7 @@ static void epd_service_on_write(ble_epd_t * p_epd, uint8_t * p_data, uint16_t l
case EPD_CMD_WRITE_IMAGE: // MSB=0000: ram begin, LSB=1111: black case EPD_CMD_WRITE_IMAGE: // MSB=0000: ram begin, LSB=1111: black
if (length < 3) return; if (length < 3) return;
if ((p_data[1] >> 4) == 0x00) { p_epd->epd->drv->write_ram((p_data[1] >> 4) == 0x00, (p_data[1] & 0x0F) == 0x0F, &p_data[2], length - 2);
bool black = (p_data[1] & 0x0F) == 0x0F;
EPD_WriteCmd(black ? p_epd->epd->drv->cmd_write_ram1 : p_epd->epd->drv->cmd_write_ram2);
}
EPD_WriteData(&p_data[2], length - 2);
break; break;
case EPD_CMD_SET_CONFIG: case EPD_CMD_SET_CONFIG:

View File

@@ -172,6 +172,13 @@ void JD79668_Write_Image(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y,
} }
} }
void JD79668_Wite_Ram(bool begin, bool black, uint8_t *data, uint8_t len)
{
if (begin)
EPD_WriteCmd(CMD_DTM);
EPD_WriteData(data, len);
}
void JD79668_Sleep(void) void JD79668_Sleep(void)
{ {
JD79668_PowerOff(); JD79668_PowerOff();
@@ -183,12 +190,11 @@ static epd_driver_t epd_drv_JD79668 = {
.init = JD79668_Init, .init = JD79668_Init,
.clear = JD79668_Clear, .clear = JD79668_Clear,
.write_image = JD79668_Write_Image, .write_image = JD79668_Write_Image,
.write_ram = JD79668_Wite_Ram,
.refresh = JD79668_Refresh, .refresh = JD79668_Refresh,
.sleep = JD79668_Sleep, .sleep = JD79668_Sleep,
.read_temp = JD79668_Read_Temp, .read_temp = JD79668_Read_Temp,
.force_temp = JD79668_Force_Temp, .force_temp = JD79668_Force_Temp,
.cmd_write_ram1 = CMD_DTM,
.cmd_write_ram2 = CMD_DTM,
}; };
// JD79668 400x300 Black/White/Red/Yellow // JD79668 400x300 Black/White/Red/Yellow

View File

@@ -186,6 +186,18 @@ void SSD1619_Write_Image(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y,
} }
} }
void SSD1619_Wite_Ram(bool begin, bool black, uint8_t *data, uint8_t len)
{
if (begin) {
epd_model_t *EPD = epd_get();
if (EPD->color == BWR)
EPD_WriteCmd(black ? CMD_WRITE_RAM1 : CMD_WRITE_RAM2);
else
EPD_WriteCmd(CMD_WRITE_RAM1);
}
EPD_WriteData(data, len);
}
void SSD1619_Sleep(void) void SSD1619_Sleep(void)
{ {
EPD_Write(CMD_SLEEP_MODE, 0x01); EPD_Write(CMD_SLEEP_MODE, 0x01);
@@ -196,12 +208,11 @@ static epd_driver_t epd_drv_ssd1619 = {
.init = SSD1619_Init, .init = SSD1619_Init,
.clear = SSD1619_Clear, .clear = SSD1619_Clear,
.write_image = SSD1619_Write_Image, .write_image = SSD1619_Write_Image,
.write_ram = SSD1619_Wite_Ram,
.refresh = SSD1619_Refresh, .refresh = SSD1619_Refresh,
.sleep = SSD1619_Sleep, .sleep = SSD1619_Sleep,
.read_temp = SSD1619_Read_Temp, .read_temp = SSD1619_Read_Temp,
.force_temp = SSD1619_Force_Temp, .force_temp = SSD1619_Force_Temp,
.cmd_write_ram1 = CMD_WRITE_RAM1,
.cmd_write_ram2 = CMD_WRITE_RAM2,
}; };
// SSD1619 400x300 Black/White/Red // SSD1619 400x300 Black/White/Red

View File

@@ -207,6 +207,18 @@ void UC8176_Write_Image(uint8_t *black, uint8_t *color, uint16_t x, uint16_t y,
EPD_WriteCmd(CMD_PTOUT); // partial out EPD_WriteCmd(CMD_PTOUT); // partial out
} }
void UC8176_Wite_Ram(bool begin, bool black, uint8_t *data, uint8_t len)
{
if (begin) {
epd_model_t *EPD = epd_get();
if (EPD->color == BWR)
EPD_WriteCmd(black ? CMD_DTM1 : CMD_DTM2);
else
EPD_WriteCmd(CMD_DTM2);
}
EPD_WriteData(data, len);
}
void UC8176_Sleep(void) void UC8176_Sleep(void)
{ {
UC8176_PowerOff(); UC8176_PowerOff();
@@ -219,12 +231,11 @@ static epd_driver_t epd_drv_uc8176 = {
.init = UC8176_Init, .init = UC8176_Init,
.clear = UC8176_Clear, .clear = UC8176_Clear,
.write_image = UC8176_Write_Image, .write_image = UC8176_Write_Image,
.write_ram = UC8176_Wite_Ram,
.refresh = UC8176_Refresh, .refresh = UC8176_Refresh,
.sleep = UC8176_Sleep, .sleep = UC8176_Sleep,
.read_temp = UC8176_Read_Temp, .read_temp = UC8176_Read_Temp,
.force_temp = UC8176_Force_Temp, .force_temp = UC8176_Force_Temp,
.cmd_write_ram1 = CMD_DTM1,
.cmd_write_ram2 = CMD_DTM2,
}; };
// UC8176 400x300 Black/White // UC8176 400x300 Black/White