summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-01-17 15:15:59 -0800
committerScott Shawcroft <scott@tannewt.org>2019-01-17 15:15:59 -0800
commit760bd8d8a4f0aa0ed8651e89596fb2e6effbc14f (patch)
treef3cc8769e20163ca3f215513363237a9435da39e
parent2d136d58bf288f0be945ed5cd3efe9113d0acce3 (diff)
share fourwire and make nrf compile
-rw-r--r--ports/atmel-samd/Makefile2
-rwxr-xr-xports/nrf/Makefile12
-rw-r--r--ports/nrf/board_busses.c114
-rw-r--r--ports/nrf/boards/feather_nrf52840_express/pins.c4
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c2
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/pins.c2
-rw-r--r--ports/nrf/boards/particle_argon/pins.c2
-rw-r--r--ports/nrf/boards/particle_boron/pins.c2
-rw-r--r--ports/nrf/boards/particle_xenon/pins.c2
-rw-r--r--ports/nrf/boards/pca10056/pins.c2
-rw-r--r--ports/nrf/boards/pca10059/pins.c2
-rw-r--r--ports/nrf/boards/sparkfun_nrf52840_mini/pins.c2
-rw-r--r--ports/nrf/common-hal/displayio/ParallelBus.c137
-rw-r--r--ports/nrf/common-hal/displayio/ParallelBus.h (renamed from ports/nrf/board_busses.h)28
-rw-r--r--ports/nrf/common-hal/microcontroller/Pin.h1
-rw-r--r--ports/nrf/mpconfigport.h2
-rw-r--r--shared-bindings/displayio/FourWire.h2
-rw-r--r--shared-module/displayio/FourWire.c (renamed from ports/atmel-samd/common-hal/displayio/FourWire.c)0
-rw-r--r--shared-module/displayio/FourWire.h (renamed from ports/atmel-samd/common-hal/displayio/FourWire.h)0
-rw-r--r--supervisor/shared/board_busses.c1
20 files changed, 180 insertions, 139 deletions
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index 088288fbd..c8d197b3e 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -305,7 +305,6 @@ SRC_COMMON_HAL = \
busio/UART.c \
digitalio/__init__.c \
digitalio/DigitalInOut.c \
- displayio/FourWire.c \
displayio/ParallelBus.c \
i2cslave/__init__.c \
i2cslave/I2CSlave.c \
@@ -380,6 +379,7 @@ SRC_SHARED_MODULE = \
displayio/Bitmap.c \
displayio/ColorConverter.c \
displayio/Display.c \
+ displayio/FourWire.c \
displayio/Group.c \
displayio/OnDiskBitmap.c \
displayio/Palette.c \
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 2bc508475..85e6346a1 100755
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -118,7 +118,6 @@ SRC_C += \
fatfs_port.c \
mphalport.c \
tick.c \
- board_busses.c \
boards/$(BOARD)/board.c \
boards/$(BOARD)/pins.c \
device/$(MCU_VARIANT)/startup_$(MCU_SUB_VARIANT).c \
@@ -156,6 +155,7 @@ SRC_COMMON_HAL += \
busio/__init__.c\
digitalio/DigitalInOut.c \
digitalio/__init__.c \
+ displayio/ParallelBus.c \
microcontroller/Pin.c \
microcontroller/Processor.c \
microcontroller/__init__.c \
@@ -214,6 +214,16 @@ SRC_SHARED_MODULE = \
bitbangio/OneWire.c \
bitbangio/SPI.c \
busio/OneWire.c \
+ displayio/__init__.c \
+ displayio/Bitmap.c \
+ displayio/ColorConverter.c \
+ displayio/Display.c \
+ displayio/FourWire.c \
+ displayio/Group.c \
+ displayio/OnDiskBitmap.c \
+ displayio/Palette.c \
+ displayio/Shape.c \
+ displayio/Sprite.c \
storage/__init__.c
# uheap/__init__.c \
diff --git a/ports/nrf/board_busses.c b/ports/nrf/board_busses.c
deleted file mode 100644
index 6d5cbd041..000000000
--- a/ports/nrf/board_busses.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "shared-bindings/busio/I2C.h"
-#include "shared-bindings/busio/SPI.h"
-#include "shared-bindings/busio/UART.h"
-
-#include "shared-bindings/microcontroller/Pin.h"
-#include "supervisor/shared/translate.h"
-#include "nrf/pins.h"
-#include "py/mpconfig.h"
-#include "py/runtime.h"
-
-#if !defined(DEFAULT_I2C_BUS_SDA) || !defined(DEFAULT_I2C_BUS_SCL)
- STATIC mp_obj_t board_i2c(void) {
- mp_raise_NotImplementedError(translate("No default I2C bus"));
- return NULL;
- }
-#else
- STATIC mp_obj_t i2c_singleton = NULL;
-
- STATIC mp_obj_t board_i2c(void) {
-
- if (i2c_singleton == NULL) {
- busio_i2c_obj_t *self = m_new_obj(busio_i2c_obj_t);
- self->base.type = &busio_i2c_type;
-
- assert_pin_free(DEFAULT_I2C_BUS_SDA);
- assert_pin_free(DEFAULT_I2C_BUS_SCL);
- common_hal_busio_i2c_construct(self, DEFAULT_I2C_BUS_SCL, DEFAULT_I2C_BUS_SDA, 400000, 0);
- i2c_singleton = (mp_obj_t)self;
- }
- return i2c_singleton;
-
- }
-#endif
-MP_DEFINE_CONST_FUN_OBJ_0(board_i2c_obj, board_i2c);
-
-#if !defined(DEFAULT_SPI_BUS_SCK) || !defined(DEFAULT_SPI_BUS_MISO) || !defined(DEFAULT_SPI_BUS_MOSI)
- STATIC mp_obj_t board_spi(void) {
- mp_raise_NotImplementedError(translate("No default SPI bus"));
- return NULL;
- }
-#else
- STATIC mp_obj_t spi_singleton = NULL;
-
- STATIC mp_obj_t board_spi(void) {
-
- if (spi_singleton == NULL) {
- busio_spi_obj_t *self = m_new_obj(busio_spi_obj_t);
- self->base.type = &busio_spi_type;
- assert_pin_free(DEFAULT_SPI_BUS_SCK);
- assert_pin_free(DEFAULT_SPI_BUS_MOSI);
- assert_pin_free(DEFAULT_SPI_BUS_MISO);
- const mcu_pin_obj_t* clock = MP_OBJ_TO_PTR(DEFAULT_SPI_BUS_SCK);
- const mcu_pin_obj_t* mosi = MP_OBJ_TO_PTR(DEFAULT_SPI_BUS_MOSI);
- const mcu_pin_obj_t* miso = MP_OBJ_TO_PTR(DEFAULT_SPI_BUS_MISO);
- common_hal_busio_spi_construct(self, clock, mosi, miso);
- spi_singleton = (mp_obj_t)self;
- }
- return spi_singleton;
- }
-#endif
-MP_DEFINE_CONST_FUN_OBJ_0(board_spi_obj, board_spi);
-
-#if !defined(DEFAULT_UART_BUS_RX) || !defined(DEFAULT_UART_BUS_TX)
- STATIC mp_obj_t board_uart(void) {
- mp_raise_NotImplementedError(translate("No default UART bus"));
- return NULL;
- }
-#else
- STATIC mp_obj_t uart_singleton = NULL;
-
- STATIC mp_obj_t board_uart(void) {
- if (uart_singleton == NULL) {
- busio_uart_obj_t *self = m_new_obj(busio_uart_obj_t);
- self->base.type = &busio_uart_type;
-
- assert_pin_free(DEFAULT_UART_BUS_RX);
- assert_pin_free(DEFAULT_UART_BUS_TX);
-
- const mcu_pin_obj_t* rx = MP_OBJ_TO_PTR(DEFAULT_UART_BUS_RX);
- const mcu_pin_obj_t* tx = MP_OBJ_TO_PTR(DEFAULT_UART_BUS_TX);
-
- common_hal_busio_uart_construct(self, tx, rx, 9600, 8, PARITY_NONE, 1, 1000, 64);
- uart_singleton = (mp_obj_t)self;
- }
- return uart_singleton;
- }
-#endif
-MP_DEFINE_CONST_FUN_OBJ_0(board_uart_obj, board_uart);
diff --git a/ports/nrf/boards/feather_nrf52840_express/pins.c b/ports/nrf/boards/feather_nrf52840_express/pins.c
index 2f8ac0259..dfb0be6df 100644
--- a/ports/nrf/boards/feather_nrf52840_express/pins.c
+++ b/ports/nrf/boards/feather_nrf52840_express/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
@@ -44,7 +44,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_15) },
-
+
{ MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_10) },
};
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c b/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c
index 27f0c6797..2d24e8597 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_AIN0), MP_ROM_PTR(&pin_P0_02) },
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/pins.c b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/pins.c
index 6049ac053..10490c8cb 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/pins.c
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_AIN0), MP_ROM_PTR(&pin_P0_02) },
diff --git a/ports/nrf/boards/particle_argon/pins.c b/ports/nrf/boards/particle_argon/pins.c
index 0457f0aa8..8c2fb38e6 100644
--- a/ports/nrf/boards/particle_argon/pins.c
+++ b/ports/nrf/boards/particle_argon/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_03) },
diff --git a/ports/nrf/boards/particle_boron/pins.c b/ports/nrf/boards/particle_boron/pins.c
index 2bff0a2ce..5981212bf 100644
--- a/ports/nrf/boards/particle_boron/pins.c
+++ b/ports/nrf/boards/particle_boron/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_03) },
diff --git a/ports/nrf/boards/particle_xenon/pins.c b/ports/nrf/boards/particle_xenon/pins.c
index 11a29e927..cdd5b5306 100644
--- a/ports/nrf/boards/particle_xenon/pins.c
+++ b/ports/nrf/boards/particle_xenon/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_03) },
diff --git a/ports/nrf/boards/pca10056/pins.c b/ports/nrf/boards/pca10056/pins.c
index a57c9d1c9..510b6100e 100644
--- a/ports/nrf/boards/pca10056/pins.c
+++ b/ports/nrf/boards/pca10056/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_P0_00), MP_ROM_PTR(&pin_P0_00) },
diff --git a/ports/nrf/boards/pca10059/pins.c b/ports/nrf/boards/pca10059/pins.c
index a1916bd04..c43d3a9eb 100644
--- a/ports/nrf/boards/pca10059/pins.c
+++ b/ports/nrf/boards/pca10059/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_P0_02), MP_ROM_PTR(&pin_P0_02) },
diff --git a/ports/nrf/boards/sparkfun_nrf52840_mini/pins.c b/ports/nrf/boards/sparkfun_nrf52840_mini/pins.c
index 5c50f55c7..f826ac771 100644
--- a/ports/nrf/boards/sparkfun_nrf52840_mini/pins.c
+++ b/ports/nrf/boards/sparkfun_nrf52840_mini/pins.c
@@ -1,6 +1,6 @@
#include "shared-bindings/board/__init__.h"
-#include "board_busses.h"
+#include "supervisor/shared/board_busses.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_P1_15) }, // D1/TX
diff --git a/ports/nrf/common-hal/displayio/ParallelBus.c b/ports/nrf/common-hal/displayio/ParallelBus.c
new file mode 100644
index 000000000..3afedf736
--- /dev/null
+++ b/ports/nrf/common-hal/displayio/ParallelBus.c
@@ -0,0 +1,137 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "shared-bindings/displayio/ParallelBus.h"
+
+#include <stdint.h>
+
+#include "common-hal/microcontroller/Pin.h"
+#include "py/runtime.h"
+#include "shared-bindings/digitalio/DigitalInOut.h"
+
+#include "tick.h"
+
+void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* self,
+ const mcu_pin_obj_t* data0, const mcu_pin_obj_t* command, const mcu_pin_obj_t* chip_select,
+ const mcu_pin_obj_t* write, const mcu_pin_obj_t* read, const mcu_pin_obj_t* reset) {
+
+ uint8_t data_pin = data0->number;
+ if (data_pin % 8 != 0 || data_pin % 32 >= 24) {
+ mp_raise_ValueError(translate("Data 0 pin must be byte aligned"));
+ }
+ for (uint8_t i = 0; i < 8; i++) {
+ if (!pin_number_is_free(data_pin + i)) {
+ mp_raise_ValueError_varg(translate("Bus pin %d is already in use"), i);
+ }
+ }
+ NRF_GPIO_Type *g;
+ uint8_t num_pins_in_port;
+ if (data0->number < P0_PIN_NUM) {
+ g = NRF_P0;
+ num_pins_in_port = P0_PIN_NUM;
+ } else {
+ g = NRF_P1;
+ num_pins_in_port = P1_PIN_NUM;
+ }
+ g->DIRSET = 0xff << (data_pin % num_pins_in_port);
+ self->bus = ((uint8_t*) &g->OUT) + (data0->number % num_pins_in_port / 8);
+
+ self->command.base.type = &digitalio_digitalinout_type;
+ common_hal_digitalio_digitalinout_construct(&self->command, command);
+ common_hal_digitalio_digitalinout_switch_to_output(&self->command, true, DRIVE_MODE_PUSH_PULL);
+
+ self->chip_select.base.type = &digitalio_digitalinout_type;
+ common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select);
+ common_hal_digitalio_digitalinout_switch_to_output(&self->chip_select, true, DRIVE_MODE_PUSH_PULL);
+
+ self->reset.base.type = &digitalio_digitalinout_type;
+ common_hal_digitalio_digitalinout_construct(&self->reset, reset);
+ common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL);
+
+ self->write.base.type = &digitalio_digitalinout_type;
+ common_hal_digitalio_digitalinout_construct(&self->write, write);
+ common_hal_digitalio_digitalinout_switch_to_output(&self->write, true, DRIVE_MODE_PUSH_PULL);
+
+ self->read.base.type = &digitalio_digitalinout_type;
+ common_hal_digitalio_digitalinout_construct(&self->read, read);
+ common_hal_digitalio_digitalinout_switch_to_output(&self->read, true, DRIVE_MODE_PUSH_PULL);
+
+ self->data0_pin = data_pin;
+ uint8_t num_pins_in_write_port;
+ if (data0->number < P0_PIN_NUM) {
+ self->write_group = NRF_P0;
+ num_pins_in_write_port = P0_PIN_NUM;
+ } else {
+ self->write_group = NRF_P1;
+ num_pins_in_write_port = P1_PIN_NUM;
+ }
+ self->write_mask = 1 << (write->number % num_pins_in_write_port);
+
+ never_reset_pin_number(command->number);
+ never_reset_pin_number(chip_select->number);
+ never_reset_pin_number(write->number);
+ never_reset_pin_number(read->number);
+ never_reset_pin_number(reset->number);
+ for (uint8_t i = 0; i < 8; i++) {
+ never_reset_pin_number(data_pin + i);
+ }
+}
+
+void common_hal_displayio_parallelbus_deinit(displayio_parallelbus_obj_t* self) {
+ for (uint8_t i = 0; i < 8; i++) {
+ reset_pin_number(self->data0_pin + i);
+ }
+
+ reset_pin_number(self->command.pin->number);
+ reset_pin_number(self->chip_select.pin->number);
+ reset_pin_number(self->write.pin->number);
+ reset_pin_number(self->read.pin->number);
+ reset_pin_number(self->reset.pin->number);
+}
+
+bool common_hal_displayio_parallelbus_begin_transaction(mp_obj_t obj) {
+ displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
+ common_hal_digitalio_digitalinout_set_value(&self->chip_select, false);
+ return true;
+}
+
+void common_hal_displayio_parallelbus_send(mp_obj_t obj, bool command, uint8_t *data, uint32_t data_length) {
+ displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
+ common_hal_digitalio_digitalinout_set_value(&self->command, !command);
+ uint32_t* clear_write = (uint32_t*) &self->write_group->OUTCLR;
+ uint32_t* set_write = (uint32_t*) &self->write_group->OUTSET;
+ uint32_t mask = self->write_mask;
+ for (uint32_t i = 0; i < data_length; i++) {
+ *clear_write = mask;
+ *self->bus = data[i];
+ *set_write = mask;
+ }
+}
+
+void common_hal_displayio_parallelbus_end_transaction(mp_obj_t obj) {
+ displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
+ common_hal_digitalio_digitalinout_set_value(&self->chip_select, true);
+}
diff --git a/ports/nrf/board_busses.h b/ports/nrf/common-hal/displayio/ParallelBus.h
index 2a4bfc3d4..5c10d3d42 100644
--- a/ports/nrf/board_busses.h
+++ b/ports/nrf/common-hal/displayio/ParallelBus.h
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
+ * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,16 +24,22 @@
* THE SOFTWARE.
*/
-#ifndef MICROPY_INCLUDED_NRF_BOARD_BUSSES_H
-#define MICROPY_INCLUDED_NRF_BOARD_BUSSES_H
+#ifndef MICROPY_INCLUDED_NRF_COMMON_HAL_DISPLAYIO_PARALLELBUS_H
+#define MICROPY_INCLUDED_NRF_COMMON_HAL_DISPLAYIO_PARALLELBUS_H
-void board_i2c(void);
-extern mp_obj_fun_builtin_fixed_t board_i2c_obj;
+#include "common-hal/digitalio/DigitalInOut.h"
-void board_spi(void);
-extern mp_obj_fun_builtin_fixed_t board_spi_obj;
+typedef struct {
+ mp_obj_base_t base;
+ uint8_t* bus;
+ digitalio_digitalinout_obj_t command;
+ digitalio_digitalinout_obj_t chip_select;
+ digitalio_digitalinout_obj_t reset;
+ digitalio_digitalinout_obj_t write;
+ digitalio_digitalinout_obj_t read;
+ uint8_t data0_pin;
+ NRF_GPIO_Type* write_group;
+ uint32_t write_mask;
+} displayio_parallelbus_obj_t;
-void board_uart(void);
-extern mp_obj_fun_builtin_fixed_t board_uart_obj;
-
-#endif // MICROPY_INCLUDED_NRF_BOARD_BUSSES_H
+#endif // MICROPY_INCLUDED_NRF_COMMON_HAL_DISPLAYIO_PARALLELBUS_H
diff --git a/ports/nrf/common-hal/microcontroller/Pin.h b/ports/nrf/common-hal/microcontroller/Pin.h
index 61be8bc35..735ed90cc 100644
--- a/ports/nrf/common-hal/microcontroller/Pin.h
+++ b/ports/nrf/common-hal/microcontroller/Pin.h
@@ -44,6 +44,7 @@ void reset_all_pins(void);
// need to store a full pointer.
void reset_pin_number(uint8_t pin);
void claim_pin(const mcu_pin_obj_t* pin);
+bool pin_number_is_free(uint8_t pin_number);
void never_reset_pin_number(uint8_t pin_number);
// Lower 5 bits of a pin number are the pin number in a port.
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index d38b14578..b6e5f9fdf 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -235,5 +235,7 @@ void run_background_tasks(void);
//#define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt"
#define CIRCUITPY_DEFAULT_STACK_SIZE 4096
+#define CIRCUITPY_DISPLAYIO (1)
+#define CIRCUITPY_DISPLAY_LIMIT (3)
#endif
diff --git a/shared-bindings/displayio/FourWire.h b/shared-bindings/displayio/FourWire.h
index 3a9f66d4c..b8b00372c 100644
--- a/shared-bindings/displayio/FourWire.h
+++ b/shared-bindings/displayio/FourWire.h
@@ -27,7 +27,7 @@
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H
-#include "common-hal/displayio/FourWire.h"
+#include "shared-module/displayio/FourWire.h"
#include "common-hal/microcontroller/Pin.h"
#include "shared-module/displayio/Group.h"
diff --git a/ports/atmel-samd/common-hal/displayio/FourWire.c b/shared-module/displayio/FourWire.c
index ab01e2609..ab01e2609 100644
--- a/ports/atmel-samd/common-hal/displayio/FourWire.c
+++ b/shared-module/displayio/FourWire.c
diff --git a/ports/atmel-samd/common-hal/displayio/FourWire.h b/shared-module/displayio/FourWire.h
index 234bcf794..234bcf794 100644
--- a/ports/atmel-samd/common-hal/displayio/FourWire.h
+++ b/shared-module/displayio/FourWire.h
diff --git a/supervisor/shared/board_busses.c b/supervisor/shared/board_busses.c
index 84919ebff..38308ccee 100644
--- a/supervisor/shared/board_busses.c
+++ b/supervisor/shared/board_busses.c
@@ -31,7 +31,6 @@
#include "shared-bindings/microcontroller/Pin.h"
#include "supervisor/shared/translate.h"
#include "mpconfigboard.h"
-#include "samd/pins.h"
#include "py/runtime.h"
#define BOARD_I2C (defined(DEFAULT_I2C_BUS_SDA) && defined(DEFAULT_I2C_BUS_SCL))