a lot of good stuff
Some checks failed
EIVE/eive-obsw/pipeline/pr-main There was a failure building this commit
Some checks failed
EIVE/eive-obsw/pipeline/pr-main There was a failure building this commit
This commit is contained in:
@ -3,10 +3,12 @@
|
||||
#include <fsfw/cfdp/CfdpMessage.h>
|
||||
#include <fsfw/ipc/CommandMessage.h>
|
||||
|
||||
#include "eive/definitions.h"
|
||||
#include "fsfw/cfdp/pdu/AckPduReader.h"
|
||||
#include "fsfw/cfdp/pdu/PduHeaderReader.h"
|
||||
#include "fsfw/globalfunctions/arrayprinter.h"
|
||||
#include "fsfw/ipc/QueueFactory.h"
|
||||
#include "fsfw/tasks/TaskFactory.h"
|
||||
#include "fsfw/tmtcservices/TmTcMessage.h"
|
||||
|
||||
using namespace returnvalue;
|
||||
@ -46,28 +48,47 @@ ReturnValue_t CfdpHandler::initialize() {
|
||||
return SystemObject::initialize();
|
||||
}
|
||||
|
||||
ReturnValue_t CfdpHandler::performOperation(uint8_t operationCode) {
|
||||
ReturnValue_t status = OK;
|
||||
ReturnValue_t result = handlePduPacketMessages();
|
||||
if (result != OK) {
|
||||
status = result;
|
||||
[[noreturn]] ReturnValue_t CfdpHandler::performOperation(uint8_t operationCode) {
|
||||
while (true) {
|
||||
bool shortDelay = false;
|
||||
ReturnValue_t result = handlePduPacketMessages();
|
||||
if (result != OK) {
|
||||
}
|
||||
result = handleCfdpMessages();
|
||||
if (result != OK) {
|
||||
}
|
||||
uint32_t fsmCount = 0;
|
||||
const DestHandler::FsmResult& destResult = destHandler.stateMachine();
|
||||
while (destResult.callStatus == CallStatus::CALL_AGAIN) {
|
||||
if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_DEST_HANDLER) {
|
||||
shortDelay = true;
|
||||
break;
|
||||
}
|
||||
destHandler.stateMachine();
|
||||
fsmCount++;
|
||||
}
|
||||
fsmCount = 0;
|
||||
const SourceHandler::FsmResult& srcResult = srcHandler.stateMachine();
|
||||
while (srcResult.callStatus == CallStatus::CALL_AGAIN) {
|
||||
// Limit number of messages.
|
||||
if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_SRC_HANDLER) {
|
||||
shortDelay = true;
|
||||
break;
|
||||
}
|
||||
srcHandler.stateMachine();
|
||||
if(srcResult.result == cfdp::TM_STORE_FULL) {
|
||||
sif::warning << "CFDP Source Handler: TM store is full" << std::endl;
|
||||
} else if(srcResult.result == cfdp::TARGET_MSG_QUEUE_FULL) {
|
||||
sif::warning << "CFDP Source Handler: TM queue is full" << std::endl;
|
||||
}
|
||||
fsmCount++;
|
||||
}
|
||||
if (shortDelay) {
|
||||
TaskFactory::delayTask(config::CFDP_SHORT_DELAY_MS);
|
||||
continue;
|
||||
}
|
||||
TaskFactory::delayTask(config::CFDP_REGULAR_DELAY_MS);
|
||||
}
|
||||
result = handleCfdpMessages();
|
||||
if (result != OK) {
|
||||
status = result;
|
||||
}
|
||||
const DestHandler::FsmResult& destResult = destHandler.stateMachine();
|
||||
// TODO: Error handling?
|
||||
while (destResult.callStatus == CallStatus::CALL_AGAIN) {
|
||||
destHandler.stateMachine();
|
||||
// TODO: Error handling?
|
||||
}
|
||||
const SourceHandler::FsmResult& srcResult = srcHandler.stateMachine();
|
||||
while (srcResult.callStatus == CallStatus::CALL_AGAIN) {
|
||||
sif::debug << "calling fsm" << std::endl;
|
||||
srcHandler.stateMachine();
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
ReturnValue_t CfdpHandler::handlePduPacket(TmTcMessage& msg) {
|
||||
|
Reference in New Issue
Block a user