#ifndef FSFW_HEALTH_HEALTHTABLE_H_ #define FSFW_HEALTH_HEALTHTABLE_H_ #include "HealthTableIF.h" #include "../objectmanager/SystemObject.h" #include "../ipc/MutexIF.h" #include class HealthTable: public HealthTableIF, public SystemObject { public: HealthTable(object_id_t objectid); virtual ~HealthTable(); void setMutexTimeout(MutexIF::TimeoutType timeoutType, uint32_t timeoutMs); /** HealthTableIF overrides */ virtual ReturnValue_t registerObject(object_id_t object, HasHealthIF::HealthState initilialState = HasHealthIF::HEALTHY) override; virtual size_t getPrintSize() override; virtual void printAll(uint8_t *pointer, size_t maxSize) override; /** ManagesHealthIF overrides */ virtual bool hasHealth(object_id_t object) override; virtual void setHealth(object_id_t object, HasHealthIF::HealthState newState) override; virtual HasHealthIF::HealthState getHealth(object_id_t) override; protected: using HealthMap = std::map; using HealthEntry = std::pair; MutexIF* mutex; MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING; uint32_t mutexTimeoutMs = 20; HealthMap healthMap; HealthMap::iterator mapIterator; virtual ReturnValue_t iterate( HealthEntry* value, bool reset = false) override; }; #endif /* FSFW_HEALTH_HEALTHTABLE_H_ */