allow passsing TM dest names
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
This commit is contained in:
parent
bc6cecc14a
commit
e8120fcdef
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit 38789e053b65cfa14604fc625e7bcc8ca03a3f17
|
Subproject commit 69c94645df81c2fc9d538a0f19d2c6552e1c73a7
|
@ -363,6 +363,6 @@ void ObjectFactory::gpioChecker(ReturnValue_t result, std::string output) {
|
|||||||
|
|
||||||
void ObjectFactory::addTmtcIpCoresToFunnels(CcsdsIpCoreHandler& ipCoreHandler,
|
void ObjectFactory::addTmtcIpCoresToFunnels(CcsdsIpCoreHandler& ipCoreHandler,
|
||||||
PusTmFunnel& pusFunnel, CfdpTmFunnel& cfdpFunnel) {
|
PusTmFunnel& pusFunnel, CfdpTmFunnel& cfdpFunnel) {
|
||||||
cfdpFunnel.addDestination(ipCoreHandler, config::LIVE_TM);
|
cfdpFunnel.addDestination("PTME IP Core", ipCoreHandler, config::LIVE_TM);
|
||||||
pusFunnel.addDestination(ipCoreHandler, config::LIVE_TM);
|
pusFunnel.addDestination("PTME IP Core", ipCoreHandler, config::LIVE_TM);
|
||||||
}
|
}
|
||||||
|
@ -127,12 +127,12 @@ void ObjectFactory::produceGenericObjects(HealthTableIF** healthTable_, PusTmFun
|
|||||||
config::MAX_PUS_FUNNEL_QUEUE_DEPTH);
|
config::MAX_PUS_FUNNEL_QUEUE_DEPTH);
|
||||||
#if OBSW_ADD_TCPIP_SERVERS == 1
|
#if OBSW_ADD_TCPIP_SERVERS == 1
|
||||||
#if OBSW_ADD_TMTC_UDP_SERVER == 1
|
#if OBSW_ADD_TMTC_UDP_SERVER == 1
|
||||||
(*cfdpFunnel)->addDestination(*udpBridge, 0);
|
(*cfdpFunnel)->addDestination("UDP Server", *udpBridge, 0);
|
||||||
(*pusFunnel)->addDestination(*udpBridge, 0);
|
(*pusFunnel)->addDestination("UDP Server", *udpBridge, 0);
|
||||||
#endif
|
#endif
|
||||||
#if OBSW_ADD_TMTC_TCP_SERVER == 1
|
#if OBSW_ADD_TMTC_TCP_SERVER == 1
|
||||||
(*cfdpFunnel)->addDestination(*tcpBridge, 0);
|
(*cfdpFunnel)->addDestination("TCP Server", *tcpBridge, 0);
|
||||||
(*pusFunnel)->addDestination(*tcpBridge, 0);
|
(*pusFunnel)->addDestination("TCP Server", *tcpBridge, 0);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// Every TM packet goes through this funnel
|
// Every TM packet goes through this funnel
|
||||||
|
@ -68,7 +68,7 @@ ReturnValue_t CfdpTmFunnel::handlePacket(TmTcMessage& msg) {
|
|||||||
msg.setStorageId(newStoreId);
|
msg.setStorageId(newStoreId);
|
||||||
store_address_t origStoreId = newStoreId;
|
store_address_t origStoreId = newStoreId;
|
||||||
for (unsigned int idx = 0; idx < destinations.size(); idx++) {
|
for (unsigned int idx = 0; idx < destinations.size(); idx++) {
|
||||||
const auto& destVcidPair = destinations[idx];
|
const auto& dest = destinations[idx];
|
||||||
if (destinations.size() > 1) {
|
if (destinations.size() > 1) {
|
||||||
if (idx < destinations.size() - 1) {
|
if (idx < destinations.size() - 1) {
|
||||||
// Create copy of data to ensure each TM recipient has its own copy. That way, we don't need
|
// Create copy of data to ensure each TM recipient has its own copy. That way, we don't need
|
||||||
@ -87,10 +87,11 @@ ReturnValue_t CfdpTmFunnel::handlePacket(TmTcMessage& msg) {
|
|||||||
msg.setStorageId(origStoreId);
|
msg.setStorageId(origStoreId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = tmQueue->sendMessage(destVcidPair.first, &msg);
|
result = tmQueue->sendMessage(dest.queueId, &msg);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "PusTmFunnel::handlePacket: Error sending TM to downlink handler" << std::endl;
|
sif::error << "PusTmFunnel::handlePacket: Error sending TM to downlink handler " << dest.name
|
||||||
|
<< " failed" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
tmStore.deleteData(msg.getStorageId());
|
tmStore.deleteData(msg.getStorageId());
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ ReturnValue_t PusTmFunnel::handlePacket(TmTcMessage &message) {
|
|||||||
packet.updateErrorControl();
|
packet.updateErrorControl();
|
||||||
|
|
||||||
for (unsigned int idx = 0; idx < destinations.size(); idx++) {
|
for (unsigned int idx = 0; idx < destinations.size(); idx++) {
|
||||||
const auto &destVcidPair = destinations[idx];
|
const auto &dest = destinations[idx];
|
||||||
if (destinations.size() > 1) {
|
if (destinations.size() > 1) {
|
||||||
if (idx < destinations.size() - 1) {
|
if (idx < destinations.size() - 1) {
|
||||||
// Create copy of data to ensure each TM recipient has its own copy. That way, we don't need
|
// Create copy of data to ensure each TM recipient has its own copy. That way, we don't need
|
||||||
@ -68,10 +68,11 @@ ReturnValue_t PusTmFunnel::handlePacket(TmTcMessage &message) {
|
|||||||
message.setStorageId(origStoreId);
|
message.setStorageId(origStoreId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = tmQueue->sendMessage(destVcidPair.first, &message);
|
result = tmQueue->sendMessage(dest.queueId, &message);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
sif::error << "PusTmFunnel::handlePacket: Error sending TM to downlink handler" << std::endl;
|
sif::error << "PusTmFunnel::handlePacket: Error sending TM to downlink handler " << dest.name
|
||||||
|
<< " failed" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
tmStore.deleteData(message.getStorageId());
|
tmStore.deleteData(message.getStorageId());
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@ MessageQueueId_t TmFunnelBase::getReportReceptionQueue(uint8_t virtualChannel) c
|
|||||||
return tmQueue->getId();
|
return tmQueue->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TmFunnelBase::addDestination(const AcceptsTelemetryIF &downlinkDestination, uint8_t vcid) {
|
void TmFunnelBase::addDestination(const char *name, const AcceptsTelemetryIF &downlinkDestination,
|
||||||
|
uint8_t vcid) {
|
||||||
auto queueId = downlinkDestination.getReportReceptionQueue(vcid);
|
auto queueId = downlinkDestination.getReportReceptionQueue(vcid);
|
||||||
destinations.emplace_back(queueId, vcid);
|
destinations.emplace_back(name, queueId, vcid);
|
||||||
}
|
}
|
||||||
|
@ -10,14 +10,25 @@
|
|||||||
class TmFunnelBase : public AcceptsTelemetryIF, public SystemObject {
|
class TmFunnelBase : public AcceptsTelemetryIF, public SystemObject {
|
||||||
public:
|
public:
|
||||||
TmFunnelBase(object_id_t objectId, StorageManagerIF& tmStore, uint32_t tmMsgDepth);
|
TmFunnelBase(object_id_t objectId, StorageManagerIF& tmStore, uint32_t tmMsgDepth);
|
||||||
void addDestination(const AcceptsTelemetryIF& downlinkDestination, uint8_t vcid = 0);
|
void addDestination(const char* name, const AcceptsTelemetryIF& downlinkDestination,
|
||||||
|
uint8_t vcid = 0);
|
||||||
[[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override;
|
[[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override;
|
||||||
|
|
||||||
virtual ~TmFunnelBase();
|
virtual ~TmFunnelBase();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
StorageManagerIF& tmStore;
|
StorageManagerIF& tmStore;
|
||||||
std::vector<std::pair<MessageQueueId_t, uint8_t>> destinations;
|
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;
|
MessageQueueIF* tmQueue = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user