Split LedSingle into multiple tasks
This commit is contained in:
parent
0db5b2eb9a
commit
f8f79c816a
@ -16,9 +16,11 @@ public:
|
||||
void turnAllOn();
|
||||
|
||||
private:
|
||||
void loop();
|
||||
void setLoop();
|
||||
void outputLoop();
|
||||
|
||||
Task _loopTask;
|
||||
Task _setTask;
|
||||
Task _outputTask;
|
||||
|
||||
enum class LedState_t {
|
||||
On,
|
||||
@ -28,9 +30,7 @@ private:
|
||||
|
||||
LedState_t _ledState[PINMAPPING_LED_COUNT];
|
||||
LedState_t _allState;
|
||||
TimeoutHelper _updateTimeout;
|
||||
TimeoutHelper _blinkTimeout;
|
||||
uint8_t _ledActive = 0;
|
||||
};
|
||||
|
||||
extern LedSingleClass LedSingle;
|
||||
@ -18,8 +18,9 @@ LedSingleClass::LedSingleClass()
|
||||
|
||||
void LedSingleClass::init(Scheduler* scheduler)
|
||||
{
|
||||
bool ledActive = false;
|
||||
|
||||
_blinkTimeout.set(500);
|
||||
_updateTimeout.set(LEDSINGLE_UPDATE_INTERVAL);
|
||||
turnAllOn();
|
||||
|
||||
auto& pin = PinMapping.get();
|
||||
@ -28,25 +29,29 @@ void LedSingleClass::init(Scheduler* scheduler)
|
||||
if (pin.led[i] >= 0) {
|
||||
pinMode(pin.led[i], OUTPUT);
|
||||
digitalWrite(pin.led[i], LOW);
|
||||
_ledActive++;
|
||||
ledActive = true;
|
||||
}
|
||||
|
||||
_ledState[i] = LedState_t::Off;
|
||||
}
|
||||
|
||||
scheduler->addTask(_loopTask);
|
||||
_loopTask.setCallback(std::bind(&LedSingleClass::loop, this));
|
||||
_loopTask.setIterations(TASK_FOREVER);
|
||||
_loopTask.enable();
|
||||
if (ledActive) {
|
||||
scheduler->addTask(_outputTask);
|
||||
_outputTask.setCallback(std::bind(&LedSingleClass::outputLoop, this));
|
||||
_outputTask.setIterations(TASK_FOREVER);
|
||||
_outputTask.enable();
|
||||
|
||||
scheduler->addTask(_setTask);
|
||||
_setTask.setCallback(std::bind(&LedSingleClass::setLoop, this));
|
||||
_setTask.setInterval(LEDSINGLE_UPDATE_INTERVAL * TASK_MILLISECOND);
|
||||
_setTask.setIterations(TASK_FOREVER);
|
||||
_setTask.enable();
|
||||
}
|
||||
}
|
||||
|
||||
void LedSingleClass::loop()
|
||||
void LedSingleClass::setLoop()
|
||||
{
|
||||
if (_ledActive == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_updateTimeout.occured() && _allState == LedState_t::On) {
|
||||
if (_allState == LedState_t::On) {
|
||||
const CONFIG_T& config = Configuration.get();
|
||||
|
||||
// Update network status
|
||||
@ -73,12 +78,14 @@ void LedSingleClass::loop()
|
||||
}
|
||||
}
|
||||
|
||||
_updateTimeout.reset();
|
||||
} else if (_updateTimeout.occured() && _allState == LedState_t::Off) {
|
||||
} else if (_allState == LedState_t::Off) {
|
||||
_ledState[0] = LedState_t::Off;
|
||||
_ledState[1] = LedState_t::Off;
|
||||
}
|
||||
}
|
||||
|
||||
void LedSingleClass::outputLoop()
|
||||
{
|
||||
auto& pin = PinMapping.get();
|
||||
for (uint8_t i = 0; i < PINMAPPING_LED_COUNT; i++) {
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user