3131#include "common-hal/microcontroller/Pin.h"
3232#include "py/runtime.h"
3333#include "shared-bindings/digitalio/DigitalInOut.h"
34+ #include "shared-bindings/microcontroller/__init__.h"
3435
3536#include "tick.h"
3637
@@ -70,10 +71,6 @@ void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* sel
7071 common_hal_digitalio_digitalinout_construct (& self -> chip_select , chip_select );
7172 common_hal_digitalio_digitalinout_switch_to_output (& self -> chip_select , true, DRIVE_MODE_PUSH_PULL );
7273
73- self -> reset .base .type = & digitalio_digitalinout_type ;
74- common_hal_digitalio_digitalinout_construct (& self -> reset , reset );
75- common_hal_digitalio_digitalinout_switch_to_output (& self -> reset , true, DRIVE_MODE_PUSH_PULL );
76-
7774 self -> write .base .type = & digitalio_digitalinout_type ;
7875 common_hal_digitalio_digitalinout_construct (& self -> write , write );
7976 common_hal_digitalio_digitalinout_switch_to_output (& self -> write , true, DRIVE_MODE_PUSH_PULL );
@@ -93,11 +90,18 @@ void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* sel
9390 }
9491 self -> write_mask = 1 << (write -> number % num_pins_in_write_port );
9592
93+ if (reset != NULL ) {
94+ self -> reset .base .type = & digitalio_digitalinout_type ;
95+ common_hal_digitalio_digitalinout_construct (& self -> reset , reset );
96+ common_hal_digitalio_digitalinout_switch_to_output (& self -> reset , true, DRIVE_MODE_PUSH_PULL );
97+ never_reset_pin_number (reset -> number );
98+ common_hal_displayio_parallelbus_reset (self );
99+ }
100+
96101 never_reset_pin_number (command -> number );
97102 never_reset_pin_number (chip_select -> number );
98103 never_reset_pin_number (write -> number );
99104 never_reset_pin_number (read -> number );
100- never_reset_pin_number (reset -> number );
101105 for (uint8_t i = 0 ; i < 8 ; i ++ ) {
102106 never_reset_pin_number (data_pin + i );
103107 }
@@ -115,13 +119,25 @@ void common_hal_displayio_parallelbus_deinit(displayio_parallelbus_obj_t* self)
115119 reset_pin_number (self -> reset .pin -> number );
116120}
117121
122+ void common_hal_displayio_parallelbus_reset (mp_obj_t obj ) {
123+ displayio_parallelbus_obj_t * self = MP_OBJ_TO_PTR (obj );
124+
125+ common_hal_digitalio_digitalinout_set_value (& self -> reset , false);
126+ common_hal_mcu_delay_us (4 );
127+ common_hal_digitalio_digitalinout_set_value (& self -> reset , true);
128+ }
129+
130+ bool common_hal_displayio_parallelbus_bus_free (mp_obj_t obj ) {
131+ return true;
132+ }
133+
118134bool common_hal_displayio_parallelbus_begin_transaction (mp_obj_t obj ) {
119135 displayio_parallelbus_obj_t * self = MP_OBJ_TO_PTR (obj );
120136 common_hal_digitalio_digitalinout_set_value (& self -> chip_select , false);
121137 return true;
122138}
123139
124- void common_hal_displayio_parallelbus_send (mp_obj_t obj , bool command , uint8_t * data , uint32_t data_length ) {
140+ void common_hal_displayio_parallelbus_send (mp_obj_t obj , bool command , bool toggle_every_byte , uint8_t * data , uint32_t data_length ) {
125141 displayio_parallelbus_obj_t * self = MP_OBJ_TO_PTR (obj );
126142 common_hal_digitalio_digitalinout_set_value (& self -> command , !command );
127143 uint32_t * clear_write = (uint32_t * ) & self -> write_group -> OUTCLR ;
0 commit comments