Fix for crash
Added mutex lock in timer update function
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user