From 5289497ab5769fc61ba1816322c4f86377cfd36f Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Sat, 6 Jun 2020 12:59:43 +0200 Subject: [PATCH] health helper optional, diagnostic output improved --- devicehandlers/DeviceHandlerBase.cpp | 39 ++++++++++++++----- devicehandlers/DeviceHandlerBase.h | 1 + .../DeviceHandlerFailureIsolation.cpp | 2 + fdir/FailureIsolationBase.cpp | 4 +- objectmanager/ObjectManager.cpp | 7 ++-- 5 files changed, 39 insertions(+), 14 deletions(-) diff --git a/devicehandlers/DeviceHandlerBase.cpp b/devicehandlers/DeviceHandlerBase.cpp index d738b3f9..c73cf618 100644 --- a/devicehandlers/DeviceHandlerBase.cpp +++ b/devicehandlers/DeviceHandlerBase.cpp @@ -139,10 +139,12 @@ ReturnValue_t DeviceHandlerBase::initialize() { } result = healthHelper.initialize(); - if (result != RETURN_OK) { - sif::error << "DeviceHandlerBase::initialize: Health Helper " - "initialization failure" << std::endl; - return result; + if (result == RETURN_OK) { + healthHelperActive = true; + } + else { + sif::warning << "DeviceHandlerBase::initialize: Health Helper " + "initialization failure." << std::endl; } result = modeHelper.initialize(); @@ -215,9 +217,11 @@ void DeviceHandlerBase::readCommandQueue() { return; } - result = healthHelper.handleHealthCommand(&message); - if (result == RETURN_OK) { - return; + if(healthHelperActive) { + result = healthHelper.handleHealthCommand(&message); + if (result == RETURN_OK) { + return; + } } result = modeHelper.handleModeCommand(&message); @@ -996,7 +1000,9 @@ void DeviceHandlerBase::getMode(Mode_t* mode, Submode_t* submode) { } void DeviceHandlerBase::setToExternalControl() { - healthHelper.setHealth(EXTERNAL_CONTROL); + if(healthHelperActive) { + healthHelper.setHealth(EXTERNAL_CONTROL); + } } void DeviceHandlerBase::announceMode(bool recursive) { @@ -1016,11 +1022,24 @@ void DeviceHandlerBase::missedReply(DeviceCommandId_t id) { } HasHealthIF::HealthState DeviceHandlerBase::getHealth() { - return healthHelper.getHealth(); + if(healthHelperActive) { + return healthHelper.getHealth(); + } + else { + sif::warning << "DeviceHandlerBase::getHealth: Health helper not active" + << std::endl; + return HasHealthIF::HEALTHY; + } } ReturnValue_t DeviceHandlerBase::setHealth(HealthState health) { - healthHelper.setHealth(health); + if(healthHelperActive) { + healthHelper.setHealth(health); + } + else { + sif::warning << "DeviceHandlerBase::getHealth: Health helper not active" + << std::endl; + } return HasReturnvaluesIF::RETURN_OK; } diff --git a/devicehandlers/DeviceHandlerBase.h b/devicehandlers/DeviceHandlerBase.h index 3a43fa74..b079e469 100644 --- a/devicehandlers/DeviceHandlerBase.h +++ b/devicehandlers/DeviceHandlerBase.h @@ -601,6 +601,7 @@ protected: /** Health helper for HasHealthIF */ HealthHelper healthHelper; + bool healthHelperActive = false; /** Mode helper for HasModesIF */ ModeHelper modeHelper; /** Parameter helper for ReceivesParameterMessagesIF */ diff --git a/devicehandlers/DeviceHandlerFailureIsolation.cpp b/devicehandlers/DeviceHandlerFailureIsolation.cpp index 9bc2cbe8..1df2afa0 100644 --- a/devicehandlers/DeviceHandlerFailureIsolation.cpp +++ b/devicehandlers/DeviceHandlerFailureIsolation.cpp @@ -163,6 +163,8 @@ void DeviceHandlerFailureIsolation::clearFaultCounters() { ReturnValue_t DeviceHandlerFailureIsolation::initialize() { ReturnValue_t result = FailureIsolationBase::initialize(); if (result != HasReturnvaluesIF::RETURN_OK) { + sif::error << "DeviceHandlerFailureIsolation::initialize: Could not" + " initialize FailureIsolationBase." << std::endl; return result; } ConfirmsFailuresIF* power = objectManager->get( diff --git a/fdir/FailureIsolationBase.cpp b/fdir/FailureIsolationBase.cpp index c65640c2..46114467 100644 --- a/fdir/FailureIsolationBase.cpp +++ b/fdir/FailureIsolationBase.cpp @@ -19,7 +19,9 @@ FailureIsolationBase::~FailureIsolationBase() { ReturnValue_t FailureIsolationBase::initialize() { EventManagerIF* manager = objectManager->get( objects::EVENT_MANAGER); - if (manager == NULL) { + if (manager == nullptr) { + sif::error << "FailureIsolationBase::initialize: Event Manager has not" + " been initialized!" << std::endl; return RETURN_FAILED; } ReturnValue_t result = manager->registerListener(eventQueue->getId()); diff --git a/objectmanager/ObjectManager.cpp b/objectmanager/ObjectManager.cpp index 2f47950f..fe7adb25 100644 --- a/objectmanager/ObjectManager.cpp +++ b/objectmanager/ObjectManager.cpp @@ -69,9 +69,10 @@ void ObjectManager::initialize() { return_value = it.second->initialize(); if ( return_value != RETURN_OK ) { object_id_t var = it.first; - sif::error << "Object 0x" << std::hex << std::setw(8) << - std::setfill('0')<< var << " failed to initialize " << - "with code 0x" << return_value << std::dec << std::endl; + sif::error << "ObjectManager::initialize: Object 0x" << std::hex << + std::setw(8) << std::setfill('0')<< var << " failed to " + "initialize with code 0x" << return_value << std::dec << + std::endl; error_count++; } }