continue refactoring
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
This commit is contained in:
@ -500,7 +500,7 @@ ReturnValue_t PlocSupvHelper::selectMemory() {
|
||||
ReturnValue_t PlocSupvHelper::prepareUpdate() {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
resetSpParams();
|
||||
supv::NoPayloadPacket packet(spParams, Apids::BOOT_MAN,
|
||||
supv::NoPayloadPacket packet(spParams, Apid::BOOT_MAN,
|
||||
static_cast<uint8_t>(tc::BootManId::PREPARE_UPDATE));
|
||||
result = packet.buildPacket();
|
||||
if (result != returnvalue::OK) {
|
||||
@ -584,7 +584,7 @@ ReturnValue_t PlocSupvHelper::handleAck() {
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
return returnvalue::OK;
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleExe(uint32_t timeout) {
|
||||
@ -735,74 +735,76 @@ ReturnValue_t PlocSupvHelper::calcImageCrc() {
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
resetSpParams();
|
||||
// Will hold status report for later processing
|
||||
std::array<uint8_t, 32> statusReportBuf{};
|
||||
supv::UpdateStatusReport updateStatusReport(tmBuf.data(), tmBuf.size());
|
||||
// Verification of update write procedure
|
||||
supv::CheckMemory packet(spParams);
|
||||
result = packet.buildPacket(update.memoryId, update.startAddress, update.fullFileSize);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = sendCommand(packet);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handleAck();
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
|
||||
bool exeAlreadyHandled = false;
|
||||
uint32_t timeout = std::max(CRC_EXECUTION_TIMEOUT, supv::timeout::UPDATE_STATUS_REPORT);
|
||||
result = handleTmReception(ccsds::HEADER_LEN, tmBuf.data(), timeout);
|
||||
ploc::SpTmReader spReader(tmBuf.data(), tmBuf.size());
|
||||
if (spReader.getApid() == supv::APID_EXE_FAILURE) {
|
||||
exeAlreadyHandled = true;
|
||||
result = handleRemainingExeReport(spReader);
|
||||
} else if (spReader.getApid() == supv::APID_UPDATE_STATUS_REPORT) {
|
||||
size_t remBytes = spReader.getPacketDataLen() + 1;
|
||||
result = handleTmReception(remBytes, tmBuf.data() + ccsds::HEADER_LEN,
|
||||
supv::timeout::UPDATE_STATUS_REPORT);
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning
|
||||
<< "PlocSupvHelper::handleCheckMemoryCommand: Failed to receive update status report"
|
||||
<< std::endl;
|
||||
return result;
|
||||
}
|
||||
result = updateStatusReport.checkCrc();
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning << "PlocSupvHelper::handleCheckMemoryCommand: CRC check failed" << std::endl;
|
||||
return result;
|
||||
}
|
||||
// Copy into other buffer because data will be overwritten when reading execution report
|
||||
std::memcpy(statusReportBuf.data(), tmBuf.data(), updateStatusReport.getNominalSize());
|
||||
}
|
||||
|
||||
if (not exeAlreadyHandled) {
|
||||
result = handleExe(CRC_EXECUTION_TIMEOUT);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// Now process the status report
|
||||
updateStatusReport.setData(statusReportBuf.data(), statusReportBuf.size());
|
||||
result = updateStatusReport.parseDataField();
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
if (update.crcShouldBeChecked) {
|
||||
result = updateStatusReport.verifycrc(update.crc);
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning << "PlocSupvHelper::handleCheckMemoryCommand: CRC failure. Expected CRC 0x"
|
||||
<< std::setfill('0') << std::hex << std::setw(4)
|
||||
<< static_cast<uint16_t>(update.crc) << " but received CRC 0x" << std::setw(4)
|
||||
<< updateStatusReport.getCrc() << std::dec << std::endl;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
// TODO: Fix
|
||||
// resetSpParams();
|
||||
// // Will hold status report for later processing
|
||||
// std::array<uint8_t, 32> statusReportBuf{};
|
||||
// supv::UpdateStatusReport updateStatusReport(tmBuf.data(), tmBuf.size());
|
||||
// // Verification of update write procedure
|
||||
// supv::CheckMemory packet(spParams);
|
||||
// result = packet.buildPacket(update.memoryId, update.startAddress, update.fullFileSize);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// result = sendCommand(packet);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// result = handleAck();
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// bool exeAlreadyHandled = false;
|
||||
// uint32_t timeout = std::max(CRC_EXECUTION_TIMEOUT, supv::timeout::UPDATE_STATUS_REPORT);
|
||||
// result = handleTmReception(ccsds::HEADER_LEN, tmBuf.data(), timeout);
|
||||
// ploc::SpTmReader spReader(tmBuf.data(), tmBuf.size());
|
||||
// if (spReader.getApid() == supv::APID_EXE_FAILURE) {
|
||||
// exeAlreadyHandled = true;
|
||||
// result = handleRemainingExeReport(spReader);
|
||||
// } else if (spReader.getApid() == supv::APID_UPDATE_STATUS_REPORT) {
|
||||
// size_t remBytes = spReader.getPacketDataLen() + 1;
|
||||
// result = handleTmReception(remBytes, tmBuf.data() + ccsds::HEADER_LEN,
|
||||
// supv::timeout::UPDATE_STATUS_REPORT);
|
||||
// if (result != returnvalue::OK) {
|
||||
// sif::warning
|
||||
// << "PlocSupvHelper::handleCheckMemoryCommand: Failed to receive update status report"
|
||||
// << std::endl;
|
||||
// return result;
|
||||
// }
|
||||
// result = updateStatusReport.checkCrc();
|
||||
// if (result != returnvalue::OK) {
|
||||
// sif::warning << "PlocSupvHelper::handleCheckMemoryCommand: CRC check failed" << std::endl;
|
||||
// return result;
|
||||
// }
|
||||
// // Copy into other buffer because data will be overwritten when reading execution report
|
||||
// std::memcpy(statusReportBuf.data(), tmBuf.data(), updateStatusReport.getNominalSize());
|
||||
// }
|
||||
//
|
||||
// if (not exeAlreadyHandled) {
|
||||
// result = handleExe(CRC_EXECUTION_TIMEOUT);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // Now process the status report
|
||||
// updateStatusReport.setData(statusReportBuf.data(), statusReportBuf.size());
|
||||
// result = updateStatusReport.parseDataField();
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// if (update.crcShouldBeChecked) {
|
||||
// result = updateStatusReport.verifycrc(update.crc);
|
||||
// if (result != returnvalue::OK) {
|
||||
// sif::warning << "PlocSupvHelper::handleCheckMemoryCommand: CRC failure. Expected CRC 0x"
|
||||
// << std::setfill('0') << std::hex << std::setw(4)
|
||||
// << static_cast<uint16_t>(update.crc) << " but received CRC 0x" <<
|
||||
// std::setw(4)
|
||||
// << updateStatusReport.getCrc() << std::dec << std::endl;
|
||||
// return result;
|
||||
// }
|
||||
// }
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -816,55 +818,57 @@ uint32_t PlocSupvHelper::getFileSize(std::string filename) {
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleEventBufferReception(ploc::SpTmReader& reader) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
#ifdef XIPHOS_Q7S
|
||||
if (not sdcMan->getActiveSdCard()) {
|
||||
return HasFileSystemIF::FILESYSTEM_INACTIVE;
|
||||
}
|
||||
#endif
|
||||
std::string filename = Filenaming::generateAbsoluteFilename(
|
||||
eventBufferReq.path, eventBufferReq.filename, timestamping);
|
||||
std::ofstream file(filename, std::ios_base::app | std::ios_base::out);
|
||||
uint32_t packetsRead = 0;
|
||||
size_t requestLen = 0;
|
||||
bool firstPacket = true;
|
||||
for (packetsRead = 0; packetsRead < NUM_EVENT_BUFFER_PACKETS; packetsRead++) {
|
||||
if (terminate) {
|
||||
triggerEvent(SUPV_EVENT_BUFFER_REQUEST_TERMINATED, packetsRead - 1);
|
||||
file.close();
|
||||
return PROCESS_TERMINATED;
|
||||
}
|
||||
if (packetsRead == NUM_EVENT_BUFFER_PACKETS - 1) {
|
||||
requestLen = SIZE_EVENT_BUFFER_LAST_PACKET;
|
||||
} else {
|
||||
requestLen = SIZE_EVENT_BUFFER_FULL_PACKET;
|
||||
}
|
||||
if (firstPacket) {
|
||||
firstPacket = false;
|
||||
requestLen -= 6;
|
||||
}
|
||||
result = handleTmReception(requestLen);
|
||||
if (result != returnvalue::OK) {
|
||||
sif::debug << "PlocSupvHelper::handleEventBufferReception: Failed while trying to read packet"
|
||||
<< " " << packetsRead + 1 << std::endl;
|
||||
file.close();
|
||||
return result;
|
||||
}
|
||||
ReturnValue_t result = reader.checkCrc();
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid);
|
||||
return result;
|
||||
}
|
||||
uint16_t apid = reader.getApid();
|
||||
if (apid != supv::APID_MRAM_DUMP_TM) {
|
||||
sif::warning << "PlocSupvHelper::handleEventBufferReception: Did not expect space packet "
|
||||
<< "with APID 0x" << std::hex << apid << std::endl;
|
||||
file.close();
|
||||
return EVENT_BUFFER_REPLY_INVALID_APID;
|
||||
}
|
||||
// TODO: Fix
|
||||
// file.write(reinterpret_cast<const char*>(reader.getPacketData()),
|
||||
// reader.getPayloadDataLength());
|
||||
}
|
||||
// TODO: Fix
|
||||
//#ifdef XIPHOS_Q7S
|
||||
// if (not sdcMan->getActiveSdCard()) {
|
||||
// return HasFileSystemIF::FILESYSTEM_INACTIVE;
|
||||
// }
|
||||
//#endif
|
||||
// std::string filename = Filenaming::generateAbsoluteFilename(
|
||||
// eventBufferReq.path, eventBufferReq.filename, timestamping);
|
||||
// std::ofstream file(filename, std::ios_base::app | std::ios_base::out);
|
||||
// uint32_t packetsRead = 0;
|
||||
// size_t requestLen = 0;
|
||||
// bool firstPacket = true;
|
||||
// for (packetsRead = 0; packetsRead < NUM_EVENT_BUFFER_PACKETS; packetsRead++) {
|
||||
// if (terminate) {
|
||||
// triggerEvent(SUPV_EVENT_BUFFER_REQUEST_TERMINATED, packetsRead - 1);
|
||||
// file.close();
|
||||
// return PROCESS_TERMINATED;
|
||||
// }
|
||||
// if (packetsRead == NUM_EVENT_BUFFER_PACKETS - 1) {
|
||||
// requestLen = SIZE_EVENT_BUFFER_LAST_PACKET;
|
||||
// } else {
|
||||
// requestLen = SIZE_EVENT_BUFFER_FULL_PACKET;
|
||||
// }
|
||||
// if (firstPacket) {
|
||||
// firstPacket = false;
|
||||
// requestLen -= 6;
|
||||
// }
|
||||
// result = handleTmReception(requestLen);
|
||||
// if (result != returnvalue::OK) {
|
||||
// sif::debug << "PlocSupvHelper::handleEventBufferReception: Failed while trying to read
|
||||
// packet"
|
||||
// << " " << packetsRead + 1 << std::endl;
|
||||
// file.close();
|
||||
// return result;
|
||||
// }
|
||||
// ReturnValue_t result = reader.checkCrc();
|
||||
// if (result != returnvalue::OK) {
|
||||
// triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid);
|
||||
// return result;
|
||||
// }
|
||||
// uint16_t apid = reader.getApid();
|
||||
// if (apid != supv::APID_MRAM_DUMP_TM) {
|
||||
// sif::warning << "PlocSupvHelper::handleEventBufferReception: Did not expect space packet "
|
||||
// << "with APID 0x" << std::hex << apid << std::endl;
|
||||
// file.close();
|
||||
// return EVENT_BUFFER_REPLY_INVALID_APID;
|
||||
// }
|
||||
// // TODO: Fix
|
||||
// // file.write(reinterpret_cast<const char*>(reader.getPacketData()),
|
||||
// // reader.getPayloadDataLength());
|
||||
// }
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user