RGBMatrix: finish renaming from Protomatter

This gets all the purely internal references.  Some uses of
protomatter/Protomatter/PROTOMATTER remain, as they are references
to symbols in the Protomatter C library itself.
crypto-aes
Jeff Epler 2 years ago
parent 1b478bbae6
commit 5fcc6d6286
  1. 2
      ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk
  2. 2
      ports/atmel-samd/boards/pycubed/mpconfigboard.mk
  3. 2
      ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk
  4. 2
      ports/atmel-samd/boards/winterbloom_big_honking_button/mpconfigboard.mk
  5. 2
      ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk
  6. 10
      ports/atmel-samd/common-hal/rgbmatrix/RGBMatrix.c
  7. 12
      ports/atmel-samd/common-hal/rgbmatrix/RGBMatrix.h
  8. 4
      ports/atmel-samd/mpconfigport.mk
  9. 4
      ports/atmel-samd/timer_handler.c
  10. 2
      ports/atmel-samd/timer_handler.h
  11. 12
      ports/nrf/common-hal/rgbmatrix/RGBMatrix.c
  12. 12
      ports/nrf/common-hal/rgbmatrix/RGBMatrix.h
  13. 2
      ports/nrf/mpconfigport.mk
  14. 4
      py/circuitpy_defns.mk
  15. 10
      py/circuitpy_mpconfig.h
  16. 6
      py/circuitpy_mpconfig.mk
  17. 165
      shared-bindings/rgbmatrix/RGBMatrix.c
  18. 26
      shared-bindings/rgbmatrix/RGBMatrix.h
  19. 10
      shared-bindings/rgbmatrix/__init__.c
  20. 24
      shared-module/displayio/__init__.c
  21. 4
      shared-module/displayio/__init__.h
  22. 30
      shared-module/rgbmatrix/RGBMatrix.c
  23. 4
      shared-module/rgbmatrix/allocator.h
  24. 10
      supervisor/shared/display.c

@ -14,7 +14,7 @@ CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_NETWORK = 0
CIRCUITPY_PROTOMATTER = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_AUDIOMP3 = 0

@ -17,7 +17,7 @@ CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_GAMEPAD = 0
CIRCUITPY_PROTOMATTER = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice

@ -19,7 +19,7 @@ CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_PROTOMATTER = 0
CIRCUITPY_RGBMATRIX = 0
# Include these Python libraries in firmware.
#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice

@ -28,7 +28,7 @@ CIRCUITPY_GAMEPAD = 0
CIRCUITPY_I2CSLAVE = 0
CIRCUITPY_NETWORK = 0
CIRCUITPY_TOUCHIO = 0
CIRCUITPY_PROTOMATTER = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_USB_HID = 0
CIRCUITPY_RTC = 0

@ -26,7 +26,7 @@ CIRCUITPY_GAMEPAD = 0
CIRCUITPY_I2CSLAVE = 0
CIRCUITPY_NETWORK = 0
CIRCUITPY_TOUCHIO = 0
CIRCUITPY_PROTOMATTER = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_USB_HID = 0

