55#include "esp_lcd_panel_ops.h"
66#include "esp_lcd_panel_rgb.h"
77
8+ #include "machine_hw_spi.c"
89#include "py/runtime.h"
910
10- #define DEBUG_printf (...)
11+ #define DEBUG_printf (...) // mp_printf(&mp_plat_print, __VA_ARGS__);
12+
13+ void hal_lcd_spi_panel_construct (lcd_spi_panel_obj_t * self ) {
14+ machine_hw_spi_obj_t * spi_obj = ((machine_hw_spi_obj_t * )self -> spi_obj );
15+ // if (spi_obj == NULL) {
16+ // mp_raise_msg_varg(&mp_type_OSError, "null");
17+ // }
18+ // machine_hw_spi_deinit_internal(spi_obj);
19+ // spi_bus_config_t buscfg = {
20+ // .sclk_io_num = spi_obj->sck,
21+ // .mosi_io_num = spi_obj->mosi,
22+ // .miso_io_num = -1,
23+ // .quadwp_io_num = -1,
24+ // .quadhd_io_num = -1,
25+ // .max_transfer_sz = self->width * self->height * 2 + 8
26+ // };
27+ // esp_err_t ret = spi_bus_initialize(spi_obj->host, &buscfg, SPI_DMA_CH_AUTO);
28+ // if (ret != 0) {
29+ // mp_raise_msg_varg(&mp_type_OSError, "%d(spi_bus_initialize)", ret);
30+ // }
31+
32+ esp_lcd_panel_io_spi_config_t io_config = {
33+ .dc_gpio_num = mp_hal_get_pin_obj (self -> dc ),
34+ .cs_gpio_num = mp_hal_get_pin_obj (self -> cs ),
35+ .pclk_hz = self -> pclk ,
36+ .lcd_cmd_bits = self -> cmd_bits ,
37+ .lcd_param_bits = self -> param_bits ,
38+ .spi_mode = 0 ,
39+ .trans_queue_depth = 4 ,
40+ };
41+
42+ // Attach the LCD to the SPI bus
43+ esp_err_t ret = esp_lcd_new_panel_io_spi ((esp_lcd_spi_bus_handle_t )spi_obj -> host , & io_config , & self -> io_handle );
44+ if (ret != 0 ) {
45+ mp_raise_msg_varg (& mp_type_OSError , "%d(esp_lcd_new_panel_io_spi)" , ret );
46+ }
47+ }
48+
49+
50+ inline void hal_lcd_spi_panel_tx_param (lcd_spi_panel_obj_t * self , int lcd_cmd , const void * param , size_t param_size ) {
51+ DEBUG_printf ("tx_param cmd: %x, param_size: %u\n" , lcd_cmd , param_size );
52+ esp_lcd_panel_io_tx_param (self -> io_handle , lcd_cmd , param , param_size );
53+ }
54+
55+
56+ inline void hal_lcd_spi_panel_tx_color (lcd_spi_panel_obj_t * self , int lcd_cmd , const void * color , size_t color_size ) {
57+ DEBUG_printf ("tx_color cmd: %x, color_size: %u\n" , lcd_cmd , color_size );
58+ esp_lcd_panel_io_tx_color (self -> io_handle , lcd_cmd , color , color_size );
59+ }
60+
61+
62+ inline void hal_lcd_spi_panel_deinit (lcd_spi_panel_obj_t * self ) {
63+ esp_lcd_panel_io_del (self -> io_handle );
64+ }
65+
1166
1267void hal_lcd_i80_construct (lcd_i80_obj_t * self ) {
1368 esp_lcd_i80_bus_config_t bus_config = {
@@ -58,24 +113,25 @@ void hal_lcd_i80_construct(lcd_i80_obj_t *self) {
58113}
59114
60115
61- void hal_lcd_i80_tx_param (lcd_i80_obj_t * self , int lcd_cmd , const void * param , size_t param_size ) {
116+ inline void hal_lcd_i80_tx_param (lcd_i80_obj_t * self , int lcd_cmd , const void * param , size_t param_size ) {
62117 DEBUG_printf ("tx_param cmd: %x, param_size: %u\n" , lcd_cmd , param_size );
63118 esp_lcd_panel_io_tx_param (self -> io_handle , lcd_cmd , param , param_size );
64119}
65120
66121
67- void hal_lcd_i80_tx_color (lcd_i80_obj_t * self , int lcd_cmd , const void * color , size_t color_size ) {
122+ inline void hal_lcd_i80_tx_color (lcd_i80_obj_t * self , int lcd_cmd , const void * color , size_t color_size ) {
68123 DEBUG_printf ("tx_color cmd: %x, color_size: %u\n" , lcd_cmd , color_size );
69124 esp_lcd_panel_io_tx_color (self -> io_handle , lcd_cmd , color , color_size );
70125}
71126
72127
73- void hal_lcd_i80_deinit (lcd_i80_obj_t * self ) {
128+ inline void hal_lcd_i80_deinit (lcd_i80_obj_t * self ) {
74129 esp_lcd_panel_io_del (self -> io_handle );
75130 esp_lcd_del_i80_bus (self -> i80_bus );
76131}
77132
78133
134+ #if RGB_LCD_SUPPORTED
79135void hal_lcd_rgb_construct (lcd_rgb_obj_t * self ) {
80136 esp_lcd_rgb_panel_config_t panel_config = {
81137 .clk_src = LCD_CLK_SRC_PLL160M ,
@@ -183,3 +239,4 @@ inline void hal_lcd_rgb_invert_color(lcd_rgb_obj_t *self, bool invert_color_data
183239inline void hal_lcd_rgb_disp_off (lcd_rgb_obj_t * self , bool off ) {
184240 esp_lcd_panel_disp_off (self -> panel_handle , off );
185241}
242+ #endif
0 commit comments