luat_lib_wdt.c 2.1 KB

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