caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_utl_timekeeping.h
Go to the documentation of this file.
1
6#ifndef CAFFEINE_SAL_UTL_TIMEKEEPING_H
7#define CAFFEINE_SAL_UTL_TIMEKEEPING_H
8
9#ifdef __cplusplus
10extern "C"
11{
12#endif
13
14/* Includes ---------------------------------------------------------*/
15#include "cfn_sal.h"
16#include <time.h>
17
18/* Defines ----------------------------------------------------------*/
19
20#define CFN_SAL_UTL_TYPE_TIMEKEEPING CFN_SAL_TYPE('T', 'I', 'M')
21
22/* Types Enums ------------------------------------------------------*/
23
30
31/* Types Structs ----------------------------------------------------*/
32
39
40typedef struct cfn_sal_utl_timekeeping_s cfn_sal_utl_timekeeping_t;
42
44 uint32_t event,
45 uint32_t error,
46 void *user_arg);
47
52{
53 cfn_hal_api_base_t base;
54
55 /* Time Operations */
56 cfn_hal_error_code_t (*set_time)(cfn_sal_utl_timekeeping_t *driver, time_t timestamp);
57 cfn_hal_error_code_t (*get_time)(cfn_sal_utl_timekeeping_t *driver, time_t *timestamp_out);
58 cfn_hal_error_code_t (*get_ms)(cfn_sal_utl_timekeeping_t *driver, uint64_t *ms_out);
59
60 /* Synchronization */
61 cfn_hal_error_code_t (*sync_now)(cfn_sal_utl_timekeeping_t *driver);
62 cfn_hal_error_code_t (*is_synchronized)(cfn_sal_utl_timekeeping_t *driver, bool *is_sync_out);
63};
64
66
67CFN_SAL_CREATE_DRIVER_TYPE(sal_utl_timekeeping,
72
73/* Functions inline ------------------------------------------------- */
74
76 uint32_t peripheral_id,
77 void *dependency,
79 const cfn_sal_phy_t *phy,
82 void *user_arg)
83{
84 CFN_HAL_POPULATE_DRIVER(
85 driver, CFN_SAL_UTL_TYPE_TIMEKEEPING, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
86}
87
90 const cfn_sal_phy_t *phy,
91 void *dependency,
93 void *user_arg);
95
96CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_init(cfn_sal_utl_timekeeping_t *driver)
97{
98 if (!driver)
99 {
100 return CFN_HAL_ERROR_BAD_PARAM;
101 }
102 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
103 return cfn_hal_base_init(&driver->base, CFN_SAL_UTL_TYPE_TIMEKEEPING);
104}
105
106CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_deinit(cfn_sal_utl_timekeeping_t *driver)
107{
108 if (!driver)
109 {
110 return CFN_HAL_ERROR_BAD_PARAM;
111 }
112 return cfn_hal_base_deinit(&driver->base, CFN_SAL_UTL_TYPE_TIMEKEEPING);
113}
114
115CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_set_time(cfn_sal_utl_timekeeping_t *driver,
116 time_t timestamp)
117{
118 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
119 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_TIMEKEEPING, set_time, driver, error, timestamp);
120 return error;
121}
122
123CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_get_time(cfn_sal_utl_timekeeping_t *driver,
124 time_t *timestamp_out)
125{
126 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
127 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_TIMEKEEPING, get_time, driver, error, timestamp_out);
128 return error;
129}
130
131CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_get_ms(cfn_sal_utl_timekeeping_t *driver, uint64_t *ms_out)
132{
133 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
134 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_TIMEKEEPING, get_ms, driver, error, ms_out);
135 return error;
136}
137
138CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_sync_now(cfn_sal_utl_timekeeping_t *driver)
139{
140 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
141 CFN_HAL_CHECK_AND_CALL_FUNC(CFN_SAL_UTL_TYPE_TIMEKEEPING, sync_now, driver, error);
142 return error;
143}
144
145CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_is_synchronized(cfn_sal_utl_timekeeping_t *driver,
146 bool *is_sync_out)
147{
148 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
149 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_SAL_UTL_TYPE_TIMEKEEPING, is_synchronized, driver, error, is_sync_out);
150 return error;
151}
152
153#ifdef __cplusplus
154}
155#endif
156
157#endif /* CAFFEINE_SAL_UTL_TIMEKEEPING_H */
Core definitions and macros for Caffeine SAL.
#define CFN_SAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_sal.h:38
cfn_hal_error_code_t cfn_sal_utl_timekeeping_construct(cfn_sal_utl_timekeeping_t *driver, const cfn_sal_utl_timekeeping_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_utl_timekeeping_callback_t callback, void *user_arg)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_get_time(cfn_sal_utl_timekeeping_t *driver, time_t *timestamp_out)
Definition cfn_sal_utl_timekeeping.h:123
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_init(cfn_sal_utl_timekeeping_t *driver)
Definition cfn_sal_utl_timekeeping.h:96
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_sync_now(cfn_sal_utl_timekeeping_t *driver)
Definition cfn_sal_utl_timekeeping.h:138
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_get_ms(cfn_sal_utl_timekeeping_t *driver, uint64_t *ms_out)
Definition cfn_sal_utl_timekeeping.h:131
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_deinit(cfn_sal_utl_timekeeping_t *driver)
Definition cfn_sal_utl_timekeeping.h:106
struct cfn_sal_utl_timekeeping_s cfn_sal_utl_timekeeping_t
Definition cfn_sal_utl_timekeeping.h:40
void(* cfn_sal_utl_timekeeping_callback_t)(cfn_sal_utl_timekeeping_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_utl_timekeeping.h:43
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_set_time(cfn_sal_utl_timekeeping_t *driver, time_t timestamp)
Definition cfn_sal_utl_timekeeping.h:115
CFN_HAL_VMT_CHECK(struct cfn_sal_utl_timekeeping_api_s)
cfn_sal_utl_timekeeping_event_t
Definition cfn_sal_utl_timekeeping.h:25
@ CFN_SAL_UTL_TIMEKEEPING_EVENT_SYNC_FAILED
Definition cfn_sal_utl_timekeeping.h:28
@ CFN_SAL_UTL_TIMEKEEPING_EVENT_SYNC_OK
Definition cfn_sal_utl_timekeeping.h:27
@ CFN_SAL_UTL_TIMEKEEPING_EVENT_NONE
Definition cfn_sal_utl_timekeeping.h:26
cfn_hal_error_code_t cfn_sal_utl_timekeeping_destruct(cfn_sal_utl_timekeeping_t *driver)
CFN_HAL_INLINE void cfn_sal_utl_timekeeping_populate(cfn_sal_utl_timekeeping_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_utl_timekeeping_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_utl_timekeeping_config_t *config, cfn_sal_utl_timekeeping_callback_t callback, void *user_arg)
Definition cfn_sal_utl_timekeeping.h:75
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_timekeeping_is_synchronized(cfn_sal_utl_timekeeping_t *driver, bool *is_sync_out)
Definition cfn_sal_utl_timekeeping.h:145
#define CFN_SAL_UTL_TYPE_TIMEKEEPING
Definition cfn_sal_utl_timekeeping.h:20
Generic physical mapping for services.
Definition cfn_sal_types.h:26
Timekeeping Virtual Method Table (VMT).
Definition cfn_sal_utl_timekeeping.h:52
cfn_hal_error_code_t(* sync_now)(cfn_sal_utl_timekeeping_t *driver)
Definition cfn_sal_utl_timekeeping.h:61
cfn_hal_api_base_t base
Definition cfn_sal_utl_timekeeping.h:53
cfn_hal_error_code_t(* set_time)(cfn_sal_utl_timekeeping_t *driver, time_t timestamp)
Definition cfn_sal_utl_timekeeping.h:56
cfn_hal_error_code_t(* get_ms)(cfn_sal_utl_timekeeping_t *driver, uint64_t *ms_out)
Definition cfn_sal_utl_timekeeping.h:58
cfn_hal_error_code_t(* get_time)(cfn_sal_utl_timekeeping_t *driver, time_t *timestamp_out)
Definition cfn_sal_utl_timekeeping.h:57
cfn_hal_error_code_t(* is_synchronized)(cfn_sal_utl_timekeeping_t *driver, bool *is_sync_out)
Definition cfn_sal_utl_timekeeping.h:62
Definition cfn_sal_utl_timekeeping.h:34
uint32_t sync_interval_s
Definition cfn_sal_utl_timekeeping.h:35
bool use_rtc_fallback
Definition cfn_sal_utl_timekeeping.h:36
void * custom
Definition cfn_sal_utl_timekeeping.h:37