nt9856x/code/hdal/drivers/k_driver/include/comm/hwclock.h
2023-03-28 15:07:53 +08:00

209 lines
4.8 KiB
C
Executable File

#ifndef _HWCLOCK_H
#define _HWCLOCK_H
/**
Get system counter us with 32 bit.
@return Counter value, bit 31~0: us, NOTE: it will overflow after 71.58 min!
*/
extern UINT32 hwclock_get_counter(void);
/**
Get system long counter us with 64 bit.
@return LongCounter value, 63~0: us. NOTE: it will overflow after 584901 year!
*/
extern UINT64 hwclock_get_longcounter(void);
/**
Get the time diff of two longcounter time.
Get the time diff of two longcounter time.
@return time diff value of us.
*/
extern UINT64 hwclock_diff_longcounter(UINT64 time_start, UINT64 time_end);
/**
If long counter init ready.
If long counter init ready.
@return ready or not.
*/
extern BOOL hwclock_is_longcounter_ready(void);
#if defined(__FREERTOS)
#define TIME_ID_CURRENT 1 ///< current time
#define TIME_ID_ALARM 2 ///< alarm time => event callback function.
#define TIME_ID_HWRT 3 ///< hw reset time (by power alarm timer)
#define TIME_ID_SWRT 4 ///< sw reset counter (by watch dog timer)
typedef enum {
HWCLOCK_MODE_RTC, ///< battery rtc
HWCLOCK_MODE_DRTC, ///< dc power rtc
ENUM_DUMMY4WORD(HWCLOCK_MODE)
} HWCLOCK_MODE;
typedef enum {
HWCLOCK_PERMISSION_READWRITE, ///< read/write
HWCLOCK_PERMISSION_READONLY, ///< read only
ENUM_DUMMY4WORD(HWCLOCK_PERMISSION)
} HWCLOCK_PERMISSION;
typedef enum {
HWCLOCK_PARAM_ID_HWCLOCK_PERMISSION, ///< HwClock permission
HWCLOCK_PARAM_ID_READ_TIME_OFFSET, ///< read HwClock time offset
ENUM_DUMMY4WORD(HWCLOCK_PARAM_ID)
} HWCLOCK_PARAM_ID;
/**
Init system timer
Init system timer of counter and longcounter, this API will be called when 1st task start
*/
extern void hwclock_init(void); ///< only for insmod on rtos
/**
Open HwClock
Open HwClock
@param[in] handle HwClock handle. 0 for internal HwClock.
@return Operation status
- @b E_OK : Operation successful
- @b E_ID : Outside semaphore ID number range
- @b E_NOEXS : Semaphore does not yet exist
*/
extern ER hwclock_open(HWCLOCK_MODE mode);
/**
Close HwClock
Close HwClock
*/
extern void hwclock_close(void);
/**
Set time
Set time of timeID
@param[in] id parameter id.
@param[in] p1 parameter 1.
@param[in] p2 parameter 2.
@return
- @b E_OK: No error.
- @b E_PAR: Parameter error.
*/
extern ER hwclock_set_param(HWCLOCK_PARAM_ID id, UINT32 p1, UINT32 p2);
/**
Set time
Set time of timeID
@param[in] id parameter id.
@param[in] p1 parameter 1.
@return Parameter value.
*/
extern UINT32 hwclock_get_param(HWCLOCK_PARAM_ID id, UINT32 p1);
/**
Get time
Get time of timeID
@param[in] timeID time index.
@return get time.
*/
struct tm hwclock_get_time(UINT32 time_id);
/**
Set time
Set time of timeID
@param[in] timeID time index.
@param[in] ctv set time.
@param[in] param paramters.
EX:
HwClock_SetTime(TIME_ID_CURRENT, ctv, 0);
HwClock_SetTime(TIME_ID_ALARM, ctv, (UINT32)MyAlaramCB);
HwClock_SetTime(TIME_ID_HWRT, ctv, 0);
HwClock_SetTime(TIME_ID_SWRT, ctv, 0);
NOTE:
The maximum value of ctv.tm_year is 1900(year) + 65535(days) when using
internal HwClock. The maximum value of ctv.tm_year is 1900(year) + 131071(days)
when using external HwClock.
*/
void hwclock_set_time(UINT32 timeID, struct tm ctv, UINT32 param);
/**
Calculate maximum days number of given (year, month).
Calculate maximum days number of given (year, month).
@param[in] year Year.
@param[in] month Month
@return Days number.
*/
extern INT32 timeutil_calc_month_days(INT32 year, INT32 month);
/**
Convert date-time value to days number.
Convert date-time value to days number.
@param[in] ctv Date time value.
@return Days number. [second precison]
*/
extern UINT32 timeutil_tm_to_days(struct tm ctv);
/**
Convert days number to date-time value.
Convert days number to date-time value.
@param[in] days Days number.
@return Date time value. [day precison]
*/
extern struct tm timeutil_days_to_tm(UINT32 days);
/**
Calculate sum of date-time value and another differece
Calculate sum of date-time value and another differece
@param[in] ctv Date time value.
@param[in] diff Difference (date time value).
@return Sum (date time value). [second precison]
*/
extern struct tm timeutil_tm_add(struct tm ctv, struct tm diff);
/**
Check if leap year
This function is used to check if the specified year is a leap year.
@param[in] uiYear The year you want to check (0~0xFFFFFFFF)
@return
- @b TRUE : Is a leap year
- @b FALSE : Isn't a leap year
*/
extern BOOL timeutil_is_leap_year(UINT32 year);
#endif
#endif /* _HW_CLOCK_H */