summaryrefslogtreecommitdiff
path: root/bsp/xuantie/libraries/xuantie_libraries/csi/csi2/include/drv/rtc.h
blob: 29742f3cbf7378fd6c273fa45509e33c6dab76d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
 /*
 * Copyright (C) 2017-2024 Alibaba Group Holding Limited
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************************************************
 * @file       drv/rtc.h
 * @brief      Header File for RTC Driver
 * @version    V1.0
 * @date       9. Oct 2020
 * @model      rtc
 ******************************************************************************/

#ifndef _DRV_RTC_H_
#define _DRV_RTC_H_

#include <drv/common.h>

#ifdef __cplusplus
extern "C" {
#endif

/****** RTC time ******/
typedef struct {
    int tm_sec;             ///< Second.      [0-59]
    int tm_min;             ///< Minute.      [0-59]
    int tm_hour;            ///< Hour.        [0-23]
    int tm_mday;            ///< Day.         [1-31]
    int tm_mon;             ///< Month.       [0-11]
    int tm_year;            ///< Year-1900.   [70- ]      !NOTE:Set 100 mean 2000
    int tm_wday;            ///< Day of week. [0-6 ]      !NOTE:Set 0 mean Sunday
    int tm_yday;            ///< Days in year.[0-365]     !NOTE:Set 0 mean January 1st
} csi_rtc_time_t;

/****** definition for RTC ******/
typedef struct csi_rtc csi_rtc_t;

struct csi_rtc {
    csi_dev_t           dev;
    void (*callback)(csi_rtc_t *rtc, void *arg);
    void               *arg;
    void               *priv;
};

/**
  \brief       Initialize RTC interface. Initializes the resources needed for the RTC interface
  \param[in]   rtc    Handle to operate
  \param[in]   idx    RTC index
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_init(csi_rtc_t *rtc, uint32_t idx);

/**
  \brief       De-initialize RTC interface. Stops operation and releases the software resources used by the interface
  \param[in]   rtc    Handle to operate
  \return      None
*/
void csi_rtc_uninit(csi_rtc_t *rtc);

/**
  \brief       Set system date and wait for synchro
  \param[in]   rtc        Handle to operate
  \param[in]   rtctime    Pointer to RTC time
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_set_time(csi_rtc_t *rtc, const csi_rtc_time_t *rtctime);

/**
  \brief       Set system date but no wait
  \param[in]   rtc        Handle to operate
  \param[in]   rtctime    Pointer to RTC time
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_set_time_no_wait(csi_rtc_t *rtc, const csi_rtc_time_t *rtctime);

/**
  \brief       Get system date
  \param[in]   rtc        Handle to operate
  \param[out]  rtctime    Pointer to RTC time
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_get_time(csi_rtc_t *rtc, csi_rtc_time_t *rtctime);

/**
  \brief       Get alarm remaining time
  \param[in]   rtc    Handle to operate
  \return      The remaining time(s)
*/
uint32_t csi_rtc_get_alarm_remaining_time(csi_rtc_t *rtc);

/**
  \brief       Config RTC alarm timer
  \param[in]   rtc         Handle to operate
  \param[in]   rtctime     Time to wake up
  \param[in]   callback    Callback function
  \param[in]   arg         Callback's param
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_set_alarm(csi_rtc_t *rtc, const csi_rtc_time_t *rtctime, void *callback, void *arg);

/**
  \brief       Cancel the RTC alarm
  \param[in]   rtc    Handle to operate
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_cancel_alarm(csi_rtc_t *rtc);

/**
  \brief       Judge RTC is running
  \param[in]   rtc    Handle to operate
  \return
               true  - RTC is running
               false - RTC is not running
*/
bool csi_rtc_is_running(csi_rtc_t *rtc);

/**
  \brief       Enable RTC power manage
  \param[in]   rtc    Handle to operate
  \return      Error code \ref csi_error_t
*/
csi_error_t csi_rtc_enable_pm(csi_rtc_t *rtc);

/**
  \brief       Disable RTC power manage
  \param[in]   rtc    Handle to operate
  \return      None
*/
void csi_rtc_disable_pm(csi_rtc_t *rtc);

#ifdef __cplusplus
}
#endif

#endif /* _DRV_RTC_H_ */