1
1
#include "spi_panel.h"
2
2
#include "lcd_panel.h"
3
3
4
-
5
- #if USE_ESP_LCD
4
+ #include "modmachine.h"
5
+ #include "extmod/machine_spi.h"
6
6
#include "hal/esp32/esp32.h"
7
- #else
8
- #include "hal/commom/soft8080.h"
9
- #endif
7
+ #include "hal/commom/softspi.h"
10
8
11
9
#include "mphalport.h"
12
10
17
15
#include <string.h>
18
16
19
17
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
+ {
24
22
(void ) kind ;
25
23
lcd_spi_panel_obj_t * self = MP_OBJ_TO_PTR (self_in );
26
24
mp_printf (
27
25
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>" ,
29
27
self -> spi_obj ,
30
28
self -> dc ,
31
- self -> wr ,
32
29
self -> cs ,
33
30
self -> width ,
34
31
self -> height ,
@@ -38,20 +35,19 @@ STATIC void lcd_spi_panel_print(
38
35
}
39
36
40
37
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
+ {
47
43
enum {
48
44
ARG_spi ,
49
45
ARG_command ,
50
46
ARG_cs ,
51
47
ARG_pclk ,
52
48
ARG_width ,
53
49
ARG_height ,
54
- ARG_swap_color_bytes ,
50
+ // ARG_swap_color_bytes,
55
51
ARG_cmd_bits ,
56
52
ARG_param_bits
57
53
};
@@ -62,7 +58,7 @@ STATIC mp_obj_t lcd_spi_panel_make_new(
62
58
{ MP_QSTR_pclk , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 10000000 } },
63
59
{ MP_QSTR_width , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 240 } },
64
60
{ 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 } },
66
62
{ MP_QSTR_cmd_bits , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 8 } },
67
63
{ MP_QSTR_param_bits , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 8 } },
68
64
};
@@ -89,12 +85,18 @@ STATIC mp_obj_t lcd_spi_panel_make_new(
89
85
self -> cmd_bits = args [ARG_cmd_bits ].u_int ;
90
86
self -> param_bits = args [ARG_param_bits ].u_int ;
91
87
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
+
93
94
return MP_OBJ_FROM_PTR (self );
94
95
}
95
96
96
97
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
+ {
98
100
mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (args_in [0 ]);
99
101
int cmd = mp_obj_get_int (args_in [1 ]);
100
102
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){
110
112
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (lcd_spi_panel_tx_param_obj , 2 , 3 , lcd_spi_panel_tx_param );
111
113
112
114
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
+ {
114
117
mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (args_in [0 ]);
115
118
int cmd = mp_obj_get_int (args_in [1 ]);
116
119
@@ -128,7 +131,8 @@ STATIC mp_obj_t lcd_spi_panel_tx_color(size_t n_args, const mp_obj_t *args_in) {
128
131
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (lcd_spi_panel_tx_color_obj , 2 , 3 , lcd_spi_panel_tx_color );
129
132
130
133
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
+ {
132
136
mp_obj_base_t * self = (mp_obj_base_t * )MP_OBJ_TO_PTR (self_in );
133
137
134
138
hal_lcd_spi_panel_deinit (self );
@@ -147,10 +151,49 @@ STATIC const mp_rom_map_elem_t lcd_spi_panel_locals_dict_table[] = {
147
151
STATIC MP_DEFINE_CONST_DICT (lcd_spi_panel_locals_dict , lcd_spi_panel_locals_dict_table );
148
152
149
153
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
+
150
193
STATIC 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
154
197
};
155
198
156
199
@@ -161,4 +204,4 @@ const mp_obj_type_t lcd_spi_panel_type = {
161
204
.make_new = lcd_spi_panel_make_new ,
162
205
.protocol = & mp_lcd_panel_p ,
163
206
.locals_dict = (mp_obj_dict_t * )& lcd_spi_panel_locals_dict ,
164
- };
207
+ };
0 commit comments