Skip to content

Commit 8cba145

Browse files
committed
displayio: implement, use allocate_new_display_bus_or_raise
1 parent 6378d60 commit 8cba145

File tree

5 files changed

+22
-36
lines changed

5 files changed

+22
-36
lines changed

shared-bindings/displayio/FourWire.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,8 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_
8282
mcu_pin_obj_t *chip_select = validate_obj_is_free_pin(args[ARG_chip_select].u_obj);
8383
mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj);
8484

85-
displayio_fourwire_obj_t* self = NULL;
8685
mp_obj_t spi = args[ARG_spi_bus].u_obj;
87-
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
88-
if (displays[i].fourwire_bus.base.type == NULL ||
89-
displays[i].fourwire_bus.base.type == &mp_type_NoneType) {
90-
self = &displays[i].fourwire_bus;
91-
self->base.type = &displayio_fourwire_type;
92-
break;
93-
}
94-
}
95-
if (self == NULL) {
96-
mp_raise_RuntimeError(translate("Too many display busses"));
97-
}
86+
displayio_fourwire_obj_t* self = &allocate_display_bus_or_raise()->fourwire_bus;
9887

9988
uint8_t polarity = args[ARG_polarity].u_int;
10089
if (polarity != 0 && polarity != 1) {

shared-bindings/displayio/I2CDisplay.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,8 @@ STATIC mp_obj_t displayio_i2cdisplay_make_new(const mp_obj_type_t *type, size_t
7171

7272
mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj);
7373

74-
displayio_i2cdisplay_obj_t* self = NULL;
7574
mp_obj_t i2c = args[ARG_i2c_bus].u_obj;
76-
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
77-
if (displays[i].i2cdisplay_bus.base.type == NULL ||
78-
displays[i].i2cdisplay_bus.base.type == &mp_type_NoneType) {
79-
self = &displays[i].i2cdisplay_bus;
80-
self->base.type = &displayio_i2cdisplay_type;
81-
break;
82-
}
83-
}
84-
if (self == NULL) {
85-
mp_raise_RuntimeError(translate("Too many display busses"));
86-
}
75+
displayio_i2cdisplay_obj_t* self = &allocate_display_bus_or_raise()->i2cdisplay_bus;
8776

8877
common_hal_displayio_i2cdisplay_construct(self,
8978
MP_OBJ_TO_PTR(i2c), args[ARG_device_address].u_int, reset);

shared-bindings/displayio/ParallelBus.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,18 +83,7 @@ STATIC mp_obj_t displayio_parallelbus_make_new(const mp_obj_type_t *type, size_t
8383
mcu_pin_obj_t *read = validate_obj_is_free_pin(args[ARG_read].u_obj);
8484
mcu_pin_obj_t *reset = validate_obj_is_free_pin(args[ARG_reset].u_obj);
8585

86-
displayio_parallelbus_obj_t* self = NULL;
87-
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
88-
if (displays[i].parallel_bus.base.type== NULL ||
89-
displays[i].parallel_bus.base.type == &mp_type_NoneType) {
90-
self = &displays[i].parallel_bus;
91-
self->base.type = &displayio_parallelbus_type;
92-
break;
93-
}
94-
}
95-
if (self == NULL) {
96-
mp_raise_RuntimeError(translate("Too many display busses"));
97-
}
86+
displayio_parallelbus_obj_t* self = &allocate_display_bus_or_raise()->parallel_bus;
9887

9988
common_hal_displayio_parallelbus_construct(self, data0, command, chip_select, write, read, reset);
10089
return self;

shared-module/displayio/__init__.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,20 @@ primary_display_t *allocate_display_or_raise() {
326326
}
327327

328328
}
329+
primary_display_t *allocate_display_bus(void) {
330+
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
331+
mp_const_obj_t display_type = displays[i].display.base.type;
332+
if (display_type == NULL || display_type == &mp_type_NoneType) {
333+
return &displays[i];
334+
}
335+
}
336+
return NULL;
337+
}
338+
339+
primary_display_t *allocate_display_bus_or_raise(void) {
340+
primary_display_t *result = allocate_display_bus();
341+
if (result) {
342+
return result;
343+
}
344+
mp_raise_RuntimeError(translate("Too many display busses"));
345+
}

shared-module/displayio/__init__.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,7 @@ void displayio_gc_collect(void);
5656

5757
primary_display_t *allocate_display(void);
5858
primary_display_t *allocate_display_or_raise(void);
59+
primary_display_t *allocate_display_bus(void);
60+
primary_display_t *allocate_display_bus_or_raise(void);
5961

6062
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO___INIT___H

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy