From fadb5a102426182f1412adbbe9d57268882f8b5f Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sat, 23 Mar 2019 18:34:42 -0700 Subject: Added option to toggle cs in displayio init sequence --- shared-bindings/displayio/Display.c | 8 +++++--- shared-bindings/displayio/Display.h | 2 +- shared-bindings/displayio/FourWire.h | 2 ++ shared-module/displayio/Display.c | 8 +++++++- shared-module/displayio/Display.h | 3 +++ shared-module/displayio/FourWire.c | 5 +++++ 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 1f46330e8..3f5eef34a 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -50,7 +50,7 @@ //| Most people should not use this class directly. Use a specific display driver instead that will //| contain the initialization sequence at minimum. //| -//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None) +//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, init_cs_toggle=False) //| //| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`). //| @@ -93,7 +93,7 @@ //| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin }; + enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_init_cs_toggle }; static const mp_arg_t allowed_args[] = { { MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_init_sequence, MP_ARG_REQUIRED | MP_ARG_OBJ }, @@ -108,6 +108,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a { MP_QSTR_write_ram_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2c} }, { MP_QSTR_set_vertical_scroll, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x0} }, { MP_QSTR_backlight_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, + { MP_QSTR_init_cs_toggle, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -146,7 +147,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a args[ARG_color_depth].u_int, args[ARG_set_column_command].u_int, args[ARG_set_row_command].u_int, args[ARG_write_ram_command].u_int, args[ARG_set_vertical_scroll].u_int, - bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin)); + bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin), + args[ARG_init_cs_toggle].u_bool); return self; } diff --git a/shared-bindings/displayio/Display.h b/shared-bindings/displayio/Display.h index 7d6444a2d..407afe1c3 100644 --- a/shared-bindings/displayio/Display.h +++ b/shared-bindings/displayio/Display.h @@ -40,7 +40,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); + uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin, bool init_cs_toggle); int32_t common_hal_displayio_display_wait_for_frame(displayio_display_obj_t* self); diff --git a/shared-bindings/displayio/FourWire.h b/shared-bindings/displayio/FourWire.h index b8b00372c..a7fda2638 100644 --- a/shared-bindings/displayio/FourWire.h +++ b/shared-bindings/displayio/FourWire.h @@ -47,4 +47,6 @@ void common_hal_displayio_fourwire_send(mp_obj_t self, bool command, uint8_t *da void common_hal_displayio_fourwire_end_transaction(mp_obj_t self); +void common_hal_displayio_fourwire_set_cs(mp_obj_t self, bool high); + #endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H 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); +} -- cgit v1.2.3 From 2bb63cbeb351a93fba1f15d201d01fc608b42c53 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sat, 23 Mar 2019 18:53:04 -0700 Subject: Added new parameter description in displayio RTD comment --- shared-bindings/displayio/Display.c | 1 + 1 file changed, 1 insertion(+) diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 3f5eef34a..7f98ea8c0 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -91,6 +91,7 @@ //| :param int write_ram_command: Command used to write pixels values into the update region //| :param int set_vertical_scroll: Command used to set the first row to show //| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight +//| :param bool init_cs_toggle: Toggle the Chip Select between each initialization command. //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_init_cs_toggle }; -- cgit v1.2.3 From d2a0ec28a04b1e0ec9ea75424b1d8156ae99598a Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sat, 23 Mar 2019 19:32:15 -0700 Subject: Fixed display init on boards with displays --- ports/atmel-samd/boards/hallowing_m0_express/board.c | 3 ++- ports/atmel-samd/boards/pybadge/board.c | 3 ++- ports/atmel-samd/boards/pyportal/board.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ports/atmel-samd/boards/hallowing_m0_express/board.c b/ports/atmel-samd/boards/hallowing_m0_express/board.c index 23b119413..64d74aad0 100644 --- a/ports/atmel-samd/boards/hallowing_m0_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m0_express/board.c @@ -93,7 +93,8 @@ void board_init(void) { 0x37, // set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PA00); + &pin_PA00, + false); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pybadge/board.c b/ports/atmel-samd/boards/pybadge/board.c index 0881d8f45..2c60015da 100644 --- a/ports/atmel-samd/boards/pybadge/board.c +++ b/ports/atmel-samd/boards/pybadge/board.c @@ -99,7 +99,8 @@ void board_init(void) { 0x37, // set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PA00); + &pin_PA00, + false); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pyportal/board.c b/ports/atmel-samd/boards/pyportal/board.c index d2c328850..1395daaae 100644 --- a/ports/atmel-samd/boards/pyportal/board.c +++ b/ports/atmel-samd/boards/pyportal/board.c @@ -90,7 +90,8 @@ void board_init(void) { 0x37, // Set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PB31); + &pin_PB31, + false); common_hal_displayio_display_set_auto_brightness(display, true); } -- cgit v1.2.3 From 0c33f7fdb4bd92ba2475671fee0ad2ae841eb5ba Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sat, 23 Mar 2019 20:23:23 -0700 Subject: Enable CS toggle for displayio by default --- ports/atmel-samd/boards/hallowing_m0_express/board.c | 2 +- ports/atmel-samd/boards/pybadge/board.c | 2 +- ports/atmel-samd/boards/pyportal/board.c | 2 +- shared-bindings/displayio/Display.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ports/atmel-samd/boards/hallowing_m0_express/board.c b/ports/atmel-samd/boards/hallowing_m0_express/board.c index 64d74aad0..4f073e270 100644 --- a/ports/atmel-samd/boards/hallowing_m0_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m0_express/board.c @@ -94,7 +94,7 @@ void board_init(void) { display_init_sequence, sizeof(display_init_sequence), &pin_PA00, - false); + true); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pybadge/board.c b/ports/atmel-samd/boards/pybadge/board.c index 2c60015da..ce8c42a43 100644 --- a/ports/atmel-samd/boards/pybadge/board.c +++ b/ports/atmel-samd/boards/pybadge/board.c @@ -100,7 +100,7 @@ void board_init(void) { display_init_sequence, sizeof(display_init_sequence), &pin_PA00, - false); + true); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pyportal/board.c b/ports/atmel-samd/boards/pyportal/board.c index 1395daaae..3a306b0b4 100644 --- a/ports/atmel-samd/boards/pyportal/board.c +++ b/ports/atmel-samd/boards/pyportal/board.c @@ -91,7 +91,7 @@ void board_init(void) { display_init_sequence, sizeof(display_init_sequence), &pin_PB31, - false); + true); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 7f98ea8c0..8fed5129f 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -109,7 +109,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a { MP_QSTR_write_ram_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2c} }, { MP_QSTR_set_vertical_scroll, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x0} }, { MP_QSTR_backlight_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, - { MP_QSTR_init_cs_toggle, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} }, + { MP_QSTR_init_cs_toggle, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = true} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); -- cgit v1.2.3 From b25c4baeecc885ac31f2e92686179b4f2385cdc6 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sat, 23 Mar 2019 21:04:25 -0700 Subject: Moving Toggle to before command fixes driver issue --- shared-module/displayio/Display.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index f82d94799..8ebe4b543 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -60,6 +60,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, self->begin_transaction = common_hal_displayio_parallelbus_begin_transaction; self->send = common_hal_displayio_parallelbus_send; self->end_transaction = common_hal_displayio_parallelbus_end_transaction; + self->set_cs = NULL; } else if (MP_OBJ_IS_TYPE(bus, &displayio_fourwire_type)) { self->begin_transaction = common_hal_displayio_fourwire_begin_transaction; self->send = common_hal_displayio_fourwire_send; @@ -82,12 +83,12 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, bool delay = (data_size & DELAY) != 0; data_size &= ~DELAY; 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); } + self->send(self->bus, true, cmd, 1); + self->send(self->bus, false, data, data_size); uint16_t delay_length_ms = 10; if (delay) { data_size++; -- cgit v1.2.3 From d9de1b99263bcc906af35a78ac81a11fff9483ca Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Sun, 24 Mar 2019 08:23:46 -0700 Subject: Updated RTD comment to reflect new param defaulting True --- shared-bindings/displayio/Display.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 8fed5129f..9cefb9532 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -50,7 +50,7 @@ //| Most people should not use this class directly. Use a specific display driver instead that will //| contain the initialization sequence at minimum. //| -//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, init_cs_toggle=False) +//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, init_cs_toggle=True) //| //| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`). //| @@ -91,7 +91,7 @@ //| :param int write_ram_command: Command used to write pixels values into the update region //| :param int set_vertical_scroll: Command used to set the first row to show //| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight -//| :param bool init_cs_toggle: Toggle the Chip Select between each initialization command. +//| :param bool init_cs_toggle: Toggle the Chip Select between each initialization command //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_init_cs_toggle }; -- cgit v1.2.3 From 09a1f06bbf6b333aaa3a76dbd93e0a5f5c9d7ef4 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Tue, 26 Mar 2019 07:39:40 -0700 Subject: Added small delay inside toggle for edge cases --- shared-module/displayio/Display.c | 1 + 1 file changed, 1 insertion(+) diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index 8ebe4b543..bbc23b7b0 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -85,6 +85,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, uint8_t *data = cmd + 2; if (self->init_cs_toggle && self->set_cs != NULL) { self->set_cs(self->bus, true); + common_hal_time_delay_ms(1); self->set_cs(self->bus, false); } self->send(self->bus, true, cmd, 1); -- cgit v1.2.3 From b2ad16f5c84cd4dc853114e5fc526ab1827580a4 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Tue, 26 Mar 2019 18:34:07 -0700 Subject: Removed parameter so CS is always toggled --- ports/atmel-samd/boards/hallowing_m0_express/board.c | 3 +-- ports/atmel-samd/boards/pybadge/board.c | 3 +-- ports/atmel-samd/boards/pyportal/board.c | 3 +-- shared-bindings/displayio/Display.c | 6 ++---- shared-bindings/displayio/Display.h | 2 +- shared-module/displayio/Display.c | 5 ++--- shared-module/displayio/Display.h | 1 - 7 files changed, 8 insertions(+), 15 deletions(-) diff --git a/ports/atmel-samd/boards/hallowing_m0_express/board.c b/ports/atmel-samd/boards/hallowing_m0_express/board.c index 4f073e270..23b119413 100644 --- a/ports/atmel-samd/boards/hallowing_m0_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m0_express/board.c @@ -93,8 +93,7 @@ void board_init(void) { 0x37, // set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PA00, - true); + &pin_PA00); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pybadge/board.c b/ports/atmel-samd/boards/pybadge/board.c index ce8c42a43..0881d8f45 100644 --- a/ports/atmel-samd/boards/pybadge/board.c +++ b/ports/atmel-samd/boards/pybadge/board.c @@ -99,8 +99,7 @@ void board_init(void) { 0x37, // set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PA00, - true); + &pin_PA00); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/ports/atmel-samd/boards/pyportal/board.c b/ports/atmel-samd/boards/pyportal/board.c index 3a306b0b4..d2c328850 100644 --- a/ports/atmel-samd/boards/pyportal/board.c +++ b/ports/atmel-samd/boards/pyportal/board.c @@ -90,8 +90,7 @@ void board_init(void) { 0x37, // Set vertical scroll command display_init_sequence, sizeof(display_init_sequence), - &pin_PB31, - true); + &pin_PB31); common_hal_displayio_display_set_auto_brightness(display, true); } diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 9cefb9532..ddca9ffd8 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -94,7 +94,7 @@ //| :param bool init_cs_toggle: Toggle the Chip Select between each initialization command //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_init_cs_toggle }; + enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin }; static const mp_arg_t allowed_args[] = { { MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_init_sequence, MP_ARG_REQUIRED | MP_ARG_OBJ }, @@ -109,7 +109,6 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a { MP_QSTR_write_ram_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2c} }, { MP_QSTR_set_vertical_scroll, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x0} }, { MP_QSTR_backlight_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, - { MP_QSTR_init_cs_toggle, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = true} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -148,8 +147,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a args[ARG_color_depth].u_int, args[ARG_set_column_command].u_int, args[ARG_set_row_command].u_int, args[ARG_write_ram_command].u_int, args[ARG_set_vertical_scroll].u_int, - bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin), - args[ARG_init_cs_toggle].u_bool); + bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin)); return self; } diff --git a/shared-bindings/displayio/Display.h b/shared-bindings/displayio/Display.h index 407afe1c3..7d6444a2d 100644 --- a/shared-bindings/displayio/Display.h +++ b/shared-bindings/displayio/Display.h @@ -40,7 +40,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, bool init_cs_toggle); + uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin); int32_t common_hal_displayio_display_wait_for_frame(displayio_display_obj_t* self); diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index bbc23b7b0..c693d3c90 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, bool init_cs_toggle) { + const mcu_pin_obj_t* backlight_pin) { self->color_depth = color_depth; self->set_column_command = set_column_command; self->set_row_command = set_row_command; @@ -54,7 +54,6 @@ 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; @@ -83,7 +82,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, bool delay = (data_size & DELAY) != 0; data_size &= ~DELAY; uint8_t *data = cmd + 2; - if (self->init_cs_toggle && self->set_cs != NULL) { + if (self->set_cs != NULL) { self->set_cs(self->bus, true); common_hal_time_delay_ms(1); self->set_cs(self->bus, false); diff --git a/shared-module/displayio/Display.h b/shared-module/displayio/Display.h index 250f44031..70308daa2 100644 --- a/shared-module/displayio/Display.h +++ b/shared-module/displayio/Display.h @@ -50,7 +50,6 @@ 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; -- cgit v1.2.3 From 2f7b338a4b87bc04166b021c48eca1fd5732e16a Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Tue, 26 Mar 2019 18:56:25 -0700 Subject: Comment Cleanup --- shared-bindings/displayio/Display.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index ddca9ffd8..1f46330e8 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -50,7 +50,7 @@ //| Most people should not use this class directly. Use a specific display driver instead that will //| contain the initialization sequence at minimum. //| -//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, init_cs_toggle=True) +//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None) //| //| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`). //| @@ -91,7 +91,6 @@ //| :param int write_ram_command: Command used to write pixels values into the update region //| :param int set_vertical_scroll: Command used to set the first row to show //| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight -//| :param bool init_cs_toggle: Toggle the Chip Select between each initialization command //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin }; -- cgit v1.2.3 From f3ec0514cdfc818c57274cd80025f582ad562f22 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Wed, 27 Mar 2019 20:11:32 -0700 Subject: Simplified into fourwire only --- shared-bindings/displayio/FourWire.h | 2 -- shared-module/displayio/Display.c | 7 ------- shared-module/displayio/Display.h | 2 -- shared-module/displayio/FourWire.c | 11 ++++++----- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/shared-bindings/displayio/FourWire.h b/shared-bindings/displayio/FourWire.h index a7fda2638..b8b00372c 100644 --- a/shared-bindings/displayio/FourWire.h +++ b/shared-bindings/displayio/FourWire.h @@ -47,6 +47,4 @@ void common_hal_displayio_fourwire_send(mp_obj_t self, bool command, uint8_t *da void common_hal_displayio_fourwire_end_transaction(mp_obj_t self); -void common_hal_displayio_fourwire_set_cs(mp_obj_t self, bool high); - #endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index c693d3c90..0e76a868f 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -59,12 +59,10 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, self->begin_transaction = common_hal_displayio_parallelbus_begin_transaction; self->send = common_hal_displayio_parallelbus_send; self->end_transaction = common_hal_displayio_parallelbus_end_transaction; - self->set_cs = NULL; } else if (MP_OBJ_IS_TYPE(bus, &displayio_fourwire_type)) { 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,11 +80,6 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, bool delay = (data_size & DELAY) != 0; data_size &= ~DELAY; uint8_t *data = cmd + 2; - if (self->set_cs != NULL) { - self->set_cs(self->bus, true); - common_hal_time_delay_ms(1); - self->set_cs(self->bus, false); - } self->send(self->bus, true, cmd, 1); self->send(self->bus, false, data, data_size); uint16_t delay_length_ms = 10; diff --git a/shared-module/displayio/Display.h b/shared-module/displayio/Display.h index 70308daa2..04da68b63 100644 --- a/shared-module/displayio/Display.h +++ b/shared-module/displayio/Display.h @@ -34,7 +34,6 @@ 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; @@ -53,7 +52,6 @@ typedef struct { 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 ae1fde7ca..043f68e26 100644 --- a/shared-module/displayio/FourWire.c +++ b/shared-module/displayio/FourWire.c @@ -30,6 +30,7 @@ #include "shared-bindings/busio/SPI.h" #include "shared-bindings/digitalio/DigitalInOut.h" +#include "shared-bindings/time/__init__.h" #include "tick.h" @@ -78,6 +79,11 @@ bool common_hal_displayio_fourwire_begin_transaction(mp_obj_t obj) { void common_hal_displayio_fourwire_send(mp_obj_t obj, bool command, uint8_t *data, uint32_t data_length) { displayio_fourwire_obj_t* self = MP_OBJ_TO_PTR(obj); + if (command) { + common_hal_digitalio_digitalinout_set_value(&self->chip_select, true); + common_hal_time_delay_ms(1); + common_hal_digitalio_digitalinout_set_value(&self->chip_select, false); + } common_hal_digitalio_digitalinout_set_value(&self->command, !command); common_hal_busio_spi_write(self->bus, data, data_length); } @@ -87,8 +93,3 @@ 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); -} -- cgit v1.2.3