Add support for commands with bigger width

This commit is contained in:
C47D 2021-11-25 21:49:44 -06:00
parent db8be8a4da
commit 8a065b32b6
3 changed files with 65 additions and 31 deletions

View file

@ -66,48 +66,53 @@ bool display_port_gpio_is_busy(lv_disp_drv_t *drv)
return device_busy;
}
void display_interface_send_cmd(lv_disp_drv_t *drv, uint8_t cmd, void *args, size_t args_len)
void display_interface_send_cmd(lv_disp_drv_t *drv, uint32_t cmd, cmd_width_t cmd_width, void *args, size_t args_len)
{
(void) drv;
#if defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI)
disp_wait_for_pending_transactions();
display_port_gpio_dc(drv, LV_DISPLAY_DC_CMD_MODE);
disp_spi_send_data(&cmd, 1);
if (CMD_WIDTH_8BITS == cmd_width) {
disp_spi_send_data(&cmd, 1);
}
else if (CMD_WIDTH_16BITS == cmd_width) {
/* Send 16bits cmd */
}
else {
/* Unsupported cmd size */
}
if (args != NULL) {
display_port_gpio_dc(drv, LV_DISPLAY_DC_DATA_MODE);
disp_spi_send_data(args, args_len);
}
#elif defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
(void) drv;
uint8_t *data = (uint8_t *) args;
lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, cmd, data, args_len);
#endif
}
void display_interface_send_data_async(lv_disp_drv_t *drv, void *data, size_t len)
void display_interface_send_data(lv_disp_drv_t *drv, void *data, size_t len, data_xfer_mode_t mode)
{
#if defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI)
disp_wait_for_pending_transactions();
display_port_gpio_dc(drv, LV_DISPLAY_DC_DATA_MODE);
disp_spi_send_colors(data, len);
#elif defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
(void) drv;
lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, OLED_CONTROL_BYTE_DATA_STREAM, data, len);
#endif
}
void display_interface_send_data(lv_disp_drv_t *drv, void *data, size_t len)
{
#if defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI)
disp_wait_for_pending_transactions();
display_port_gpio_dc(drv, LV_DISPLAY_DC_DATA_MODE);
disp_spi_send_colors(data, len);
if (DATA_XFER_MODE_ASYNC == mode) {
disp_spi_send_colors(data, len);
}
else if (DATA_XFER_MODE_SYNC == mode) {
/* Send data in polling mode and call lv_disp_flush after that */
}
else {
}
#elif defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
(void) drv;
lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, OLED_CONTROL_BYTE_DATA_STREAM, data, len);
#endif
}