Files
firmware/src/PeriodicTask.cpp

44 lines
825 B
C++
Raw Normal View History

2020-02-21 08:41:36 -08:00
#include "PeriodicTask.h"
#include "Periodic.h"
PeriodicScheduler periodicScheduler;
2020-02-21 08:41:36 -08:00
2020-03-15 19:27:42 -07:00
PeriodicTask::PeriodicTask(uint32_t initialPeriod) : period(initialPeriod) {}
2020-02-21 08:41:36 -08:00
void PeriodicTask::setup()
{
periodicScheduler.schedule(this);
}
2020-02-21 08:41:36 -08:00
/// call this from loop
void PeriodicScheduler::loop()
2020-02-21 08:41:36 -08:00
{
meshtastic::LockGuard lg(&lock);
uint32_t now = millis();
for (auto t : tasks) {
if (t->period && (now - t->lastMsec) >= t->period) {
t->doTask();
t->lastMsec = now;
2020-03-15 19:27:42 -07:00
}
2020-02-21 08:41:36 -08:00
}
}
void PeriodicScheduler::schedule(PeriodicTask *t)
{
meshtastic::LockGuard lg(&lock);
tasks.insert(t);
}
void PeriodicScheduler::unschedule(PeriodicTask *t)
{
meshtastic::LockGuard lg(&lock);
tasks.erase(t);
2020-02-21 08:41:36 -08:00
}
2020-02-21 10:20:47 -08:00
void Periodic::doTask()
{
uint32_t p = callback();
setPeriod(p);
2020-03-15 19:27:42 -07:00
}