mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-16 18:12:07 +00:00
44 lines
825 B
C++
44 lines
825 B
C++
#include "PeriodicTask.h"
|
|
#include "Periodic.h"
|
|
PeriodicScheduler periodicScheduler;
|
|
|
|
PeriodicTask::PeriodicTask(uint32_t initialPeriod) : period(initialPeriod) {}
|
|
|
|
void PeriodicTask::setup()
|
|
{
|
|
periodicScheduler.schedule(this);
|
|
}
|
|
|
|
/// call this from loop
|
|
void PeriodicScheduler::loop()
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
void PeriodicScheduler::schedule(PeriodicTask *t)
|
|
{
|
|
meshtastic::LockGuard lg(&lock);
|
|
tasks.insert(t);
|
|
}
|
|
|
|
void PeriodicScheduler::unschedule(PeriodicTask *t)
|
|
{
|
|
meshtastic::LockGuard lg(&lock);
|
|
tasks.erase(t);
|
|
}
|
|
|
|
void Periodic::doTask()
|
|
{
|
|
uint32_t p = callback();
|
|
setPeriod(p);
|
|
}
|