eive-obsw/bsp_q7s/core/XiphosWdtHandler.cpp
Robin Mueller 34100e6c95
All checks were successful
EIVE/eive-obsw/pipeline/pr-main This commit looks good
small robustness tweak
2023-10-02 14:49:29 +02:00

49 lines
1.8 KiB
C++

#include "XiphosWdtHandler.h"
XiphosWdtHandler::XiphosWdtHandler(object_id_t objectId) : SystemObject(objectId) {}
ReturnValue_t XiphosWdtHandler::initialize() {
int result = xsc_watchdog_init(&wdtHandle);
if (result != 0) {
sif::error << "XiphosWdtHandler: Initiating watchdog failed with code " << result << ": "
<< strerror(result) << std::endl;
return ObjectManagerIF::CHILD_INIT_FAILED;
}
if (wdtHandle == nullptr) {
sif::error << "XiphosWdtHandler: WDT handle is nullptr!" << std::endl;
return ObjectManagerIF::CHILD_INIT_FAILED;
}
result = xsc_watchdog_set_timeout(wdtHandle, timeoutSeconds);
if (result != 0) {
// This propably means that the default timeout is used. Still continue with task init.
sif::warning << "XiphosWdtHandler: Setting WDT timeout of " << timeoutSeconds
<< " seconds failed with code " << result << ": " << strerror(result) << std::endl;
}
int nowayout = 0;
int status = 0;
result = xsc_watchdog_get_status(&nowayout, &status);
if (result == 0) {
if (status == 0) {
result = xsc_watchdog_enable(wdtHandle);
if (result != 0) {
sif::error << "XiphosWdtHandler: Enabling WDT failed with code " << result << ": "
<< strerror(result) << std::endl;
return ObjectManagerIF::CHILD_INIT_FAILED;
}
}
} else {
sif::warning << "XiphosWdtHandler: Getting WDT status failed" << std::endl;
}
return returnvalue::OK;
}
ReturnValue_t XiphosWdtHandler::performOperation(uint8_t opCode) {
int result = xsc_watchdog_keepalive(wdtHandle);
if (result != 0) {
sif::warning << "XiphosWdtHandler: Feeding WDT failed with code " << result << ": "
<< strerror(result) << std::endl;
return returnvalue::FAILED;
}
return returnvalue::OK;
}