1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2022-02-22     airm2m       first version
9  */
10 
11 #include "board.h"
12 #include "drivers/dev_watchdog.h"
13 
14 #ifdef RT_USING_WDT
15 
16 #define LOG_TAG             "drv.wdt"
17 #include <drv_log.h>
18 
19 
20 static rt_watchdog_t watchdog;
21 static struct rt_watchdog_ops ops;
22 
wdt_init(rt_watchdog_t * wdt)23 static rt_err_t wdt_init(rt_watchdog_t *wdt)
24 {
25     return RT_EOK;
26 }
27 
wdt_control(rt_watchdog_t * wdt,int cmd,void * arg)28 static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)
29 {
30     switch (cmd)
31     {
32         /* feed the watchdog */
33     case RT_DEVICE_CTRL_WDT_KEEPALIVE:
34         WDT_Feed();
35         break;
36         /* set watchdog timeout */
37     case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
38         WDT_SetTimeout((*((rt_uint32_t*)arg))*1000);
39         break;
40     case RT_DEVICE_CTRL_WDT_GET_TIMEOUT:
41         break;
42     case RT_DEVICE_CTRL_WDT_START:
43 
44         break;
45     default:
46         LOG_W("This command is not supported.");
47         return -RT_ERROR;
48     }
49     return RT_EOK;
50 }
51 
rt_wdt_init(void)52 int rt_wdt_init(void)
53 {
54     ops.init = &wdt_init;
55     ops.control = &wdt_control;
56     watchdog.ops = &ops;
57     /* register watchdog device */
58     if (rt_hw_watchdog_register(&watchdog, "wdt", RT_DEVICE_FLAG_DEACTIVATE, RT_NULL) != RT_EOK)
59     {
60         LOG_E("wdt device register failed.");
61         return -RT_ERROR;
62     }
63     LOG_D("wdt device register success.");
64     return RT_EOK;
65 }
66 INIT_BOARD_EXPORT(rt_wdt_init);
67 
68 #endif /* RT_USING_WDT */
69