drv_wdt.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. #include "board.h"
  11. #include <drivers/watchdog.h>
  12. #ifdef RT_USING_WDT
  13. #define LOG_TAG "drv.wdt"
  14. #include <drv_log.h>
  15. static rt_watchdog_t watchdog;
  16. static struct rt_watchdog_ops ops;
  17. static rt_err_t wdt_init(rt_watchdog_t *wdt)
  18. {
  19. return RT_EOK;
  20. }
  21. static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)
  22. {
  23. switch (cmd)
  24. {
  25. /* feed the watchdog */
  26. case RT_DEVICE_CTRL_WDT_KEEPALIVE:
  27. WDT_Feed();
  28. break;
  29. /* set watchdog timeout */
  30. case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
  31. WDT_SetTimeout((*((rt_uint32_t*)arg))*1000);
  32. break;
  33. case RT_DEVICE_CTRL_WDT_GET_TIMEOUT:
  34. break;
  35. case RT_DEVICE_CTRL_WDT_START:
  36. break;
  37. default:
  38. LOG_W("This command is not supported.");
  39. return -RT_ERROR;
  40. }
  41. return RT_EOK;
  42. }
  43. int rt_wdt_init(void)
  44. {
  45. ops.init = &wdt_init;
  46. ops.control = &wdt_control;
  47. watchdog.ops = &ops;
  48. /* register watchdog device */
  49. if (rt_hw_watchdog_register(&watchdog, "wdt", RT_DEVICE_FLAG_DEACTIVATE, RT_NULL) != RT_EOK)
  50. {
  51. LOG_E("wdt device register failed.");
  52. return -RT_ERROR;
  53. }
  54. LOG_D("wdt device register success.");
  55. return RT_EOK;
  56. }
  57. INIT_BOARD_EXPORT(rt_wdt_init);
  58. #endif /* RT_USING_WDT */