some minor improvements
This commit is contained in:
parent
e43a86432b
commit
1f8dc67922
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
#include "fsfw/returnvalues/returnvalue.h"
|
#include "fsfw/returnvalues/returnvalue.h"
|
||||||
|
#include "linux/payload/plocSupvDefs.h"
|
||||||
#include "tas/hdlc.h"
|
#include "tas/hdlc.h"
|
||||||
#ifdef XIPHOS_Q7S
|
#ifdef XIPHOS_Q7S
|
||||||
#include "bsp_q7s/fs/FilesystemHelper.h"
|
#include "bsp_q7s/fs/FilesystemHelper.h"
|
||||||
@ -22,9 +23,13 @@
|
|||||||
|
|
||||||
#include "fsfw/tasks/TaskFactory.h"
|
#include "fsfw/tasks/TaskFactory.h"
|
||||||
#include "fsfw/timemanager/Countdown.h"
|
#include "fsfw/timemanager/Countdown.h"
|
||||||
|
|
||||||
|
#if OBSW_DEBUG_PLOC_SUPERVISOR == 1
|
||||||
#include "mission/utility/Filenaming.h"
|
#include "mission/utility/Filenaming.h"
|
||||||
#include "mission/utility/ProgressPrinter.h"
|
#include "mission/utility/ProgressPrinter.h"
|
||||||
#include "mission/utility/Timestamp.h"
|
#include "mission/utility/Timestamp.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "tas/crc.h"
|
#include "tas/crc.h"
|
||||||
|
|
||||||
using namespace returnvalue;
|
using namespace returnvalue;
|
||||||
@ -278,23 +283,6 @@ ReturnValue_t PlocSupvUartManager::initiateUpdateContinuation() {
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReturnValue_t PlocSupvHelper::startEventBufferRequest(std::string path) {
|
|
||||||
// #ifdef XIPHOS_Q7S
|
|
||||||
// ReturnValue_t result = FilesystemHelper::checkPath(path);
|
|
||||||
// if (result != returnvalue::OK) {
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
// #endif
|
|
||||||
// if (not std::filesystem::exists(path)) {
|
|
||||||
// return PATH_NOT_EXISTS;
|
|
||||||
// }
|
|
||||||
// eventBufferReq.path = path;
|
|
||||||
// request = Request::REQUEST_EVENT_BUFFER;
|
|
||||||
// //uartComIF->flushUartTxAndRxBuf(comCookie);
|
|
||||||
// semaphore->release();
|
|
||||||
// return returnvalue::OK;
|
|
||||||
// }
|
|
||||||
|
|
||||||
void PlocSupvUartManager::stop() {
|
void PlocSupvUartManager::stop() {
|
||||||
MutexGuard mg(lock);
|
MutexGuard mg(lock);
|
||||||
if (state == InternalState::SLEEPING or state == InternalState::GO_TO_SLEEP) {
|
if (state == InternalState::SLEEPING or state == InternalState::GO_TO_SLEEP) {
|
||||||
@ -450,11 +438,8 @@ ReturnValue_t PlocSupvUartManager::writeUpdatePackets() {
|
|||||||
update.bytesWritten);
|
update.bytesWritten);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = handlePacketTransmissionNoReply(packet, COM_TIMEOUT_MS);
|
result = writeMemoryHandlingWithRetryLogic(packet, progPercent);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
triggerEvent(WRITE_MEMORY_FAILED, buildProgParams1(progPercent, update.sequenceCount),
|
|
||||||
update.bytesWritten);
|
|
||||||
// TODO: Retry logic, re-try up to three times.
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +450,22 @@ ReturnValue_t PlocSupvUartManager::writeUpdatePackets() {
|
|||||||
#if OBSW_DEBUG_PLOC_SUPERVISOR == 1
|
#if OBSW_DEBUG_PLOC_SUPERVISOR == 1
|
||||||
progressPrinter.print(update.bytesWritten);
|
progressPrinter.print(update.bytesWritten);
|
||||||
#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */
|
#endif /* OBSW_DEBUG_PLOC_SUPERVISOR == 1 */
|
||||||
// TaskFactory::delayTask(1);
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t PlocSupvUartManager::writeMemoryHandlingWithRetryLogic(supv::WriteMemory& packet,
|
||||||
|
unsigned progPercent) {
|
||||||
|
ReturnValue_t result = returnvalue::OK;
|
||||||
|
// Simple re-try logic in place to deal with communication unreliability in orbit.
|
||||||
|
for (uint8_t retryCount = 0; retryCount < MAX_RETRY_COUNT; retryCount++) {
|
||||||
|
result = handlePacketTransmissionNoReply(packet, COM_TIMEOUT_MS);
|
||||||
|
if (result == returnvalue::OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
triggerEvent(WRITE_MEMORY_FAILED, buildProgParams1(progPercent, update.sequenceCount),
|
||||||
|
update.bytesWritten);
|
||||||
|
serial::flushTxRxBuf(serialPort);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -118,6 +118,7 @@ class PlocSupvUartManager : public DeviceCommunicationIF,
|
|||||||
static constexpr Event HDLC_FRAME_REMOVAL_ERROR = MAKE_EVENT(31, severity::INFO);
|
static constexpr Event HDLC_FRAME_REMOVAL_ERROR = MAKE_EVENT(31, severity::INFO);
|
||||||
static constexpr Event HDLC_CRC_ERROR = MAKE_EVENT(32, severity::INFO);
|
static constexpr Event HDLC_CRC_ERROR = MAKE_EVENT(32, severity::INFO);
|
||||||
|
|
||||||
|
static constexpr unsigned MAX_RETRY_COUNT = 3;
|
||||||
PlocSupvUartManager(object_id_t objectId);
|
PlocSupvUartManager(object_id_t objectId);
|
||||||
virtual ~PlocSupvUartManager();
|
virtual ~PlocSupvUartManager();
|
||||||
/**
|
/**
|
||||||
@ -371,6 +372,8 @@ class PlocSupvUartManager : public DeviceCommunicationIF,
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t requestReceiveMessage(CookieIF* cookie, size_t requestLen) override;
|
ReturnValue_t requestReceiveMessage(CookieIF* cookie, size_t requestLen) override;
|
||||||
|
|
||||||
|
ReturnValue_t writeMemoryHandlingWithRetryLogic(supv::WriteMemory& packet, unsigned progPercent);
|
||||||
|
|
||||||
void performUartShutdown();
|
void performUartShutdown();
|
||||||
void updateVtime(uint8_t vtime);
|
void updateVtime(uint8_t vtime);
|
||||||
};
|
};
|
||||||
|
@ -1146,14 +1146,14 @@ class WriteMemory : public TcBase {
|
|||||||
: TcBase(params, Apid::MEM_MAN, static_cast<uint8_t>(tc::MemManId::WRITE), 1) {}
|
: TcBase(params, Apid::MEM_MAN, static_cast<uint8_t>(tc::MemManId::WRITE), 1) {}
|
||||||
|
|
||||||
ReturnValue_t buildPacket(ccsds::SequenceFlags seqFlags, uint16_t sequenceCount, uint8_t memoryId,
|
ReturnValue_t buildPacket(ccsds::SequenceFlags seqFlags, uint16_t sequenceCount, uint8_t memoryId,
|
||||||
uint32_t startAddress, uint16_t length, uint8_t* updateData) {
|
uint32_t currentAddr, uint16_t length, uint8_t* updateData) {
|
||||||
if (length > CHUNK_MAX) {
|
if (length > CHUNK_MAX) {
|
||||||
sif::error << "WriteMemory::WriteMemory: Invalid length" << std::endl;
|
sif::error << "WriteMemory::WriteMemory: Invalid length" << std::endl;
|
||||||
return SerializeIF::BUFFER_TOO_SHORT;
|
return SerializeIF::BUFFER_TOO_SHORT;
|
||||||
}
|
}
|
||||||
spParams.creator.setSeqFlags(seqFlags);
|
spParams.creator.setSeqFlags(seqFlags);
|
||||||
spParams.creator.setSeqCount(sequenceCount);
|
spParams.creator.setSeqCount(sequenceCount);
|
||||||
auto res = initPacket(memoryId, startAddress, length, updateData);
|
auto res = initPacket(memoryId, currentAddr, length, updateData);
|
||||||
if (res != returnvalue::OK) {
|
if (res != returnvalue::OK) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -1171,7 +1171,7 @@ class WriteMemory : public TcBase {
|
|||||||
static const uint16_t META_DATA_LENGTH = 8;
|
static const uint16_t META_DATA_LENGTH = 8;
|
||||||
uint8_t n = 1;
|
uint8_t n = 1;
|
||||||
|
|
||||||
ReturnValue_t initPacket(uint8_t memoryId, uint32_t startAddr, uint16_t updateDataLen,
|
ReturnValue_t initPacket(uint8_t memoryId, uint32_t currentAddr, uint16_t updateDataLen,
|
||||||
uint8_t* updateData) {
|
uint8_t* updateData) {
|
||||||
uint8_t* data = payloadStart;
|
uint8_t* data = payloadStart;
|
||||||
if (updateDataLen % 2 != 0) {
|
if (updateDataLen % 2 != 0) {
|
||||||
@ -1189,7 +1189,7 @@ class WriteMemory : public TcBase {
|
|||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter::serialize(&n, &data, &serializedSize, spParams.maxSize,
|
SerializeAdapter::serialize(&n, &data, &serializedSize, spParams.maxSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter::serialize(&startAddr, &data, &serializedSize, spParams.maxSize,
|
SerializeAdapter::serialize(¤tAddr, &data, &serializedSize, spParams.maxSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter::serialize(&updateDataLen, &data, &serializedSize, spParams.maxSize,
|
SerializeAdapter::serialize(&updateDataLen, &data, &serializedSize, spParams.maxSize,
|
||||||
SerializeIF::Endianness::BIG);
|
SerializeIF::Endianness::BIG);
|
||||||
|
Loading…
Reference in New Issue
Block a user