|
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); |
82 | 83 |
|
83 | 84 | void write_color8(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size); |
84 | 85 | void write_color16(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size); |
|
102 | 103 | enum { |
103 | 104 | ARG_dc, |
104 | 105 | ARG_wr, |
105 | | - ARG_data_pins, |
| 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, |
106 | 122 | ARG_cs, |
107 | 123 | ARG_freq, |
108 | 124 | ARG_dc_idle_high, |
|
113 | 129 | ARG_param_bits, |
114 | 130 | ARG_cs_active_high, |
115 | 131 | ARG_reverse_color_bits, |
| 132 | + ARG_swap_color_bytes, |
116 | 133 | ARG_pclk_active_low, |
117 | 134 | ARG_pclk_idle_low, |
118 | 135 | }; |
|
134 | 151 | const mp_arg_t make_new_args[] = { |
135 | 152 | { MP_QSTR_dc, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
136 | 153 | { MP_QSTR_wr, MP_ARG_OBJ | MP_ARG_REQUIRED }, |
137 | | - { MP_QSTR_data_pins, 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 } }, |
138 | 170 | { MP_QSTR_cs, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = mp_const_none } }, |
139 | 171 | { MP_QSTR_freq, MP_ARG_INT | MP_ARG_KW_ONLY, { .u_int = 10000000 } }, |
140 | 172 | { MP_QSTR_dc_idle_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
|
143 | 175 | { MP_QSTR_dc_data_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = true } }, |
144 | 176 | { MP_QSTR_cs_active_high, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
145 | 177 | { 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 } }, |
146 | 179 | { MP_QSTR_pclk_active_low, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } }, |
147 | 180 | { MP_QSTR_pclk_idle_low, MP_ARG_BOOL | MP_ARG_KW_ONLY, { .u_bool = false } } |
148 | 181 | }; |
|
186 | 219 | mp_hal_pin_write(self->bus_config.dc_gpio_num, self->panel_io_config.dc_levels.dc_data_level); |
187 | 220 | mp_hal_pin_write(self->bus_config.wr_gpio_num, 0); |
188 | 221 |
|
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]); |
| 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; |
193 | 242 | } |
194 | 243 |
|
195 | | - self->bus_config.bus_width = (size_t)data_pins->len; |
196 | | - self->lane_count = (uint8_t)self->bus_config.bus_width; |
197 | | - |
198 | 244 | mp_hal_pin_obj_t pin; |
199 | 245 |
|
200 | 246 | for ( uint8_t i = 0; i < self->bus_config.bus_width; i++) { |
|
223 | 269 | self->panel_io_handle.rx_param = i80_rx_param; |
224 | 270 | self->panel_io_handle.del = i80_del; |
225 | 271 | self->panel_io_handle.init = i80_init; |
| 272 | + self->panel_io_handle.get_lane_count = i80_get_lane_count; |
226 | 273 | #endif /* defined(mp_hal_pin_output) || defined(IDF_VER) */ |
227 | 274 |
|
228 | 275 | return MP_OBJ_FROM_PTR(self); |
|
390 | 437 | return LCD_OK; |
391 | 438 | } |
392 | 439 |
|
| 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 | + |
393 | 449 | /* transfer functions */ |
394 | 450 | void write_color8(mp_lcd_i80_bus_obj_t *self, void *color, size_t color_size) |
395 | 451 | { |
|
0 commit comments