luat_lib_wdt.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. @module wdt
  3. @summary watchdog操作库
  4. @version 1.0
  5. @date 2021.08.06
  6. @demo wdt
  7. @tag LUAT_USE_WDT
  8. */
  9. #include "luat_base.h"
  10. #include "luat_wdt.h"
  11. /*
  12. 初始化watchdog并马上启用.大部分设备的watchdog一旦启用就无法关闭.
  13. @api wdt.init(timeout)
  14. @int 超时时长,单位为毫秒
  15. @return bool 成功返回true,否则返回false(例如底层不支持)
  16. @usage
  17. wdt.init(9000)
  18. sys.timerLoopStart(wdt.feed, 3000)
  19. */
  20. static int l_wdt_init(lua_State *L) {
  21. int timeout = luaL_optinteger(L, 1, 10);
  22. int ret = luat_wdt_init(timeout);
  23. lua_pushboolean(L, ret == 0 ? 1 : 0);
  24. return 1;
  25. }
  26. /*
  27. 部分设备支持重新设置watchdog超时时长
  28. @api wdt.setTimeout(timeout)
  29. @int 超时时长,单位为毫秒
  30. @return bool 成功返回true,否则返回false(例如底层不支持)
  31. @usage
  32. wdt.init(10000)
  33. sys.timerLoopStart(wdt.feed, 3000)
  34. sys.wait(5000)
  35. sys.setTimeout(5000)
  36. */
  37. static int l_wdt_set_timeout(lua_State *L) {
  38. int timeout = luaL_optinteger(L, 1, 10);
  39. int ret = luat_wdt_set_timeout(timeout);
  40. lua_pushboolean(L, ret == 0 ? 1 : 0);
  41. return 1;
  42. }
  43. /*
  44. 喂狗,使得超时计时复位,重新计时
  45. @api wdt.feed()
  46. @return bool 成功返回true,否则返回false(例如底层不支持)
  47. @usage
  48. wdt.init(10000)
  49. -- 定时喂狗,或者根据业务按需喂狗
  50. sys.timerLoopStart(wdt.feed, 3000)
  51. */
  52. static int l_wdt_feed(lua_State *L) {
  53. int ret = luat_wdt_feed();
  54. lua_pushboolean(L, ret == 0 ? 1 : 0);
  55. return 1;
  56. }
  57. /*
  58. 关闭watchdog,通常不被支持
  59. @api wdt.close()
  60. @return bool 成功返回true,否则返回false(例如底层不支持)
  61. @usage
  62. wdt.init(10000)
  63. sys.wait(9000)
  64. wdt.close()
  65. */
  66. static int l_wdt_close(lua_State *L) {
  67. int ret = luat_wdt_feed();
  68. lua_pushboolean(L, ret == 0 ? 1 : 0);
  69. return 1;
  70. }
  71. #include "rotable2.h"
  72. static const rotable_Reg_t reg_wdt[] =
  73. {
  74. { "init", ROREG_FUNC(l_wdt_init)},
  75. { "setTimeout", ROREG_FUNC(l_wdt_set_timeout)},
  76. { "feed", ROREG_FUNC(l_wdt_feed)},
  77. { "close", ROREG_FUNC(l_wdt_close)},
  78. { NULL, ROREG_INT(0) }
  79. };
  80. LUAMOD_API int luaopen_wdt( lua_State *L ) {
  81. luat_newlib2(L, reg_wdt);
  82. return 1;
  83. }