Skip to content

Commit 9e104c0

Browse files
authored
Merge pull request #7215 from FoamyGuy/set_root_group
displayio.show() API change
2 parents 6e40949 + 5746209 commit 9e104c0

File tree

13 files changed

+122
-22
lines changed

13 files changed

+122
-22
lines changed

shared-bindings/displayio/Display.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,21 @@ STATIC mp_obj_t displayio_display_obj_get_root_group(mp_obj_t self_in) {
423423
}
424424
MP_DEFINE_CONST_FUN_OBJ_1(displayio_display_get_root_group_obj, displayio_display_obj_get_root_group);
425425

426-
MP_PROPERTY_GETTER(displayio_display_root_group_obj,
427-
(mp_obj_t)&displayio_display_get_root_group_obj);
426+
STATIC mp_obj_t displayio_display_obj_set_root_group(mp_obj_t self_in, mp_obj_t group_in) {
427+
displayio_display_obj_t *self = native_display(self_in);
428+
displayio_group_t *group = NULL;
429+
if (group_in != mp_const_none) {
430+
group = MP_OBJ_TO_PTR(native_group(group_in));
431+
}
432+
433+
common_hal_displayio_display_set_root_group(self, group);
434+
return mp_const_none;
435+
}
436+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_display_set_root_group_obj, displayio_display_obj_set_root_group);
437+
438+
MP_PROPERTY_GETSET(displayio_display_root_group_obj,
439+
(mp_obj_t)&displayio_display_get_root_group_obj,
440+
(mp_obj_t)&displayio_display_set_root_group_obj);
428441

429442

430443
//| def fill_row(self, y: int, buffer: WriteableBuffer) -> WriteableBuffer:

shared-bindings/displayio/Display.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,6 @@ bool common_hal_displayio_display_set_brightness(displayio_display_obj_t *self,
6767

6868
mp_obj_t common_hal_displayio_display_get_bus(displayio_display_obj_t *self);
6969
mp_obj_t common_hal_displayio_display_get_root_group(displayio_display_obj_t *self);
70+
mp_obj_t common_hal_displayio_display_set_root_group(displayio_display_obj_t *self, displayio_group_t *root_group);
7071

7172
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_DISPLAY_H

shared-bindings/displayio/EPaperDisplay.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,30 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_epaperdisplay_get_bus_obj, displayio_epaperd
349349
MP_PROPERTY_GETTER(displayio_epaperdisplay_bus_obj,
350350
(mp_obj_t)&displayio_epaperdisplay_get_bus_obj);
351351

352+
//| root_group: Group
353+
//| """The root group on the epaper display."""
354+
//|
355+
STATIC mp_obj_t displayio_epaperdisplay_obj_get_root_group(mp_obj_t self_in) {
356+
displayio_epaperdisplay_obj_t *self = native_display(self_in);
357+
return common_hal_displayio_epaperdisplay_get_root_group(self);
358+
}
359+
MP_DEFINE_CONST_FUN_OBJ_1(displayio_epaperdisplay_get_root_group_obj, displayio_epaperdisplay_obj_get_root_group);
360+
361+
STATIC mp_obj_t displayio_epaperdisplay_obj_set_root_group(mp_obj_t self_in, mp_obj_t group_in) {
362+
displayio_epaperdisplay_obj_t *self = native_display(self_in);
363+
displayio_group_t *group = NULL;
364+
if (group_in != mp_const_none) {
365+
group = MP_OBJ_TO_PTR(native_group(group_in));
366+
}
367+
368+
common_hal_displayio_epaperdisplay_set_root_group(self, group);
369+
return mp_const_none;
370+
}
371+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_epaperdisplay_set_root_group_obj, displayio_epaperdisplay_obj_set_root_group);
372+
373+
MP_PROPERTY_GETSET(displayio_epaperdisplay_root_group_obj,
374+
(mp_obj_t)&displayio_epaperdisplay_get_root_group_obj,
375+
(mp_obj_t)&displayio_epaperdisplay_set_root_group_obj);
352376

