13#if defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32)
15#define CORIUM_NATIVE_ESP_TIMER 1
18#if defined(FREERTOS) || defined(INC_FREERTOS_H)
19#include <freertos/FreeRTOS.h>
20#include <freertos/task.h>
21#define CORIUM_NATIVE_FREERTOS 1
26class ChronoClockPolicy;
30template <
typename T,
typename =
void>
37 using type =
typename T::clock_policy;
46 using time_point = std::chrono::steady_clock::time_point;
51 return std::chrono::steady_clock::now();
54 template <
typename Rep,
typename Period>
57 return tp + std::chrono::duration_cast<std::chrono::steady_clock::duration>(d);
85 _currentTime += delta;
93 template <
typename Rep,
typename Period>
96 return tp +
static_cast<uint64_t
>(std::chrono::duration_cast<std::chrono::microseconds>(d).count());
106 return now >= expiry;
115template <
typename Prov
ider>
123 return Provider::nowUs();
126 template <
typename Rep,
typename Period>
129 return tp +
static_cast<uint64_t
>(std::chrono::duration_cast<std::chrono::microseconds>(d).count());
139 return now >= expiry;
145template <
typename Prov
ider>
153 return Provider::nowMs();
156 template <
typename Rep,
typename Period>
159 return tp +
static_cast<uint32_t
>(std::chrono::duration_cast<std::chrono::milliseconds>(d).count());
169 return now >= expiry;
181#if defined(CORIUM_NATIVE_ESP_TIMER)
182 int64_t t = esp_timer_get_time();
183 return t > 0 ?
static_cast<uint64_t
>(t) : 0;
185 return static_cast<uint64_t
>(
186 std::chrono::duration_cast<std::chrono::microseconds>(
187 std::chrono::steady_clock::now().time_since_epoch()
193 template <
typename Rep,
typename Period>
196 return tp +
static_cast<uint64_t
>(std::chrono::duration_cast<std::chrono::microseconds>(d).count());
206 return now >= expiry;
218#if defined(CORIUM_NATIVE_FREERTOS)
219 return static_cast<uint32_t
>(xTaskGetTickCount());
221 return static_cast<uint32_t
>(
222 std::chrono::duration_cast<std::chrono::milliseconds>(
223 std::chrono::steady_clock::now().time_since_epoch()
229 template <
typename Rep,
typename Period>
232 return tp +
static_cast<uint32_t
>(std::chrono::duration_cast<std::chrono::milliseconds>(d).count());
242 return now >= expiry;
Default host clock policy using std::chrono::steady_clock.
Definition ClockPolicies.hpp:44
std::chrono::microseconds duration
Definition ClockPolicies.hpp:47
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:60
static time_point now() noexcept
Definition ClockPolicies.hpp:49
std::chrono::steady_clock::time_point time_point
Definition ClockPolicies.hpp:46
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:55
Native ESP32 Hardware Timer clock policy using esp_timer_get_time() (64-bit microsecond counter).
Definition ClockPolicies.hpp:174
uint64_t time_point
Definition ClockPolicies.hpp:176
uint64_t duration
Definition ClockPolicies.hpp:177
static time_point now() noexcept
Definition ClockPolicies.hpp:179
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:204
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:194
static time_point add(time_point tp, duration delta) noexcept
Definition ClockPolicies.hpp:199
FreeRTOS RTOS Tick clock policy using xTaskGetTickCount().
Definition ClockPolicies.hpp:211
static time_point now() noexcept
Definition ClockPolicies.hpp:216
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:240
static time_point add(time_point tp, duration delta) noexcept
Definition ClockPolicies.hpp:235
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:230
uint32_t duration
Definition ClockPolicies.hpp:214
uint32_t time_point
Definition ClockPolicies.hpp:213
Deterministic, manually-advanced clock policy for unit tests and simulation.
Definition ClockPolicies.hpp:68
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:94
uint64_t duration
Definition ClockPolicies.hpp:71
static void reset() noexcept
Definition ClockPolicies.hpp:88
static void set(time_point t) noexcept
Definition ClockPolicies.hpp:78
uint64_t time_point
Definition ClockPolicies.hpp:70
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:104
static void advance(duration delta) noexcept
Definition ClockPolicies.hpp:83
static time_point add(time_point tp, duration delta) noexcept
Definition ClockPolicies.hpp:99
static time_point now() noexcept
Definition ClockPolicies.hpp:73
Clock policy driven by a custom microsecond tick provider.
Definition ClockPolicies.hpp:116
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:127
static time_point add(time_point tp, duration delta) noexcept
Definition ClockPolicies.hpp:132
uint64_t duration
Definition ClockPolicies.hpp:119
static time_point now() noexcept
Definition ClockPolicies.hpp:121
uint64_t time_point
Definition ClockPolicies.hpp:118
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:137
Clock policy driven by a custom millisecond tick provider (e.g. millis(), HAL_GetTick()).
Definition ClockPolicies.hpp:146
static time_point add(time_point tp, const std::chrono::duration< Rep, Period > &d) noexcept
Definition ClockPolicies.hpp:157
static time_point now() noexcept
Definition ClockPolicies.hpp:151
static time_point add(time_point tp, duration delta) noexcept
Definition ClockPolicies.hpp:162
uint32_t duration
Definition ClockPolicies.hpp:149
static bool isDue(time_point now, time_point expiry) noexcept
Definition ClockPolicies.hpp:167
uint32_t time_point
Definition ClockPolicies.hpp:148
Definition Application.hpp:16
typename T::clock_policy type
Definition ClockPolicies.hpp:37
Definition ClockPolicies.hpp:31