change layering
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
This commit is contained in:
@ -251,41 +251,37 @@ ReturnValue_t PersistentTmStore::loadNextDumpFile() {
|
||||
return DUMP_DONE;
|
||||
}
|
||||
|
||||
ReturnValue_t PersistentTmStore::dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpedLen,
|
||||
bool& fileHasSwapped) {
|
||||
if (state == State::IDLE) {
|
||||
ReturnValue_t PersistentTmStore::getNextDumpPacket(PusTmReader& reader, bool& fileHasSwapped) {
|
||||
if (state == State::IDLE or dumpParams.pendingPacketDump) {
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
PusTmReader reader(&timeReader, fileBuf.data() + dumpParams.currentSize,
|
||||
fileBuf.size() - dumpParams.currentSize);
|
||||
reader.setReadOnlyData(fileBuf.data() + dumpParams.currentSize,
|
||||
fileBuf.size() - dumpParams.currentSize);
|
||||
// CRC check to fully ensure this is a valid TM
|
||||
ReturnValue_t result = reader.parseDataWithCrcCheck();
|
||||
if (result == returnvalue::OK) {
|
||||
result = tmSink.write(fileBuf.data() + dumpParams.currentSize, reader.getFullPacketLen());
|
||||
if (result == DirectTmSinkIF::IS_BUSY) {
|
||||
return result;
|
||||
} else if (result != returnvalue::OK) {
|
||||
// TODO: Event?
|
||||
sif::error << "PersistentTmStore: Writing to TM sink failed" << std::endl;
|
||||
return result;
|
||||
}
|
||||
dumpParams.currentSize += reader.getFullPacketLen();
|
||||
dumpedLen = reader.getFullPacketLen();
|
||||
if (dumpParams.currentSize >= dumpParams.fileSize) {
|
||||
fileHasSwapped = true;
|
||||
return loadNextDumpFile();
|
||||
}
|
||||
} else {
|
||||
if (result != returnvalue::OK) {
|
||||
sif::error << "PersistentTmStore: Parsing of PUS TM failed with code " << result << std::endl;
|
||||
triggerEvent(persTmStore::POSSIBLE_FILE_CORRUPTION, result, dumpParams.currentFileUnixStamp);
|
||||
// Delete the file and load next. Could use better algorithm to partially
|
||||
// restore the file dump, but for now do not trust the file.
|
||||
dumpedLen = 0;
|
||||
std::error_code e;
|
||||
std::filesystem::remove(dumpParams.dirEntry.path().c_str(), e);
|
||||
fileHasSwapped = true;
|
||||
return loadNextDumpFile();
|
||||
}
|
||||
fileHasSwapped = false;
|
||||
dumpParams.pendingPacketDump = true;
|
||||
return returnvalue::OK;
|
||||
}
|
||||
|
||||
ReturnValue_t PersistentTmStore::confirmDump(const PusTmReader& reader, bool& fileHasSwapped) {
|
||||
dumpParams.pendingPacketDump = false;
|
||||
dumpParams.currentSize += reader.getFullPacketLen();
|
||||
if (dumpParams.currentSize >= dumpParams.fileSize) {
|
||||
fileHasSwapped = true;
|
||||
return loadNextDumpFile();
|
||||
}
|
||||
fileHasSwapped = false;
|
||||
return returnvalue::OK;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user