353377
STATIC const mp_rom_map_elem_t displayio_epaperdisplay_locals_dict_table[] = {
354378
{ MP_ROM_QSTR(MP_QSTR_show), MP_ROM_PTR(&displayio_epaperdisplay_show_obj) },
@@ -361,6 +385,7 @@ STATIC const mp_rom_map_elem_t displayio_epaperdisplay_locals_dict_table[] = {
361385
{ MP_ROM_QSTR(MP_QSTR_bus), MP_ROM_PTR(&displayio_epaperdisplay_bus_obj) },
362386
{ MP_ROM_QSTR(MP_QSTR_busy), MP_ROM_PTR(&displayio_epaperdisplay_busy_obj) },
363387
{ MP_ROM_QSTR(MP_QSTR_time_to_refresh), MP_ROM_PTR(&displayio_epaperdisplay_time_to_refresh_obj) },
388+
{ MP_ROM_QSTR(MP_QSTR_root_group), MP_ROM_PTR(&displayio_epaperdisplay_root_group_obj) },
364389
};
365390
STATIC MP_DEFINE_CONST_DICT(displayio_epaperdisplay_locals_dict, displayio_epaperdisplay_locals_dict_table);
366391

shared-bindings/displayio/EPaperDisplay.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ bool common_hal_displayio_epaperdisplay_refresh(displayio_epaperdisplay_obj_t *s
4848

4949
bool common_hal_displayio_epaperdisplay_show(displayio_epaperdisplay_obj_t *self, displayio_group_t *root_group);
5050

51+
mp_obj_t common_hal_displayio_epaperdisplay_get_root_group(displayio_epaperdisplay_obj_t *self);
52+
bool common_hal_displayio_epaperdisplay_set_root_group(displayio_epaperdisplay_obj_t *self, displayio_group_t *root_group);
53+
5154
// Returns time in milliseconds.
5255
uint32_t common_hal_displayio_epaperdisplay_get_time_to_refresh(displayio_epaperdisplay_obj_t *self);
5356
bool common_hal_displayio_epaperdisplay_get_busy(displayio_epaperdisplay_obj_t *self);

shared-bindings/displayio/__init__.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#endif
4646
#include "shared-bindings/displayio/Shape.h"
4747
#include "shared-bindings/displayio/TileGrid.h"
48+
#include "shared-module/displayio/__init__.h"
4849

4950
//| """Native helpers for driving displays
5051
//|
@@ -95,6 +96,7 @@ STATIC const mp_rom_map_elem_t displayio_module_globals_table[] = {
9596
#endif
9697

9798
{ MP_ROM_QSTR(MP_QSTR_release_displays), MP_ROM_PTR(&displayio_release_displays_obj) },
99+
{ MP_ROM_QSTR(MP_QSTR_CIRCUITPYTHON_TERMINAL), MP_ROM_PTR(&circuitpython_splash) },
98100
};
99101
STATIC MP_DEFINE_CONST_DICT(displayio_module_globals, displayio_module_globals_table);
100102

shared-bindings/framebufferio/FramebufferDisplay.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,24 @@ STATIC mp_obj_t framebufferio_framebufferdisplay_obj_get_root_group(mp_obj_t sel
328328
}
329329
MP_DEFINE_CONST_FUN_OBJ_1(framebufferio_framebufferdisplay_get_root_group_obj, framebufferio_framebufferdisplay_obj_get_root_group);
330330

331-
MP_PROPERTY_GETTER(framebufferio_framebufferdisplay_root_group_obj,
332-
(mp_obj_t)&framebufferio_framebufferdisplay_get_root_group_obj);
331+
STATIC mp_obj_t framebufferio_framebufferdisplay_obj_set_root_group(mp_obj_t self_in, mp_obj_t group_in) {
332+
framebufferio_framebufferdisplay_obj_t *self = native_display(self_in);
333+
displayio_group_t *group = NULL;
334+
if (group_in != mp_const_none) {
335+
group = MP_OBJ_TO_PTR(native_group(group_in));
336+
}
337+
338+
bool ok = common_hal_framebufferio_framebufferdisplay_set_root_group(self, group);
339+
if (!ok) {
340+
mp_raise_ValueError(translate("Group already used"));
341+
}
342+
return mp_const_none;
343+
}
344+
MP_DEFINE_CONST_FUN_OBJ_2(framebufferio_framebufferdisplay_set_root_group_obj, framebufferio_framebufferdisplay_obj_set_root_group);
345+
346+
MP_PROPERTY_GETSET(framebufferio_framebufferdisplay_root_group_obj,
347+
(mp_obj_t)&framebufferio_framebufferdisplay_get_root_group_obj,
348+
(mp_obj_t)&framebufferio_framebufferdisplay_set_root_group_obj);
333349

334350
STATIC const mp_rom_map_elem_t framebufferio_framebufferdisplay_locals_dict_table[] = {
335351
{ MP_ROM_QSTR(MP_QSTR_show), MP_ROM_PTR(&framebufferio_framebufferdisplay_show_obj) },

shared-bindings/framebufferio/FramebufferDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,6 @@ bool common_hal_framebufferio_framebufferdisplay_set_brightness(framebufferio_fr
6161
mp_obj_t common_hal_framebufferio_framebufferdisplay_framebuffer(framebufferio_framebufferdisplay_obj_t *self);
6262

6363
mp_obj_t common_hal_framebufferio_framebufferdisplay_get_root_group(framebufferio_framebufferdisplay_obj_t *self);
64+
mp_obj_t common_hal_framebufferio_framebufferdisplay_set_root_group(framebufferio_framebufferdisplay_obj_t *self, displayio_group_t *root_group);
6465

6566
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYIO_FRAMEBUFFERDISPLAY_H

shared-module/displayio/Display.c

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,15 @@ void common_hal_displayio_display_construct(displayio_display_obj_t *self,
136136

137137
// Set the group after initialization otherwise we may send pixels while we delay in
138138
// initialization.
139-
common_hal_displayio_display_show(self, &circuitpython_splash);
139+
common_hal_displayio_display_set_root_group(self, &circuitpython_splash);
140140
common_hal_displayio_display_set_auto_refresh(self, auto_refresh);
141141
}
142142

143143
bool common_hal_displayio_display_show(displayio_display_obj_t *self, displayio_group_t *root_group) {
144-
return displayio_display_core_show(&self->core, root_group);
144+
if (root_group == NULL) {
145+
root_group = &circuitpython_splash;
146+
}
147+
return displayio_display_core_set_root_group(&self->core, root_group);
145148
}
146149

147150
uint16_t common_hal_displayio_display_get_width(displayio_display_obj_t *self) {
@@ -206,6 +209,9 @@ mp_obj_t common_hal_displayio_display_get_bus(displayio_display_obj_t *self) {
206209
}
207210

208211
mp_obj_t common_hal_displayio_display_get_root_group(displayio_display_obj_t *self) {
212+
if (self->core.current_group == NULL) {
213+
return mp_const_none;
214+
}
209215
return self->core.current_group;
210216
}
211217

@@ -398,6 +404,14 @@ void common_hal_displayio_display_set_auto_refresh(displayio_display_obj_t *self
398404
self->auto_refresh = auto_refresh;
399405
}
400406

407+
mp_obj_t common_hal_displayio_display_set_root_group(displayio_display_obj_t *self, displayio_group_t *root_group) {
408+
bool ok = displayio_display_core_set_root_group(&self->core, root_group);
409+
if (!ok) {
410+
mp_raise_ValueError(translate("Group already used"));
411+
}
412+
return mp_const_none;
413+
}
414+
401415
void displayio_display_background(displayio_display_obj_t *self) {
402416
if (self->auto_refresh && (supervisor_ticks_ms64() - self->core.last_refresh) > self->native_ms_per_frame) {
403417
_refresh_display(self);
@@ -421,7 +435,10 @@ void release_display(displayio_display_obj_t *self) {
421435

422436
void reset_display(displayio_display_obj_t *self) {
423437
common_hal_displayio_display_set_auto_refresh(self, true);
424-
common_hal_displayio_display_show(self, NULL);
438+
circuitpython_splash.x = 0; // reset position in case someone moved it.
439+
circuitpython_splash.y = 0;
440+
supervisor_start_terminal(self->core.width, self->core.height);
441+
common_hal_displayio_display_set_root_group(self, &circuitpython_splash);
425442
}
426443

427444
void displayio_display_collect_ptrs(displayio_display_obj_t *self) {

shared-module/displayio/Display.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ typedef struct {
6464
void displayio_display_background(displayio_display_obj_t *self);
6565
void release_display(displayio_display_obj_t *self);
6666
void reset_display(displayio_display_obj_t *self);
67-
6867
void displayio_display_collect_ptrs(displayio_display_obj_t *self);
6968

7069
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_DISPLAY_H

shared-module/displayio/EPaperDisplay.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,14 @@ void common_hal_displayio_epaperdisplay_construct(displayio_epaperdisplay_obj_t
103103
}
104104

105105
bool common_hal_displayio_epaperdisplay_show(displayio_epaperdisplay_obj_t *self, displayio_group_t *root_group) {
106-
return displayio_display_core_show(&self->core, root_group);
106+
if (root_group == NULL) {
107+
root_group = &circuitpython_splash;
108+
}
109+
return displayio_display_core_set_root_group(&self->core, root_group);
110+
}
111+
112+
bool common_hal_displayio_epaperdisplay_set_root_group(displayio_epaperdisplay_obj_t *self, displayio_group_t *root_group) {
113+
return displayio_display_core_set_root_group(&self->core, root_group);
107114
}
108115

109116
STATIC const displayio_area_t *displayio_epaperdisplay_get_refresh_areas(displayio_epaperdisplay_obj_t *self) {
@@ -239,6 +246,12 @@ uint16_t common_hal_displayio_epaperdisplay_get_rotation(displayio_epaperdisplay
239246
return self->core.rotation;
240247
}
241248

249+
mp_obj_t common_hal_displayio_epaperdisplay_get_root_group(displayio_epaperdisplay_obj_t *self) {
250+
if (self->core.current_group == NULL) {
251+
return mp_const_none;
252+
}
253+
return self->core.current_group;
254+
}
242255

243256
STATIC bool displayio_epaperdisplay_refresh_area(displayio_epaperdisplay_obj_t *self, const displayio_area_t *area) {
244257
uint16_t buffer_size = 128; // In uint32_ts

0 commit comments

Comments
 (0)