Skip to content

Commit 437e36e

Browse files
committed
Use compile-time arrays AND additional dynamic memory
1 parent a61fac6 commit 437e36e

File tree

6 files changed

+157
-86
lines changed

6 files changed

+157
-86
lines changed

main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ int __attribute__((used)) main(void) {
10511051
alarm_reset();
10521052
#endif
10531053

1054-
#if CIRCUITPY_DISPLAYIO
1054+
#if CIRCUITPY_DISPLAYIO && CIRCUITPY_OS_GETENV
10551055
// If number of displays has been overridden in settings.toml allocate memory and
10561056
// move existing displays
10571057
malloc_display_memory();

shared-module/board/__init__.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,23 @@ mp_obj_t common_hal_board_create_uart(const mp_int_t instance) {
178178
void reset_board_buses(void) {
179179
#if CIRCUITPY_BOARD_I2C || (CIRCUITPY_BOARD_SPI && (CIRCUITPY_FOURWIRE || CIRCUITPY_SHARPDISPLAY || CIRCUITPY_AURORA_EPAPER))
180180
mp_int_t max_num_displays = CIRCUITPY_DISPLAY_LIMIT;
181+
#if CIRCUITPY_OS_GETENV
182+
#define DYN_DISPLAY_BUSES(indx) (indx < CIRCUITPY_DISPLAY_LIMIT ? display_buses[indx] : display_buses_dyn[indx - CIRCUITPY_DISPLAY_LIMIT])
183+
#else
184+
#define DYN_DISPLAY_BUSES(indx) (display_buses[indx])
185+
#endif
181186

182187
#if CIRCUITPY_OS_GETENV
183188
(void)common_hal_os_getenv_int("CIRCUITPY_DISPLAY_LIMIT", &max_num_displays);
184189
#endif
185190
#endif
186191

187192
#if CIRCUITPY_BOARD_I2C
188-
for (uint8_t instance = 0; instance < max_num_displays; instance++) {
193+
for (uint8_t instance = 0; instance < CIRCUITPY_BOARD_I2C; instance++) {
189194
bool display_using_i2c = false;
190195
#if CIRCUITPY_I2CDISPLAYBUS
191196
for (uint8_t i = 0; i < max_num_displays; i++) {
192-
if (display_buses[i].bus_base.type == &i2cdisplaybus_i2cdisplaybus_type && display_buses[i].i2cdisplay_bus.bus == &i2c_obj[instance]) {
197+
if (DYN_DISPLAY_BUSES(i).bus_base.type == &i2cdisplaybus_i2cdisplaybus_type && DYN_DISPLAY_BUSES(i).i2cdisplay_bus.bus == &i2c_obj[instance]) {
193198
display_using_i2c = true;
194199
break;
195200
}
@@ -210,21 +215,21 @@ void reset_board_buses(void) {
210215
bool display_using_spi = false;
211216
#if CIRCUITPY_FOURWIRE || CIRCUITPY_SHARPDISPLAY || CIRCUITPY_AURORA_EPAPER
212217
for (uint8_t i = 0; i < max_num_displays; i++) {
213-
mp_const_obj_t bus_type = display_buses[i].bus_base.type;
218+
mp_const_obj_t bus_type = DYN_DISPLAY_BUSES(i).bus_base.type;
214219
#if CIRCUITPY_FOURWIRE
215-
if (bus_type == &fourwire_fourwire_type && display_buses[i].fourwire_bus.bus == &spi_obj[instance]) {
220+
if (bus_type == &fourwire_fourwire_type && DYN_DISPLAY_BUSES(i).fourwire_bus.bus == &spi_obj[instance]) {
216221
display_using_spi = true;
217222
break;
218223
}
219224
#endif
220225
#if CIRCUITPY_SHARPDISPLAY
221-
if (bus_type == &sharpdisplay_framebuffer_type && display_buses[i].sharpdisplay.bus == &spi_obj[instance]) {
226+
if (bus_type == &sharpdisplay_framebuffer_type && DYN_DISPLAY_BUSES(i).sharpdisplay.bus == &spi_obj[instance]) {
222227
display_using_spi = true;
223228
break;
224229
}
225230
#endif
226231
#if CIRCUITPY_AURORA_EPAPER
227-
if (bus_type == &aurora_epaper_framebuffer_type && display_buses[i].aurora_epaper.bus == &spi_obj[instance]) {
232+
if (bus_type == &aurora_epaper_framebuffer_type && DYN_DISPLAY_BUSES(i).aurora_epaper.bus == &spi_obj[instance]) {
228233
display_using_spi = true;
229234
break;
230235
}

0 commit comments

Comments
 (0)