19#include "pw_preprocessor/util.h"
29#include "pw_chrono_backend/system_clock_config.h"
36#include "pw_chrono/virtual_clock.h"
37#include "pw_numeric/saturating_arithmetic.h"
88 using period = std::ratio<PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_NUMERATOR,
89 PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_DENOMINATOR>;
91 using duration = std::chrono::duration<rep, period>;
92 using time_point = std::chrono::time_point<SystemClock>;
94 static constexpr Epoch
epoch = backend::kSystemClockEpoch;
100 static constexpr bool is_steady =
false;
118 static time_point
now() noexcept {
125 template <
class Rep,
class Period>
127 return std::chrono::ceil<duration>(d);
188 virtual SystemClock::time_point
now() = 0;
197#if __has_include("pw_chrono_backend/system_clock_inline.h")
198#include "pw_chrono_backend/system_clock_inline.h"
225#include "pw_chrono/internal/system_clock_macros.h"
236typedef int64_t pw_chrono_SystemClock_Nanoseconds;
253pw_chrono_SystemClock_Nanoseconds pw_chrono_SystemClock_DurationToNsFloor(
Definition: system_clock.h:180
Definition: virtual_clock.h:31
static constexpr Epoch epoch
The epoch must be provided by the backend.
Definition: system_clock.h:94
static constexpr bool is_nmi_safe
Definition: system_clock.h:115
int64_t GetSystemClockTickCount()
static constexpr bool is_monotonic
Definition: system_clock.h:99
static constexpr duration for_at_least(std::chrono::duration< Rep, Period > d)
Definition: system_clock.h:126
virtual SystemClock::time_point now()=0
Returns the current time.
static constexpr bool is_stopped_in_halting_debug_mode
The clock must stop while in halting debug mode.
Definition: system_clock.h:107
static time_point now() noexcept
This is thread and IRQ safe. This must be provided by the backend.
Definition: system_clock.h:118
static VirtualClock< SystemClock > & RealClock()
Returns a reference to the real system clock to aid instantiation.
static time_point TimePointAfterAtLeast(duration after_at_least)
Definition: system_clock.h:137
static constexpr bool is_free_running
Definition: system_clock.h:104
std::ratio< PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_NUMERATOR, PW_CHRONO_SYSTEM_CLOCK_PERIOD_SECONDS_DENOMINATOR > period
The period must be provided by the backend.
Definition: system_clock.h:89
std::chrono::duration< rep, period > duration
Alias for durations representable with this clock.
Definition: system_clock.h:91
static constexpr bool is_always_enabled
The now() function can be invoked at any time.
Definition: system_clock.h:110
constexpr T add_sat(T lhs, T rhs) noexcept
Definition: saturating_arithmetic.h:53
Portable std::chrono library for embedded.
Definition: simulated_system_clock.h:22
Definition: system_clock.h:85
Definition: system_clock.h:229
Definition: system_clock.h:233