eive-obsw/mission/payload/ScexDeviceHandler.h

77 lines
3.0 KiB
C
Raw Normal View History

2023-03-26 16:42:00 +02:00
#ifndef MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_
#define MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_
2022-04-29 15:46:16 +02:00
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
2023-03-26 16:42:00 +02:00
#include <linux/payload/ScexHelper.h>
#include <linux/payload/ScexUartReader.h>
2022-08-31 16:12:32 +02:00
2022-09-27 18:54:48 +02:00
#include <optional>
2022-04-29 15:46:16 +02:00
2022-09-29 13:53:42 +02:00
#include "eive/eventSubsystemIds.h"
2022-05-19 11:56:59 +02:00
class SdCardMountedIF;
2022-04-29 15:46:16 +02:00
class ScexDeviceHandler : public DeviceHandlerBase {
public:
2023-03-30 13:41:14 +02:00
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";
2023-03-29 11:41:42 +02:00
2022-05-19 11:56:59 +02:00
ScexDeviceHandler(object_id_t objectId, ScexUartReader &reader, CookieIF *cookie,
SdCardMountedIF &sdcMan);
2022-09-27 18:54:48 +02:00
void setPowerSwitcher(PowerSwitchIF &powerSwitcher, power::Switch_t switchId);
2022-05-19 09:59:33 +02:00
virtual ~ScexDeviceHandler();
2022-04-29 15:46:16 +02:00
private:
2022-06-21 17:46:59 +02:00
static constexpr uint32_t LONG_CD = 180 * 1000;
2022-10-06 17:01:04 +02:00
static constexpr uint32_t SHORT_CD = 12000;
2022-04-29 15:46:16 +02:00
std::array<uint8_t, 64> cmdBuf = {};
std::optional<power::Switch_t> switchId;
2022-05-19 11:56:59 +02:00
std::string fileId = "";
std::string fileName = "";
bool fileNameSet = false;
2022-06-21 17:46:59 +02:00
bool commandActive = false;
2022-11-09 13:07:20 +01:00
bool multiFileFinishOutstanding = false;
2022-08-30 18:36:00 +02:00
bool debugMode = false;
2022-05-19 11:56:59 +02:00
scex::Cmds currCmd = scex::Cmds::PING;
SdCardMountedIF &sdcMan;
2022-06-21 17:46:59 +02:00
Countdown finishCountdown = Countdown(LONG_CD);
2023-08-02 09:41:54 +02:00
Countdown fsUnusableEventCd = Countdown(10000);
2022-05-19 11:56:59 +02:00
2022-04-29 15:46:16 +02:00
// DeviceHandlerBase private function implementation
void doStartUp() override;
void doShutDown() override;
ScexHelper helper;
2022-05-19 09:59:33 +02:00
ScexUartReader &reader;
2022-06-21 17:46:59 +02:00
2023-08-02 09:39:42 +02:00
void fsUnsableEvent();
2023-08-02 09:41:54 +02:00
2022-06-21 17:46:59 +02:00
void performOperationHook() override;
2022-04-29 15:46:16 +02:00
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override;
2022-05-19 11:56:59 +02:00
ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData,
2022-04-29 15:46:16 +02:00
size_t commandDataLen) override;
void fillCommandAndReplyMap() override;
2023-08-02 09:20:36 +02:00
void filesystemChecks();
2022-04-29 15:46:16 +02:00
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;
2022-08-30 18:36:00 +02:00
ReturnValue_t handleValidReply(size_t remSize, DeviceCommandId_t *foundId, size_t *foundLen);
2022-04-29 15:46:16 +02:00
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;
2022-09-29 19:38:19 +02:00
ReturnValue_t initializeAfterTaskCreation() override;
2023-04-01 14:32:41 +02:00
2023-04-01 14:23:11 +02:00
ReturnValue_t generateNewScexFile(const char *cmdName);
2022-04-29 15:46:16 +02:00
};
2023-03-26 16:42:00 +02:00
#endif /* MISSION_PAYLOAD_SCEXDEVICEHANDLER_H_ */