ELW1501AA: Added partial mode.

This commit is contained in:
imi415 2022-01-21 23:31:21 +08:00
parent 4ab907c903
commit 3f1f782faa
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
2 changed files with 38 additions and 3 deletions

View File

@ -9,7 +9,7 @@ typedef struct {
} oled_ewl1501aa_t;
epd_ret_t oled_ewl1501aa_init(oled_ewl1501aa_t *ewl);
epd_ret_t oled_ewl1501aa_upload(oled_ewl1501aa_t *ewl, uint8_t *data);
epd_ret_t oled_ewl1501aa_upload(oled_ewl1501aa_t *oled, epd_coord_t *coord, uint8_t *data);
epd_ret_t oled_ewl1501aa_power(oled_ewl1501aa_t *ewl, uint8_t on);
#endif

View File

@ -40,11 +40,46 @@ static epd_ret_t oled_ewl1501aa_window(oled_ewl1501aa_t *oled, epd_coord_t *coor
return EPD_FAIL;
}
if (coord->x_end > 127 || coord->x_start > coord->x_end) {
return EPD_FAIL;
}
if (coord->y_end > 127 || coord->y_start > coord->y_end) {
return EPD_FAIL;
}
uint8_t col_start = coord->x_start / 2;
uint8_t col_end = coord->x_end / 2;
uint8_t col_cmd_buf[3] = {0x15, col_start, col_end};
uint8_t row_cmd_buf[3] = {0x75, coord->y_start, coord->y_end};
EPD_ERROR_CHECK(oled->cb.write_command_cb(oled->user_data, col_cmd_buf, 3));
EPD_ERROR_CHECK(oled->cb.write_command_cb(oled->user_data, row_cmd_buf, 3));
return EPD_OK;
}
epd_ret_t oled_ewl1501aa_upload(oled_ewl1501aa_t *ewl, uint8_t *data) {
EPD_ERROR_CHECK(ewl->cb.write_data_cb(ewl->user_data, data, 8192));
static inline uint32_t oled_ewl1501aa_data_size(epd_coord_t *coord) {
return (coord->x_end - coord->x_start) * (coord->y_end - coord->y_start) / 2;
}
epd_ret_t oled_ewl1501aa_upload(oled_ewl1501aa_t *oled, epd_coord_t *coord, uint8_t *data) {
uint32_t data_size = 8192;
if(coord != NULL) {
EPD_ERROR_CHECK(oled_ewl1501aa_window(oled, coord));
data_size = oled_ewl1501aa_data_size(coord);
}
EPD_ERROR_CHECK(oled->cb.write_data_cb(oled->user_data, data, data_size));
if(coord != NULL) {
epd_coord_t new_coord = {
.x_start = 0,
.x_end = 127,
.y_start = 0,
.y_end = 127,
};
EPD_ERROR_CHECK(oled_ewl1501aa_window(oled, &new_coord));
}
return EPD_OK;
}