fsfw/src/fsfw/tmtcservices/VerificationReporter.cpp

112 lines
4.9 KiB
C++
Raw Normal View History

2021-07-13 20:58:45 +02:00
#include "fsfw/tmtcservices/VerificationReporter.h"
2021-07-13 20:58:45 +02:00
#include "fsfw/ipc/MessageQueueIF.h"
2022-02-02 10:29:30 +01:00
#include "fsfw/objectmanager/ObjectManager.h"
2021-07-13 20:58:45 +02:00
#include "fsfw/objectmanager/frameworkObjects.h"
2022-02-02 10:29:30 +01:00
#include "fsfw/serviceinterface/ServiceInterface.h"
#include "fsfw/tmtcservices/AcceptsVerifyMessageIF.h"
#include "fsfw/tmtcservices/PusVerificationReport.h"
2020-09-29 13:34:27 +02:00
2022-02-02 10:29:30 +01:00
object_id_t VerificationReporter::messageReceiver = objects::PUS_SERVICE_1_VERIFICATION;
2022-02-02 10:29:30 +01:00
VerificationReporter::VerificationReporter() : acknowledgeQueue(MessageQueueIF::NO_QUEUE) {}
2022-07-19 18:13:25 +02:00
VerificationReporter::~VerificationReporter() = default;
2022-07-19 18:13:25 +02:00
void VerificationReporter::sendSuccessReport(uint8_t set_report_id, PusTcReader* currentPacket,
2022-02-02 10:29:30 +01:00
uint8_t set_step) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
if (currentPacket == nullptr) {
return;
}
PusVerificationMessage message(set_report_id, currentPacket->getAcknowledgeFlags(),
2022-07-18 10:20:26 +02:00
currentPacket->getPacketId(), currentPacket->getPacketSeqCtrl(), 0,
set_step);
2022-02-02 10:29:30 +01:00
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue, &message);
if (status != HasReturnvaluesIF::RETURN_OK) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::error << "VerificationReporter::sendSuccessReport: Error writing "
<< "to queue. Code: " << std::hex << status << std::dec << std::endl;
#endif
2022-02-02 10:29:30 +01:00
}
}
2022-02-02 10:29:30 +01:00
void VerificationReporter::sendSuccessReport(uint8_t set_report_id, uint8_t ackFlags,
uint16_t tcPacketId, uint16_t tcSequenceControl,
uint8_t set_step) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
PusVerificationMessage message(set_report_id, ackFlags, tcPacketId, tcSequenceControl, 0,
set_step);
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue, &message);
if (status != HasReturnvaluesIF::RETURN_OK) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::error << "VerificationReporter::sendSuccessReport: Error writing "
<< "to queue. Code: " << std::hex << status << std::dec << std::endl;
#endif
2022-02-02 10:29:30 +01:00
}
}
2022-07-19 18:13:25 +02:00
void VerificationReporter::sendFailureReport(uint8_t report_id, PusTcReader* currentPacket,
2022-02-02 10:29:30 +01:00
ReturnValue_t error_code, uint8_t step,
uint32_t parameter1, uint32_t parameter2) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
if (currentPacket == nullptr) {
return;
}
2022-07-18 10:20:26 +02:00
PusVerificationMessage message(report_id, currentPacket->getAcknowledgeFlags(),
currentPacket->getPacketId(), currentPacket->getPacketSeqCtrl(),
error_code, step, parameter1, parameter2);
2022-02-02 10:29:30 +01:00
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue, &message);
if (status != HasReturnvaluesIF::RETURN_OK) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::error << "VerificationReporter::sendFailureReport: Error writing "
<< "to queue. Code: " << std::hex << "0x" << status << std::dec << std::endl;
#endif
2022-02-02 10:29:30 +01:00
}
}
2022-02-02 10:29:30 +01:00
void VerificationReporter::sendFailureReport(uint8_t report_id, uint8_t ackFlags,
uint16_t tcPacketId, uint16_t tcSequenceControl,
ReturnValue_t error_code, uint8_t step,
uint32_t parameter1, uint32_t parameter2) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
PusVerificationMessage message(report_id, ackFlags, tcPacketId, tcSequenceControl, error_code,
step, parameter1, parameter2);
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue, &message);
if (status != HasReturnvaluesIF::RETURN_OK) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::error << "VerificationReporter::sendFailureReport: Error writing "
<< "to queue. Code: " << std::hex << "0x" << status << std::dec << std::endl;
#endif
2022-02-02 10:29:30 +01:00
}
}
void VerificationReporter::initialize() {
2022-02-02 10:29:30 +01:00
if (messageReceiver == objects::NO_OBJECT) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::warning << "VerificationReporter::initialize: Verification message"
" receiver object ID not set yet in Factory!"
<< std::endl;
#endif
2022-02-02 10:29:30 +01:00
return;
}
2022-07-19 18:13:25 +02:00
auto* temp = ObjectManager::instance()->get<AcceptsVerifyMessageIF>(messageReceiver);
2022-02-02 10:29:30 +01:00
if (temp == nullptr) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::error << "VerificationReporter::initialize: Message "
<< "receiver invalid. Make sure it is set up properly and "
<< "implementsAcceptsVerifyMessageIF" << std::endl;
#endif
2022-02-02 10:29:30 +01:00
return;
}
this->acknowledgeQueue = temp->getVerificationQueue();
}