OBSW Update Commands #302
@ -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
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit aae1fbddf4f5a208b3407dd11f61e33bb526268f
|
Subproject commit a2991988f56b631b5bab67e452e9d7c126b49480
|
Loading…
Reference in New Issue
Block a user