summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorMelissa LeBlanc-Williams <melissa@melissagirl.com>2019-03-23 18:34:42 -0700
committerMelissa LeBlanc-Williams <melissa@melissagirl.com>2019-03-23 18:34:42 -0700
commitfadb5a102426182f1412adbbe9d57268882f8b5f (patch)
tree9de5c868daebb0d320f789d18567a355d97893c1 /shared-module
parentfce63b17c6051072c05b6d77c6c0ae0811d6bafc (diff)
Added option to toggle cs in displayio init sequence
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/displayio/Display.c8
-rw-r--r--shared-module/displayio/Display.h3
-rw-r--r--shared-module/displayio/FourWire.c5
3 files changed, 15 insertions, 1 deletions
diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c
index 0e76a868f..f82d94799 100644
--- a/shared-module/displayio/Display.c
+++ b/shared-module/displayio/Display.c
@@ -44,7 +44,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
mp_obj_t bus, uint16_t width, uint16_t height, int16_t colstart, int16_t rowstart, uint16_t rotation,
uint16_t color_depth, uint8_t set_column_command, uint8_t set_row_command,
uint8_t write_ram_command, uint8_t set_vertical_scroll, uint8_t* init_sequence, uint16_t init_sequence_len,
- const mcu_pin_obj_t* backlight_pin) {
+ const mcu_pin_obj_t* backlight_pin, bool init_cs_toggle) {
self->color_depth = color_depth;
self->set_column_command = set_column_command;
self->set_row_command = set_row_command;
@@ -54,6 +54,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
self->colstart = colstart;
self->rowstart = rowstart;
self->auto_brightness = false;
+ self->init_cs_toggle = init_cs_toggle;
if (MP_OBJ_IS_TYPE(bus, &displayio_parallelbus_type)) {
self->begin_transaction = common_hal_displayio_parallelbus_begin_transaction;
@@ -63,6 +64,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
self->begin_transaction = common_hal_displayio_fourwire_begin_transaction;
self->send = common_hal_displayio_fourwire_send;
self->end_transaction = common_hal_displayio_fourwire_end_transaction;
+ self->set_cs = common_hal_displayio_fourwire_set_cs;
} else {
mp_raise_ValueError(translate("Unsupported display bus type"));
}
@@ -82,6 +84,10 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
uint8_t *data = cmd + 2;
self->send(self->bus, true, cmd, 1);
self->send(self->bus, false, data, data_size);
+ if (self->init_cs_toggle && self->set_cs != NULL) {
+ self->set_cs(self->bus, true);
+ self->set_cs(self->bus, false);
+ }
uint16_t delay_length_ms = 10;
if (delay) {
data_size++;
diff --git a/shared-module/displayio/Display.h b/shared-module/displayio/Display.h
index 04da68b63..250f44031 100644
--- a/shared-module/displayio/Display.h
+++ b/shared-module/displayio/Display.h
@@ -34,6 +34,7 @@
typedef bool (*display_bus_begin_transaction)(mp_obj_t bus);
typedef void (*display_bus_send)(mp_obj_t bus, bool command, uint8_t *data, uint32_t data_length);
typedef void (*display_bus_end_transaction)(mp_obj_t bus);
+typedef void (*display_bus_set_cs)(mp_obj_t bus, bool high);
typedef struct {
mp_obj_base_t base;
@@ -49,9 +50,11 @@ typedef struct {
uint64_t last_refresh;
int16_t colstart;
int16_t rowstart;
+ bool init_cs_toggle;
display_bus_begin_transaction begin_transaction;
display_bus_send send;
display_bus_end_transaction end_transaction;
+ display_bus_set_cs set_cs;
union {
digitalio_digitalinout_obj_t backlight_inout;
pulseio_pwmout_obj_t backlight_pwm;
diff --git a/shared-module/displayio/FourWire.c b/shared-module/displayio/FourWire.c
index 9da5c0701..ae1fde7ca 100644
--- a/shared-module/displayio/FourWire.c
+++ b/shared-module/displayio/FourWire.c
@@ -87,3 +87,8 @@ void common_hal_displayio_fourwire_end_transaction(mp_obj_t obj) {
common_hal_digitalio_digitalinout_set_value(&self->chip_select, true);
common_hal_busio_spi_unlock(self->bus);
}
+
+void common_hal_displayio_fourwire_set_cs(mp_obj_t obj, bool high) {
+ displayio_fourwire_obj_t* self = MP_OBJ_TO_PTR(obj);
+ common_hal_digitalio_digitalinout_set_value(&self->chip_select, high);
+}