From d3317b002e416b14aedde52026ff56cd615d33ce Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 9 Oct 2021 12:11:07 -0500 Subject: [PATCH 1/4] check for None spi when initializing FourWire --- locale/circuitpython.pot | 4 ++++ shared-bindings/displayio/FourWire.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 00f72241fc..e3e5cd1f9b 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -2062,6 +2062,10 @@ msgstr "" msgid "SPI Re-initialization error" msgstr "" +#: shared-bindings/displayio/FourWire.c +msgid "SPI cannot be None" +msgstr "" + #: ports/espressif/common-hal/busio/SPI.c msgid "SPI configuration failed" msgstr "" diff --git a/shared-bindings/displayio/FourWire.c b/shared-bindings/displayio/FourWire.c index c065fee551..e0ae91c46b 100644 --- a/shared-bindings/displayio/FourWire.c +++ b/shared-bindings/displayio/FourWire.c @@ -79,6 +79,9 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_ mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj); mp_obj_t spi = args[ARG_spi_bus].u_obj; + if (spi == mp_const_none) { + mp_raise_ValueError(translate("SPI cannot be None")); + } displayio_fourwire_obj_t *self = &allocate_display_bus_or_raise()->fourwire_bus; self->base.type = &displayio_fourwire_type; From 6c00ab7c97327ca309e5c228d4004d6579b2cc12 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 9 Oct 2021 12:36:28 -0500 Subject: [PATCH 2/4] change error message --- locale/circuitpython.pot | 8 ++++---- shared-bindings/displayio/FourWire.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index e3e5cd1f9b..be58bf69e3 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -975,6 +975,10 @@ msgstr "" msgid "Expected a DigitalInOut" msgstr "" +#: shared-bindings/displayio/FourWire.c +msgid "Expected a SPI" +msgstr "" + #: shared-bindings/_bleio/Characteristic.c msgid "Expected a Service" msgstr "" @@ -2062,10 +2066,6 @@ msgstr "" msgid "SPI Re-initialization error" msgstr "" -#: shared-bindings/displayio/FourWire.c -msgid "SPI cannot be None" -msgstr "" - #: ports/espressif/common-hal/busio/SPI.c msgid "SPI configuration failed" msgstr "" diff --git a/shared-bindings/displayio/FourWire.c b/shared-bindings/displayio/FourWire.c index e0ae91c46b..8277fcd500 100644 --- a/shared-bindings/displayio/FourWire.c +++ b/shared-bindings/displayio/FourWire.c @@ -80,7 +80,7 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_ mp_obj_t spi = args[ARG_spi_bus].u_obj; if (spi == mp_const_none) { - mp_raise_ValueError(translate("SPI cannot be None")); + mp_raise_ValueError(translate("Expected a SPI")); } displayio_fourwire_obj_t *self = &allocate_display_bus_or_raise()->fourwire_bus; self->base.type = &displayio_fourwire_type; From e8a2e4a62b42ff16c7730a0c8433f678c89aa887 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 9 Oct 2021 13:10:17 -0500 Subject: [PATCH 3/4] use mp_arg_validate_type instead of if None --- locale/circuitpython.pot | 4 ---- shared-bindings/displayio/FourWire.c | 6 ++---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index be58bf69e3..00f72241fc 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -975,10 +975,6 @@ msgstr "" msgid "Expected a DigitalInOut" msgstr "" -#: shared-bindings/displayio/FourWire.c -msgid "Expected a SPI" -msgstr "" - #: shared-bindings/_bleio/Characteristic.c msgid "Expected a Service" msgstr "" diff --git a/shared-bindings/displayio/FourWire.c b/shared-bindings/displayio/FourWire.c index 8277fcd500..a342646adc 100644 --- a/shared-bindings/displayio/FourWire.c +++ b/shared-bindings/displayio/FourWire.c @@ -78,10 +78,8 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_ mcu_pin_obj_t *chip_select = validate_obj_is_free_pin(args[ARG_chip_select].u_obj); mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj); - mp_obj_t spi = args[ARG_spi_bus].u_obj; - if (spi == mp_const_none) { - mp_raise_ValueError(translate("Expected a SPI")); - } + mp_obj_t spi = mp_arg_validate_type(args[ARG_spi_bus].u_obj, &busio_spi_type, MP_QSTR_spi_bus); + displayio_fourwire_obj_t *self = &allocate_display_bus_or_raise()->fourwire_bus; self->base.type = &displayio_fourwire_type; From b799b2e8467ea706b54685242a72fe8fe06ace68 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 9 Oct 2021 16:31:45 -0500 Subject: [PATCH 4/4] fix spi include in fourwire. validate i2c_bus in I2CDisplay --- shared-bindings/displayio/FourWire.c | 1 + shared-bindings/displayio/I2CDisplay.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/shared-bindings/displayio/FourWire.c b/shared-bindings/displayio/FourWire.c index a342646adc..d7d058fe07 100644 --- a/shared-bindings/displayio/FourWire.c +++ b/shared-bindings/displayio/FourWire.c @@ -32,6 +32,7 @@ #include "py/binary.h" #include "py/objproperty.h" #include "py/runtime.h" +#include "shared-bindings/busio/SPI.h" #include "shared-bindings/displayio/Group.h" #include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/util.h" diff --git a/shared-bindings/displayio/I2CDisplay.c b/shared-bindings/displayio/I2CDisplay.c index d304374664..18773aba0d 100644 --- a/shared-bindings/displayio/I2CDisplay.c +++ b/shared-bindings/displayio/I2CDisplay.c @@ -34,6 +34,7 @@ #include "py/objproperty.h" #include "py/runtime.h" #include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/busio/I2C.h" #include "shared-bindings/util.h" #include "shared-module/displayio/__init__.h" #include "supervisor/shared/translate.h" @@ -67,7 +68,7 @@ STATIC mp_obj_t displayio_i2cdisplay_make_new(const mp_obj_type_t *type, size_t mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj); - mp_obj_t i2c = args[ARG_i2c_bus].u_obj; + mp_obj_t i2c = mp_arg_validate_type(args[ARG_i2c_bus].u_obj, &busio_i2c_type, MP_QSTR_i2c_bus); displayio_i2cdisplay_obj_t *self = &allocate_display_bus_or_raise()->i2cdisplay_bus; self->base.type = &displayio_i2cdisplay_type;