Iros
 
Loading...
Searching...
No Matches
timer.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/util/prelude.h"
5#include "iris/core/error.h"
6#include "iris/hw/irq.h"
7
8namespace iris {
9enum class TimerCapabilities {
10 SingleShot = 1 << 0,
11 Periodic = 1 << 1,
12 PerCpu = 1 << 2,
14};
15
17
18using TimerResolution = di::Picoseconds;
19
20namespace detail {
21 template<typename R = void>
23 auto operator()(auto&&...) const -> Expected<R> { return di::Unexpected(Error::NotSupported); }
24 };
25}
26
27struct TimerName : di::Dispatcher<TimerName, di::StringView(di::This const&)> {};
28struct TimerCapabilitiesFunction : di::Dispatcher<TimerCapabilitiesFunction, TimerCapabilities(di::This const&)> {};
29struct TimerResolutionFunction : di::Dispatcher<TimerResolutionFunction, TimerResolution(di::This const&)> {};
31 : di::Dispatcher<TimerCalibrateFunction, Expected<void>(di::This&), detail::TimerDefaultNotSupported<>> {};
32
34 : di::Dispatcher<TimerSetSingleShotFunction,
35 Expected<void>(di::This&, TimerResolution, di::Function<void(IrqContext&)>),
36 detail::TimerDefaultNotSupported<>> {};
38 : di::Dispatcher<TimerSetIntervalFunction,
39 Expected<void>(di::This&, TimerResolution, di::Function<void(IrqContext&)>),
40 detail::TimerDefaultNotSupported<>> {};
41
42constexpr inline auto timer_name = TimerName {};
44constexpr inline auto timer_resolution = TimerResolutionFunction {};
45constexpr inline auto timer_calibrate = TimerCalibrateFunction {};
48
52
55
57}
#define DI_DEFINE_ENUM_BITWISE_OPERATIONS(Type)
Definition bitwise_enum.h:5
Definition synchronized.h:17
Definition unexpected.h:14
detail::DispatcherImpl< Self, Sig, Tags... > Dispatcher
Definition dispatcher.h:47
meta::Type< AnyT< UserInterface, Storage, VTablePolicy > > Any
Definition any.h:294
Definition zstring_parser.h:9
Definition object_pool.h:14
Definition cxx_init.cpp:12
TimerCapabilities
Definition timer.h:9
@ NeedsCalibration
Definition timer.h:13
@ PerCpu
Definition timer.h:12
@ SingleShot
Definition timer.h:10
@ Periodic
Definition timer.h:11
constexpr auto timer_set_single_shot
Definition timer.h:46
di::Picoseconds TimerResolution
Definition timer.h:18
@ NotSupported
Definition error.h:60
auto scheduler_timer() -> di::Synchronized< Timer > &
Definition timer.cpp:71
di::Any< TimerInterface > Timer
Definition timer.h:51
constexpr auto timer_capabilities
Definition timer.h:43
constexpr auto timer_calibrate
Definition timer.h:45
di::vocab::Expected< T, di::platform::GenericCode > Expected
Definition error.h:324
di::meta::List< TimerName, TimerCapabilitiesFunction, TimerResolutionFunction, TimerCalibrateFunction, TimerSetSingleShotFunction, TimerSetIntervalFunction > TimerInterface
Definition timer.h:49
auto calibration_timer() -> di::Synchronized< Timer > &
Definition timer.cpp:75
constexpr auto timer_set_interval
Definition timer.h:47
constexpr auto timer_name
Definition timer.h:42
void init_timer_assignments()
Definition timer.cpp:7
constexpr auto timer_resolution
Definition timer.h:44
Definition core.h:5
Definition timer.h:31
Definition timer.h:28
Definition timer.h:27
Definition timer.h:29
Definition timer.h:40
auto operator()(auto &&...) const -> Expected< R >
Definition timer.h:23