9#include <driver/timer.h>
10#include <driver/timer_types_legacy.h>
11#include <freertos/FreeRTOS.h>
12#include <freertos/semphr.h>
13#include <freertos/timers.h>
15#include <mlab/unique_tracker.hpp>
21 using namespace std::chrono_literals;
33 .alarm_en = TIMER_ALARM_EN,
34 .counter_en = TIMER_PAUSE,
35 .intr_type = TIMER_INTR_LEVEL,
36 .counter_dir = TIMER_COUNT_UP,
37 .auto_reload = TIMER_AUTORELOAD_EN,
38 .clk_src = TIMER_SRC_CLK_DEFAULT,
42 timer_group_t
_group = TIMER_GROUP_MAX;
43 timer_idx_t
_idx = TIMER_MAX;
56 [[nodiscard]]
inline timer_group_t
group()
const;
58 [[nodiscard]]
inline timer_idx_t
index()
const;
72 BaseType_t
core_affinity = tskNO_AFFINITY, timer_idx_t timer_idx = TIMER_0,
73 timer_group_t timer_group = TIMER_GROUP_0);
85 [[nodiscard]]
inline std::chrono::milliseconds
period()
const;
95 inline explicit operator bool()
const;
99 std::chrono::time_point<std::chrono::steady_clock>
_last_start;
107 using generic_timer::operator bool;
113 steady_timer(std::chrono::milliseconds
period, std::function<
void(std::chrono::milliseconds)> cbk,
114 BaseType_t
core_affinity = tskNO_AFFINITY, timer_idx_t timer_idx = TIMER_0,
115 timer_group_t timer_group = TIMER_GROUP_0);
125 [[nodiscard]] std::chrono::milliseconds
elapsed() const;
127 void start() override;
129 void stop() override;
131 void reset() override;
158 generic_timer::operator bool()
const {
static std::uint64_t get_alarm_value(std::chrono::milliseconds period)
Definition: timer.cpp:132
std::function< void(generic_timer &)> _cbk
Definition: timer.hpp:45
static constexpr std::uint32_t generic_timer_base_frequency
Definition: timer.hpp:30
BaseType_t core_affinity() const
Definition: timer.hpp:146
std::chrono::milliseconds _period
Definition: timer.hpp:47
std::chrono::milliseconds period() const
Definition: timer.hpp:150
virtual ~generic_timer()
Definition: timer.cpp:151
BaseType_t _core_affinity
Definition: timer.hpp:44
virtual void reset()
Definition: timer.cpp:144
virtual void start()
Definition: timer.cpp:115
bool _active
Definition: timer.hpp:48
generic_timer & operator=(generic_timer const &)=delete
timer_group_t group() const
Definition: timer.hpp:138
void setup_callbacks()
Definition: timer.cpp:78
timer_idx_t index() const
Definition: timer.hpp:142
timer_group_t _group
Definition: timer.hpp:42
static bool IRAM_ATTR isr_callback(void *tracker)
Definition: timer.cpp:123
TaskHandle_t _cbk_task
Definition: timer.hpp:46
timer_idx_t _idx
Definition: timer.hpp:43
bool is_active() const
Definition: timer.hpp:154
generic_timer(generic_timer const &)=delete
virtual void stop()
Definition: timer.cpp:136
static constexpr timer_config_t timer_config_default
Definition: timer.hpp:32
void teardown_callbacks()
Definition: timer.cpp:100
static void cbk_task_body(void *tracker)
Definition: timer.cpp:53
timer_config_t _cfg
Definition: timer.hpp:41
bool is_valid_timer() const
Definition: timer.cpp:111
std::chrono::milliseconds period() const
Definition: timer.hpp:150
steady_timer(steady_timer const &)=delete
void reset() override
Definition: timer.cpp:196
std::chrono::milliseconds elapsed_since_last_start() const
Definition: timer.cpp:181
bool is_active() const
Definition: timer.hpp:154
std::chrono::time_point< std::chrono::steady_clock > _last_start
Definition: timer.hpp:99
static void elapsed_callback(generic_timer &gen_timer)
Definition: timer.cpp:161
std::chrono::milliseconds elapsed() const
Definition: timer.cpp:185
void start() override
Definition: timer.cpp:174
std::chrono::milliseconds _previous_laps_duration
Definition: timer.hpp:100
steady_timer(steady_timer &&) noexcept=default
steady_timer()
Definition: timer.cpp:159
void stop() override
Definition: timer.cpp:189