6#include "AudioTimerBase.h"
8#if defined(USE_TIMER) && defined(USE_CPP_TASK)
29class TimerAlarmRepeatingDriverLinux :
public TimerAlarmRepeatingDriverBase {
31 TimerAlarmRepeatingDriverLinux() =
default;
32 ~TimerAlarmRepeatingDriverLinux() { end(); }
34 bool begin(repeating_timer_callback_t callback_f, uint32_t time,
38 if (callback_f ==
nullptr || time == 0)
return false;
39 callback = callback_f;
40 period_us = toMicroseconds(time, unit);
42 worker = std::thread([
this]() { this->runLoop(); });
49 if (worker.joinable()) worker.join();
56 std::atomic<bool> running{
false};
57 repeating_timer_callback_t callback =
nullptr;
58 uint64_t period_us = 0;
60 static uint64_t toMicroseconds(uint32_t value,
TimeUnit unit) {
65 return static_cast<uint64_t
>(value) * 1000ULL;
67 return static_cast<uint64_t
>(value) * 1000ULL;
72 auto next = std::chrono::steady_clock::now();
73 while (running.load()) {
74 next += std::chrono::microseconds(period_us);
77 callback(callbackParameter());
79 std::this_thread::sleep_until(next);
TimeUnit
Time Units.
Definition AudioTypes.h:46