#ifndef MISSION_DEVICES_SusHandler_H_ #define MISSION_DEVICES_SusHandler_H_ #include "fsfw/devicehandlers/DeviceHandlerBase.h" #include "fsfw/globalfunctions/PeriodicOperationDivider.h" #include "mission/devices/devicedefinitions/acsPolling.h" #include "mission/devices/devicedefinitions/susMax1227Helpers.h" class SusHandler : public DeviceHandlerBase { public: static constexpr DeviceCommandId_t REQUEST = 0x70; static constexpr DeviceCommandId_t REPLY = 0x77; static const uint8_t INTERFACE_ID = CLASS_ID::SUS_HANDLER; static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::SUS_BOARD_ASS; SusHandler(uint32_t objectId, uint8_t susIdx, object_id_t deviceCommunication, CookieIF *comCookie); virtual ~SusHandler(); void enablePeriodicPrintouts(bool enable, uint8_t divider); void setToGoToNormalMode(bool enable); protected: /** DeviceHandlerBase overrides */ void doShutDown() override; void doStartUp() override; uint32_t getTransitionDelayMs(Mode_t from, Mode_t to) override; ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData, size_t commandDataLen) override; ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override; ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override; ReturnValue_t scanForReply(const uint8_t *start, size_t len, DeviceCommandId_t *foundId, size_t *foundLen) override; ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override; void fillCommandAndReplyMap() override; void modeChanged(void) override; ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap, LocalDataPoolManager &poolManager) override; LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override; private: susMax1227::SusDataset dataset; acs::SusRequest request{}; uint8_t susIdx; uint32_t transitionDelay = 1000; bool goToNormalMode = false; PoolEntry tempC = PoolEntry({0.0}); PoolEntry channelVec = PoolEntry({0, 0, 0, 0, 0, 0}); enum class InternalState { NONE, STARTUP, SHUTDOWN, }; InternalState internalState = InternalState::NONE; bool commandExecuted = false; ReturnValue_t prepareRequest(acs::SimpleSensorMode mode); }; #endif /* MISSION_DEVICES_SusHandler_H_ */