summaryrefslogtreecommitdiff
path: root/shared-module/displayio/__init__.c
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-03-28 10:34:18 -0500
committerJeff Epler <jepler@gmail.com>2020-04-14 18:24:54 -0500
commit6378d600c40d462836fd6599b9bdadf5e78df8f1 (patch)
treefa07a6b9db7fcf097c3ee5f05615f2741ffd6aae /shared-module/displayio/__init__.c
parentada102dd986bb03186978579cc909da5c66772d6 (diff)
displayio: implement, use allocate_display_or_raise
Diffstat (limited to 'shared-module/displayio/__init__.c')
-rw-r--r--shared-module/displayio/__init__.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c
index efa61265e..fd58a0322 100644
--- a/shared-module/displayio/__init__.c
+++ b/shared-module/displayio/__init__.c
@@ -308,3 +308,21 @@ void displayio_area_transform_within(bool mirror_x, bool mirror_y, bool transpos
transformed->x1 = whole->x1 + (y1 - whole->y1);
}
}
+
+primary_display_t *allocate_display() {
+ for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
+ mp_const_obj_t display_type = displays[i].display.base.type;
+ if (display_type == NULL || display_type == &mp_type_NoneType) {
+ return &displays[i];
+ }
+ }
+ return NULL;
+
+primary_display_t *allocate_display_or_raise() {
+ primary_display_t *result = allocate_display();
+ if (!result) {
+ mp_raise_RuntimeError(translate("Too many displays"));
+ }
+}
+
+}