summaryrefslogtreecommitdiff
path: root/shared-bindings
diff options
context:
space:
mode:
Diffstat (limited to 'shared-bindings')
-rw-r--r--shared-bindings/framebufferio/FramebufferDisplay.c27
-rw-r--r--shared-bindings/framebufferio/FramebufferDisplay.h8
-rw-r--r--shared-bindings/framebufferio/__init__.c2
-rw-r--r--shared-bindings/rgbmatrix/RGBMatrix.c (renamed from shared-bindings/_protomatter/Protomatter.c)199
-rw-r--r--shared-bindings/rgbmatrix/RGBMatrix.h (renamed from shared-bindings/_protomatter/Protomatter.h)26
-rw-r--r--shared-bindings/rgbmatrix/__init__.c (renamed from shared-bindings/_protomatter/__init__.c)20
6 files changed, 163 insertions, 119 deletions
diff --git a/shared-bindings/framebufferio/FramebufferDisplay.c b/shared-bindings/framebufferio/FramebufferDisplay.c
index aa8fc1a63..9ff6cc12d 100644
--- a/shared-bindings/framebufferio/FramebufferDisplay.c
+++ b/shared-bindings/framebufferio/FramebufferDisplay.c
@@ -4,6 +4,7 @@
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
+ * Copyright (c) 2020 Jeff Epler 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
@@ -48,35 +49,21 @@
//| objects in CircuitPython, Display objects live until `displayio.release_displays()`
//| is called. This is done so that CircuitPython can use the display itself.
//|
-//| .. class:: FramebufferDisplay(framebuffer, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, grayscale=False, pixels_in_byte_share_row=True, bytes_per_cell=1, reverse_pixels_in_byte=False, backlight_pin=None, brightness=1.0, auto_brightness=False, auto_refresh=True, native_frames_per_second=60)
+//| .. class:: FramebufferDisplay(framebuffer, *, rotation=0, auto_refresh=True)
//|
//| Create a Display object with the given framebuffer (a buffer, array, ulab.array, etc)
//|
//| :param framebuffer: The framebuffer that the display is connected to
//| :type framebuffer: any core object implementing the framebuffer protocol
-//| :param int width: Width in pixels
-//| :param int height: Height in pixels
-//| :param int rotation: The rotation of the display in degrees clockwise. Must be in 90 degree increments (0, 90, 180, 270)
-//| :param int color_depth: The number of bits of color per pixel transmitted. (Some displays
-//| support 18 bit but 16 is easier to transmit. The last bit is extrapolated.)
-//| :param int bytes_per_cell: Number of bytes per addressable memory location when color_depth < 8. When greater than one, bytes share a row or column according to pixels_in_byte_share_row.
-//| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight
-//| :param bool brightness: Initial display brightness. This value is ignored if auto_brightness is True.
-//| :param bool auto_brightness: If True, brightness is controlled via an ambient light sensor or other mechanism.
//| :param bool auto_refresh: Automatically refresh the screen
-//| :param int native_frames_per_second: Number of display refreshes per second
+//| :param int rotation: The rotation of the display in degrees clockwise. Must be in 90 degree increments (0, 90, 180, 270)
//|
STATIC mp_obj_t framebufferio_framebufferdisplay_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_framebuffer, ARG_width, ARG_height, ARG_rotation, ARG_color_depth, ARG_bytes_per_cell, ARG_auto_refresh, ARG_native_frames_per_second, NUM_ARGS };
+ enum { ARG_framebuffer, ARG_rotation, ARG_auto_refresh, NUM_ARGS };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_framebuffer, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_width, MP_ARG_INT | MP_ARG_KW_ONLY | MP_ARG_REQUIRED, },
- { MP_QSTR_height, MP_ARG_INT | MP_ARG_KW_ONLY | MP_ARG_REQUIRED, },
{ MP_QSTR_rotation, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0} },
- { MP_QSTR_color_depth, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 16} },
- { MP_QSTR_bytes_per_cell, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 1} },
{ MP_QSTR_auto_refresh, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = true} },
- { MP_QSTR_native_frames_per_second, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 60} },
};
MP_STATIC_ASSERT( MP_ARRAY_SIZE(allowed_args) == NUM_ARGS );
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
@@ -95,12 +82,8 @@ STATIC mp_obj_t framebufferio_framebufferdisplay_make_new(const mp_obj_type_t *t
common_hal_framebufferio_framebufferdisplay_construct(
self,
framebuffer,
- args[ARG_width].u_int, args[ARG_height].u_int,
rotation,
- args[ARG_color_depth].u_int,
- args[ARG_bytes_per_cell].u_int,
- args[ARG_auto_refresh].u_bool,
- args[ARG_native_frames_per_second].u_int
+ args[ARG_auto_refresh].u_bool
);
return self;
diff --git a/shared-bindings/framebufferio/FramebufferDisplay.h b/shared-bindings/framebufferio/FramebufferDisplay.h
index b472088d2..c41e041ce 100644
--- a/shared-bindings/framebufferio/FramebufferDisplay.h
+++ b/shared-bindings/framebufferio/FramebufferDisplay.h
@@ -4,6 +4,7 @@
* The MIT License (MIT)
*
* Copyright (c) 2017, 2018 Scott Shawcroft for Adafruit Industries
+ * Copyright (c) 2020 Jeff Epler 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
@@ -39,10 +40,9 @@ extern const mp_obj_type_t framebufferio_framebufferdisplay_type;
#define NO_BRIGHTNESS_COMMAND 0x100
void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebufferdisplay_obj_t* self,
- mp_obj_t framebuffer, uint16_t width, uint16_t height,
- uint16_t rotation, uint16_t color_depth,
- uint8_t bytes_per_cell,
- bool auto_refresh, uint16_t native_frames_per_second);
+ mp_obj_t framebuffer,
+ uint16_t rotation,
+ bool auto_refresh);
bool common_hal_framebufferio_framebufferdisplay_show(framebufferio_framebufferdisplay_obj_t* self,
displayio_group_t* root_group);
diff --git a/shared-bindings/framebufferio/__init__.c b/shared-bindings/framebufferio/__init__.c
index 0f0823a25..88f69bb2c 100644
--- a/shared-bindings/framebufferio/__init__.c
+++ b/shared-bindings/framebufferio/__init__.c
@@ -38,7 +38,7 @@
//| The `framebufferio` module contains classes to manage display output
//| including synchronizing with refresh rates and partial updating.
//| It is used in conjunction with classes from `displayio` to actually
-//| place items on the display; and classes like `Protomatter` to actually
+//| place items on the display; and classes like `RGBMatrix` to actually
//| drive the display.
//|
//| Libraries
diff --git a/shared-bindings/_protomatter/Protomatter.c b/shared-bindings/rgbmatrix/RGBMatrix.c
index bb4339079..d758774d9 100644
--- a/shared-bindings/_protomatter/Protomatter.c
+++ b/shared-bindings/rgbmatrix/RGBMatrix.c
@@ -29,8 +29,8 @@
#include "py/runtime.h"
#include "py/objarray.h"
-#include "common-hal/_protomatter/Protomatter.h"
-#include "shared-bindings/_protomatter/Protomatter.h"
+#include "common-hal/rgbmatrix/RGBMatrix.h"
+#include "shared-bindings/rgbmatrix/RGBMatrix.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/microcontroller/__init__.h"
#include "shared-bindings/util.h"
@@ -38,9 +38,9 @@
#include "shared-module/framebufferio/__init__.h"
#include "shared-module/framebufferio/FramebufferDisplay.h"
-//| .. currentmodule:: _protomatter
+//| .. currentmodule:: rgbmatrix
//|
-//| :class:`protomatter` -- Driver for HUB75-style RGB LED matrices
+//| :class:`RGBMatrix` -- Driver for HUB75-style RGB LED matrices
//| ================================================================
//|
@@ -133,14 +133,16 @@ STATIC void preflight_pins_or_throw(uint8_t clock_pin, uint8_t *rgb_pins, uint8_
}
}
-//| :class:`~_protomatter.Protomatter` displays an in-memory framebuffer to an LED matrix.
+//| :class:`~rgbmatrix.RGBMatrix` displays an in-memory framebuffer to an LED matrix.
//|
-//| .. class:: Protomatter(width, bit_depth, rgb_pins, addr_pins, clock_pin, latch_pin, output_enable_pin, *, doublebuffer=True, framebuffer=None)
+//| .. class:: RGBMatrix(*, width, bit_depth, rgb_pins, addr_pins, clock_pin, latch_pin, output_enable_pin, doublebuffer=True, framebuffer=None, height=0)
//|
-//| Create a Protomatter object with the given attributes. The height of
+//| Create a RGBMatrix object with the given attributes. The height of
//| the display is determined by the number of rgb and address pins:
//| len(rgb_pins) // 3 * 2 ** len(address_pins). With 6 RGB pins and 4
-//| address lines, the display will be 32 pixels tall.
+//| address lines, the display will be 32 pixels tall. If the optional height
+//| parameter is specified and is not 0, it is checked against the calculated
+//| height.
//|
//| Up to 30 RGB pins and 8 address pins are supported.
//|
@@ -163,19 +165,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 Protomatter framebuffer is often used in conjunction with a
+//| 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 +192,8 @@ 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,
- // 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 +227,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 +248,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 +270,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, 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,23 +302,60 @@ 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);
-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) },
+//| .. attribute:: width
+//|
+//| The width of the display, in pixels
+//|
+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_rgbmatrix_rgbmatrix_get_width(self));
+}
+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)&rgbmatrix_rgbmatrix_get_width_obj,
+ (mp_obj_t)&mp_const_none_obj,
+ (mp_obj_t)&mp_const_none_obj},
};
-STATIC MP_DEFINE_CONST_DICT(protomatter_protomatter_locals_dict, protomatter_protomatter_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;
+//| .. attribute:: height
+//|
+//| The height of the display, in pixels
+//|
+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_rgbmatrix_rgbmatrix_get_height(self));
+}
+MP_DEFINE_CONST_FUN_OBJ_1(rgbmatrix_rgbmatrix_get_height_obj, rgbmatrix_rgbmatrix_get_height);
+
+const mp_obj_property_t rgbmatrix_rgbmatrix_height_obj = {
+ .base.type = &mp_type_property,
+ .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 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(rgbmatrix_rgbmatrix_locals_dict, rgbmatrix_rgbmatrix_locals_dict_table);
+
+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;
@@ -330,34 +363,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 const framebuffer_p_t protomatter_protomatter_proto = {
+STATIC int rgbmatrix_rgbmatrix_get_width_proto(mp_obj_t self_in) {
+ return common_hal_rgbmatrix_rgbmatrix_get_width(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 rgbmatrix_rgbmatrix_get_color_depth_proto(mp_obj_t self_in) {
+ return 16;
+}
+
+STATIC int rgbmatrix_rgbmatrix_get_bytes_per_cell_proto(mp_obj_t self_in) {
+ return 1;
+}
+
+STATIC int rgbmatrix_rgbmatrix_get_native_frames_per_second_proto(mp_obj_t self_in) {
+ return 250;
+}
+
+
+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,
- .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;
@@ -366,11 +425,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_Protomatter,
- .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,
+ .name = MP_QSTR_RGBMatrix,
+ .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,
};
diff --git a/shared-bindings/_protomatter/Protomatter.h b/shared-bindings/rgbmatrix/RGBMatrix.h
index 9499da22c..027f817bb 100644
--- a/shared-bindings/_protomatter/Protomatter.h
+++ b/shared-bindings/rgbmatrix/RGBMatrix.h
@@ -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/_protomatter/Protomatter.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,14 +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);
+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
diff --git a/shared-bindings/_protomatter/__init__.c b/shared-bindings/rgbmatrix/__init__.c
index 2281b15f1..662d2c4f6 100644
--- a/shared-bindings/_protomatter/__init__.c
+++ b/shared-bindings/rgbmatrix/__init__.c
@@ -29,27 +29,27 @@
#include "py/obj.h"
#include "py/runtime.h"
-#include "shared-bindings/_protomatter/Protomatter.h"
+#include "shared-bindings/rgbmatrix/RGBMatrix.h"
-//| :mod:`_protomatter` --- Low-level routines for bitbanged LED matrices
+//| :mod:`rgbmatrix` --- Low-level routines for bitbanged LED matrices
//| =====================================================================
//|
-//| .. module:: _protomatter
+//| .. module:: rgbmatrix
//| :synopsis: Low-level routines for bitbanged LED matrices
//|
//| .. toctree::
//| :maxdepth: 3
//|
-//| Protomatter
+//| RGBMatrix
-STATIC const mp_rom_map_elem_t protomatter_module_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__protomatter) },
- { MP_ROM_QSTR(MP_QSTR_Protomatter), MP_ROM_PTR(&protomatter_Protomatter_type) },
+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(&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,
};