move logic for deciding enabling a task inside the controller

This commit is contained in:
Nicu Hodos 2025-02-12 12:05:32 +01:00
parent ca31851afe
commit 598638239f
3 changed files with 8 additions and 10 deletions

View File

@ -77,7 +77,7 @@ namespace Devices {
.addSecondary( .addSecondary(
Builder<Button>::instance(new Button{"Display sensor data", "display_sensor_data", Builder<Button>::instance(new Button{"Display sensor data", "display_sensor_data",
[](const char* msg) { [](const char* msg) {
if (strcmp("PRESS", msg) == 0 && !Display::tDisplaySensor.isEnabled()) { if (strcmp("PRESS", msg) == 0) {
Bme::data.readAll(); Bme::data.readAll();
Display::displayTask.activate(Display::tDisplaySensor); Display::displayTask.activate(Display::tDisplaySensor);
}; };
@ -87,7 +87,7 @@ namespace Devices {
.addSecondary( .addSecondary(
Builder<Button>::instance(new Button{"Display date", "display_date", Builder<Button>::instance(new Button{"Display date", "display_date",
[](const char* msg) { [](const char* msg) {
if (strcmp("PRESS", msg) == 0 && !Display::tDisplayDate.isEnabled()) { if (strcmp("PRESS", msg) == 0) {
Display::displayTask.activate(Display::tDisplayDate); Display::displayTask.activate(Display::tDisplayDate);
}; };
} }
@ -96,7 +96,7 @@ namespace Devices {
.addSecondary( .addSecondary(
Builder<Button>::instance(new Button{"Display remaining timer", "display_remaining_timer", Builder<Button>::instance(new Button{"Display remaining timer", "display_remaining_timer",
[](const char* msg) { [](const char* msg) {
if (strcmp("PRESS", msg) == 0 && !Display::tDisplayTimer.isEnabled()) { if (strcmp("PRESS", msg) == 0) {
Display::displayTask.activate(Display::tDisplayTimer); Display::displayTask.activate(Display::tDisplayTimer);
} }
} }

View File

@ -25,17 +25,17 @@ namespace Display {
return *perm; return *perm;
} }
Task& activate(Task& task) { bool activate(Task& task) {
if (task.isEnabled()) return false;
if (temp) temp->cancel(); if (temp) temp->cancel();
if (perm) perm->cancel(); if (perm) perm->cancel();
if (task.getIterations() == TASK_FOREVER) { if (task.getIterations() == TASK_FOREVER) {
task.enable();
perm = &task; perm = &task;
return task.enable();
} else { } else {
task.restart();
temp = &task; temp = &task;
return task.restart();
} }
return task;
} }
void restorePerm() { void restorePerm() {

View File

@ -28,9 +28,7 @@ void turnLed(bool on = true) {
Task tButton(TASK_IMMEDIATE, TASK_ONCE, Task tButton(TASK_IMMEDIATE, TASK_ONCE,
[]() { []() {
if (Display::tDisplaySensor.isEnabled()) return; if (Display::displayTask.activate(Display::tDisplaySensor)) Bme::data.readAll();
Bme::data.readAll();
Display::displayTask.activate(Display::tDisplaySensor);
}, &ts); }, &ts);
Task tLed(TASK_IMMEDIATE, TASK_ONCE, Task tLed(TASK_IMMEDIATE, TASK_ONCE,
[]() { []() {