From 7b8b6a1e9e591f1b9aba83bfd72018ad5c16c0e3 Mon Sep 17 00:00:00 2001 From: AJ Date: Mon, 29 Apr 2024 21:54:03 -0600 Subject: [PATCH] fix: make display thread safe --- Software/src/ossm/OSSM.Help.cpp | 2 ++ Software/src/ossm/OSSM.StrokeEngine.cpp | 2 ++ Software/src/ossm/OSSM.Update.cpp | 6 ++++++ Software/src/ossm/OSSM.WiFi.cpp | 2 ++ Software/src/ossm/OSSM.cpp | 2 ++ 5 files changed, 14 insertions(+) diff --git a/Software/src/ossm/OSSM.Help.cpp b/Software/src/ossm/OSSM.Help.cpp index 53ae8851..4cf56f7a 100644 --- a/Software/src/ossm/OSSM.Help.cpp +++ b/Software/src/ossm/OSSM.Help.cpp @@ -5,6 +5,7 @@ #include "qrcode.h" void OSSM::drawHelp() { + displayMutex.lock(); display.clearBuffer(); static QRCode qrcode; @@ -43,4 +44,5 @@ void OSSM::drawHelp() { display.drawUTF8(0, 38, UserConfig::language.GetHelpLine2.c_str()); display.drawUTF8(0, 62, UserConfig::language.Skip.c_str()); display.sendBuffer(); + displayMutex.unlock(); } diff --git a/Software/src/ossm/OSSM.StrokeEngine.cpp b/Software/src/ossm/OSSM.StrokeEngine.cpp index d305aaa5..2d7477da 100644 --- a/Software/src/ossm/OSSM.StrokeEngine.cpp +++ b/Software/src/ossm/OSSM.StrokeEngine.cpp @@ -4,10 +4,12 @@ #include "extensions/u8g2Extensions.h" void OSSM::startStrokeEngine() { + displayMutex.lock(); display.clearBuffer(); drawStr::title(UserConfig::language.StrokeEngine); drawStr::multiLine(0, 40, UserConfig::language.InDevelopment); display.sendBuffer(); + displayMutex.unlock(); } \ No newline at end of file diff --git a/Software/src/ossm/OSSM.Update.cpp b/Software/src/ossm/OSSM.Update.cpp index 210ef6c1..ac33ac6f 100644 --- a/Software/src/ossm/OSSM.Update.cpp +++ b/Software/src/ossm/OSSM.Update.cpp @@ -3,26 +3,32 @@ #include "Arduino.h" #include "extensions/u8g2Extensions.h" void OSSM::drawUpdate() { + displayMutex.lock(); display.clearBuffer(); String title = "Checking for update..."; drawStr::title(title); // TODO - Add a spinner here display.sendBuffer(); + displayMutex.unlock(); } void OSSM::drawNoUpdate() { + displayMutex.lock(); display.clearBuffer(); String title = "No Update Available"; drawStr::title(title); display.drawUTF8(0, 62, UserConfig::language.Skip.c_str()); display.sendBuffer(); + displayMutex.unlock(); } void OSSM::drawUpdating() { + displayMutex.lock(); display.clearBuffer(); String title = "Updating OSSM..."; drawStr::title(title); drawStr::multiLine(0, 24, UserConfig::language.UpdateMessage); display.sendBuffer(); + displayMutex.unlock(); } diff --git a/Software/src/ossm/OSSM.WiFi.cpp b/Software/src/ossm/OSSM.WiFi.cpp index 5517c6fc..8563a88c 100644 --- a/Software/src/ossm/OSSM.WiFi.cpp +++ b/Software/src/ossm/OSSM.WiFi.cpp @@ -5,6 +5,7 @@ #include "qrcode.h" void OSSM::drawWiFi() { + displayMutex.lock(); display.clearBuffer(); static QRCode qrcode; @@ -43,6 +44,7 @@ void OSSM::drawWiFi() { display.drawUTF8(0, 38, UserConfig::language.WiFiSetupLine2.c_str()); display.drawUTF8(0, 62, UserConfig::language.Restart.c_str()); display.sendBuffer(); + displayMutex.unlock(); wm.setConfigPortalTimeout(120); wm.setDisableConfigPortal(false); diff --git a/Software/src/ossm/OSSM.cpp b/Software/src/ossm/OSSM.cpp index ad1e1ea6..71363e99 100644 --- a/Software/src/ossm/OSSM.cpp +++ b/Software/src/ossm/OSSM.cpp @@ -122,8 +122,10 @@ void OSSM::drawError() { ESP_LOGD("OSSM::drawError", "Caught exception: %s", e.what()); } + displayMutex.lock(); display.clearBuffer(); drawStr::title(UserConfig::language.Error); drawStr::multiLine(0, 20, errorMessage); display.sendBuffer(); + displayMutex.unlock(); }