fsfw-example-hosted/bsp_hosted/core/CfdpHandler.h

73 lines
2.6 KiB
C
Raw Normal View History

2022-09-07 18:21:16 +02:00
#ifndef FSFW_EXAMPLE_HOSTED_CFDPHANDLER_H
#define FSFW_EXAMPLE_HOSTED_CFDPHANDLER_H
2022-09-07 18:38:25 +02:00
#include <utility>
2022-09-07 18:21:16 +02:00
#include "fsfw/cfdp/handler/DestHandler.h"
#include "fsfw/objectmanager/SystemObject.h"
2022-09-07 18:38:25 +02:00
#include "fsfw/tasks/ExecutableObjectIF.h"
2022-09-07 18:21:16 +02:00
#include "fsfw/tmtcservices/AcceptsTelecommandsIF.h"
2022-09-08 11:26:29 +02:00
#include "fsfw/tmtcservices/TmTcMessage.h"
2022-09-07 18:21:16 +02:00
2022-09-08 11:26:29 +02:00
struct FsfwHandlerParams {
FsfwHandlerParams(object_id_t objectId, HasFileSystemIF& vfs, AcceptsTelemetryIF& packetDest,
StorageManagerIF& tcStore, StorageManagerIF& tmStore)
: objectId(objectId), vfs(vfs), packetDest(packetDest), tcStore(tcStore), tmStore(tmStore) {}
2022-09-07 18:38:25 +02:00
object_id_t objectId{};
HasFileSystemIF& vfs;
2022-09-08 11:26:29 +02:00
AcceptsTelemetryIF& packetDest;
StorageManagerIF& tcStore;
StorageManagerIF& tmStore;
};
struct CfdpHandlerCfg {
2022-09-08 16:26:47 +02:00
CfdpHandlerCfg(cfdp::EntityId localId, cfdp::IndicationCfg indicationCfg,
2022-09-14 14:01:14 +02:00
cfdp::UserBase &userHandler,
cfdp::PacketInfoListBase& packetInfo,
cfdp::LostSegmentsListBase& lostSegmentsList,
cfdp::RemoteConfigTableIF& remoteCfgProvider)
2022-09-08 16:26:47 +02:00
: id(std::move(localId)),
indicCfg(indicationCfg),
packetInfoList(packetInfo),
lostSegmentsList(lostSegmentsList),
2022-09-14 14:01:14 +02:00
remoteCfgProvider(remoteCfgProvider),
userHandler(userHandler) {}
2022-09-08 11:26:29 +02:00
2022-09-08 16:26:47 +02:00
cfdp::EntityId id;
cfdp::IndicationCfg indicCfg;
2022-09-07 18:38:25 +02:00
cfdp::PacketInfoListBase& packetInfoList;
cfdp::LostSegmentsListBase& lostSegmentsList;
cfdp::RemoteConfigTableIF& remoteCfgProvider;
2022-09-14 14:01:14 +02:00
cfdp::UserBase& userHandler;
2022-09-07 18:38:25 +02:00
};
class CfdpHandler : public SystemObject,
2022-09-08 16:26:47 +02:00
public cfdp::FaultHandlerBase,
2022-09-07 18:38:25 +02:00
public ExecutableObjectIF,
public AcceptsTelecommandsIF {
2022-09-07 18:21:16 +02:00
public:
2022-09-08 11:26:29 +02:00
explicit CfdpHandler(const FsfwHandlerParams& fsfwParams, const CfdpHandlerCfg& cfdpCfg);
2022-09-07 18:40:10 +02:00
2022-09-07 18:21:16 +02:00
[[nodiscard]] const char* getName() const override;
[[nodiscard]] uint32_t getIdentifier() const override;
[[nodiscard]] MessageQueueId_t getRequestQueue() const override;
ReturnValue_t initialize() override;
2022-09-07 18:38:25 +02:00
ReturnValue_t performOperation(uint8_t operationCode) override;
2022-09-07 18:40:10 +02:00
2022-09-08 17:39:59 +02:00
void noticeOfSuspensionCb(cfdp::ConditionCode code) override;
void noticeOfCancellationCb(cfdp::ConditionCode code) override;
void abandonCb(cfdp::ConditionCode code) override;
void ignoreCb(cfdp::ConditionCode code) override;
2022-09-07 18:21:16 +02:00
private:
MessageQueueIF* msgQueue = nullptr;
cfdp::DestHandler destHandler;
2022-09-08 11:26:29 +02:00
StorageManagerIF* tcStore = nullptr;
StorageManagerIF* tmStore = nullptr;
ReturnValue_t handleCfdpPacket(TmTcMessage& msg);
2022-09-07 18:21:16 +02:00
};
#endif // FSFW_EXAMPLE_HOSTED_CFDPHANDLER_H