18#if VSF_HAL_USE_RTC == ENABLED
32#if (VSF_RTC_CFG_GET_API_TEMPLATE == ENABLED) \
33 || (VSF_RTC_CFG_SET_API_TEMPLATE == ENABLED) \
34 || (VSF_RTC_CFG_GET_TIME_API_TEMPLATE == ENABLED) \
35 || (VSF_RTC_CFG_SET_TIME_API_TEMPLATE == ENABLED)
42#if VSF_RTC_CFG_GET_API_TEMPLATE == ENABLED && VSF_RTC_CFG_GET_TIME_API_TEMPLATE == ENABLED
43# error "VSF_RTC_CFG_GET_API_TEMPLATE and VSF_RTC_CFG_GET_TIME_API_TEMPLATE Only one can be defined at a time"
46#if VSF_RTC_CFG_SET_API_TEMPLATE == ENABLED && VSF_RTC_CFG_SET_TIME_API_TEMPLATE == ENABLED
47# error "VSF_RTC_CFG_SET_API_TEMPLATE and VSF_RTC_CFG_SET_TIME_API_TEMPLATE Only one can be defined at a time"
50#ifndef VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
51# define VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
54#ifndef VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY
55# define VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
58#ifndef VSF_RTC_CFG_REIMPLEMENT_API_CTRL
59# define VSF_RTC_CFG_REIMPLEMENT_API_CTRL DISABLED
62#ifdef VSF_RTC_CFG_IMP_REMAP_PREFIX
63# undef VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY
64# define VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
65# undef VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
66# define VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
67# undef VSF_RTC_CFG_REIMPLEMENT_API_CTRL
68# define VSF_RTC_CFG_REIMPLEMENT_API_CTRL ENABLED
71#if VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
72# ifndef VSF_RTC_CFG_CAPABILITY_T_IRQ_MASK
73# define VSF_RTC_CFG_CAPABILITY_T_IRQ_MASK VSF_RTC_IRQ_ALL_BITS_MASK
77#if defined(VSF_RTC_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_RTC_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
78# define vsf_real_rtc_t VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _t)
79# define vsf_real_rtc_capability VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _capability)
80# define vsf_real_rtc_ctrl VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _ctrl)
81# define vsf_real_rtc_get_configuration VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _get_configuration)
82# define vsf_real_rtc_get VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _get)
83# define vsf_real_rtc_set VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _set)
84# define vsf_real_rtc_get_time VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _get_time)
85# define vsf_real_rtc_set_time VSF_MCONNECT(VSF_RTC_CFG_IMP_DEVICE_PREFIX, _set_time)
87# define vsf_real_rtc_t VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_t)
88# define vsf_real_rtc_capability VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_capability)
89# define vsf_real_rtc_ctrl VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_ctrl)
90# define vsf_real_rtc_get_configuration VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get_configuration)
91# define vsf_real_rtc_get VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get)
92# define vsf_real_rtc_set VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_set)
93# define vsf_real_rtc_get_time VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get_time)
94# define vsf_real_rtc_set_time VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_set_time)
104#if VSF_RTC_CFG_GET_API_TEMPLATE == ENABLED
110 time_t second, milliseconds;
111 vsf_err_t result = vsf_real_rtc_get_time(rtc_ptr, &second, &milliseconds);
128 rtc_tm->
tm_ms = milliseconds;
134#if VSF_RTC_CFG_SET_API_TEMPLATE == ENABLED
145 .tm_mon = rtc_tm->
tm_mon - 1,
146 .tm_year = rtc_tm->
tm_year - 1900,
150 return vsf_real_rtc_set_time(rtc_ptr, second, rtc_tm->
tm_ms);
154#if VSF_RTC_CFG_REIMPLEMENT_API_CTRL == DISABLED
166#if VSF_RTC_CFG_GET_TIME_API_TEMPLATE == ENABLED
173 vsf_err_t result = vsf_real_rtc_get(rtc_ptr, &rtc_tm);
178 if (second_ptr !=
NULL) {
184 .tm_mon = rtc_tm.
tm_mon - 1,
185 .tm_year = rtc_tm.
tm_year - 1900,
194 if (milliseconds_ptr !=
NULL) {
195 *milliseconds_ptr = rtc_tm.
tm_ms;
202#if VSF_RTC_CFG_SET_TIME_API_TEMPLATE == ENABLED
223 .tm_ms = milliseconds,
226 return vsf_real_rtc_set(rtc_ptr, &rtc_tm);
230#if VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
237 return rtc_capability;
241#if VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
253#undef VSF_RTC_CFG_REIMPLEMENT_TYPE_CAPABILITY
254#undef VSF_RTC_CFG_REIMPLEMENT_TYPE_CFG
255#undef VSF_RTC_CFG_REIMPLEMENT_TYPE_IRQ_MASK
256#undef VSF_RTC_CFG_REIMPLEMENT_TYPE_CTRL
257#undef VSF_RTC_CFG_REIMPLEMENT_API_CAPABILITY
258#undef VSF_RTC_CFG_REIMPLEMENT_API_CTRL
259#undef VSF_RTC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
260#undef VSF_RTC_CFG_CAPABILITY_T_IRQ_MASK
262#undef vsf_real_rtc_capability
263#undef vsf_real_rtc_ctrl
264#undef vsf_real_rtc_get_configuration
265#undef vsf_real_rtc_get
266#undef vsf_real_rtc_set
267#undef vsf_real_rtc_get_time
268#undef vsf_real_rtc_set_time
272#ifdef VSF_RTC_CFG_IMP_REMAP_PREFIX
274# define vsf_imp_rtc_t VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_t)
275# define vsf_imp_rtc_init VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_init)
276# define vsf_imp_rtc_enable VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_enable)
277# define vsf_imp_rtc_disable VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_disable)
278# define vsf_imp_rtc_capability VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_capability)
279# define vsf_imp_rtc_get VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get)
280# define vsf_imp_rtc_set VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_set)
281# define vsf_imp_rtc_get_time VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get_time)
282# define vsf_imp_rtc_set_time VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_set_time)
283# define vsf_imp_rtc_get_configuration VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_get_configuration)
284# define vsf_imp_rtc_ctrl VSF_MCONNECT(VSF_RTC_CFG_IMP_PREFIX, _rtc_ctrl)
286# define vsf_remap_rtc_t VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_t)
287# define vsf_remap_rtc_init VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_init)
288# define vsf_remap_rtc_fini VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_fini)
289# define vsf_remap_rtc_enable VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_enable)
290# define vsf_remap_rtc_disable VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_disable)
291# define vsf_remap_rtc_capability VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_capability)
292# define vsf_remap_rtc_get VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_get)
293# define vsf_remap_rtc_set VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_set)
294# define vsf_remap_rtc_get_time VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_get_time)
295# define vsf_remap_rtc_set_time VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_set_time)
296# define vsf_remap_rtc_get_configuration VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_get_configuration)
297# define vsf_remap_rtc_ctrl VSF_MCONNECT(VSF_RTC_CFG_IMP_REMAP_PREFIX, _rtc_ctrl)
299# define VSF_RTC_CFG_IMP_REMAP_FUNCTIONS \
300 vsf_err_t vsf_imp_rtc_init(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_cfg_t *cfg_ptr) \
302 VSF_HAL_ASSERT(rtc_ptr != NULL); \
303 return vsf_remap_rtc_init(rtc_ptr, cfg_ptr); \
305 void vsf_imp_rtc_fini(vsf_imp_rtc_t *rtc_ptr) \
307 VSF_HAL_ASSERT(rtc_ptr != NULL); \
308 vsf_remap_rtc_fini(rtc_ptr); \
310 fsm_rt_t vsf_imp_rtc_enable(vsf_imp_rtc_t *rtc_ptr) \
312 VSF_HAL_ASSERT(rtc_ptr != NULL); \
313 return vsf_remap_rtc_enable(rtc_ptr); \
315 fsm_rt_t vsf_imp_rtc_disable(vsf_imp_rtc_t *rtc_ptr) \
317 VSF_HAL_ASSERT(rtc_ptr != NULL); \
318 return vsf_remap_rtc_disable(rtc_ptr); \
320 vsf_err_t vsf_imp_rtc_get(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_tm_t *rtc_tm) \
322 VSF_HAL_ASSERT(rtc_ptr != NULL); \
323 return vsf_remap_rtc_get(rtc_ptr, rtc_tm); \
325 vsf_err_t vsf_imp_rtc_set(vsf_imp_rtc_t *rtc_ptr, const vsf_rtc_tm_t *rtc_tm) \
327 VSF_HAL_ASSERT(rtc_ptr != NULL); \
328 return vsf_remap_rtc_set(rtc_ptr, rtc_tm); \
330 vsf_err_t vsf_imp_rtc_get_time(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_time_t *second_ptr, \
331 vsf_rtc_time_t *millisecond_ptr) \
333 VSF_HAL_ASSERT(rtc_ptr != NULL); \
334 return vsf_remap_rtc_get_time(rtc_ptr, second_ptr, millisecond_ptr); \
336 vsf_err_t vsf_imp_rtc_set_time(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_time_t second, \
337 vsf_rtc_time_t millisecond) \
339 VSF_HAL_ASSERT(rtc_ptr != NULL); \
340 return vsf_remap_rtc_set_time(rtc_ptr, second, millisecond); \
342 vsf_rtc_capability_t vsf_imp_rtc_capability(vsf_imp_rtc_t *rtc_ptr) \
344 VSF_HAL_ASSERT(rtc_ptr != NULL); \
345 return vsf_remap_rtc_capability(rtc_ptr); \
348 vsf_err_t vsf_imp_rtc_get_configuration(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_cfg_t *cfg_ptr) \
350 VSF_HAL_ASSERT(rtc_ptr != NULL); \
351 return vsf_remap_rtc_get_configuration(rtc_ptr, cfg_ptr); \
353 vsf_err_t vsf_imp_rtc_ctrl(vsf_imp_rtc_t *rtc_ptr, vsf_rtc_ctrl_t ctrl, void *param) \
355 VSF_HAL_ASSERT(rtc_ptr != NULL); \
356 return vsf_remap_rtc_ctrl(rtc_ptr, ctrl, param); \
362#define VSF_HAL_TEMPLATE_IMP_NAME _rtc
363#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _RTC
365#if !defined(VSF_RTC_CFG_IMP_PREFIX) && !defined(VSF_RTC_CFG_IMP_DEVICE_PREFIX)
366# error "Please define VSF_RTC_CFG_IMP_PREFIX in rtc driver"
369#if !defined(VSF_RTC_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_RTC_CFG_IMP_DEVICE_UPCASE_PREFIX)
370# error "Please define VSF_RTC_CFG_IMP_UPCASE_PREFIX in rtc driver"
373#ifndef VSF_RTC_CFG_IMP_COUNT_MASK_PREFIX
374# define VSF_RTC_CFG_IMP_COUNT_MASK_PREFIX VSF_RTC_CFG_IMP_UPCASE_PREFIX
377#ifdef VSF_RTC_CFG_IMP_REMAP_FUNCTIONS
378# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_RTC_CFG_IMP_REMAP_FUNCTIONS
383#undef VSF_RTC_CFG_IMP_PREFIX
384#undef VSF_RTC_CFG_IMP_COUNT_MASK_PREFIX
385#undef VSF_RTC_CFG_IMP_UPCASE_PREFIX
386#undef VSF_RTC_CFG_IMP_DEVICE_PREFIX
387#undef VSF_RTC_CFG_IMP_DEVICE_UPCASE_PREFIX
388#undef VSF_RTC_CFG_IMP_LV0
389#undef VSF_RTC_CFG_IMP_REMAP_FUNCTIONS
390#undef VSF_RTC_CFG_IMP_HAS_OP
391#undef VSF_RTC_CFG_IMP_EXTERN_OP
392#undef VSF_RTC_CFG_IMP_RENAME_DEVICE_PREFIX
395#undef vsf_imp_rtc_init
396#undef vsf_imp_rtc_enable
397#undef vsf_imp_rtc_disable
398#undef vsf_imp_rtc_capability
399#undef vsf_imp_rtc_get
400#undef vsf_imp_rtc_set
401#undef vsf_imp_rtc_get_time
402#undef vsf_imp_rtc_set_time
403#undef vsf_imp_rtc_get_configuration
404#undef vsf_imp_rtc_ctrl
406#undef vsf_remap_rtc_t
407#undef vsf_remap_rtc_init
408#undef vsf_remap_rtc_enable
409#undef vsf_remap_rtc_disable
410#undef vsf_remap_rtc_capability
411#undef vsf_remap_rtc_get
412#undef vsf_remap_rtc_set
413#undef vsf_remap_rtc_get_time
414#undef vsf_remap_rtc_set_time
415#undef vsf_remap_rtc_get_configuration
416#undef vsf_remap_rtc_ctrl
418#undef VSF_HAL_TEMPLATE_IMP_NAME
419#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
444#ifdef VSF_RTC_CFG_MODE_CHECK_UNIQUE
448#ifdef VSF_RTC_CUSTOM_MODE_VALUES
456#ifdef VSF_RTC_CFG_IRQ_MASK_CHECK_UNIQUE
458#ifdef VSF_RTC_CUSTOM_IRQ_MASK_VALUES
473#ifdef VSF_RTC_CUSTOM_IRQ_MASK_VALUES
474 , VSF_RTC_CUSTOM_IRQ_MASK_VALUES
479#undef VSF_RTC_CFG_MODE_CHECK_UNIQUE
480#undef VSF_RTC_CFG_IRQ_MASK_CHECK_UNIQUE
481#undef VSF_RTC_CUSTOM_MODE_VALUES
482#undef VSF_RTC_CUSTOM_IRQ_MASK_VALUES
#define VSF_STATIC_ASSERT(__COND,...)
Definition __type.h:199
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_NONE
none error
Definition __type.h:44
@ VSF_ERR_FAIL
failed
Definition __type.h:51
#define VSF_RTC_CFG_CAPABILITY_IRQ_MASK
Definition rtc.c:148
__TIME_T time_t
Definition types.h:152
#define NULL
Definition lvgl.h:26
struct tm * gmtime(const time_t *t)
Definition vsf_linux_glibc_time.c:366
time_t mktime(struct tm *tm)
Definition vsf_linux_glibc_time.c:86
int tm_mon
Definition time.h:58
int tm_year
Definition time.h:59
int tm_hour
Definition time.h:56
int tm_sec
Definition time.h:54
int tm_mday
Definition time.h:57
int tm_min
Definition time.h:55
int tm_wday
Definition time.h:60
RTC capability structure. Describes the features and capabilities supported by the RTC hardware.
Definition vsf_template_rtc.h:379
RTC configuration structure.
Definition vsf_template_rtc.h:365
Time structure for RTC operations. Used to represent date and time information in a standardized form...
Definition vsf_template_rtc.h:255
uint16_t tm_ms
Milliseconds component of time [0-999]. Provides sub-second precision.
Definition vsf_template_rtc.h:326
uint8_t tm_sec
Seconds component of time [0-59].
Definition vsf_template_rtc.h:262
uint16_t tm_year
Year value [0-65535].
Definition vsf_template_rtc.h:316
uint8_t tm_mon
Month [1-12]. January=1, February=2, ..., December=12.
Definition vsf_template_rtc.h:308
uint8_t tm_wday
Day of week [1-7]. Sunday=1, Monday=2, ..., Saturday=7.
Definition vsf_template_rtc.h:298
uint8_t tm_mday
Day of month [1-31].
Definition vsf_template_rtc.h:288
uint8_t tm_hour
Hours component of time [0-23]. Uses 24-hour format.
Definition vsf_template_rtc.h:280
uint8_t tm_min
Minutes component of time [0-59].
Definition vsf_template_rtc.h:270
#define VSF_RTC_CFG_IRQ_MASK_CHECK_UNIQUE
Definition rtc.c:225
#define VSF_RTC_CFG_MODE_CHECK_UNIQUE
Definition rtc.c:224
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_rtc_ctrl_t
RTC control commands for hardware-specific operations.
Definition vsf_template_rtc.h:413
VSF_RTC_CFG_TIME_TYPE vsf_rtc_time_t
RTC time type definition.
Definition vsf_template_rtc.h:245
@ VSF_RTC_IRQ_MASK_ALARM
Alarm interrupt mask. Triggers when the RTC time matches the configured alarm time.
Definition vsf_template_rtc.h:211
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426