#ifndef MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_ #define MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_ #include #include #include #include #include "eive/eventSubsystemIds.h" class SdCardMountedIF; class ScexDeviceHandler : public DeviceHandlerBase { public: static constexpr char FRAM_BASE_NAME[] = "framContent"; static constexpr char ION_BASE_NAME[] = "ion"; static constexpr char TEMPERATURE_BASE_NAME[] = "temperature"; static constexpr char EXP_STATUS_BASE_NAME[] = "expStatus"; static constexpr char ONE_CELL_BASE_NAME[] = "oneCell"; static constexpr char ALL_CELLS_BASE_NAME[] = "allCells"; static constexpr char PING_IDLE_BASE_NAME[] = "pingIdle"; ScexDeviceHandler(object_id_t objectId, ScexUartReader &reader, CookieIF *cookie, SdCardMountedIF &sdcMan); void setPowerSwitcher(PowerSwitchIF &powerSwitcher, power::Switch_t switchId); virtual ~ScexDeviceHandler(); private: static constexpr uint32_t LONG_CD = 180 * 1000; static constexpr uint32_t SHORT_CD = 12000; std::array cmdBuf = {}; std::optional switchId; std::string fileId = ""; std::string fileName = ""; bool fileNameSet = false; bool commandActive = false; bool multiFileFinishOutstanding = false; bool debugMode = false; scex::Cmds currCmd = scex::Cmds::PING; SdCardMountedIF &sdcMan; Countdown finishCountdown = Countdown(LONG_CD); Countdown fsUnusableEventCd = Countdown(60000); // DeviceHandlerBase private function implementation void doStartUp() override; void doShutDown() override; ScexHelper helper; ScexUartReader &reader; void fsUnsableEvent(); void performOperationHook() override; ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override; ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override; ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData, size_t commandDataLen) override; void fillCommandAndReplyMap() override; void filesystemChecks(); ReturnValue_t scanForReply(const uint8_t *start, size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) override; ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override; ReturnValue_t handleValidReply(size_t remSize, DeviceCommandId_t *foundId, size_t *foundLen); uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override; ReturnValue_t getSwitches(const uint8_t **switches, uint8_t *numberOfSwitches) override; ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap, LocalDataPoolManager &poolManager) override; ReturnValue_t initializeAfterTaskCreation() override; ReturnValue_t generateNewScexFile(const char *cmdName); }; #endif /* MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_ */