ACS system updates #441

Merged
muellerr merged 10 commits from update_fsfw_submode_mask into develop 2023-03-07 17:23:06 +01:00
5 changed files with 17 additions and 35 deletions
Showing only changes of commit f84e7e42d6 - Show all commits

View File

@ -16,14 +16,19 @@ will consitute of a breaking change warranting a new major release:
# [unreleased] # [unreleased]
## Changed
- Persistent TM stores will now create new files on each reboot.
- Fast ACS subsystem commanding: Command SUS board consecutively with other devices now
## Fixed ## Fixed
- Allow arbitrary submodes for dual lane boards to avoid FDIR reactions of subsystem components. - Allow arbitrary submodes for dual lane boards to avoid FDIR reactions of subsystem components.
Bump FSFW to allow this. Bump FSFW to allow this.
- PUS 15 was not scheduled
## Changed - 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
- Fast ACS subsystem commanding: Command SUS board consecutively with other devices now when the uplink to the flying latop was established.
# [v1.35.1] 2023-03-04 # [v1.35.1] 2023-03-04

View File

@ -77,6 +77,7 @@ void CoreController::performControlOperation() {
#if OBSW_THREAD_TRACING == 1 #if OBSW_THREAD_TRACING == 1
trace::threadTrace(opCounter, "CORE CTRL"); trace::threadTrace(opCounter, "CORE CTRL");
#endif #endif
Stopwatch watch;
EventMessage event; EventMessage event;
for (ReturnValue_t result = eventQueue->receiveMessage(&event); result == returnvalue::OK; for (ReturnValue_t result = eventQueue->receiveMessage(&event); result == returnvalue::OK;
result = eventQueue->receiveMessage(&event)) { result = eventQueue->receiveMessage(&event)) {

View File

@ -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);

View File

@ -11,8 +11,9 @@ extern ComSubsystem SUBSYSTEM;
// The syrlinks must not transmitting longer then 15 minutes otherwise the // The syrlinks must not transmitting longer then 15 minutes otherwise the
// transceiver might be damaged due to overheating // transceiver might be damaged due to overheating
// 15 minutes in milliseconds // This is the initial timeout of 2 minutes. The timeout needs to be incremented
static const uint32_t TRANSMITTER_TIMEOUT = 900000; // before each overpass
static const uint32_t TRANSMITTER_TIMEOUT = 120000;
Subsystem& init(); Subsystem& init();
} // namespace com } // namespace com

View File

@ -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);
} }