CFDP Source Handler Testing #803
@ -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);
|
||||||
|
@ -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; }
|
||||||
|
Loading…
Reference in New Issue
Block a user