Compare commits

..

1 Commits

Author SHA1 Message Date
20819dd99a Filesystem and CFDP updates 2024-10-25 18:29:22 +02:00
5 changed files with 22 additions and 23 deletions

View File

@ -129,7 +129,7 @@ ReturnValue_t cfdp::DestHandler::handleFileDataPdu(const PduPacketIF& info) {
segParams.segmentMetadata = {segMetadata, segmentMetadatLen};
destParams.user.fileSegmentRecvdIndication(segParams);
}
sif::printDebug("Writing %d bytes at offset %d\n", fileSegmentLen, fdInfo.getOffset().value());
// sif::printDebug("Writing %d bytes at offset %d\n", fileSegmentLen, fdInfo.getOffset().value());
result = destParams.user.vfs.writeToFile(transactionParams.destName.data(),
fdInfo.getOffset().value(), fileData, fileSegmentLen);
if (result != returnvalue::OK) {

View File

@ -49,13 +49,6 @@ struct DestHandlerParams {
size_t maxFilenameLen = 255;
};
struct PacketInfo {
const uint8_t* rawPdu = nullptr;
size_t pduSize = 0;
PduType pduType = PduType::FILE_DATA;
std::optional<FileDirective> directiveType = FileDirective::INVALID_DIRECTIVE;
};
class DestHandler {
public:
enum class TransactionStep : uint8_t {

View File

@ -105,10 +105,14 @@ cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::fsmNacked() {
return fsmResult;
}
const cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::stateMachine() {
const cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::stateMachineNoPacket() {
return stateMachine(std::nullopt);
}
const cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::stateMachine(
std::optional<std::reference_wrapper<PduPacketIF>> optPduPacket) {
fsmResult.packetsSent = 0;
fsmResult.errors = 0;
// fsmResult.callStatus = CallStatus::DONE;
if (state == cfdp::CfdpState::IDLE) {
return fsmResult;
}

View File

@ -4,6 +4,7 @@
#include <cstdint>
#include <vector>
#include "PduPacketIF.h"
#include "PduSenderIF.h"
#include "UserBase.h"
#include "defs.h"
@ -60,7 +61,8 @@ class SourceHandler {
* @return
*/
ReturnValue_t transactionStart(PutRequest& putRequest, RemoteEntityCfg& cfg);
const FsmResult& stateMachine();
const FsmResult& stateMachine(std::optional<std::reference_wrapper<PduPacketIF>> optPduPacket);
const FsmResult& stateMachineNoPacket();
ReturnValue_t initialize();

View File

@ -138,16 +138,16 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
CHECK(sourceHandler.transactionStart(putRequest, cfg) == OK);
size_t expectedFileSize = 0;
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachine();
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachineNoPacket();
// Verify metadata PDU was sent.
genericMetadataCheck(fsmResult, expectedFileSize, 0);
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
// Verify EOF PDU was sent. No file data PDU is sent for an empty file and the checksum is 0.
genericEofCheck(fsmResult, expectedFileSize, 0, 0);
// Verify notice of completion.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
genericNoticeOfCompletionCheck(fsmResult, 0);
}
@ -159,13 +159,13 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
fsMock.writeToFile(srcFileName.c_str(), 0, reinterpret_cast<const uint8_t*>(fileContent.data()),
expectedFileSize);
CHECK(sourceHandler.transactionStart(putRequest, cfg) == OK);
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachine();
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachineNoPacket();
// Verify metadata PDU was sent.
genericMetadataCheck(fsmResult, expectedFileSize, expectedSeqNum);
// Verify that a small file data PDU was sent.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
onePduSentCheck(fsmResult);
auto optNextPacket = pduSender.getNextSentPacket();
@ -184,7 +184,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
std::string dataReadBack(reinterpret_cast<const char*>(fileData), fileSize);
CHECK(dataReadBack == fileContent);
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
etl::crc32 crcCalc;
crcCalc.add(fileContent.data(), fileContent.data() + fileContent.size());
@ -192,7 +192,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
genericEofCheck(fsmResult, expectedFileSize, crcCalc.value(), expectedSeqNum);
// Verify notice of completion.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
genericNoticeOfCompletionCheck(fsmResult, expectedSeqNum);
}
@ -211,12 +211,12 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
fsMock.createFile(srcFileName.c_str());
fsMock.writeToFile(srcFileName.c_str(), 0, largerFileData.data(), largerFileData.size());
CHECK(sourceHandler.transactionStart(putRequest, cfg) == OK);
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachine();
const SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachineNoPacket();
// Verify metadata PDU was sent.
genericMetadataCheck(fsmResult, expectedFileSize, expectedSeqNum);
// Check first file data PDU. It should have the maximum file segment size.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
onePduSentCheck(fsmResult);
auto optNextPacket = pduSender.getNextSentPacket();
@ -240,7 +240,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
}
// Check second file data PDU.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
{
optNextPacket = pduSender.getNextSentPacket();
CHECK(optNextPacket.has_value());
@ -260,7 +260,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
}
// Check EOF and verify checksum.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
etl::crc32 crcCalc;
crcCalc.add(largerFileData.data(), largerFileData.data() + largerFileData.size());
@ -268,7 +268,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
genericEofCheck(fsmResult, expectedFileSize, crcCalc.value(), expectedSeqNum);
// Verify notice of completion.
sourceHandler.stateMachine();
sourceHandler.stateMachineNoPacket();
genericNoticeOfCompletionCheck(fsmResult, expectedSeqNum);
}
}