Skip to content

Commit

Permalink
Fix boards with no shared busses.
Browse files Browse the repository at this point in the history
  • Loading branch information
tannewt committed Apr 9, 2019
1 parent ac7822b commit 7299207
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 6 deletions.
8 changes: 8 additions & 0 deletions py/runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -1590,6 +1590,14 @@ NORETURN void mp_raise_NotImplementedError(const compressed_string_t *msg) {
mp_raise_msg(&mp_type_NotImplementedError, msg);
}

NORETURN void mp_raise_NotImplementedError_varg(const compressed_string_t *fmt, ...) {
va_list argptr;
va_start(argptr,fmt);
mp_obj_t exception = mp_obj_new_exception_msg_vlist(&mp_type_NotImplementedError, fmt, argptr);
va_end(argptr);
nlr_raise(exception);
}

#if MICROPY_STACK_CHECK || MICROPY_ENABLE_PYSTACK
NORETURN void mp_raise_recursion_depth(void) {
mp_raise_RuntimeError(translate("maximum recursion depth exceeded"));
Expand Down
1 change: 1 addition & 0 deletions py/runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ NORETURN void mp_raise_OSError(int errno_);
NORETURN void mp_raise_OSError_msg(const compressed_string_t *msg);
NORETURN void mp_raise_OSError_msg_varg(const compressed_string_t *fmt, ...);
NORETURN void mp_raise_NotImplementedError(const compressed_string_t *msg);
NORETURN void mp_raise_NotImplementedError_varg(const compressed_string_t *fmt, ...);
NORETURN void mp_raise_recursion_depth(void);

#if MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG
Expand Down
1 change: 1 addition & 0 deletions shared-bindings/board/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
*/

#include "py/obj.h"
#include "py/runtime.h"

#include "shared-bindings/board/__init__.h"

Expand Down
7 changes: 7 additions & 0 deletions shared-module/board/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "shared-module/displayio/__init__.h"
#endif

#if BOARD_I2C
mp_obj_t common_hal_board_get_i2c(void) {
return MP_STATE_VM(shared_i2c_bus);
}
Expand All @@ -49,7 +50,10 @@ mp_obj_t common_hal_board_create_i2c(void) {
MP_STATE_VM(shared_i2c_bus) = MP_OBJ_FROM_PTR(self);
return MP_STATE_VM(shared_i2c_bus);
}
#endif


#if BOARD_SPI
// Statically allocate the SPI object so it can live past the end of the heap and into the next VM.
// That way it can be used by built-in FourWire displays and be accessible through board.SPI().
STATIC busio_spi_obj_t spi_obj;
Expand All @@ -73,7 +77,9 @@ mp_obj_t common_hal_board_create_spi(void) {
spi_singleton = (mp_obj_t)self;
return spi_singleton;
}
#endif

#if BOARD_UART
mp_obj_t common_hal_board_get_uart(void) {
return MP_STATE_VM(shared_uart_bus);
}
Expand All @@ -89,6 +95,7 @@ mp_obj_t common_hal_board_create_uart(void) {
MP_STATE_VM(shared_uart_bus) = MP_OBJ_FROM_PTR(self);
return MP_STATE_VM(shared_uart_bus);
}
#endif

void reset_board_busses(void) {
#if BOARD_I2C
Expand Down
14 changes: 8 additions & 6 deletions shared-module/displayio/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,14 @@ void reset_displays(void) {
if (((uint32_t) fourwire->bus) < ((uint32_t) &displays) ||
((uint32_t) fourwire->bus) > ((uint32_t) &displays + CIRCUITPY_DISPLAY_LIMIT)) {
busio_spi_obj_t* original_spi = fourwire->bus;
// We don't need to move original_spi if it is the board.SPI object because it is
// statically allocated already. (Doing so would also make it impossible to reference in
// a subsequent VM run.)
if (original_spi == common_hal_board_get_spi()) {
continue;
}
#if BOARD_SPI
// We don't need to move original_spi if it is the board.SPI object because it is
// statically allocated already. (Doing so would also make it impossible to reference in
// a subsequent VM run.)
if (original_spi == common_hal_board_get_spi()) {
continue;
}
#endif
memcpy(&fourwire->inline_bus, original_spi, sizeof(busio_spi_obj_t));
fourwire->bus = &fourwire->inline_bus;
// Check for other displays that use the same spi bus and swap them too.
Expand Down

0 comments on commit 7299207

Please sign in to comment.