3#include "AudioTimerBase.h"
5#if defined(USE_TIMER) && defined(USE_CPP_TASK)
30class TimerAlarmRepeatingDriverLinux :
public TimerAlarmRepeatingDriverBase {
32 TimerAlarmRepeatingDriverLinux() =
default;
33 ~TimerAlarmRepeatingDriverLinux() { end(); }
35 bool begin(repeating_timer_callback_t callback_f, uint32_t time,
39 if (callback_f ==
nullptr || time == 0)
return false;
40 callback = callback_f;
41 period_us = toMicroseconds(time, unit);
43 worker = std::thread([
this]() { this->runLoop(); });
50 if (worker.joinable()) worker.join();
57 std::atomic<bool> running{
false};
58 repeating_timer_callback_t callback =
nullptr;
59 uint64_t period_us = 0;
61 static uint64_t toMicroseconds(uint32_t value,
TimeUnit unit) {
66 return static_cast<uint64_t
>(value) * 1000ULL;
68 return static_cast<uint64_t
>(value) * 1000ULL;
73 auto next = std::chrono::steady_clock::now();
74 while (running.load()) {
75 next += std::chrono::microseconds(period_us);
78 callback(callbackParameter());
80 std::this_thread::sleep_until(next);
TimeUnit
Time Units.
Definition AudioTypes.h:48