-
Notifications
You must be signed in to change notification settings - Fork 7.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'doc/esp_lcd_class_diagram' into 'master'
RGB LCD multi-framebuffer support Closes IDF-5309, IDF-5939, and IDF-6336 See merge request espressif/esp-idf!20975
- Loading branch information
Showing
12 changed files
with
392 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# esp_lcd Driver Design | ||
|
||
## Class Diagram | ||
|
||
`esp_lcd` driver focuses on two parts: panel driver and IO driver. The panel driver is a bunch of operations on the **frame-buffer**, no matter where the frame-buffer is located. The IO driver is mainly consumed by the controller-based LCD panel drivers (e.g. ST7789). Usually such LCD controller can support various IO interfaces (e.g. I80, SPI, I2C, etc). So we define an abstract interface for the IO driver. | ||
|
||
```mermaid | ||
classDiagram | ||
class esp_lcd_panel_t { | ||
<<interface>> | ||
+reset() esp_err_t | ||
+init() esp_err_t | ||
+draw_bitmap(int x_start, int y_start, int x_end, int y_end, const void *color_data) esp_err_t | ||
+mirror(bool x_axis, bool y_axis) esp_err_t | ||
+swap_xy(bool swap_axes) esp_err_t | ||
+set_gap(int x_gap, int y_gap) esp_err_t | ||
+invert_color(bool invert_color_data) esp_err_t | ||
+disp_on_off(bool on_off) esp_err_t | ||
} | ||
esp_lcd_rgb_panel_t --|> esp_lcd_panel_t : Inheritance | ||
class esp_lcd_rgb_panel_t { | ||
-int panel_id | ||
-size_t data_width | ||
-int disp_gpio | ||
-intr_handle_t intr | ||
-uint8_t* frame_buffer | ||
-gdma_channel_handle_t gdma_channel | ||
-dma_descriptor_t* dma_nodes | ||
-on_vsync(void* user_data) bool | ||
} | ||
esp_lcd_panel_model_t --|> esp_lcd_panel_t : Inheritance | ||
esp_lcd_panel_model_t "1" --> "1" esp_lcd_panel_io_t : Use | ||
class esp_lcd_panel_model_t { | ||
-esp_lcd_panel_io_t* io | ||
-int reset_gpio_num | ||
} | ||
class esp_lcd_panel_io_t { | ||
<<interface>> | ||
+rx_param(int lcd_cmd, void *param, size_t param_size) | ||
+tx_param(int lcd_cmd, const void *param, size_t param_size) | ||
+tx_color(int lcd_cmd, const void *color, size_t color_size) | ||
} | ||
esp_lcd_panel_io_i2c_t --|> esp_lcd_panel_io_t : Inheritance | ||
class esp_lcd_panel_io_i2c_t { | ||
-int i2c_bus_id | ||
-int ctrl_phase_cmd | ||
-int ctrl_phase_data | ||
-on_color_trans_done(void* user_data) bool | ||
} | ||
esp_lcd_panel_io_spi_t --|> esp_lcd_panel_io_t : Inheritance | ||
class esp_lcd_panel_io_spi_t { | ||
-spi_device_handle_t spi_dev | ||
-int dc_gpio_num | ||
-spi_transaction_t trans_worker | ||
-on_color_trans_done(void* user_data) bool | ||
} | ||
esp_lcd_panel_io_i80_t --|> esp_lcd_panel_io_t : Inheritance | ||
class esp_lcd_panel_io_i80_t { | ||
-esp_lcd_i80_bus_t* bus | ||
-int cs_gpio_num | ||
-int dc_level | ||
-size_t pclk_hz | ||
-QueueHandle_t trans_queue | ||
-QueueHandle_t done_queue | ||
-on_color_trans_done(void* user_data) bool | ||
} | ||
esp_lcd_i80_bus_t "1" --> "1..*" esp_lcd_panel_io_i80_t : Has | ||
class esp_lcd_i80_bus_t { | ||
-int bus_id | ||
-size_t data_width | ||
-intr_handle_t intr | ||
-gdma_cannel_handle_t dma_chan | ||
-dma_descriptor_t* dma_nodes | ||
-list_t i80_devices | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.