Merge remote-tracking branch 'origin/main-v6' into complete-fw-tests
All checks were successful
EIVE/eive-obsw/pipeline/pr-main-v6 This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/pr-main-v6 This commit looks good
This commit is contained in:
commit
8137c9ea25
15
CHANGELOG.md
15
CHANGELOG.md
@ -20,7 +20,20 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
- Important bugfixes for PTME. See `q7s-package` CHANGELOG.
|
- Important bugfixes for PTME. See `q7s-package` CHANGELOG.
|
||||||
|
|
||||||
# [v5.1.0] to be released
|
# [v5.2.0] 2023-06-29
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- The firmware information event was not triggered even when possible because of an ordering
|
||||||
|
bug in the initializer function.
|
||||||
|
- Empty dumps (no TM in time range) will now correctly be completed immediately
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- PTME was always reset on submode changes. The reset will now only be performed if the actual data
|
||||||
|
rate changes.
|
||||||
|
|
||||||
|
# [v5.1.0] 2023-06-28
|
||||||
|
|
||||||
- `eive-tmtc` version v5.1.0
|
- `eive-tmtc` version v5.1.0
|
||||||
|
|
||||||
|
@ -16,9 +16,9 @@ AxiPtmeConfig::AxiPtmeConfig(object_id_t objectId, std::string axiUio, int mapNu
|
|||||||
AxiPtmeConfig::~AxiPtmeConfig() {}
|
AxiPtmeConfig::~AxiPtmeConfig() {}
|
||||||
|
|
||||||
ReturnValue_t AxiPtmeConfig::initialize() {
|
ReturnValue_t AxiPtmeConfig::initialize() {
|
||||||
ReturnValue_t result = returnvalue::OK;
|
|
||||||
UioMapper uioMapper(axiUio, mapNum);
|
UioMapper uioMapper(axiUio, mapNum);
|
||||||
result = uioMapper.getMappedAdress(&baseAddress, UioMapper::Permissions::READ_WRITE);
|
ReturnValue_t result =
|
||||||
|
uioMapper.getMappedAdress(&baseAddress, UioMapper::Permissions::READ_WRITE);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -246,13 +246,13 @@ ReturnValue_t CcsdsIpCoreHandler::checkModeCommand(Mode_t mode, Submode_t submod
|
|||||||
void CcsdsIpCoreHandler::startTransition(Mode_t mode, Submode_t submode) {
|
void CcsdsIpCoreHandler::startTransition(Mode_t mode, Submode_t submode) {
|
||||||
triggerEvent(CHANGING_MODE, mode, submode);
|
triggerEvent(CHANGING_MODE, mode, submode);
|
||||||
if (mode == HasModesIF::MODE_ON) {
|
if (mode == HasModesIF::MODE_ON) {
|
||||||
uint32_t currenRate = ptmeConfig.getRate();
|
uint32_t currentRate = ptmeConfig.getRate();
|
||||||
// Check whether the rate actually changes.
|
// Check whether the rate actually changes.
|
||||||
if ((this->submode != submode) and
|
if ((this->submode != submode) and
|
||||||
(((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_LOW) and
|
(((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_LOW) and
|
||||||
(currenRate != RATE_100KBPS))) or
|
(currentRate != RATE_100KBPS))) or
|
||||||
((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_HIGH) and
|
((submode == static_cast<Submode_t>(com::CcsdsSubmode::DATARATE_HIGH) and
|
||||||
(currenRate != RATE_500KBPS))))) {
|
(currentRate != RATE_500KBPS))))) {
|
||||||
initPtmeUpdateAfterXCycles();
|
initPtmeUpdateAfterXCycles();
|
||||||
updateContext.enableTransmitAfterPtmeUpdate = true;
|
updateContext.enableTransmitAfterPtmeUpdate = true;
|
||||||
updateContext.updateClockRate = true;
|
updateContext.updateClockRate = true;
|
||||||
|
@ -45,13 +45,19 @@ bool TmStoreTaskBase::handleOneStore(PersistentTmStoreWithTmQueue& store,
|
|||||||
} else {
|
} else {
|
||||||
Command_t execCmd;
|
Command_t execCmd;
|
||||||
// Handle TC requests, for example deletion or retrieval requests.
|
// Handle TC requests, for example deletion or retrieval requests.
|
||||||
|
// TODO: Not really clean here.. would be better if the executed command is returns as an
|
||||||
|
// enumeration.
|
||||||
result = store.handleCommandQueue(ipcStore, execCmd);
|
result = store.handleCommandQueue(ipcStore, execCmd);
|
||||||
if (result == returnvalue::OK) {
|
if (execCmd == TmStoreMessage::DOWNLINK_STORE_CONTENT_TIME) {
|
||||||
if (execCmd == TmStoreMessage::DOWNLINK_STORE_CONTENT_TIME) {
|
if (result == PersistentTmStore::DUMP_DONE) {
|
||||||
|
dumpDoneHandler(store, dumpContext);
|
||||||
|
} else if (result == returnvalue::OK) {
|
||||||
cancelDumpCd.resetTimer();
|
cancelDumpCd.resetTimer();
|
||||||
tmSinkBusyCd.resetTimer();
|
tmSinkBusyCd.resetTimer();
|
||||||
dumpContext.reset();
|
dumpContext.reset();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (execCmd != CommandMessageIF::CMD_NONE) {
|
||||||
tcRequestReceived = true;
|
tcRequestReceived = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -119,21 +125,13 @@ ReturnValue_t TmStoreTaskBase::performDump(PersistentTmStoreWithTmQueue& store,
|
|||||||
DumpContext& dumpContext, bool& dumpPerformed) {
|
DumpContext& dumpContext, bool& dumpPerformed) {
|
||||||
size_t dumpedLen = 0;
|
size_t dumpedLen = 0;
|
||||||
|
|
||||||
auto dumpDoneHandler = [&]() {
|
|
||||||
uint32_t startTime;
|
|
||||||
uint32_t endTime;
|
|
||||||
store.getStartAndEndTimeCurrentOrLastDump(startTime, endTime);
|
|
||||||
triggerEvent(dumpContext.eventIfDone, dumpContext.numberOfDumpedPackets,
|
|
||||||
dumpContext.dumpedBytes);
|
|
||||||
dumpContext.reset();
|
|
||||||
};
|
|
||||||
// Dump the next packet into the PTME.
|
// Dump the next packet into the PTME.
|
||||||
dumpContext.ptmeBusyCounter = 0;
|
dumpContext.ptmeBusyCounter = 0;
|
||||||
tmSinkBusyCd.resetTimer();
|
tmSinkBusyCd.resetTimer();
|
||||||
ReturnValue_t result = store.getNextDumpPacket(tmReader, fileHasSwapped);
|
ReturnValue_t result = store.getNextDumpPacket(tmReader, fileHasSwapped);
|
||||||
if (fileHasSwapped and result == PersistentTmStore::DUMP_DONE) {
|
if (fileHasSwapped and result == PersistentTmStore::DUMP_DONE) {
|
||||||
// This can happen if a file is corrupted and the next file swap completes the dump.
|
// This can happen if a file is corrupted and the next file swap completes the dump.
|
||||||
dumpDoneHandler();
|
dumpDoneHandler(store, dumpContext);
|
||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
} else if (result != returnvalue::OK) {
|
} else if (result != returnvalue::OK) {
|
||||||
sif::error << "PersistentTmStore: Getting next dump packet failed" << std::endl;
|
sif::error << "PersistentTmStore: Getting next dump packet failed" << std::endl;
|
||||||
@ -157,7 +155,7 @@ ReturnValue_t TmStoreTaskBase::performDump(PersistentTmStoreWithTmQueue& store,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result == PersistentTmStore::DUMP_DONE) {
|
if (result == PersistentTmStore::DUMP_DONE) {
|
||||||
dumpDoneHandler();
|
dumpDoneHandler(store, dumpContext);
|
||||||
}
|
}
|
||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
@ -198,6 +196,14 @@ ReturnValue_t TmStoreTaskBase::connectModeTreeParent(HasModeTreeChildrenIF& pare
|
|||||||
return modetree::connectModeTreeParent(parent, *this, nullptr, modeHelper);
|
return modetree::connectModeTreeParent(parent, *this, nullptr, modeHelper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TmStoreTaskBase::dumpDoneHandler(PersistentTmStore& store, DumpContext& dumpContext) {
|
||||||
|
uint32_t startTime;
|
||||||
|
uint32_t endTime;
|
||||||
|
store.getStartAndEndTimeCurrentOrLastDump(startTime, endTime);
|
||||||
|
triggerEvent(dumpContext.eventIfDone, dumpContext.numberOfDumpedPackets, dumpContext.dumpedBytes);
|
||||||
|
dumpContext.reset();
|
||||||
|
}
|
||||||
|
|
||||||
ModeTreeChildIF& TmStoreTaskBase::getModeTreeChildIF() { return *this; }
|
ModeTreeChildIF& TmStoreTaskBase::getModeTreeChildIF() { return *this; }
|
||||||
|
|
||||||
void TmStoreTaskBase::readCommandQueue(void) {
|
void TmStoreTaskBase::readCommandQueue(void) {
|
||||||
|
@ -96,6 +96,8 @@ class TmStoreTaskBase : public SystemObject,
|
|||||||
|
|
||||||
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
||||||
uint32_t* msToReachTheMode) override;
|
uint32_t* msToReachTheMode) override;
|
||||||
|
void dumpDoneHandler(PersistentTmStore& store, DumpContext& dumpContext);
|
||||||
|
|
||||||
void announceMode(bool recursive) override;
|
void announceMode(bool recursive) override;
|
||||||
object_id_t getObjectId() const override;
|
object_id_t getObjectId() const override;
|
||||||
const HasHealthIF* getOptHealthIF() const override;
|
const HasHealthIF* getOptHealthIF() const override;
|
||||||
|
@ -128,6 +128,7 @@ ReturnValue_t PersistentTmStore::assignAndOrCreateMostRecentFile() {
|
|||||||
|
|
||||||
ReturnValue_t PersistentTmStore::handleCommandQueue(StorageManagerIF& ipcStore,
|
ReturnValue_t PersistentTmStore::handleCommandQueue(StorageManagerIF& ipcStore,
|
||||||
Command_t& execCmd) {
|
Command_t& execCmd) {
|
||||||
|
execCmd = CommandMessageIF::CMD_NONE;
|
||||||
CommandMessage cmdMessage;
|
CommandMessage cmdMessage;
|
||||||
ReturnValue_t result = tcQueue->receiveMessage(&cmdMessage);
|
ReturnValue_t result = tcQueue->receiveMessage(&cmdMessage);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
@ -162,9 +163,9 @@ ReturnValue_t PersistentTmStore::handleCommandQueue(StorageManagerIF& ipcStore,
|
|||||||
result = startDumpFromUpTo(dumpFromUnixSeconds, dumpUntilUnixSeconds);
|
result = startDumpFromUpTo(dumpFromUnixSeconds, dumpUntilUnixSeconds);
|
||||||
if (result == BUSY_DUMPING) {
|
if (result == BUSY_DUMPING) {
|
||||||
triggerEvent(persTmStore::BUSY_DUMPING_EVENT);
|
triggerEvent(persTmStore::BUSY_DUMPING_EVENT);
|
||||||
} else {
|
return result;
|
||||||
execCmd = cmd;
|
|
||||||
}
|
}
|
||||||
|
execCmd = cmd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -359,7 +360,10 @@ ReturnValue_t PersistentTmStore::loadNextDumpFile() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PersistentTmStore::getNextDumpPacket(PusTmReader& reader, bool& fileHasSwapped) {
|
ReturnValue_t PersistentTmStore::getNextDumpPacket(PusTmReader& reader, bool& fileHasSwapped) {
|
||||||
if (state == State::IDLE or dumpParams.pendingPacketDump) {
|
if (state == State::IDLE) {
|
||||||
|
return DUMP_DONE;
|
||||||
|
}
|
||||||
|
if (dumpParams.pendingPacketDump) {
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
}
|
}
|
||||||
fileHasSwapped = false;
|
fileHasSwapped = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user