Skip to content

Commit 4a7081c

Browse files
committed
Set primary_display_number so supervisor.runtime.display survives VM
1 parent 18ddd48 commit 4a7081c

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

shared-module/displayio/__init__.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ mp_int_t max_allocated_display = CIRCUITPY_DISPLAY_LIMIT;
5656
primary_display_bus_t display_buses[CIRCUITPY_DISPLAY_LIMIT];
5757
primary_display_t displays[CIRCUITPY_DISPLAY_LIMIT];
5858
#if CIRCUITPY_OS_GETENV && CIRCUITPY_SET_DISPLAY_LIMIT
59-
primary_display_bus_t *display_buses_dyn = &display_buses[0];
60-
primary_display_t *displays_dyn = &displays[0];
59+
primary_display_bus_t *display_buses_dyn;
60+
primary_display_t *displays_dyn;
6161
#define DYN_DISPLAY_BUSES(indx) (indx < CIRCUITPY_DISPLAY_LIMIT ? display_buses[indx] : display_buses_dyn[indx - CIRCUITPY_DISPLAY_LIMIT])
6262
#define DYN_DISPLAY_BUSES_ADR(indx, membr) (indx < CIRCUITPY_DISPLAY_LIMIT ? &display_buses[indx].membr : &display_buses_dyn[indx - CIRCUITPY_DISPLAY_LIMIT].membr)
6363
#define DYN_DISPLAY_BUSES_ADR0(indx) (indx < CIRCUITPY_DISPLAY_LIMIT ? &display_buses[indx] : &display_buses_dyn[indx - CIRCUITPY_DISPLAY_LIMIT])
@@ -260,9 +260,9 @@ void reset_displays(void) {
260260
m_del(primary_display_t, displays_dyn, (max_allocated_display - CIRCUITPY_DISPLAY_LIMIT));
261261
display_buses_dyn = NULL;
262262
displays_dyn = NULL;
263+
// Set dynamically allocated displays to 0 (CIRCUITPY_DISPLAY_LIMIT)
264+
max_allocated_display = CIRCUITPY_DISPLAY_LIMIT;
263265
}
264-
// Set dynamically allocated displays to 0 (CIRCUITPY_DISPLAY_LIMIT)
265-
max_allocated_display = CIRCUITPY_DISPLAY_LIMIT;
266266
#endif
267267

268268
// The SPI buses used by FourWires may be allocated on the heap so we need to move them inline.
@@ -498,6 +498,10 @@ primary_display_t *allocate_display(void) {
498498
#else
499499
displays[i].display_base.type = &mp_type_NoneType;
500500
#endif
501+
if (i == 0) {
502+
// The first display is the primary display.
503+
primary_display_number = 0;
504+
}
501505
return DYN_DISPLAYS_ADR0(i);
502506
}
503507
}

0 commit comments

Comments
 (0)