diff options
| author | Scott Shawcroft <scott@adafruit.com> | 2020-10-01 10:13:13 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-01 10:13:13 -0700 |
| commit | be6e6eabd27e5e301decc93496a9fbc59f0f6bda (patch) | |
| tree | 8d0164d5acd58677ec2b5a0a7358bba81f1f3051 /shared-module | |
| parent | 36bd405380f9669bee2ab662861fbcbf9f0289a4 (diff) | |
| parent | 422a7d4013ddaec7df5df9104e5d9ea533b31d1a (diff) | |
Merge pull request #3449 from FoamyGuy/sdcard_odb_fix
Sdcard odb fix
Diffstat (limited to 'shared-module')
| -rw-r--r-- | shared-module/displayio/Display.c | 5 | ||||
| -rw-r--r-- | shared-module/displayio/__init__.c | 10 | ||||
| -rw-r--r-- | shared-module/displayio/display_core.c | 12 | ||||
| -rw-r--r-- | shared-module/displayio/display_core.h | 3 |
4 files changed, 15 insertions, 15 deletions
diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index 37d72a82f..bb7e40f41 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -328,11 +328,10 @@ STATIC bool _refresh_area(displayio_display_obj_t* self, const displayio_area_t* } STATIC void _refresh_display(displayio_display_obj_t* self) { - if (!displayio_display_core_bus_free(&self->core)) { - // Can't acquire display bus; skip updating this display. Try next display. + if (!displayio_display_core_start_refresh(&self->core)) { + // A refresh on this bus is already in progress. Try next display. return; } - displayio_display_core_start_refresh(&self->core); const displayio_area_t* current_area = _get_refresh_areas(self); while (current_area != NULL) { _refresh_area(self, current_area); diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index 101dac4b3..a9bb3b21b 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -40,8 +40,6 @@ STATIC bool any_display_uses_this_framebuffer(mp_obj_base_t *obj) { } #endif -// Check for recursive calls to displayio_background. -bool displayio_background_in_progress = false; void displayio_background(void) { if (mp_hal_is_interrupted()) { @@ -52,12 +50,6 @@ void displayio_background(void) { return; } - if (displayio_background_in_progress) { - // Don't allow recursive calls to this routine. - return; - } - - displayio_background_in_progress = true; for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { if (displays[i].display.base.type == NULL || displays[i].display.base.type == &mp_type_NoneType) { @@ -75,8 +67,6 @@ void displayio_background(void) { } } - // All done. - displayio_background_in_progress = false; } void common_hal_displayio_release_displays(void) { diff --git a/shared-module/displayio/display_core.c b/shared-module/displayio/display_core.c index c592202fb..6975e0af1 100644 --- a/shared-module/displayio/display_core.c +++ b/shared-module/displayio/display_core.c @@ -316,8 +316,17 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t* self, } } -void displayio_display_core_start_refresh(displayio_display_core_t* self) { +bool displayio_display_core_start_refresh(displayio_display_core_t* self) { + if (!displayio_display_core_bus_free(self)) { + // Can't acquire display bus; skip updating this display. Try next display. + return false; + } + if (self->refresh_in_progress) { + return false; + } + self->refresh_in_progress = true; self->last_refresh = supervisor_ticks_ms64(); + return true; } void displayio_display_core_finish_refresh(displayio_display_core_t* self) { @@ -326,6 +335,7 @@ void displayio_display_core_finish_refresh(displayio_display_core_t* self) { displayio_group_finish_refresh(self->current_group); } self->full_refresh = false; + self->refresh_in_progress = false; self->last_refresh = supervisor_ticks_ms64(); } diff --git a/shared-module/displayio/display_core.h b/shared-module/displayio/display_core.h index 3b45f7946..fe6cb6f3f 100644 --- a/shared-module/displayio/display_core.h +++ b/shared-module/displayio/display_core.h @@ -54,6 +54,7 @@ typedef struct { int16_t colstart; int16_t rowstart; bool full_refresh; // New group means we need to refresh the whole display. + bool refresh_in_progress; } displayio_display_core_t; void displayio_display_core_construct(displayio_display_core_t* self, @@ -81,7 +82,7 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t* self, void release_display_core(displayio_display_core_t* self); -void displayio_display_core_start_refresh(displayio_display_core_t* self); +bool displayio_display_core_start_refresh(displayio_display_core_t* self); void displayio_display_core_finish_refresh(displayio_display_core_t* self); void displayio_display_core_collect_ptrs(displayio_display_core_t* self); |