@ -31,7 +31,7 @@
#include "samd/timers.h"
#include "timer_handler.h"
void *common_hal_protomatter_timer_allocate() {
void *common_hal_rgbmatrix_timer_allocate() {
uint8_t timer_index = find_free_timer();
if (timer_index == 0xff) {
return NULL;
@ -49,16 +49,16 @@ static uint8_t tc_index_from_ptr(void* ptr) {
return 0xff;
}
void common_hal_protomatter_timer_enable(void* ptr) {
void common_hal_rgbmatrix_timer_enable(void* ptr) {
uint8_t timer_index = tc_index_from_ptr(ptr);
if (timer_index == 0xff) {
return;
}
set_timer_handler(true, timer_index, TC_HANDLER_PROTOMATTER);
set_timer_handler(true, timer_index, TC_HANDLER_RGBMATRIX);
turn_on_clocks(true, timer_index, 1);
}
void common_hal_protomatter_timer_disable(void* ptr) {
void common_hal_rgbmatrix_timer_disable(void* ptr) {
uint8_t timer_index = tc_index_from_ptr(ptr);
if (timer_index == 0xff) {
return;
@ -67,7 +67,7 @@ void common_hal_protomatter_timer_disable(void* ptr) {
tc_set_enable(ptr, false);
}
void common_hal_protomatter_timer_free(void* ptr) {
void common_hal_rgbmatrix_timer_free(void* ptr) {
uint8_t timer_index = tc_index_from_ptr(ptr);
if (timer_index == 0xff) {
return;

@ -24,12 +24,12 @@
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROTOMATTER_PROTOMATTER_H
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROTOMATTER_PROTOMATTER_H
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_RGBMATRIX_RGBMATRIX_H
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_RGBMATRIX_RGBMATRIX_H
void *common_hal_protomatter_timer_allocate(void);
void common_hal_protomatter_timer_enable(void*);
void common_hal_protomatter_timer_disable(void*);
void common_hal_protomatter_timer_free(void*);
void *common_hal_rgbmatrix_timer_allocate(void);
void common_hal_rgbmatrix_timer_enable(void*);
void common_hal_rgbmatrix_timer_disable(void*);
void common_hal_rgbmatrix_timer_free(void*);
#endif

@ -70,9 +70,9 @@ CIRCUITPY_ULAB = 1
endif
endif
ifndef CIRCUITPY_PROTOMATTER
ifndef CIRCUITPY_RGBMATRIX
ifneq ($(CIRCUITPY_SMALL_BUILD),1)
CIRCUITPY_PROTOMATTER = 1
CIRCUITPY_RGBMATRIX = 1
endif
endif

@ -64,8 +64,8 @@ void shared_timer_handler(bool is_tc, uint8_t index) {
frequencyin_interrupt_handler(index);
#endif
break;
case TC_HANDLER_PROTOMATTER:
#if CIRCUITPY_PROTOMATTER
case TC_HANDLER_RGBMATRIX:
#if CIRCUITPY_RGBMATRIX
_PM_IRQ_HANDLER();
#endif
break;

@ -30,7 +30,7 @@
#define TC_HANDLER_PULSEOUT 0x1
#define TC_HANDLER_PEW 0x2
#define TC_HANDLER_FREQUENCYIN 0x3
#define TC_HANDLER_PROTOMATTER 0x4
#define TC_HANDLER_RGBMATRIX 0x4
void set_timer_handler(bool is_tc, uint8_t index, uint8_t timer_handler);
void shared_timer_handler(bool is_tc, uint8_t index);

@ -32,18 +32,18 @@
extern void _PM_IRQ_HANDLER(void);
void *common_hal_protomatter_timer_allocate() {
void *common_hal_rgbmatrix_timer_allocate() {
nrfx_timer_t *timer = nrf_peripherals_allocate_timer_or_throw();
nrf_peripherals_timer_never_reset(timer);
return timer->p_reg;
}
static void protomatter_event_handler(nrf_timer_event_t event_type, void *p_context) {
static void rgbmatrix_event_handler(nrf_timer_event_t event_type, void *p_context) {
_PM_IRQ_HANDLER();
}
void common_hal_protomatter_timer_enable(void* ptr) {
void common_hal_rgbmatrix_timer_enable(void* ptr) {
nrfx_timer_t *timer = nrf_peripherals_timer_from_reg(ptr);
static const nrfx_timer_config_t timer_config = {
.frequency = NRF_TIMER_FREQ_16MHz,
@ -52,15 +52,15 @@ void common_hal_protomatter_timer_enable(void* ptr) {
.interrupt_priority = NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY,
.p_context = NULL,
};
nrfx_timer_init(timer, &timer_config, &protomatter_event_handler);
nrfx_timer_init(timer, &timer_config, &rgbmatrix_event_handler);
}
void common_hal_protomatter_timer_disable(void* ptr) {
void common_hal_rgbmatrix_timer_disable(void* ptr) {
nrfx_timer_t *timer = nrf_peripherals_timer_from_reg(ptr);
nrfx_timer_uninit(timer);
}
void common_hal_protomatter_timer_free(void* ptr) {
void common_hal_rgbmatrix_timer_free(void* ptr) {
nrfx_timer_t *timer = nrf_peripherals_timer_from_reg(ptr);
nrf_peripherals_free_timer(timer);
}

@ -24,12 +24,12 @@
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROTOMATTER_PROTOMATTER_H
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PROTOMATTER_PROTOMATTER_H
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_RGBMATRIX_RGBMATRIX_H
#define MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_RGBMATRIX_RGBMATRIX_H
void *common_hal_protomatter_timer_allocate(void);
void common_hal_protomatter_timer_enable(void*);
void common_hal_protomatter_timer_disable(void*);
void common_hal_protomatter_timer_free(void*);
void *common_hal_rgbmatrix_timer_allocate(void);
void common_hal_rgbmatrix_timer_enable(void*);
void common_hal_rgbmatrix_timer_disable(void*);
void common_hal_rgbmatrix_timer_free(void*);
#endif

@ -51,7 +51,7 @@ endif
# frequencyio not yet implemented
CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_PROTOMATTER = 1
CIRCUITPY_RGBMATRIX = 1
CIRCUITPY_FRAMEBUFFERIO = 1
# nRF52840-specific

@ -181,7 +181,7 @@ endif
ifeq ($(CIRCUITPY_PIXELBUF),1)
SRC_PATTERNS += _pixelbuf/%
endif
ifeq ($(CIRCUITPY_PROTOMATTER),1)
ifeq ($(CIRCUITPY_RGBMATRIX),1)
SRC_PATTERNS += rgbmatrix/%
endif
ifeq ($(CIRCUITPY_PULSEIO),1)
@ -413,7 +413,7 @@ SRC_MOD += $(addprefix lib/mp3/src/, \
)
$(BUILD)/lib/mp3/src/buffers.o: CFLAGS += -include "py/misc.h" -D'MPDEC_ALLOCATOR(x)=m_malloc(x,0)' -D'MPDEC_FREE(x)=m_free(x)'
endif
ifeq ($(CIRCUITPY_PROTOMATTER),1)
ifeq ($(CIRCUITPY_RGBMATRIX),1)
SRC_MOD += $(addprefix lib/protomatter/, \
core.c \
)

@ -461,11 +461,11 @@ extern const struct _mp_obj_module_t pixelbuf_module;
#define PIXELBUF_MODULE
#endif
#if CIRCUITPY_PROTOMATTER
extern const struct _mp_obj_module_t protomatter_module;
#define PROTOMATTER_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_rgbmatrix),(mp_obj_t)&protomatter_module },
#if CIRCUITPY_RGBMATRIX
extern const struct _mp_obj_module_t rgbmatrix_module;
#define RGBMATRIX_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_rgbmatrix),(mp_obj_t)&rgbmatrix_module },
#else
#define PROTOMATTER_MODULE
#define RGBMATRIX_MODULE
#endif
#if CIRCUITPY_PULSEIO
@ -658,10 +658,10 @@ extern const struct _mp_obj_module_t ustack_module;
PEW_MODULE \
PIXELBUF_MODULE \
PS2IO_MODULE \
PROTOMATTER_MODULE \
PULSEIO_MODULE \
RANDOM_MODULE \
RE_MODULE \
RGBMATRIX_MODULE \
ROTARYIO_MODULE \
RTC_MODULE \
SAMD_MODULE \

@ -216,10 +216,10 @@ endif
CFLAGS += -DCIRCUITPY_PIXELBUF=$(CIRCUITPY_PIXELBUF)
# Only for SAMD boards for the moment
ifndef CIRCUITPY_PROTOMATTER
CIRCUITPY_PROTOMATTER = 0
ifndef CIRCUITPY_RGBMATRIX
CIRCUITPY_RGBMATRIX = 0
endif
CFLAGS += -DCIRCUITPY_PROTOMATTER=$(CIRCUITPY_PROTOMATTER)
CFLAGS += -DCIRCUITPY_RGBMATRIX=$(CIRCUITPY_RGBMATRIX)
ifndef CIRCUITPY_PULSEIO
CIRCUITPY_PULSEIO = $(CIRCUITPY_DEFAULT_BUILD)

@ -163,19 +163,16 @@ STATIC void preflight_pins_or_throw(uint8_t clock_pin, uint8_t *rgb_pins, uint8_
//|
//| If a framebuffer is not passed in, one is allocated and initialized
//| to all black. In any case, the framebuffer can be retrieved
//| by passing the protomatter object to memoryview().
//| by passing the RGBMatrix object to memoryview().
//|
//| If doublebuffer is False, some memory is saved, but the display may
//| flicker during updates.
//|
//| If a framebuffer is not passed in, one is allocated internally. To
//| retrieve it, pass the protomatter object to memoryview().
//|
//| A RGBMatrix is often used in conjunction with a
//| `framebufferio.FramebufferDisplay`.
//|
STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
STATIC mp_obj_t rgbmatrix_rgbmatrix_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_width, ARG_bit_depth, ARG_rgb_list, ARG_addr_list,
ARG_clock_pin, ARG_latch_pin, ARG_output_enable_pin, ARG_doublebuffer, ARG_framebuffer, ARG_height };
static const mp_arg_t allowed_args[] = {
@ -193,11 +190,11 @@ STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size
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);
// Because interrupt handlers point directly at protomatter objects,
// Because interrupt handlers point directly at rgbmatrix objects,
// it is NOT okay to move them to the long-lived pool later. Allocate
// them there to begin with, since generally they'll be long-lived anyway.
protomatter_protomatter_obj_t *self = &allocate_display_bus_or_raise()->protomatter;
self->base.type = &protomatter_Protomatter_type;
rgbmatrix_rgbmatrix_obj_t *self = &allocate_display_bus_or_raise()->rgbmatrix;
self->base.type = &rgbmatrix_RGBMatrix_type;
uint8_t rgb_count, addr_count;
uint8_t rgb_pins[MP_ARRAY_SIZE(self->rgb_pins)];
@ -231,7 +228,7 @@ STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size
framebuffer = mp_obj_new_bytearray_of_zeros(bufsize);
}
common_hal_protomatter_protomatter_construct(self,
common_hal_rgbmatrix_rgbmatrix_construct(self,
args[ARG_width].u_int,
args[ARG_bit_depth].u_int,
rgb_count, rgb_pins,
@ -252,18 +249,18 @@ STATIC mp_obj_t protomatter_protomatter_make_new(const mp_obj_type_t *type, size
//| .. method:: deinit
//|
//| Free the resources (pins, timers, etc.) associated with this
//| protomatter instance. After deinitialization, no further operations
//| rgbmatrix instance. After deinitialization, no further operations
//| may be performed.
//|
STATIC mp_obj_t protomatter_protomatter_deinit(mp_obj_t self_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
common_hal_protomatter_protomatter_deinit(self);
STATIC mp_obj_t rgbmatrix_rgbmatrix_deinit(mp_obj_t self_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
common_hal_rgbmatrix_rgbmatrix_deinit(self);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(protomatter_protomatter_deinit_obj, protomatter_protomatter_deinit);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_deinit_obj, rgbmatrix_rgbmatrix_deinit);
static void check_for_deinit(protomatter_protomatter_obj_t *self) {
static void check_for_deinit(rgbmatrix_rgbmatrix_obj_t *self) {
if (!self->core.rgbPins) {
raise_deinited_error();
}
@ -274,30 +271,30 @@ static void check_for_deinit(protomatter_protomatter_obj_t *self) {
//| In the current implementation, 0.0 turns the display off entirely
//| and any other value up to 1.0 turns the display on fully.
//|
STATIC mp_obj_t protomatter_protomatter_get_brightness(mp_obj_t self_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_obj_t rgbmatrix_rgbmatrix_get_brightness(mp_obj_t self_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
return mp_obj_new_float(common_hal_protomatter_protomatter_get_paused(self)? 0.0f : 1.0f);
return mp_obj_new_float(common_hal_rgbmatrix_rgbmatrix_get_paused(self)? 0.0f : 1.0f);
}
MP_DEFINE_CONST_FUN_OBJ_1(protomatter_protomatter_get_brightness_obj, protomatter_protomatter_get_brightness);
MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_get_brightness_obj, rgbmatrix_rgbmatrix_get_brightness);
STATIC mp_obj_t protomatter_protomatter_set_brightness(mp_obj_t self_in, mp_obj_t value_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_obj_t rgbmatrix_rgbmatrix_set_brightness(mp_obj_t self_in, mp_obj_t value_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
mp_float_t brightness = mp_obj_get_float(value_in);
if (brightness < 0.0f || brightness > 1.0f) {
mp_raise_ValueError(translate("Brightness must be 0-1.0"));
}
common_hal_protomatter_protomatter_set_paused(self_in, brightness <= 0);
common_hal_rgbmatrix_rgbmatrix_set_paused(self_in, brightness <= 0);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(protomatter_protomatter_set_brightness_obj, protomatter_protomatter_set_brightness);
MP_DEFINE_CONST_FUN_OBJ_2(rgbmatrix_rgbmatrix_set_brightness_obj, rgbmatrix_rgbmatrix_set_brightness);
const mp_obj_property_t protomatter_protomatter_brightness_obj = {
const mp_obj_property_t rgbmatrix_rgbmatrix_brightness_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&protomatter_protomatter_get_brightness_obj,
(mp_obj_t)&protomatter_protomatter_set_brightness_obj,
.proxy = {(mp_obj_t)&rgbmatrix_rgbmatrix_get_brightness_obj,
(mp_obj_t)&rgbmatrix_rgbmatrix_set_brightness_obj,
(mp_obj_t)&mp_const_none_obj},
};
@ -306,27 +303,27 @@ const mp_obj_property_t protomatter_protomatter_brightness_obj = {
//| Transmits the color data in the buffer to the pixels so that
//| they are shown.
//|
STATIC mp_obj_t protomatter_protomatter_refresh(mp_obj_t self_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_obj_t rgbmatrix_rgbmatrix_refresh(mp_obj_t self_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
common_hal_protomatter_protomatter_refresh(self);
common_hal_rgbmatrix_rgbmatrix_refresh(self);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_1(protomatter_protomatter_refresh_obj, protomatter_protomatter_refresh);
MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_refresh_obj, rgbmatrix_rgbmatrix_refresh);
//| .. attribute:: width
//|
//| The width of the display, in pixels
//|
STATIC mp_obj_t protomatter_protomatter_get_width(mp_obj_t self_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_obj_t rgbmatrix_rgbmatrix_get_width(mp_obj_t self_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
return MP_OBJ_NEW_SMALL_INT(common_hal_protomatter_protomatter_get_width(self));
return MP_OBJ_NEW_SMALL_INT(common_hal_rgbmatrix_rgbmatrix_get_width(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(protomatter_protomatter_get_width_obj, protomatter_protomatter_get_width);
const mp_obj_property_t protomatter_protomatter_width_obj = {
MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_get_width_obj, rgbmatrix_rgbmatrix_get_width);
const mp_obj_property_t rgbmatrix_rgbmatrix_width_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&protomatter_protomatter_get_width_obj,
.proxy = {(mp_obj_t)&rgbmatrix_rgbmatrix_get_width_obj,
(mp_obj_t)&mp_const_none_obj,
(mp_obj_t)&mp_const_none_obj},
};
@ -335,31 +332,31 @@ const mp_obj_property_t protomatter_protomatter_width_obj = {
//|
//| The height of the display, in pixels
//|
STATIC mp_obj_t protomatter_protomatter_get_height(mp_obj_t self_in) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_obj_t rgbmatrix_rgbmatrix_get_height(mp_obj_t self_in) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
return MP_OBJ_NEW_SMALL_INT(common_hal_protomatter_protomatter_get_height(self));
return MP_OBJ_NEW_SMALL_INT(common_hal_rgbmatrix_rgbmatrix_get_height(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(protomatter_protomatter_get_height_obj, protomatter_protomatter_get_height);
MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_get_height_obj, rgbmatrix_rgbmatrix_get_height);
const mp_obj_property_t protomatter_protomatter_height_obj = {
const mp_obj_property_t rgbmatrix_rgbmatrix_height_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&protomatter_protomatter_get_height_obj,
.proxy = {(mp_obj_t)&rgbmatrix_rgbmatrix_get_height_obj,
(mp_obj_t)&mp_const_none_obj,
(mp_obj_t)&mp_const_none_obj},
};
STATIC const mp_rom_map_elem_t protomatter_protomatter_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&protomatter_protomatter_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR_brightness), MP_ROM_PTR(&protomatter_protomatter_brightness_obj) },
{ MP_ROM_QSTR(MP_QSTR_refresh), MP_ROM_PTR(&protomatter_protomatter_refresh_obj) },
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&protomatter_protomatter_width_obj) },
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&protomatter_protomatter_height_obj) },
STATIC const mp_rom_map_elem_t rgbmatrix_rgbmatrix_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&rgbmatrix_rgbmatrix_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR_brightness), MP_ROM_PTR(&rgbmatrix_rgbmatrix_brightness_obj) },
{ MP_ROM_QSTR(MP_QSTR_refresh), MP_ROM_PTR(&rgbmatrix_rgbmatrix_refresh_obj) },
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&rgbmatrix_rgbmatrix_width_obj) },
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&rgbmatrix_rgbmatrix_height_obj) },
};
STATIC MP_DEFINE_CONST_DICT(protomatter_protomatter_locals_dict, protomatter_protomatter_locals_dict_table);
STATIC MP_DEFINE_CONST_DICT(rgbmatrix_rgbmatrix_locals_dict, rgbmatrix_rgbmatrix_locals_dict_table);
STATIC void protomatter_protomatter_get_bufinfo(mp_obj_t self_in, mp_buffer_info_t *bufinfo) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC void rgbmatrix_rgbmatrix_get_bufinfo(mp_obj_t self_in, mp_buffer_info_t *bufinfo) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
check_for_deinit(self);
*bufinfo = self->bufinfo;
@ -367,60 +364,60 @@ STATIC void protomatter_protomatter_get_bufinfo(mp_obj_t self_in, mp_buffer_info
// These version exists so that the prototype matches the protocol,
// avoiding a type cast that can hide errors
STATIC void protomatter_protomatter_swapbuffers(mp_obj_t self_in) {
common_hal_protomatter_protomatter_refresh(self_in);
STATIC void rgbmatrix_rgbmatrix_swapbuffers(mp_obj_t self_in) {
common_hal_rgbmatrix_rgbmatrix_refresh(self_in);
}
STATIC void protomatter_protomatter_deinit_proto(mp_obj_t self_in) {
common_hal_protomatter_protomatter_deinit(self_in);
STATIC void rgbmatrix_rgbmatrix_deinit_proto(mp_obj_t self_in) {
common_hal_rgbmatrix_rgbmatrix_deinit(self_in);
}
STATIC float protomatter_protomatter_get_brightness_proto(mp_obj_t self_in) {
return common_hal_protomatter_protomatter_get_paused(self_in) ? 0.0f : 1.0f;
STATIC float rgbmatrix_rgbmatrix_get_brightness_proto(mp_obj_t self_in) {
return common_hal_rgbmatrix_rgbmatrix_get_paused(self_in) ? 0.0f : 1.0f;
}
STATIC bool protomatter_protomatter_set_brightness_proto(mp_obj_t self_in, mp_float_t value) {
common_hal_protomatter_protomatter_set_paused(self_in, value <= 0);
STATIC bool rgbmatrix_rgbmatrix_set_brightness_proto(mp_obj_t self_in, mp_float_t value) {
common_hal_rgbmatrix_rgbmatrix_set_paused(self_in, value <= 0);
return true;
}
STATIC int protomatter_protomatter_get_width_proto(mp_obj_t self_in) {
return common_hal_protomatter_protomatter_get_width(self_in);
STATIC int rgbmatrix_rgbmatrix_get_width_proto(mp_obj_t self_in) {
return common_hal_rgbmatrix_rgbmatrix_get_width(self_in);
}
STATIC int protomatter_protomatter_get_height_proto(mp_obj_t self_in) {
return common_hal_protomatter_protomatter_get_height(self_in);
STATIC int rgbmatrix_rgbmatrix_get_height_proto(mp_obj_t self_in) {
return common_hal_rgbmatrix_rgbmatrix_get_height(self_in);
}
STATIC int protomatter_protomatter_get_color_depth_proto(mp_obj_t self_in) {
STATIC int rgbmatrix_rgbmatrix_get_color_depth_proto(mp_obj_t self_in) {
return 16;
}
STATIC int protomatter_protomatter_get_bytes_per_cell_proto(mp_obj_t self_in) {
STATIC int rgbmatrix_rgbmatrix_get_bytes_per_cell_proto(mp_obj_t self_in) {
return 1;
}
STATIC int protomatter_protomatter_get_native_frames_per_second_proto(mp_obj_t self_in) {
STATIC int rgbmatrix_rgbmatrix_get_native_frames_per_second_proto(mp_obj_t self_in) {
return 250;
}
STATIC const framebuffer_p_t protomatter_protomatter_proto = {
STATIC const framebuffer_p_t rgbmatrix_rgbmatrix_proto = {
MP_PROTO_IMPLEMENT(MP_QSTR_protocol_framebuffer)
.get_bufinfo = protomatter_protomatter_get_bufinfo,
.set_brightness = protomatter_protomatter_set_brightness_proto,
.get_brightness = protomatter_protomatter_get_brightness_proto,
.get_width = protomatter_protomatter_get_width_proto,
.get_height = protomatter_protomatter_get_height_proto,
.get_color_depth = protomatter_protomatter_get_color_depth_proto,
.get_bytes_per_cell = protomatter_protomatter_get_bytes_per_cell_proto,
.get_native_frames_per_second = protomatter_protomatter_get_native_frames_per_second_proto,
.swapbuffers = protomatter_protomatter_swapbuffers,
.deinit = protomatter_protomatter_deinit_proto,
.get_bufinfo = rgbmatrix_rgbmatrix_get_bufinfo,
.set_brightness = rgbmatrix_rgbmatrix_set_brightness_proto,
.get_brightness = rgbmatrix_rgbmatrix_get_brightness_proto,
.get_width = rgbmatrix_rgbmatrix_get_width_proto,
.get_height = rgbmatrix_rgbmatrix_get_height_proto,
.get_color_depth = rgbmatrix_rgbmatrix_get_color_depth_proto,
.get_bytes_per_cell = rgbmatrix_rgbmatrix_get_bytes_per_cell_proto,
.get_native_frames_per_second = rgbmatrix_rgbmatrix_get_native_frames_per_second_proto,
.swapbuffers = rgbmatrix_rgbmatrix_swapbuffers,
.deinit = rgbmatrix_rgbmatrix_deinit_proto,
};
STATIC mp_int_t protomatter_protomatter_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
protomatter_protomatter_obj_t *self = (protomatter_protomatter_obj_t*)self_in;
STATIC mp_int_t rgbmatrix_rgbmatrix_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t*)self_in;
// a readonly framebuffer would be unusual but not impossible
if ((flags & MP_BUFFER_WRITE) && !(self->bufinfo.typecode & MP_OBJ_ARRAY_TYPECODE_FLAG_RW)) {
return 1;
@ -429,11 +426,11 @@ STATIC mp_int_t protomatter_protomatter_get_buffer(mp_obj_t self_in, mp_buffer_i
return 0;
}
const mp_obj_type_t protomatter_Protomatter_type = {
const mp_obj_type_t rgbmatrix_RGBMatrix_type = {
{ &mp_type_type },
.name = MP_QSTR_RGBMatrix,
.buffer_p = { .get_buffer = protomatter_protomatter_get_buffer, },
.make_new = protomatter_protomatter_make_new,
.protocol = &protomatter_protomatter_proto,
.locals_dict = (mp_obj_dict_t*)&protomatter_protomatter_locals_dict,
.buffer_p = { .get_buffer = rgbmatrix_rgbmatrix_get_buffer, },
.make_new = rgbmatrix_rgbmatrix_make_new,
.protocol = &rgbmatrix_rgbmatrix_proto,
.locals_dict = (mp_obj_dict_t*)&rgbmatrix_rgbmatrix_locals_dict,
};

@ -24,13 +24,13 @@
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_PROTOMATTER_PROTOMATTER_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_PROTOMATTER_PROTOMATTER_H
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_RGBMATRIX_RGBMATRIX_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_RGBMATRIX_RGBMATRIX_H
#include "shared-module/rgbmatrix/RGBMatrix.h"
#include "lib/protomatter/core.h"
extern const mp_obj_type_t protomatter_Protomatter_type;
extern const mp_obj_type_t rgbmatrix_RGBMatrix_type;
typedef struct {
mp_obj_base_t base;
mp_obj_t framebuffer;
@ -46,16 +46,16 @@ typedef struct {
bool core_is_initialized;
bool paused;
bool doublebuffer;
} protomatter_protomatter_obj_t;
} rgbmatrix_rgbmatrix_obj_t;
void common_hal_protomatter_protomatter_construct(protomatter_protomatter_obj_t* self, int width, int bit_depth, uint8_t rgb_count, uint8_t* rgb_pins, uint8_t addr_count, uint8_t* addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, void* timer);
void common_hal_protomatter_protomatter_deinit(protomatter_protomatter_obj_t*);
void protomatter_protomatter_collect_ptrs(protomatter_protomatter_obj_t*);
void common_hal_protomatter_protomatter_reconstruct(protomatter_protomatter_obj_t* self, mp_obj_t framebuffer);
void common_hal_protomatter_protomatter_set_paused(protomatter_protomatter_obj_t* self, bool paused);
bool common_hal_protomatter_protomatter_get_paused(protomatter_protomatter_obj_t* self);
void common_hal_protomatter_protomatter_refresh(protomatter_protomatter_obj_t* self);
int common_hal_protomatter_protomatter_get_width(protomatter_protomatter_obj_t* self);
int common_hal_protomatter_protomatter_get_height(protomatter_protomatter_obj_t* self);
void common_hal_rgbmatrix_rgbmatrix_construct(rgbmatrix_rgbmatrix_obj_t* self, int width, int bit_depth, uint8_t rgb_count, uint8_t* rgb_pins, uint8_t addr_count, uint8_t* addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, void* timer);
void common_hal_rgbmatrix_rgbmatrix_deinit(rgbmatrix_rgbmatrix_obj_t*);
void rgbmatrix_rgbmatrix_collect_ptrs(rgbmatrix_rgbmatrix_obj_t*);
void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t* self, mp_obj_t framebuffer);
void common_hal_rgbmatrix_rgbmatrix_set_paused(rgbmatrix_rgbmatrix_obj_t* self, bool paused);
bool common_hal_rgbmatrix_rgbmatrix_get_paused(rgbmatrix_rgbmatrix_obj_t* self);
void common_hal_rgbmatrix_rgbmatrix_refresh(rgbmatrix_rgbmatrix_obj_t* self);
int common_hal_rgbmatrix_rgbmatrix_get_width(rgbmatrix_rgbmatrix_obj_t* self);
int common_hal_rgbmatrix_rgbmatrix_get_height(rgbmatrix_rgbmatrix_obj_t* self);
#endif

@ -42,14 +42,14 @@
//|
//| RGBMatrix
STATIC const mp_rom_map_elem_t protomatter_module_globals_table[] = {
STATIC const mp_rom_map_elem_t rgbmatrix_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_rgbmatrix) },
{ MP_ROM_QSTR(MP_QSTR_RGBMatrix), MP_ROM_PTR(&protomatter_Protomatter_type) },
{ MP_ROM_QSTR(MP_QSTR_RGBMatrix), MP_ROM_PTR(&rgbmatrix_RGBMatrix_type) },
};
STATIC MP_DEFINE_CONST_DICT(protomatter_module_globals, protomatter_module_globals_table);
STATIC MP_DEFINE_CONST_DICT(rgbmatrix_module_globals, rgbmatrix_module_globals_table);
const mp_obj_module_t protomatter_module = {
const mp_obj_module_t rgbmatrix_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&protomatter_module_globals,
.globals = (mp_obj_dict_t*)&rgbmatrix_module_globals,
};

@ -21,8 +21,8 @@
primary_display_t displays[CIRCUITPY_DISPLAY_LIMIT];
#if CIRCUITPY_PROTOMATTER
STATIC bool any_display_uses_this_protomatter(protomatter_protomatter_obj_t* pm) {
#if CIRCUITPY_RGBMATRIX
STATIC bool any_display_uses_this_rgbmatrix(rgbmatrix_rgbmatrix_obj_t* pm) {
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
if (displays[i].framebuffer_display.base.type == &framebufferio_framebufferdisplay_type) {
framebufferio_framebufferdisplay_obj_t* display = &displays[i].framebuffer_display;
@ -103,8 +103,8 @@ void common_hal_displayio_release_displays(void) {
} else if (bus_type == &displayio_parallelbus_type) {
common_hal_displayio_parallelbus_deinit(&displays[i].parallel_bus);
#if CIRCUITPY_FRAMEBUFFERIO
} else if (bus_type == &protomatter_Protomatter_type) {
common_hal_protomatter_protomatter_deinit(&displays[i].protomatter);
} else if (bus_type == &rgbmatrix_RGBMatrix_type) {
common_hal_rgbmatrix_rgbmatrix_deinit(&displays[i].rgbmatrix);
#endif
}
displays[i].fourwire_bus.base.type = &mp_type_NoneType;
@ -167,11 +167,11 @@ void reset_displays(void) {
}
}
}
#if CIRCUITPY_PROTOMATTER
} else if (displays[i].protomatter.base.type == &protomatter_Protomatter_type) {
protomatter_protomatter_obj_t * pm = &displays[i].protomatter;
if(!any_display_uses_this_protomatter(pm)) {
common_hal_protomatter_protomatter_deinit(pm);
#if CIRCUITPY_RGBMATRIX
} else if (displays[i].rgbmatrix.base.type == &rgbmatrix_RGBMatrix_type) {
rgbmatrix_rgbmatrix_obj_t * pm = &displays[i].rgbmatrix;
if(!any_display_uses_this_rgbmatrix(pm)) {
common_hal_rgbmatrix_rgbmatrix_deinit(pm);
}
#endif
} else {
@ -200,9 +200,9 @@ void reset_displays(void) {
void displayio_gc_collect(void) {
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
#if CIRCUITPY_PROTOMATTER
if (displays[i].protomatter.base.type == &protomatter_Protomatter_type) {
protomatter_protomatter_collect_ptrs(&displays[i].protomatter);
#if CIRCUITPY_RGBMATRIX
if (displays[i].rgbmatrix.base.type == &rgbmatrix_RGBMatrix_type) {
rgbmatrix_rgbmatrix_collect_ptrs(&displays[i].rgbmatrix);
}
#endif

@ -43,8 +43,8 @@ typedef struct {
displayio_fourwire_obj_t fourwire_bus;
displayio_i2cdisplay_obj_t i2cdisplay_bus;
displayio_parallelbus_obj_t parallel_bus;
#if CIRCUITPY_PROTOMATTER
protomatter_protomatter_obj_t protomatter;
#if CIRCUITPY_RGBMATRIX
rgbmatrix_rgbmatrix_obj_t rgbmatrix;
#endif
};
union {

@ -42,7 +42,7 @@
extern Protomatter_core *_PM_protoPtr;
void common_hal_protomatter_protomatter_construct(protomatter_protomatter_obj_t *self, int width, int bit_depth, uint8_t rgb_count, uint8_t *rgb_pins, uint8_t addr_count, uint8_t *addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, void *timer) {
void common_hal_rgbmatrix_rgbmatrix_construct(rgbmatrix_rgbmatrix_obj_t *self, int width, int bit_depth, uint8_t rgb_count, uint8_t *rgb_pins, uint8_t addr_count, uint8_t *addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, void *timer) {
self->width = width;
self->bit_depth = bit_depth;
self->rgb_count = rgb_count;
@ -54,7 +54,7 @@ void common_hal_protomatter_protomatter_construct(protomatter_protomatter_obj_t
self->latch_pin = latch_pin;
self->doublebuffer = doublebuffer;
self->timer = timer ? timer : common_hal_protomatter_timer_allocate();
self->timer = timer ? timer : common_hal_rgbmatrix_timer_allocate();
if (self->timer == NULL) {
mp_raise_ValueError(translate("No timer available"));
}
@ -62,10 +62,10 @@ void common_hal_protomatter_protomatter_construct(protomatter_protomatter_obj_t
self->width = width;
self->bufsize = 2 * width * rgb_count / 3 * (1 << addr_count);
common_hal_protomatter_protomatter_reconstruct(self, framebuffer);
common_hal_rgbmatrix_rgbmatrix_reconstruct(self, framebuffer);
}
void common_hal_protomatter_protomatter_reconstruct(protomatter_protomatter_obj_t* self, mp_obj_t framebuffer) {
void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t* self, mp_obj_t framebuffer) {
if (framebuffer) {
self->framebuffer = framebuffer;
framebuffer = mp_obj_new_bytearray_of_zeros(self->bufsize);
@ -99,7 +99,7 @@ void common_hal_protomatter_protomatter_reconstruct(protomatter_protomatter_obj_
if (stat == PROTOMATTER_OK) {
_PM_protoPtr = &self->core;
common_hal_mcu_disable_interrupts();
common_hal_protomatter_timer_enable(self->timer);
common_hal_rgbmatrix_timer_enable(self->timer);
stat = _PM_begin(&self->core);
_PM_convert_565(&self->core, self->bufinfo.buf, self->width);
common_hal_mcu_enable_interrupts();
@ -109,7 +109,7 @@ void common_hal_protomatter_protomatter_reconstruct(protomatter_protomatter_obj_
if (stat != PROTOMATTER_OK) {
// XXX this deinit() actually makes crashy-crashy
// can trigger it by sending inappropriate pins
common_hal_protomatter_protomatter_deinit(self);
common_hal_rgbmatrix_rgbmatrix_deinit(self);
switch (stat) {
case PROTOMATTER_ERR_PINS:
mp_raise_ValueError(translate("Invalid pin"));
@ -120,7 +120,7 @@ void common_hal_protomatter_protomatter_reconstruct(protomatter_protomatter_obj_
case PROTOMATTER_ERR_MALLOC: /// should have already been signaled as NLR
default:
mp_raise_msg_varg(&mp_type_RuntimeError,
translate("Protomatter internal error #%d"), (int)stat);
translate("Internal error #%d"), (int)stat);
break;
}
}
@ -142,9 +142,9 @@ STATIC void free_pin_seq(uint8_t *seq, int count) {
}
}
void common_hal_protomatter_protomatter_deinit(protomatter_protomatter_obj_t* self) {
void common_hal_rgbmatrix_rgbmatrix_deinit(rgbmatrix_rgbmatrix_obj_t* self) {
if (self->timer) {
common_hal_protomatter_timer_free(self->timer);
common_hal_rgbmatrix_timer_free(self->timer);
self->timer = 0;
}
@ -173,14 +173,14 @@ void common_hal_protomatter_protomatter_deinit(protomatter_protomatter_obj_t* se
self->framebuffer = NULL;
}
void protomatter_protomatter_collect_ptrs(protomatter_protomatter_obj_t* self) {
void rgbmatrix_rgbmatrix_collect_ptrs(rgbmatrix_rgbmatrix_obj_t* self) {
gc_collect_ptr(self->framebuffer);
gc_collect_ptr(self->core.rgbPins);
gc_collect_ptr(self->core.addr);
gc_collect_ptr(self->core.screenData);
}
void common_hal_protomatter_protomatter_set_paused(protomatter_protomatter_obj_t* self, bool paused) {
void common_hal_rgbmatrix_rgbmatrix_set_paused(rgbmatrix_rgbmatrix_obj_t* self, bool paused) {
if (paused && !self->paused) {
_PM_stop(&self->core);
} else if (!paused && self->paused) {
@ -189,20 +189,20 @@ void common_hal_protomatter_protomatter_set_paused(protomatter_protomatter_obj_t
self->paused = paused;
}
bool common_hal_protomatter_protomatter_get_paused(protomatter_protomatter_obj_t* self) {
bool common_hal_rgbmatrix_rgbmatrix_get_paused(rgbmatrix_rgbmatrix_obj_t* self) {
return self->paused;
}
void common_hal_protomatter_protomatter_refresh(protomatter_protomatter_obj_t* self) {
void common_hal_rgbmatrix_rgbmatrix_refresh(rgbmatrix_rgbmatrix_obj_t* self) {
_PM_convert_565(&self->core, self->bufinfo.buf, self->width);
_PM_swapbuffer_maybe(&self->core);
}
int common_hal_protomatter_protomatter_get_width(protomatter_protomatter_obj_t* self) {
int common_hal_rgbmatrix_rgbmatrix_get_width(rgbmatrix_rgbmatrix_obj_t* self) {
return self->width;
}
int common_hal_protomatter_protomatter_get_height(protomatter_protomatter_obj_t* self) {
int common_hal_rgbmatrix_rgbmatrix_get_height(rgbmatrix_rgbmatrix_obj_t* self) {
int computed_height = (self->rgb_count / 3) << (self->addr_count);
return computed_height;
}

@ -1,5 +1,5 @@
#ifndef MICROPY_INCLUDED_SHARED_MODULE_PROTOMATTER_ALLOCATOR_H
#define MICROPY_INCLUDED_SHARED_MODULE_PROTOMATTER_ALLOCATOR_H
#ifndef MICROPY_INCLUDED_SHARED_MODULE_RGBMATRIX_ALLOCATOR_H
#define MICROPY_INCLUDED_SHARED_MODULE_RGBMATRIX_ALLOCATOR_H
#include <stdbool.h>
#include "py/gc.h"

@ -34,7 +34,7 @@
#include "shared-bindings/displayio/TileGrid.h"
#include "supervisor/memory.h"
#if CIRCUITPY_PROTOMATTER
#if CIRCUITPY_RGBMATRIX
#include "shared-module/displayio/__init__.h"
#endif
@ -116,11 +116,11 @@ void supervisor_display_move_memory(void) {
grid->inline_tiles = false;
}
MP_STATE_VM(terminal_tilegrid_tiles) = NULL;
#if CIRCUITPY_PROTOMATTER
#if CIRCUITPY_RGBMATRIX
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
if (displays[i].protomatter.base.type == &protomatter_Protomatter_type) {
protomatter_protomatter_obj_t * pm = &displays[i].protomatter;
common_hal_protomatter_protomatter_reconstruct(pm, NULL);
if (displays[i].rgbmatrix.base.type == &rgbmatrix_RGBMatrix_type) {
rgbmatrix_rgbmatrix_obj_t * pm = &displays[i].rgbmatrix;
common_hal_rgbmatrix_rgbmatrix_reconstruct(pm, NULL);
}
}
#endif

Loading…
Cancel
Save