#include "obsw.h" #include #include #include #include "OBSWConfig.h" #include "commonConfig.h" #include "core/scheduling.h" #include "fsfw/tasks/TaskFactory.h" #include "fsfw/version.h" #include "q7sConfig.h" #include "watchdog/definitions.h" static int OBSW_ALREADY_RUNNING = -2; #if OBSW_Q7S_EM == 0 static const char* DEV_STRING = "Xiphos Q7S FM"; #else static const char* DEV_STRING = "Xiphos Q7S EM"; #endif int obsw::obsw() { using namespace fsfw; std::cout << "-- EIVE OBSW --" << std::endl; std::cout << "-- Compiled for Linux (" << DEV_STRING << ") --" << std::endl; std::cout << "-- OBSW v" << common::OBSW_VERSION << " | FSFW v" << fsfw::FSFW_VERSION << " --" << std::endl; std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl; #if Q7S_CHECK_FOR_ALREADY_RUNNING_IMG == 1 // Check special file here. This file is created or deleted by the eive-watchdog application // or systemd service! if (std::filesystem::exists(watchdog::RUNNING_FILE_NAME)) { sif::warning << "File " << watchdog::RUNNING_FILE_NAME << " exists so the software might " "already be running. Check if obsw systemd service has been stopped." << std::endl; return OBSW_ALREADY_RUNNING; } #endif // Init delay handling. if (std::filesystem::exists("$HOME/boot_delay_secs.txt")) { std::ifstream ifile("$HOME/boot_delay_secs.txt"); std::string lineStr; unsigned int bootDelaySecs = 0; unsigned int line = 0; // Try to reas delay seconds from file. while (std::getline(ifile, lineStr)) { std::istringstream iss(lineStr); if (!(iss >> bootDelaySecs)) { break; } line++; } if (line == 0) { // If the file is empty, assume default of 6 seconds bootDelaySecs = 6; } std::cout << "Delaying OBSW start for " << bootDelaySecs << " seconds" << std::endl; TaskFactory::delayTask(bootDelaySecs); } scheduling::initMission(); for (;;) { /* Suspend main thread by sleeping it. */ TaskFactory::delayTask(5000); } return 0; }