Files
airgradient/src/Main/HardwareWatchdog.cpp
T

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");
}