summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/displayio/Display.c2
-rw-r--r--shared-module/displayio/__init__.c20
-rw-r--r--shared-module/storage/__init__.c5
3 files changed, 23 insertions, 4 deletions
diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c
index f14a27b78..da3424a36 100644
--- a/shared-module/displayio/Display.c
+++ b/shared-module/displayio/Display.c
@@ -121,7 +121,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
// Always set the backlight type in case we're reusing memory.
self->backlight_inout.base.type = &mp_type_NoneType;
if (backlight_pin != NULL && common_hal_mcu_pin_is_free(backlight_pin)) {
- pwmout_result_t result = common_hal_pulseio_pwmout_construct(&self->backlight_pwm, backlight_pin, 0, 5000, false);
+ pwmout_result_t result = common_hal_pulseio_pwmout_construct(&self->backlight_pwm, backlight_pin, 0, 50000, false);
if (result != PWMOUT_OK) {
self->backlight_inout.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin);
diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c
index c4f9cbeb7..0d35abf0f 100644
--- a/shared-module/displayio/__init__.c
+++ b/shared-module/displayio/__init__.c
@@ -2,10 +2,12 @@
#include <string.h>
#include "shared-module/displayio/__init__.h"
+#include "py/reload.h"
#include "shared-bindings/displayio/Bitmap.h"
#include "shared-bindings/displayio/Display.h"
#include "shared-bindings/displayio/Group.h"
#include "shared-bindings/displayio/Palette.h"
+#include "supervisor/shared/autoreload.h"
#include "supervisor/shared/display.h"
#include "supervisor/memory.h"
#include "supervisor/usb.h"
@@ -18,7 +20,19 @@ static inline void swap(uint16_t* a, uint16_t* b) {
*b = temp;
}
+bool refreshing_displays = false;
+
void displayio_refresh_displays(void) {
+ // Somehow reloads from the sdcard are being lost. So, cheat and reraise.
+ if (reload_requested) {
+ mp_raise_reload_exception();
+ return;
+ }
+
+ if (refreshing_displays) {
+ return;
+ }
+ refreshing_displays = 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) {
continue;
@@ -27,6 +41,7 @@ void displayio_refresh_displays(void) {
displayio_display_update_backlight(display);
if (!displayio_display_frame_queued(display)) {
+ refreshing_displays = false;
return;
}
if (displayio_display_refresh_queued(display)) {
@@ -89,8 +104,9 @@ void displayio_refresh_displays(void) {
index += 1;
// The buffer is full, send it.
if (index >= buffer_size) {
- if (!displayio_display_send_pixels(display, buffer, buffer_size / 2)) {
+ if (!displayio_display_send_pixels(display, buffer, buffer_size / 2) || reload_requested) {
displayio_display_finish_region_update(display);
+ refreshing_displays = false;
return;
}
// TODO(tannewt): Make refresh displays faster so we don't starve other
@@ -103,12 +119,14 @@ void displayio_refresh_displays(void) {
// Send the remaining data.
if (index && !displayio_display_send_pixels(display, buffer, index * 2)) {
displayio_display_finish_region_update(display);
+ refreshing_displays = false;
return;
}
displayio_display_finish_region_update(display);
}
displayio_display_finish_refresh(display);
}
+ refreshing_displays = false;
}
void common_hal_displayio_release_displays(void) {
diff --git a/shared-module/storage/__init__.c b/shared-module/storage/__init__.c
index f09edd785..215e1356a 100644
--- a/shared-module/storage/__init__.c
+++ b/shared-module/storage/__init__.c
@@ -143,7 +143,7 @@ mp_obj_t common_hal_storage_getmount(const char *mount_path) {
return storage_object_from_path(mount_path);
}
-void common_hal_storage_remount(const char *mount_path, bool readonly) {
+void common_hal_storage_remount(const char *mount_path, bool readonly, bool disable_concurrent_write_protection) {
if (strcmp(mount_path, "/") != 0) {
mp_raise_OSError(MP_EINVAL);
}
@@ -156,7 +156,8 @@ void common_hal_storage_remount(const char *mount_path, bool readonly) {
}
#endif
- supervisor_flash_set_usb_writable(readonly);
+ filesystem_set_internal_writable_by_usb(readonly);
+ filesystem_set_internal_concurrent_write_protection(!disable_concurrent_write_protection);
}
void common_hal_storage_erase_filesystem(void) {