OBSW Update Commands #302

Merged
meierj merged 42 commits from mueller/obsw-update-cmds into develop 2022-09-29 13:24:17 +02:00
2 changed files with 40 additions and 13 deletions
Showing only changes of commit 3c746e954b - Show all commits

View File

@ -410,6 +410,7 @@ ReturnValue_t CoreController::sdStateMachine() {
<< std::endl; << std::endl;
#endif #endif
sdcMan->setActiveSdCard(sdInfo.active); sdcMan->setActiveSdCard(sdInfo.active);
currMntPrefix = sdcMan->getCurrentMountPrefix();
sdFsmState = SdStates::DETERMINE_OTHER; sdFsmState = SdStates::DETERMINE_OTHER;
} else if (sdInfo.activeState == sd::SdState::OFF) { } else if (sdInfo.activeState == sd::SdState::OFF) {
sdCardSetup(sdInfo.active, sd::SdState::ON, sdInfo.activeChar, false); sdCardSetup(sdInfo.active, sd::SdState::ON, sdInfo.activeChar, false);
@ -432,6 +433,7 @@ ReturnValue_t CoreController::sdStateMachine() {
} else { } else {
if (nonBlockingOpChecking(SdStates::DETERMINE_OTHER, 5, "Mounting SD card")) { if (nonBlockingOpChecking(SdStates::DETERMINE_OTHER, 5, "Mounting SD card")) {
sdcMan->setActiveSdCard(sdInfo.active); sdcMan->setActiveSdCard(sdInfo.active);
currMntPrefix = sdcMan->getCurrentMountPrefix();
sdInfo.activeState = sd::SdState::MOUNTED; sdInfo.activeState = sd::SdState::MOUNTED;
currentStateSetter(sdInfo.active, sd::SdState::MOUNTED); currentStateSetter(sdInfo.active, sd::SdState::MOUNTED);
} }
@ -1869,6 +1871,13 @@ ReturnValue_t CoreController::executeSwUpdate(SwUpdateSources sourceDir, const u
} else { } else {
sourceStr = "tmp directory"; sourceStr = "tmp directory";
} }
bool sameChipAndCopy = false;
if(chip == CURRENT_CHIP and copy == CURRENT_COPY) {
// This is problematic if the OBSW is running as a systemd service.
// Do not allow for now.
return HasActionsIF::INVALID_PARAMETERS;
//sameChipAndCopy = true;
}
sif::info << "Executing SW update for Chip " << static_cast<int>(data[0]) << " Copy " sif::info << "Executing SW update for Chip " << static_cast<int>(data[0]) << " Copy "
<< static_cast<int>(data[1]) << " from " << sourceStr << std::endl; << static_cast<int>(data[1]) << " from " << sourceStr << std::endl;
path prefixPath; path prefixPath;
@ -1901,17 +1910,35 @@ ReturnValue_t CoreController::executeSwUpdate(SwUpdateSources sourceDir, const u
} }
cmd.str(""); cmd.str("");
cmd.clear(); cmd.clear();
cmd << "xsc_mount_copy " << std::to_string(data[0]) << " " << std::to_string(data[1]); path obswDestPath;
result = system(cmd.str().c_str()); path obswVersionDestPath;
if (result != 0) { if(not sameChipAndCopy) {
std::string contextString = "CoreController::executeAction: SW Update Mounting " + cmd << "xsc_mount_copy " << std::to_string(data[0]) << " " << std::to_string(data[1]);
std::to_string(data[0]) + " " + std::to_string(data[1]); result = system(cmd.str().c_str());
utility::handleSystemError(result, contextString); if (result != 0) {
std::string contextString = "CoreController::executeAction: SW Update Mounting " +
std::to_string(data[0]) + " " + std::to_string(data[1]);
utility::handleSystemError(result, contextString);
}
cmd.str("");
cmd.clear();
path xscMountDest(getXscMountDir(chip, copy));
obswDestPath = xscMountDest / path(relative(config::OBSW_PATH, "/"));
obswVersionDestPath = xscMountDest / path(relative(config::OBSW_VERSION_FILE_PATH, "/"));
} else {
obswDestPath = path(config::OBSW_PATH);
obswVersionDestPath = path(config::OBSW_VERSION_FILE_PATH);
cmd << "writeprotect " << std::to_string(CURRENT_CHIP) << " " << std::to_string(CURRENT_COPY)
<< " 0";
result = system(cmd.str().c_str());
if (result != 0) {
std::string contextString = "CoreController::executeAction: Unlocking current chip";
utility::handleSystemError(result, contextString);
}
cmd.str("");
cmd.clear();
} }
cmd.str("");
cmd.clear();
path xscMountDest(getXscMountDir(chip, copy));
path obswDestPath = xscMountDest / path(relative(config::OBSW_PATH, "/"));
cmd << "cp " << strippedImagePath << " " << obswDestPath; cmd << "cp " << strippedImagePath << " " << obswDestPath;
result = system(cmd.str().c_str()); result = system(cmd.str().c_str());
if (result != 0) { if (result != 0) {
@ -1919,7 +1946,7 @@ ReturnValue_t CoreController::executeSwUpdate(SwUpdateSources sourceDir, const u
} }
cmd.str(""); cmd.str("");
cmd.clear(); cmd.clear();
path obswVersionDestPath = xscMountDest / path(relative(config::OBSW_VERSION_FILE_PATH, "/"));
cmd << "cp " << obswVersionFilePath << " " << obswVersionDestPath; cmd << "cp " << obswVersionFilePath << " " << obswVersionDestPath;
result = system(cmd.str().c_str()); result = system(cmd.str().c_str());
if (result != 0) { if (result != 0) {
@ -1933,7 +1960,7 @@ ReturnValue_t CoreController::executeSwUpdate(SwUpdateSources sourceDir, const u
result = system(cmd.str().c_str()); result = system(cmd.str().c_str());
if (result != 0) { if (result != 0) {
utility::handleSystemError(result, utility::handleSystemError(result,
"CoreController::executeAction: Copying SW permissions 0755"); "CoreController::executeAction: Setting SW permissions 0755");
} }
cmd.str(""); cmd.str("");
cmd.clear(); cmd.clear();

2
tmtc

@ -1 +1 @@
Subproject commit aae1fbddf4f5a208b3407dd11f61e33bb526268f Subproject commit a2991988f56b631b5bab67e452e9d7c126b49480