improve backup file handling
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good

This commit is contained in:
Robin Müller 2023-02-24 18:45:04 +01:00
parent 66b4fc6294
commit 13f2f39325
No known key found for this signature in database
GPG Key ID: 11D4952C8CCEF814
2 changed files with 18 additions and 10 deletions

View File

@ -49,6 +49,8 @@ CoreController::CoreController(object_id_t objectId)
} }
getCurrentBootCopy(CURRENT_CHIP, CURRENT_COPY); getCurrentBootCopy(CURRENT_CHIP, CURRENT_COPY);
initClockFromTimeFile();
} catch (const std::filesystem::filesystem_error &e) { } catch (const std::filesystem::filesystem_error &e) {
sif::error << "CoreController::CoreController: Failed with exception " << e.what() << std::endl; sif::error << "CoreController::CoreController: Failed with exception " << e.what() << std::endl;
} }
@ -1269,10 +1271,12 @@ void CoreController::performMountedSdCardOperations() {
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
sif::warning << "CoreController::CoreController: Boot copy init" << std::endl; sif::warning << "CoreController::CoreController: Boot copy init" << std::endl;
} }
initClockFromTimeFile(); if (not timeFileInitDone) {
initClockFromTimeFile();
}
performRebootFileHandling(false); performRebootFileHandling(false);
} }
timeFileHandler(); backupTimeFileHandler();
}; };
bool someSdCardActive = false; bool someSdCardActive = false;
if (sdInfo.active == sd::SdCard::SLOT_0 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_0)) { if (sdInfo.active == sd::SdCard::SLOT_0 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_0)) {
@ -1786,7 +1790,7 @@ void CoreController::setRebootMechanismLock(bool lock, xsc::Chip tgtChip, xsc::C
rewriteRebootFile(rebootFile); rewriteRebootFile(rebootFile);
} }
ReturnValue_t CoreController::timeFileHandler() { ReturnValue_t CoreController::backupTimeFileHandler() {
// Always set time. We could only set it if it is updated by GPS, but then the backup time would // Always set time. We could only set it if it is updated by GPS, but then the backup time would
// become obsolete on GPS problems. // become obsolete on GPS problems.
if (opDivider10.check()) { if (opDivider10.check()) {
@ -1796,14 +1800,14 @@ ReturnValue_t CoreController::timeFileHandler() {
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
return result; return result;
} }
std::string fileName = currMntPrefix + TIME_FILE; std::string fileName = currMntPrefix + BACKUP_TIME_FILE;
std::ofstream timeFile(fileName); std::ofstream timeFile(fileName);
if (not timeFile.good()) { if (not timeFile.good()) {
sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno) sif::error << "CoreController::timeFileHandler: Error opening time file: " << strerror(errno)
<< std::endl; << std::endl;
return returnvalue::FAILED; return returnvalue::FAILED;
} }
timeFile << "UNIX SECONDS: " << currentTime.tv_sec << std::endl; timeFile << "UNIX SECONDS: " << currentTime.tv_sec + BOOT_OFFSET_SECONDS << std::endl;
} }
return returnvalue::OK; return returnvalue::OK;
} }
@ -1811,8 +1815,8 @@ ReturnValue_t CoreController::timeFileHandler() {
ReturnValue_t CoreController::initClockFromTimeFile() { ReturnValue_t CoreController::initClockFromTimeFile() {
using namespace GpsHyperion; using namespace GpsHyperion;
using namespace std; using namespace std;
std::string fileName = currMntPrefix + TIME_FILE; std::string fileName = currMntPrefix + BACKUP_TIME_FILE;
if (std::filesystem::exists(fileName) and if (sdcMan->isSdCardUsable(std::nullopt) and std::filesystem::exists(fileName) and
((gpsFix == FixMode::UNKNOWN or gpsFix == FixMode::NOT_SEEN) or ((gpsFix == FixMode::UNKNOWN or gpsFix == FixMode::NOT_SEEN) or
not utility::timeSanityCheck())) { not utility::timeSanityCheck())) {
ifstream timeFile(fileName); ifstream timeFile(fileName);
@ -1840,6 +1844,7 @@ ReturnValue_t CoreController::initClockFromTimeFile() {
sif::info << "Setting system time from time files: " << std::put_time(time, "%c %Z") sif::info << "Setting system time from time files: " << std::put_time(time, "%c %Z")
<< std::endl; << std::endl;
#endif #endif
timeFileInitDone = true;
return Clock::setClock(&currentTime); return Clock::setClock(&currentTime);
} }
return returnvalue::OK; return returnvalue::OK;

View File

@ -58,13 +58,14 @@ class CoreController : public ExtendedControllerBase {
static constexpr char VERSION_FILE_NAME[] = "version.txt"; static constexpr char VERSION_FILE_NAME[] = "version.txt";
static constexpr char REBOOT_FILE_NAME[] = "reboot.txt"; static constexpr char REBOOT_FILE_NAME[] = "reboot.txt";
static constexpr char TIME_FILE_NAME[] = "time.txt"; static constexpr char TIME_FILE_NAME[] = "time_backup.txt";
const std::string VERSION_FILE = const std::string VERSION_FILE =
"/" + std::string(CONF_FOLDER) + "/" + std::string(VERSION_FILE_NAME); "/" + std::string(CONF_FOLDER) + "/" + std::string(VERSION_FILE_NAME);
const std::string REBOOT_FILE = const std::string REBOOT_FILE =
"/" + std::string(CONF_FOLDER) + "/" + std::string(REBOOT_FILE_NAME); "/" + std::string(CONF_FOLDER) + "/" + std::string(REBOOT_FILE_NAME);
const std::string TIME_FILE = "/" + std::string(CONF_FOLDER) + "/" + std::string(TIME_FILE_NAME); const std::string BACKUP_TIME_FILE =
"/" + std::string(CONF_FOLDER) + "/" + std::string(TIME_FILE_NAME);
static constexpr char CHIP_0_COPY_0_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-nom-rootfs"; static constexpr char CHIP_0_COPY_0_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-nom-rootfs";
static constexpr char CHIP_0_COPY_1_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-gold-rootfs"; static constexpr char CHIP_0_COPY_1_MOUNT_DIR[] = "/tmp/mntupdate-xdi-qspi0-gold-rootfs";
@ -160,6 +161,7 @@ class CoreController : public ExtendedControllerBase {
bool sdInitFinished() const; bool sdInitFinished() const;
private: private:
static constexpr uint32_t BOOT_OFFSET_SECONDS = 15;
static constexpr MutexIF::TimeoutType TIMEOUT_TYPE = MutexIF::TimeoutType::WAITING; static constexpr MutexIF::TimeoutType TIMEOUT_TYPE = MutexIF::TimeoutType::WAITING;
static constexpr uint32_t MUTEX_TIMEOUT = 20; static constexpr uint32_t MUTEX_TIMEOUT = 20;
// Designated value for rechecking FIFO open // Designated value for rechecking FIFO open
@ -221,6 +223,7 @@ class CoreController : public ExtendedControllerBase {
RebootFile rebootFile = {}; RebootFile rebootFile = {};
std::string currMntPrefix; std::string currMntPrefix;
bool timeFileInitDone = false;
bool performOneShotSdCardOpsSwitch = false; bool performOneShotSdCardOpsSwitch = false;
uint8_t shortSdCardCdCounter = 0; uint8_t shortSdCardCdCounter = 0;
#if OBSW_THREAD_TRACING == 1 #if OBSW_THREAD_TRACING == 1
@ -258,7 +261,7 @@ class CoreController : public ExtendedControllerBase {
ReturnValue_t initClockFromTimeFile(); ReturnValue_t initClockFromTimeFile();
ReturnValue_t performSdCardCheck(); ReturnValue_t performSdCardCheck();
ReturnValue_t timeFileHandler(); ReturnValue_t backupTimeFileHandler();
ReturnValue_t initBootCopyFile(); ReturnValue_t initBootCopyFile();
ReturnValue_t initWatchdogFifo(); ReturnValue_t initWatchdogFifo();
ReturnValue_t initSdCardBlocking(); ReturnValue_t initSdCardBlocking();