|
79 | 79 | mp_lcd_err_t i80_tx_color(mp_obj_t obj, int lcd_cmd, void *color, size_t color_size, int x_start, int y_start, int x_end, int y_end); |
80 | 80 | mp_lcd_err_t i80_del(mp_obj_t obj); |
81 | 81 | mp_lcd_err_t i80_init(mp_obj_t obj, uint16_t width, uint16_t height, uint8_t bpp, uint32_t buffer_size, bool rgb565_byte_swap, uint8_t cmd_bits, uint8_t param_bits); |
82 | | - mp_lcd_err_t i80_get_lane_count(mp_obj_t obj, uint8_t *lane_count); |
83 | 82 |
|
84 | 83 | void write_color8(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size); |
85 | 84 | void write_color16(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size); |
|
103 | 102 | enum { |
104 | 103 | ARG_dc, |
105 | 104 | ARG_wr, |
106 | | - ARG_data0, |
107 | | - ARG_data1, |
108 | | - ARG_data2, |
109 | | - ARG_data3, |
110 | | - ARG_data4, |
111 | | - ARG_data5, |
112 | | - ARG_data6, |
113 | | - ARG_data7, |
114 | | - ARG_data8, |
115 | | - ARG_data9, |
116 | | - ARG_data10, |
117 | | - ARG_data11, |
118 | | - ARG_data12, |
119 | | - ARG_data13, |
120 | | - ARG_data14, |
121 | | - ARG_data15, |
| 105 | + ARG_data_pins, |
122 | 106 | ARG_cs, |
123 | 107 | ARG_freq, |
124 | 108 | ARG_dc_idle_high, |
|
129 | 113 | ARG_param_bits, |
130 | 114 | ARG_cs_active_high, |
131 | 115 | ARG_reverse_color_bits, |
132 | | - ARG_swap_color_bytes, |
133 | 116 | ARG_pclk_active_low, |
134 | 117 | ARG_pclk_idle_low, |
135 | 118 | }; |
|
151 | 134 | const mp_arg_t make_new_args[] = { |
152 | 135 | { MP_QSTR_dc, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
153 | 136 | { MP_QSTR_wr, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
154 | | - { MP_QSTR_data0, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
155 | | - { MP_QSTR_data1, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
156 | | - { MP_QSTR_data2, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
157 | | - { MP_QSTR_data3, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
158 | | - { MP_QSTR_data4, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
159 | | - { MP_QSTR_data5, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
160 | | - { MP_QSTR_data6, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
161 | | - { MP_QSTR_data7, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
162 | | - { MP_QSTR_data8, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
163 | | - { MP_QSTR_data9, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
164 | | - { MP_QSTR_data10, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
165 | | - { MP_QSTR_data11, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
166 | | - { MP_QSTR_data12, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
167 | | - { MP_QSTR_data13, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
168 | | - { MP_QSTR_data14, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
169 | | - { MP_QSTR_data15, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
| 137 | + { MP_QSTR_data_pins, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
170 | 138 | { MP_QSTR_cs, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
171 | 139 | { MP_QSTR_freq, MP_ARG_INT | MP_ARG_KW_ONLY, { .u_int = 10000000 } }, |
172 | 140 | { MP_QSTR_dc_idle_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
|
175 | 143 | { MP_QSTR_dc_data_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = true } }, |
176 | 144 | { MP_QSTR_cs_active_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
177 | 145 | { MP_QSTR_reverse_color_bits, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
178 | | - { MP_QSTR_swap_color_bytes, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
179 | 146 | { MP_QSTR_pclk_active_low, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
180 | 147 | { MP_QSTR_pclk_idle_low, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } } |
181 | 148 | }; |
|
219 | 186 | mp_hal_pin_write(self->bus_config.dc_gpio_num, self->panel_io_config.dc_levels.dc_data_level); |
220 | 187 | mp_hal_pin_write(self->bus_config.wr_gpio_num, 0); |
221 | 188 |
|
222 | | - self->bus_config.data_gpio_nums[0] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data0].u_obj); |
223 | | - self->bus_config.data_gpio_nums[1] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data1].u_obj); |
224 | | - self->bus_config.data_gpio_nums[2] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data2].u_obj); |
225 | | - self->bus_config.data_gpio_nums[3] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data3].u_obj); |
226 | | - self->bus_config.data_gpio_nums[4] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data4].u_obj); |
227 | | - self->bus_config.data_gpio_nums[5] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data5].u_obj); |
228 | | - self->bus_config.data_gpio_nums[6] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data6].u_obj); |
229 | | - self->bus_config.data_gpio_nums[7] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data7].u_obj); |
230 | | - if (args[ARG_data8].u_obj == mp_const_none) { |
231 | | - self->bus_config.bus_width = 8; |
232 | | - } else { |
233 | | - self->bus_config.data_gpio_nums[8] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data8].u_obj); |
234 | | - self->bus_config.data_gpio_nums[9] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data9].u_obj); |
235 | | - self->bus_config.data_gpio_nums[10] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data10].u_obj); |
236 | | - self->bus_config.data_gpio_nums[11] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data11].u_obj); |
237 | | - self->bus_config.data_gpio_nums[12] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data12].u_obj); |
238 | | - self->bus_config.data_gpio_nums[13] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data13].u_obj); |
239 | | - self->bus_config.data_gpio_nums[14] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data14].u_obj); |
240 | | - self->bus_config.data_gpio_nums[15] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(args[ARG_data15].u_obj); |
241 | | - self->bus_config.bus_width = 16; |
| 189 | + mp_obj_tuple_t *data_pins = (mp_obj_tuple_t *)MP_OBJ_TO_PTR(args[ARG_data_pins].u_obj); |
| 190 | + |
| 191 | + for (size_t i = 0; i < data_pins->len; i++) { |
| 192 | + self->bus_config.data_gpio_nums[i] = (mp_hal_pin_obj_t)mp_hal_get_pin_obj(data_pins->items[i]); |
242 | 193 | } |
243 | 194 |
|
| 195 | + self->bus_config.bus_width = (size_t)data_pins->len; |
| 196 | + self->lane_count = (uint8_t)self->bus_config.bus_width; |
| 197 | + |
244 | 198 | mp_hal_pin_obj_t pin; |
245 | 199 |
|
246 | 200 | for ( uint8_t i = 0; i < self->bus_config.bus_width; i++) { |
|
269 | 223 | self->panel_io_handle.rx_param = i80_rx_param; |
270 | 224 | self->panel_io_handle.del = i80_del; |
271 | 225 | self->panel_io_handle.init = i80_init; |
272 | | - self->panel_io_handle.get_lane_count = i80_get_lane_count; |
273 | 226 | #endif /* defined(mp_hal_pin_output) || defined(IDF_VER) */ |
274 | 227 |
|
275 | 228 | return MP_OBJ_FROM_PTR(self); |
|
437 | 390 | return LCD_OK; |
438 | 391 | } |
439 | 392 |
|
440 | | - |
441 | | - mp_lcd_err_t i80_get_lane_count(mp_obj_t obj, uint8_t *lane_count) |
442 | | - { |
443 | | - mp_lcd_i80_bus_obj_t *self = MP_OBJ_TO_PTR(obj); |
444 | | - *lane_count = (uint8_t)self->bus_config.bus_width; |
445 | | - return LCD_OK; |
446 | | - } |
447 | | - |
448 | | - |
449 | 393 | /* transfer functions */ |
450 | 394 | void write_color8(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size) |
451 | 395 | { |
|
0 commit comments