initial commit
This commit is contained in:
53
mw/soft_watchdog/mw_soft_watchdog.h
Executable file
53
mw/soft_watchdog/mw_soft_watchdog.h
Executable file
@@ -0,0 +1,53 @@
|
||||
#ifndef __WATCHDOG_H_INCLUDED__
|
||||
#define __WATCHDOG_H_INCLUDED__
|
||||
|
||||
#include<stdint.h>
|
||||
|
||||
|
||||
|
||||
//some helper definition
|
||||
enum {
|
||||
IGNORE = -1,
|
||||
|
||||
//for action
|
||||
REBOOT = 0,
|
||||
SHUTDOWN = -1,
|
||||
SUSPEND = -2,
|
||||
NOOP = -3,
|
||||
//> 0 means reboot_delay
|
||||
};
|
||||
|
||||
|
||||
#define WD_POLICY_NUMBER (6)
|
||||
#define NAME(_name) #_name
|
||||
|
||||
|
||||
typedef struct{
|
||||
int64_t start_ms; //must be int, monitor start time, IGNORE means IGNORE this item, OK means already OK. other >= 0 value means the start time
|
||||
uint32_t timeout_ms; //if not OK after timeout_ms seconds, do the recovery produce.
|
||||
uint32_t action[WD_POLICY_NUMBER]; //if not IGNORE, ask mcu do action. support retry up to 4 times. support REBOOT/SHUTDOWN/NOOP/reboot_delay
|
||||
}wd_item_s;
|
||||
|
||||
typedef void ( *soft_watchdog_item_fail)(uint32_t fail_idx);
|
||||
|
||||
/* 初始化后,需要 soft_watchdog_start 来开启对应的wtd */
|
||||
void soft_watchdog_init(wd_item_s *items, uint32_t item_cnt, soft_watchdog_item_fail fail_cb);
|
||||
|
||||
|
||||
/* 关闭对应item的看门狗 */
|
||||
void soft_watchdog_stop(uint32_t item);
|
||||
|
||||
/* 打开对应item的看门狗 */
|
||||
void soft_watchdog_start(uint32_t item);
|
||||
|
||||
/* 打开对应item的看门狗 , timeout_ms后将超时 */
|
||||
void soft_watchdog_timeout(uint32_t item, uint32_t timeout_ms);
|
||||
|
||||
/* 比如播放提示音:那么所有已经开始的wtd都要+timeout_ms后超时 */
|
||||
void soft_watchdog_timeout_all(uint32_t timeout_ms);
|
||||
|
||||
|
||||
void soft_watchdog_test();
|
||||
|
||||
|
||||
#endif /* __WATCHDOG_H_INCLUDED__ */
|
||||
Reference in New Issue
Block a user