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)