forked from airgradienthq/arduino
75 lines
1.3 KiB
C++
75 lines
1.3 KiB
C++
#include "HardwareWatchdog.h"
|
|
|
|
HardwareWatchdog::HardwareWatchdog(BoardType type) : boardType(type) {}
|
|
|
|
#if defined(ESP8266)
|
|
void HardwareWatchdog::begin(Stream &debugStream) {
|
|
this->_debugStream = &debugStream;
|
|
this->begin();
|
|
}
|
|
#else
|
|
#endif
|
|
|
|
/**
|
|
* @brief Initialize external watchdog
|
|
*
|
|
*/
|
|
void HardwareWatchdog::begin(void) {
|
|
if (this->_isInit) {
|
|
return;
|
|
}
|
|
|
|
/** Get BSP */
|
|
this->bsp = getBoardDef(this->boardType);
|
|
if ((this->bsp == nullptr) || (this->bsp->WDG.supported == false)) {
|
|
AgLog("Board not supported Watchdog");
|
|
return;
|
|
}
|
|
|
|
/** Init GPIO and first feed external watchdog */
|
|
pinMode(this->bsp->WDG.resetPin, OUTPUT);
|
|
this->_feed();
|
|
|
|
this->_isInit = true;
|
|
AgLog("Inittialized");
|
|
}
|
|
|
|
/**
|
|
* @brief Reset Watchdog
|
|
*
|
|
*/
|
|
void HardwareWatchdog::reset(void) {
|
|
if (this->isInitInvalid()) {
|
|
return;
|
|
}
|
|
|
|
this->_feed();
|
|
}
|
|
|
|
/**
|
|
* @brief Wathdog timeout
|
|
*
|
|
* @return int Millisecionds
|
|
*/
|
|
int HardwareWatchdog::getTimeout(void) { return 5 * 1000 * 60; }
|
|
|
|
bool HardwareWatchdog::isInitInvalid(void) {
|
|
if (this->_isInit == false) {
|
|
AgLog("No-initialized");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @brief Reset external watchdog
|
|
*
|
|
*/
|
|
void HardwareWatchdog::_feed(void) {
|
|
digitalWrite(this->bsp->WDG.resetPin, HIGH);
|
|
delay(25);
|
|
digitalWrite(this->bsp->WDG.resetPin, LOW);
|
|
|
|
AgLog("Reset");
|
|
}
|