11#include "spi_panel.h"
22#include "lcd_panel.h"
33
4-
5- #if USE_ESP_LCD
4+ #include "modmachine.h"
5+ #include "extmod/machine_spi.h"
66#include "hal/esp32/esp32.h"
7- #else
8- #include "hal/commom/soft8080.h"
9- #endif
7+ #include "hal/commom/softspi.h"
108
119#include "mphalport.h"
1210
1715#include <string.h>
1816
1917
20- STATIC void lcd_spi_panel_print (
21- const mp_print_t * print ,
22- mp_obj_t self_in , mp_print_kind_t kind
23- ) {
18+ STATIC void lcd_spi_panel_print (const mp_print_t * print ,
19+ mp_obj_t self_in ,
20+ mp_print_kind_t kind )
21+ {
2422 (void ) kind ;
2523 lcd_spi_panel_obj_t * self = MP_OBJ_TO_PTR (self_in );
2624 mp_printf (
2725 print ,
28- "<SPI Panel SPI=%p, dc=%p, write=%p, cs=%p, width=%u, height=%u, cmd_bits=%u, param_bits=%u>" ,
26+ "<SPI Panel SPI=%p, dc=%p, cs=%p, width=%u, height=%u, cmd_bits=%u, param_bits=%u>" ,
2927 self -> spi_obj ,
3028 self -> dc ,
31- self -> wr ,
3229 self -> cs ,
3330 self -> width ,
3431 self -> height ,
@@ -38,20 +35,19 @@ STATIC void lcd_spi_panel_print(
3835}
3936
4037
41- STATIC mp_obj_t lcd_spi_panel_make_new (
42- const mp_obj_type_t * type ,
43- size_t n_args ,
44- size_t n_kw ,
45- const mp_obj_t * all_args
46- ) {
38+ STATIC mp_obj_t lcd_spi_panel_make_new (const mp_obj_type_t * type ,
39+ size_t n_args ,
40+ size_t n_kw ,
41+ const mp_obj_t * all_args )
42+ {
4743 enum {
4844 ARG_spi ,
4945 ARG_command ,
5046 ARG_cs ,
5147 ARG_pclk ,
5248 ARG_width ,
5349 ARG_height ,
54- ARG_swap_color_bytes ,
50+ // ARG_swap_color_bytes,
5551 ARG_cmd_bits ,
5652 ARG_param_bits
5753 };
@@ -62,7 +58,7 @@ STATIC mp_obj_t lcd_spi_panel_make_new(
6258 { MP_QSTR_pclk , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 10000000 } },
6359 { MP_QSTR_width , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 240 } },
6460 { MP_QSTR_height , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 240 } },
65- { MP_QSTR_swap_color_bytes , MP_ARG_BOOL | MP_ARG_KW_ONLY , {.u_bool = false } },
61+ // { MP_QSTR_swap_color_bytes, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false } },
6662 { MP_QSTR_cmd_bits , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 8 } },
6763 { MP_QSTR_param_bits , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 8 } },
6864 };
@@ -89,12 +85,18 @@ STATIC mp_obj_t lcd_spi_panel_make_new(
8985 self -> cmd_bits = args [ARG_cmd_bits ].u_int ;
9086 self -> param_bits = args [ARG_param_bits ].u_int ;
9187
92- hal_lcd_spi_panel_construct (& self -> base );
88+ if (mp_obj_is_type (self -> spi_obj , & machine_hw_spi_type )) {
89+ hal_lcd_spi_panel_construct (& self -> base );
90+ } else if (mp_obj_is_type (self -> spi_obj , & mp_machine_soft_spi_type )) {
91+ hal_lcd_softspi_panel_construct (& self -> base );
92+ }
93+
9394 return MP_OBJ_FROM_PTR (self );
9495}
9596
9697
97- STATIC mp_obj_t lcd_spi_panel_tx_param (size_t n_args , const mp_obj_t * args_in ){
98+ STATIC mp_obj_t lcd_spi_panel_tx_param (size_t n_args , const mp_obj_t * args_in )
99+ {
98100 mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (args_in [0 ]);
99101 int cmd = mp_obj_get_int (args_in [1 ]);
100102 if (n_args == 3 ) {
@@ -110,7 +112,8 @@ STATIC mp_obj_t lcd_spi_panel_tx_param(size_t n_args, const mp_obj_t *args_in){
110112STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (lcd_spi_panel_tx_param_obj , 2 , 3 , lcd_spi_panel_tx_param );
111113
112114
113- STATIC mp_obj_t lcd_spi_panel_tx_color (size_t n_args , const mp_obj_t * args_in ) {
115+ STATIC mp_obj_t lcd_spi_panel_tx_color (size_t n_args , const mp_obj_t * args_in )
116+ {
114117 mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (args_in [0 ]);
115118 int cmd = mp_obj_get_int (args_in [1 ]);
116119
@@ -128,7 +131,8 @@ STATIC mp_obj_t lcd_spi_panel_tx_color(size_t n_args, const mp_obj_t *args_in) {
128131STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (lcd_spi_panel_tx_color_obj , 2 , 3 , lcd_spi_panel_tx_color );
129132
130133
131- STATIC mp_obj_t lcd_spi_panel_deinit (mp_obj_t self_in ) {
134+ STATIC mp_obj_t lcd_spi_panel_deinit (mp_obj_t self_in )
135+ {
132136 mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (self_in );
133137
134138 hal_lcd_spi_panel_deinit (self );
@@ -147,10 +151,49 @@ STATIC const mp_rom_map_elem_t lcd_spi_panel_locals_dict_table[] = {
147151STATIC MP_DEFINE_CONST_DICT (lcd_spi_panel_locals_dict , lcd_spi_panel_locals_dict_table );
148152
149153
154+ STATIC inline void mp_lcd_spi_panel_tx_param (mp_obj_base_t * self ,
155+ int lcd_cmd ,
156+ const void * param ,
157+ size_t param_size )
158+ {
159+ lcd_spi_panel_obj_t * spi_panel_obj = (lcd_spi_panel_obj_t * )self ;
160+ if (mp_obj_is_type (spi_panel_obj -> spi_obj , & machine_hw_spi_type )) {
161+ hal_lcd_spi_panel_tx_param (self , lcd_cmd , param , param_size );
162+ } else if (mp_obj_is_type (spi_panel_obj -> spi_obj , & mp_machine_soft_spi_type )) {
163+ hal_lcd_softspi_panel_tx_param (self , lcd_cmd , param , param_size );
164+ }
165+ }
166+
167+
168+ STATIC inline void mp_lcd_spi_panel_tx_color (mp_obj_base_t * self ,
169+ int lcd_cmd ,
170+ const void * color ,
171+ size_t color_size )
172+ {
173+ lcd_spi_panel_obj_t * spi_panel_obj = (lcd_spi_panel_obj_t * )self ;
174+ if (mp_obj_is_type (spi_panel_obj -> spi_obj , & machine_hw_spi_type )) {
175+ hal_lcd_spi_panel_tx_color (self , lcd_cmd , color , color_size );
176+ } else if (mp_obj_is_type (spi_panel_obj -> spi_obj , & mp_machine_soft_spi_type )) {
177+ hal_lcd_softspi_panel_tx_color (self , lcd_cmd , color , color_size );
178+ }
179+ }
180+
181+
182+ STATIC inline void mp_lcd_spi_panel_deinit (mp_obj_base_t * self )
183+ {
184+ lcd_spi_panel_obj_t * spi_panel_obj = (lcd_spi_panel_obj_t * )self ;
185+ if (mp_obj_is_type (spi_panel_obj -> spi_obj , & machine_hw_spi_type )) {
186+ hal_lcd_spi_panel_deinit (self );
187+ } else if (mp_obj_is_type (spi_panel_obj -> spi_obj , & mp_machine_soft_spi_type )) {
188+ hal_lcd_softspi_panel_deinit (self );
189+ }
190+ }
191+
192+
150193STATIC const mp_lcd_panel_p_t mp_lcd_panel_p = {
151- .tx_param = hal_lcd_spi_panel_tx_param ,
152- .tx_color = hal_lcd_spi_panel_tx_color ,
153- .deinit = hal_lcd_spi_panel_deinit
194+ .tx_param = mp_lcd_spi_panel_tx_param ,
195+ .tx_color = mp_lcd_spi_panel_tx_color ,
196+ .deinit = mp_lcd_spi_panel_deinit
154197};
155198
156199
@@ -161,4 +204,4 @@ const mp_obj_type_t lcd_spi_panel_type = {
161204 .make_new = lcd_spi_panel_make_new ,
162205 .protocol = & mp_lcd_panel_p ,
163206 .locals_dict = (mp_obj_dict_t * )& lcd_spi_panel_locals_dict ,
164- };
207+ };
0 commit comments