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

View File

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

View File

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