Fix for crash

Added mutex lock in timer update function
This commit is contained in:
Ken Van Hoeylandt
2025-10-15 20:20:32 +02:00
parent a42f018ddc
commit 16770e63d3
+4 -6
View File
@@ -11,17 +11,14 @@
constexpr char* TAG = "GPIO"; constexpr char* TAG = "GPIO";
void Gpio::updatePinStates() { void Gpio::updatePinStates() {
mutex.lock();
// Update pin states // Update pin states
for (int i = 0; i < pinStates.size(); ++i) { for (int i = 0; i < pinStates.size(); ++i) {
pinStates[i] = tt_hal_gpio_get_level(i); pinStates[i] = tt_hal_gpio_get_level(i);
} }
mutex.unlock();
} }
void Gpio::updatePinWidgets() { void Gpio::updatePinWidgets() {
tt_lvgl_lock(TT_MAX_TICKS); tt_lvgl_lock(TT_MAX_TICKS);
assert(pinStates.size() == pinWidgets.size());
for (int j = 0; j < pinStates.size(); ++j) { for (int j = 0; j < pinStates.size(); ++j) {
int level = pinStates[j]; int level = pinStates[j];
lv_obj_t* label = pinWidgets[j]; lv_obj_t* label = pinWidgets[j];
@@ -51,8 +48,11 @@ lv_obj_t* Gpio::createGpioRowWrapper(lv_obj_t* parent) {
void Gpio::onTimer(void* context) { void Gpio::onTimer(void* context) {
Gpio* app = static_cast<Gpio*>(context); Gpio* app = static_cast<Gpio*>(context);
app->mutex.lock();
app->updatePinStates(); app->updatePinStates();
app->updatePinWidgets(); app->updatePinWidgets();
app->mutex.unlock();
} }
void Gpio::startTask() { void Gpio::startTask() {
@@ -65,7 +65,6 @@ void Gpio::startTask() {
void Gpio::stopTask() { void Gpio::stopTask() {
assert(timer); assert(timer);
tt_timer_stop(timer); tt_timer_stop(timer);
tt_timer_free(timer); tt_timer_free(timer);
timer = nullptr; timer = nullptr;
@@ -164,9 +163,8 @@ void Gpio::onShow(AppHandle app, lv_obj_t* parent) {
} }
void Gpio::onHide(AppHandle app) { void Gpio::onHide(AppHandle app) {
stopTask();
mutex.lock(); mutex.lock();
stopTask();
pinWidgets.clear(); pinWidgets.clear();
pinStates.clear(); pinStates.clear();
mutex.unlock(); mutex.unlock();