update mode added. need to fix why udpatemode get and set not in allowed functions

This commit is contained in:
2021-11-12 17:18:26 +01:00
parent 0ffd30e147
commit eb69d7cb69
13 changed files with 255 additions and 48 deletions

View File

@ -1063,6 +1063,7 @@ class CmdProxy {
{"updatekernel", &CmdProxy::UpdateKernel},
{"rebootcontroller", &CmdProxy::rebootcontroller},
{"update", &CmdProxy::UpdateFirmwareAndDetectorServer},
{"updatemode", &CmdProxy::updatemode},
{"reg", &CmdProxy::Register},
{"adcreg", &CmdProxy::AdcRegister},
{"setbit", &CmdProxy::BitOperations},
@ -2184,6 +2185,12 @@ class CmdProxy {
"\n\t[Jungfrau][Ctb][Moench][Gotthard][Mythen3]["
"Gotthard2] Reboot controller of detector.");
INTEGER_COMMAND_VEC_ID(
updatemode, getUpdateMode, setUpdateMode, StringTo<int>,
"[0|1]\n\tRestart the detector server in update mode or not. This is "
"useful when server-firmware compatibility is at its worst and server "
"cannot start up normally");
EXECUTE_SET_COMMAND(
firmwaretest, executeFirmwareTest,
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Firmware "

View File

@ -2195,6 +2195,15 @@ void Detector::updateFirmwareAndServer(const std::string &sname,
programFPGA(fname, pos);
}
Result<bool> Detector::getUpdateMode(Positions pos) {
return pimpl->Parallel(&Module::getUpdateMode, pos);
}
void Detector::setUpdateMode(const bool updatemode, Positions pos) {
pimpl->Parallel(&Module::setUpdateMode, pos, updatemode);
rebootController(pos);
}
Result<uint32_t> Detector::readRegister(uint32_t addr, Positions pos) const {
return pimpl->Parallel(&Module::readRegister, pos, addr);
}

View File

@ -2539,8 +2539,9 @@ void Module::updateDetectorServer(std::vector<char> buffer,
"Update Detector Server (no tftp)", serverName);
break;
default:
throw RuntimeError("Updating DetectorServer via the package is not implemented "
"for this detector");
throw RuntimeError(
"Updating DetectorServer via the package is not implemented "
"for this detector");
}
}
@ -2567,6 +2568,14 @@ void Module::rebootController() {
<< "): Controller rebooted successfully!";
}
bool Module::getUpdateMode() { return sendToDetector<int>(F_GET_UPDATE_MODE); }
void Module::setUpdateMode(const bool updatemode) {
sendToDetector(F_SET_UPDATE_MODE, static_cast<int>(updatemode), nullptr);
LOG(logINFO) << "Module " << moduleIndex << " (" << shm()->hostname
<< "): Update Mode set to " << updatemode << "!";
}
uint32_t Module::readRegister(uint32_t addr) const {
return sendToDetectorStop<uint32_t>(F_READ_REGISTER, addr);
}

View File

@ -545,6 +545,8 @@ class Module : public virtual slsDetectorDefs {
const std::string &serverName);
void updateKernel(std::vector<char> buffer);
void rebootController();
bool getUpdateMode();
void setUpdateMode(const bool updatemode);
uint32_t readRegister(uint32_t addr) const;
uint32_t writeRegister(uint32_t addr, uint32_t val);
void setBit(uint32_t addr, int n);