CFDP Source Handler Testing #803

Merged
muellerr merged 14 commits from cfdp-source-handler-testing into cfdp-source-handler 2023-10-13 17:10:44 +02:00
2 changed files with 18 additions and 6 deletions
Showing only changes of commit be1fb22e39 - Show all commits

View File

@ -60,7 +60,7 @@ ReturnValue_t CfdpHandler::initialize() {
result = handleCfdpMessages(); result = handleCfdpMessages();
if (result != OK) { if (result != OK) {
} }
uint32_t fsmCount = 0; uint32_t fsmCount = 1;
const DestHandler::FsmResult& destResult = destHandler.stateMachine(); const DestHandler::FsmResult& destResult = destHandler.stateMachine();
while (destResult.callStatus == CallStatus::CALL_AGAIN) { while (destResult.callStatus == CallStatus::CALL_AGAIN) {
if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_DEST_HANDLER) { if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_DEST_HANDLER) {
@ -70,7 +70,7 @@ ReturnValue_t CfdpHandler::initialize() {
destHandler.stateMachine(); destHandler.stateMachine();
fsmCount++; fsmCount++;
} }
fsmCount = 0; fsmCount = 1;
throttlePeriodOngoing = throttleSignal; throttlePeriodOngoing = throttleSignal;
@ -78,6 +78,9 @@ ReturnValue_t CfdpHandler::initialize() {
// way without requiring huge amounts of memory for large files. // way without requiring huge amounts of memory for large files.
if (!throttlePeriodOngoing) { if (!throttlePeriodOngoing) {
const SourceHandler::FsmResult& srcResult = srcHandler.stateMachine(); const SourceHandler::FsmResult& srcResult = srcHandler.stateMachine();
if (srcResult.packetsSent > 0) {
signals::CFDP_MSG_COUNTER.fetch_add(srcResult.packetsSent, std::memory_order_relaxed);
}
while (srcResult.callStatus == CallStatus::CALL_AGAIN) { while (srcResult.callStatus == CallStatus::CALL_AGAIN) {
// Limit number of messages. // Limit number of messages.
if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_SRC_HANDLER) { if (fsmCount == config::CFDP_MAX_FSM_CALL_COUNT_SRC_HANDLER) {
@ -85,6 +88,9 @@ ReturnValue_t CfdpHandler::initialize() {
break; break;
} }
srcHandler.stateMachine(); srcHandler.stateMachine();
if (srcResult.packetsSent > 0) {
signals::CFDP_MSG_COUNTER.fetch_add(srcResult.packetsSent, std::memory_order_relaxed);
}
if (srcResult.result == cfdp::TM_STORE_FULL) { if (srcResult.result == cfdp::TM_STORE_FULL) {
sif::warning << "CFDP Source Handler: TM store is full" << std::endl; sif::warning << "CFDP Source Handler: TM store is full" << std::endl;
} else if (srcResult.result == cfdp::TARGET_MSG_QUEUE_FULL) { } else if (srcResult.result == cfdp::TARGET_MSG_QUEUE_FULL) {
@ -92,6 +98,9 @@ ReturnValue_t CfdpHandler::initialize() {
} }
fsmCount++; fsmCount++;
} }
if (signals::CFDP_MSG_COUNTER > 0) {
sif::debug << "CFDP msg count: " << signals::CFDP_MSG_COUNTER << std::endl;
}
} }
if (shortDelay) { if (shortDelay) {
TaskFactory::delayTask(config::CFDP_SHORT_DELAY_MS); TaskFactory::delayTask(config::CFDP_SHORT_DELAY_MS);

View File

@ -54,6 +54,9 @@ ReturnValue_t LiveTmTask::performOperation(uint8_t opCode) {
} }
} }
} }
if (channel.isBusy()) {
sif::debug << "busy" << std::endl;
}
if (channel.isBusy() and !throttlePeriodOngoing) { if (channel.isBusy() and !throttlePeriodOngoing) {
// Throttle CFDP packet creator. It is by far the most relevant data creator, so throttling // Throttle CFDP packet creator. It is by far the most relevant data creator, so throttling
// it is the easiest way to handle back pressure for now in a sensible way. // it is the easiest way to handle back pressure for now in a sensible way.
@ -74,10 +77,10 @@ ReturnValue_t LiveTmTask::performOperation(uint8_t opCode) {
readCommandQueue(); readCommandQueue();
if (DEBUG_TM_QUEUE_SPEED) { if (DEBUG_TM_QUEUE_SPEED) {
if (consecutiveCfdpCounter > 0) { if (consecutiveCfdpCounter > 0) {
sif::debug << "Concecutive CFDP TM handled: " << consecutiveCfdpCounter << std::endl; sif::debug << "Consecutive CFDP TM handled: " << consecutiveCfdpCounter << std::endl;
} }
if (consecutiveRegularCounter > 0) { if (consecutiveRegularCounter > 0) {
sif::debug << "Concecutive regular TM handled: " << consecutiveRegularCounter sif::debug << "Consecutive regular TM handled: " << consecutiveRegularCounter
<< std::endl; << std::endl;
} }
consecutiveRegularCounter = 0; consecutiveRegularCounter = 0;
@ -181,7 +184,6 @@ ReturnValue_t LiveTmTask::handleGenericTmQueue(MessageQueueIF& queue, bool isCfd
sif::warning << "LiveTmTask: Synchronous write of last segment failed with code 0x" sif::warning << "LiveTmTask: Synchronous write of last segment failed with code 0x"
<< std::setw(4) << std::hex << result << std::dec << std::endl; << std::setw(4) << std::hex << result << std::dec << std::endl;
} }
// minimumPeriodThrottleCd.resetTimer();
} }
} }
// Try delete in any case, ignore failures (which should not happen), it is more important to // Try delete in any case, ignore failures (which should not happen), it is more important to
@ -192,13 +194,14 @@ ReturnValue_t LiveTmTask::handleGenericTmQueue(MessageQueueIF& queue, bool isCfd
void LiveTmTask::throttleCfdp() { void LiveTmTask::throttleCfdp() {
throttlePeriodOngoing = true; throttlePeriodOngoing = true;
// minimumPeriodThrottleCd.resetTimer();
signals::CFDP_CHANNEL_THROTTLE_SIGNAL = true; signals::CFDP_CHANNEL_THROTTLE_SIGNAL = true;
sif::debug << "throttling CFDP" << std::endl;
} }
void LiveTmTask::releaseCfdp() { void LiveTmTask::releaseCfdp() {
throttlePeriodOngoing = false; throttlePeriodOngoing = false;
signals::CFDP_CHANNEL_THROTTLE_SIGNAL = false; signals::CFDP_CHANNEL_THROTTLE_SIGNAL = false;
sif::debug << "releasing CFDP" << std::endl;
} }
ModeTreeChildIF& LiveTmTask::getModeTreeChildIF() { return *this; } ModeTreeChildIF& LiveTmTask::getModeTreeChildIF() { return *this; }