1 /*
2  * Copyright (C) 2017-2020 Alibaba Group Holding Limited
3  */
4 
5 /******************************************************************************
6  * @file       drv/wdt.h
7  * @brief      Header File for WDT Driver
8  * @version    V1.0
9  * @date       9. Oct 2020
10  * @model      wdt
11  ******************************************************************************/
12 
13 #ifndef _DRV_WDT_H_
14 #define _DRV_WDT_H_
15 
16 #include <drv/common.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 typedef struct csi_wdt csi_wdt_t;
23 
24 struct csi_wdt {
25     csi_dev_t       dev;
26     void (*callback)(csi_wdt_t *wdt,  void *arg);
27     void            *arg;
28     void            *priv;
29 };
30 
31 /**
32   \brief       Initialize WDT interface. Initializes the resources needed for the WDT interface
33   \param[in]   wdt    Handle to operate
34   \param[in]   idx    WDT index
35   \return      Error code \ref csi_error_t
36 */
37 csi_error_t csi_wdt_init(csi_wdt_t *wdt, uint32_t idx);
38 
39 /**
40   \brief       De-initialize WDT interface. Stops operation and releases the software resources used by the interface
41   \param[in]   wdt    Handle to operate
42   \return      None
43 */
44 void csi_wdt_uninit(csi_wdt_t *wdt);
45 
46 /**
47   \brief       Set the WDT value
48   \param[in]   wdt    Handle to operate
49   \param[in]   ms     The timeout value(ms)
50   \return      Error code \ref csi_error_t
51 */
52 csi_error_t csi_wdt_set_timeout(csi_wdt_t *wdt, uint32_t ms);
53 
54 /**
55   \brief       Start the WDT
56   \param[in]   wdt    Handle to operate
57   \return      Error code \ref csi_error_t
58 */
59 csi_error_t csi_wdt_start(csi_wdt_t *wdt);
60 
61 /**
62   \brief       Stop the WDT
63   \param[in]   wdt    Handle to operate
64   \return      None
65 */
66 void csi_wdt_stop(csi_wdt_t *wdt);
67 
68 /**
69   \brief       Feed the WDT
70   \param[in]   wdt    Handle to operate
71   \return      Error code \ref csi_error_t
72 */
73 csi_error_t csi_wdt_feed(csi_wdt_t *wdt);
74 
75 /**
76   \brief       Get the remaining time to timeout
77   \param[in]   wdt    Handle to operate
78   \return      The remaining time of WDT(ms)
79 */
80 uint32_t csi_wdt_get_remaining_time(csi_wdt_t *wdt);
81 
82 /**
83   \brief       Check WDT is running
84   \param[in]   wdt    Handle to operate
85   \return
86                true  - WDT is running
87                false - WDT is stopped
88 */
89 bool csi_wdt_is_running(csi_wdt_t *wdt);
90 
91 /**
92   \brief       Attach the callback handler to WDT
93   \param[in]   wdt         Handle to operate
94   \param[in]   callback    Callback function
95   \param[in]   arg         Callback's param
96   \return      Error code \ref csi_error_t
97 */
98 csi_error_t csi_wdt_attach_callback(csi_wdt_t *wdt, void *callback, void *arg);
99 
100 /**
101   \brief       Detach the callback handler
102   \param[in]   wdt    Handle to operate
103   \return      None
104 */
105 void csi_wdt_detach_callback(csi_wdt_t *wdt);
106 
107 /**
108   \brief       Enable WDT power manage
109   \param[in]   wdt    Handle to operate
110   \return      Error code \ref csi_error_t
111 */
112 csi_error_t csi_wdt_enable_pm(csi_wdt_t *wdt);
113 
114 /**
115   \brief       Disable WDT power manage
116   \param[in]   wdt    Handle to operate
117   \return      None
118 */
119 void csi_wdt_disable_pm(csi_wdt_t *wdt);
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif /* _DRV_WDT_H_ */
126