Robin Mueller
d13e593f89
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#ifndef MISSION_TMTC_TMFUNNELBASE_H_
|
|
#define MISSION_TMTC_TMFUNNELBASE_H_
|
|
|
|
#include <fsfw/objectmanager/SystemObject.h>
|
|
#include <fsfw/storagemanager/StorageManagerIF.h>
|
|
#include <fsfw/tmstorage/TmStoreFrontendSimpleIF.h>
|
|
#include <fsfw/tmtcservices/AcceptsTelemetryIF.h>
|
|
#include <fsfw/tmtcservices/TmTcMessage.h>
|
|
|
|
#include <vector>
|
|
|
|
class TmFunnelBase : public AcceptsTelemetryIF, public SystemObject {
|
|
public:
|
|
struct FunnelCfg {
|
|
FunnelCfg(object_id_t objId, const char* name, StorageManagerIF& tmStore,
|
|
StorageManagerIF& ipcStore, uint32_t tmMsgDepth)
|
|
: objectId(objId),
|
|
name(name),
|
|
tmStore(tmStore),
|
|
ipcStore(ipcStore),
|
|
tmMsgDepth(tmMsgDepth) {}
|
|
object_id_t objectId;
|
|
const char* name;
|
|
StorageManagerIF& tmStore;
|
|
StorageManagerIF& ipcStore;
|
|
uint32_t tmMsgDepth;
|
|
};
|
|
explicit TmFunnelBase(FunnelCfg cfg);
|
|
void addDestination(const char* name, const AcceptsTelemetryIF& downlinkDestination,
|
|
uint8_t vcid = 0);
|
|
ReturnValue_t sendPacketToDestinations(store_address_t origStoreId, TmTcMessage& message,
|
|
const uint8_t* packetData, size_t size);
|
|
[[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override;
|
|
|
|
~TmFunnelBase() override;
|
|
|
|
protected:
|
|
const char* name;
|
|
StorageManagerIF& tmStore;
|
|
StorageManagerIF& ipcStore;
|
|
|
|
struct Destination {
|
|
Destination(const char* name, MessageQueueId_t queueId, uint8_t virtualChannel)
|
|
: name(name), queueId(queueId), virtualChannel(virtualChannel) {}
|
|
|
|
const char* name;
|
|
MessageQueueId_t queueId;
|
|
uint8_t virtualChannel = 0;
|
|
};
|
|
|
|
std::vector<Destination> destinations;
|
|
MessageQueueIF* tmQueue = nullptr;
|
|
};
|
|
|
|
#endif /* MISSION_TMTC_TMFUNNELBASE_H_ */
|