Persistent TM store: Always create new file #440
@ -18,6 +18,11 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
|
- Persistent TM stores will now create new files on each reboot.
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- PUS 15 was not scheduled
|
||||||
- Transmitter timeout set to 2 minutes instead of 15 minutes. This will prevent to discharge the battery
|
- Transmitter timeout set to 2 minutes instead of 15 minutes. This will prevent to discharge the battery
|
||||||
in case the syrlinks starts transmitting due to detection of unintentional bitlock. This happened e.g. on ground
|
in case the syrlinks starts transmitting due to detection of unintentional bitlock. This happened e.g. on ground
|
||||||
when the uplink to the flying latop was established.
|
when the uplink to the flying latop was established.
|
||||||
|
@ -527,6 +527,10 @@ void scheduling::createPusTasks(TaskFactory& factory, TaskDeadlineMissedFunction
|
|||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
scheduling::printAddObjectError("PUS_8", objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
scheduling::printAddObjectError("PUS_8", objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
||||||
}
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_15_TM_STORAGE);
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
scheduling::printAddObjectError("PUS_15", objects::PUS_SERVICE_15_TM_STORAGE);
|
||||||
|
}
|
||||||
result = pusMedPrio->addComponent(objects::PUS_SERVICE_11_TC_SCHEDULER);
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_11_TC_SCHEDULER);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
scheduling::printAddObjectError("PUS_11", objects::PUS_SERVICE_11_TC_SCHEDULER);
|
scheduling::printAddObjectError("PUS_11", objects::PUS_SERVICE_11_TC_SCHEDULER);
|
||||||
|
@ -28,35 +28,6 @@ PersistentTmStore::PersistentTmStore(object_id_t objectId, const char* baseDir,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PersistentTmStore::assignAndOrCreateMostRecentFile() {
|
ReturnValue_t PersistentTmStore::assignAndOrCreateMostRecentFile() {
|
||||||
using namespace std::filesystem;
|
|
||||||
for (auto const& file : directory_iterator(basePath)) {
|
|
||||||
if (file.is_directory()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
auto pathStr = file.path().string();
|
|
||||||
if (pathStr.find(baseName) == std::string::npos) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
unsigned int underscorePos = pathStr.find_last_of('_');
|
|
||||||
std::string stampStr = pathStr.substr(underscorePos + 1);
|
|
||||||
struct tm time {};
|
|
||||||
if (nullptr == strptime(stampStr.c_str(), FILE_DATE_FORMAT, &time)) {
|
|
||||||
sif::error << "PersistentTmStore::assignOrCreateMostRecentFile: Error reading timestamp"
|
|
||||||
<< std::endl;
|
|
||||||
// Delete the file and re-create it.
|
|
||||||
activeFile = std::nullopt;
|
|
||||||
std::filesystem::remove(file.path());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
time_t fileEpoch = timegm(&time);
|
|
||||||
// There is still a file within the active time window, so re-use that file for new TMs to
|
|
||||||
// store.
|
|
||||||
if (fileEpoch + static_cast<time_t>(rolloverDiffSeconds) > currentTv.tv_sec) {
|
|
||||||
activeFileTv.tv_sec = fileEpoch;
|
|
||||||
activeFile = file.path();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (not activeFile.has_value()) {
|
if (not activeFile.has_value()) {
|
||||||
return createMostRecentFile(std::nullopt);
|
return createMostRecentFile(std::nullopt);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user