|
79 | 79 | mp_lcd_err_ti80_tx_color(mp_obj_tobj,intlcd_cmd,void*color,size_tcolor_size,intx_start,inty_start,intx_end,inty_end); |
80 | 80 | mp_lcd_err_ti80_del(mp_obj_tobj); |
81 | 81 | mp_lcd_err_ti80_init(mp_obj_tobj,uint16_twidth,uint16_theight,uint8_tbpp,uint32_tbuffer_size,boolrgb565_byte_swap,uint8_tcmd_bits,uint8_tparam_bits); |
| 82 | +mp_lcd_err_ti80_get_lane_count(mp_obj_tobj,uint8_t*lane_count); |
82 | 83 |
|
83 | 84 | voidwrite_color8(mp_lcd_i80_bus_obj_t*self,void*color,size_tcolor_size); |
84 | 85 | voidwrite_color16(mp_lcd_i80_bus_obj_t*self,void*color,size_tcolor_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 | constmp_arg_tmake_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_ti=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_tpin; |
199 | 245 |
|
200 | 246 | for (uint8_ti=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 | returnMP_OBJ_FROM_PTR(self); |
|
390 | 437 | returnLCD_OK; |
391 | 438 | } |
392 | 439 |
|
| 440 | + |
| 441 | +mp_lcd_err_ti80_get_lane_count(mp_obj_tobj,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 | +returnLCD_OK; |
| 446 | + } |
| 447 | + |
| 448 | + |
393 | 449 | /* transfer functions */ |
394 | 450 | voidwrite_color8(mp_lcd_i80_bus_obj_t*self,void*color,size_tcolor_size) |
395 | 451 | { |
|