fusion/mw/soft_watchdog/mw_soft_watchdog.h

54 lines
1.5 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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__ */