added pus c support for tc

This commit is contained in:
2021-06-13 16:29:13 +02:00
parent 537a30a4de
commit d0f37b851b
25 changed files with 667 additions and 488 deletions

View File

@@ -246,7 +246,11 @@ void CommandingServiceBase::handleRequestQueue() {
TmTcMessage message;
ReturnValue_t result;
store_address_t address;
TcPacketStored packet;
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
TcPacketStoredPusC packet;
#else
TcPacketStoredPusA packet;
#endif
MessageQueueId_t queue;
object_id_t objectId;
for (result = requestQueue->receiveMessage(&message); result == RETURN_OK;
@@ -351,14 +355,18 @@ ReturnValue_t CommandingServiceBase::sendTmPacket(uint8_t subservice,
}
void CommandingServiceBase::startExecution(TcPacketStored *storedPacket,
void CommandingServiceBase::startExecution(TcPacketStoredBase *storedPacket,
CommandMapIter iter) {
ReturnValue_t result = RETURN_OK;
CommandMessage command;
iter->second.subservice = storedPacket->getSubService();
TcPacketBase* tcPacketBase = storedPacket->getPacketBase();
if(tcPacketBase == nullptr) {
return;
}
iter->second.subservice = tcPacketBase->getSubService();
result = prepareCommand(&command, iter->second.subservice,
storedPacket->getApplicationData(),
storedPacket->getApplicationDataSize(), &iter->second.state,
tcPacketBase->getApplicationData(),
tcPacketBase->getApplicationDataSize(), &iter->second.state,
iter->second.objectId);
ReturnValue_t sendResult = RETURN_OK;
@@ -371,12 +379,12 @@ void CommandingServiceBase::startExecution(TcPacketStored *storedPacket,
if (sendResult == RETURN_OK) {
Clock::getUptime(&iter->second.uptimeOfStart);
iter->second.step = 0;
iter->second.subservice = storedPacket->getSubService();
iter->second.subservice = tcPacketBase->getSubService();
iter->second.command = command.getCommand();
iter->second.tcInfo.ackFlags = storedPacket->getAcknowledgeFlags();
iter->second.tcInfo.tcPacketId = storedPacket->getPacketId();
iter->second.tcInfo.ackFlags = tcPacketBase->getAcknowledgeFlags();
iter->second.tcInfo.tcPacketId = tcPacketBase->getPacketId();
iter->second.tcInfo.tcSequenceControl =
storedPacket->getPacketSequenceControl();
tcPacketBase->getPacketSequenceControl();
acceptPacket(tc_verification::START_SUCCESS, storedPacket);
} else {
command.clearCommandMessage();
@@ -392,7 +400,7 @@ void CommandingServiceBase::startExecution(TcPacketStored *storedPacket,
}
if (sendResult == RETURN_OK) {
verificationReporter.sendSuccessReport(tc_verification::START_SUCCESS,
storedPacket);
storedPacket->getPacketBase());
acceptPacket(tc_verification::COMPLETION_SUCCESS, storedPacket);
checkAndExecuteFifo(iter);
} else {
@@ -409,16 +417,16 @@ void CommandingServiceBase::startExecution(TcPacketStored *storedPacket,
}
void CommandingServiceBase::rejectPacket(uint8_t report_id,
TcPacketStored* packet, ReturnValue_t error_code) {
verificationReporter.sendFailureReport(report_id, packet, error_code);
void CommandingServiceBase::rejectPacket(uint8_t reportId,
TcPacketStoredBase* packet, ReturnValue_t errorCode) {
verificationReporter.sendFailureReport(reportId, packet->getPacketBase(), errorCode);
packet->deletePacket();
}
void CommandingServiceBase::acceptPacket(uint8_t reportId,
TcPacketStored* packet) {
verificationReporter.sendSuccessReport(reportId, packet);
TcPacketStoredBase* packet) {
verificationReporter.sendSuccessReport(reportId, packet->getPacketBase());
packet->deletePacket();
}
@@ -428,7 +436,11 @@ void CommandingServiceBase::checkAndExecuteFifo(CommandMapIter& iter) {
if (iter->second.fifo.retrieve(&address) != RETURN_OK) {
commandMap.erase(&iter);
} else {
TcPacketStored newPacket(address);
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
TcPacketStoredPusC newPacket(address);
#else
TcPacketStoredPusA newPacket(address);
#endif
startExecution(&newPacket, iter);
}
}

View File

@@ -1,6 +1,7 @@
#ifndef FSFW_TMTCSERVICES_COMMANDINGSERVICEBASE_H_
#define FSFW_TMTCSERVICES_COMMANDINGSERVICEBASE_H_
#include <fsfw/tmtcpacket/pus/TcPacketStoredBase.h>
#include "AcceptsTelecommandsIF.h"
#include "VerificationReporter.h"
@@ -351,12 +352,12 @@ private:
*/
void handleRequestQueue();
void rejectPacket(uint8_t reportId, TcPacketStored* packet,
void rejectPacket(uint8_t reportId, TcPacketStoredBase* packet,
ReturnValue_t errorCode);
void acceptPacket(uint8_t reportId, TcPacketStored* packet);
void acceptPacket(uint8_t reportId, TcPacketStoredBase* packet);
void startExecution(TcPacketStored *storedPacket, CommandMapIter iter);
void startExecution(TcPacketStoredBase *storedPacket, CommandMapIter iter);
void handleCommandMessage(CommandMessage* reply);
void handleReplyHandlerResult(ReturnValue_t result, CommandMapIter iter,

View File

@@ -141,7 +141,11 @@ protected:
* The current Telecommand to be processed.
* It is deleted after handleRequest was executed.
*/
TcPacketStored currentPacket;
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
TcPacketStoredPusC currentPacket;
#else
TcPacketStoredPusA currentPacket;
#endif
static object_id_t packetSource;

View File

@@ -17,14 +17,17 @@ VerificationReporter::VerificationReporter() :
VerificationReporter::~VerificationReporter() {}
void VerificationReporter::sendSuccessReport(uint8_t set_report_id,
TcPacketBase* current_packet, uint8_t set_step) {
TcPacketBase* currentPacket, uint8_t set_step) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
if(currentPacket == nullptr) {
return;
}
PusVerificationMessage message(set_report_id,
current_packet->getAcknowledgeFlags(),
current_packet->getPacketId(),
current_packet->getPacketSequenceControl(), 0, set_step);
currentPacket->getAcknowledgeFlags(),
currentPacket->getPacketId(),
currentPacket->getPacketSequenceControl(), 0, set_step);
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue,
&message);
if (status != HasReturnvaluesIF::RETURN_OK) {
@@ -56,15 +59,18 @@ void VerificationReporter::sendSuccessReport(uint8_t set_report_id,
}
void VerificationReporter::sendFailureReport(uint8_t report_id,
TcPacketBase* current_packet, ReturnValue_t error_code, uint8_t step,
TcPacketBase* currentPacket, ReturnValue_t error_code, uint8_t step,
uint32_t parameter1, uint32_t parameter2) {
if (acknowledgeQueue == MessageQueueIF::NO_QUEUE) {
this->initialize();
}
if(currentPacket == nullptr) {
return;
}
PusVerificationMessage message(report_id,
current_packet->getAcknowledgeFlags(),
current_packet->getPacketId(),
current_packet->getPacketSequenceControl(), error_code, step,
currentPacket->getAcknowledgeFlags(),
currentPacket->getPacketId(),
currentPacket->getPacketSequenceControl(), error_code, step,
parameter1, parameter2);
ReturnValue_t status = MessageQueueSenderIF::sendMessage(acknowledgeQueue,
&message);