temlist and tempvalues added

This commit is contained in:
maliakal_d 2020-08-20 15:16:28 +02:00
parent 5bfbc83a04
commit ffd694eda1
6 changed files with 119 additions and 2 deletions

View File

@ -338,6 +338,9 @@ class Detector {
* Only for virtual servers */ * Only for virtual servers */
void setImageTestMode(const int value, Positions pos = {}); void setImageTestMode(const int value, Positions pos = {});
/** gets list of temperature indices for this detector */
std::vector<defs::dacIndex> getTemperatureList() const;
/** /**
* (Degrees) * (Degrees)
* [Gotthard] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA * [Gotthard] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA

View File

@ -850,6 +850,36 @@ std::string CmdProxy::ExternalSignal(int action) {
} }
/** temperature */ /** temperature */
std::string CmdProxy::TemperatureValues(int action) {
std::ostringstream os;
os << cmd << ' ';
if (action == defs::HELP_ACTION) {
os << "\n\tGets the values for every temperature for this detector."
<< '\n';
} else if (action == defs::GET_ACTION) {
if (args.size() != 0) {
WrongNumberOfParameters(0);
}
auto t = det->getTemperatureList();
os << '[';
if (t.size() > 0) {
auto it = t.cbegin();
os << ToString(*it) << ' ';
os << OutString(det->getTemperature(*it++, {det_id})) << " °C";
while (it != t.cend()) {
os << ", " << ToString(*it) << ' ';
os << OutString(det->getTemperature(*it++, {det_id})) << " °C";
}
}
os << "]\n";
} else if (action == defs::PUT_ACTION) {
throw sls::RuntimeError("Cannot put");
} else {
throw sls::RuntimeError("Unknown action");
}
return os.str();
}
/* dacs */ /* dacs */
std::string CmdProxy::Dac(int action) { std::string CmdProxy::Dac(int action) {
std::ostringstream os; std::ostringstream os;
@ -902,7 +932,7 @@ std::string CmdProxy::DacValues(int action) {
std::ostringstream os; std::ostringstream os;
os << cmd << ' '; os << cmd << ' ';
if (action == defs::HELP_ACTION) { if (action == defs::HELP_ACTION) {
os << "[(optional unit) mv] \n\tGets the list of commands for every " os << "[(optional unit) mv] \n\tGets the values for every "
"dac for this detector." "dac for this detector."
<< '\n'; << '\n';
} else if (action == defs::GET_ACTION) { } else if (action == defs::GET_ACTION) {

View File

@ -684,6 +684,8 @@ class CmdProxy {
{"extsig", &CmdProxy::ExternalSignal}, {"extsig", &CmdProxy::ExternalSignal},
/** temperature */ /** temperature */
{"templist", &CmdProxy::templist},
{"tempvalues", &CmdProxy::TemperatureValues},
{"temp_adc", &CmdProxy::temp_adc}, {"temp_adc", &CmdProxy::temp_adc},
{"temp_fpga", &CmdProxy::temp_fpga}, {"temp_fpga", &CmdProxy::temp_fpga},
{"temp_fpgaext", &CmdProxy::temp_fpgaext}, {"temp_fpgaext", &CmdProxy::temp_fpgaext},
@ -693,6 +695,7 @@ class CmdProxy {
{"temp_sodr", &CmdProxy::temp_sodr}, {"temp_sodr", &CmdProxy::temp_sodr},
{"temp_fpgafl", &CmdProxy::temp_fpgafl}, {"temp_fpgafl", &CmdProxy::temp_fpgafl},
{"temp_fpgafr", &CmdProxy::temp_fpgafr}, {"temp_fpgafr", &CmdProxy::temp_fpgafr},
{"temp_slowadc", &CmdProxy::temp_slowadc},
/* dacs */ /* dacs */
{"vthreshold", &CmdProxy::vthreshold}, {"vthreshold", &CmdProxy::vthreshold},
@ -1031,6 +1034,7 @@ class CmdProxy {
std::string ClockDivider(int action); std::string ClockDivider(int action);
std::string ExternalSignal(int action); std::string ExternalSignal(int action);
/** temperature */ /** temperature */
std::string TemperatureValues(int action);
/* dacs */ /* dacs */
std::string Dac(int action); std::string Dac(int action);
std::string DacValues(int action); std::string DacValues(int action);
@ -1243,6 +1247,9 @@ class CmdProxy {
"intensity incremented by 1. If 1, all pixels almost saturated."); "intensity incremented by 1. If 1, all pixels almost saturated.");
/** temperature */ /** temperature */
GET_COMMAND_NOID(
templist, getTemperatureList,
"\n\tList of temperature commands implemented for this detector.");
GET_IND_COMMAND(temp_adc, getTemperature, slsDetectorDefs::TEMPERATURE_ADC, GET_IND_COMMAND(temp_adc, getTemperature, slsDetectorDefs::TEMPERATURE_ADC,
" °C", "[n_value]\n\t[Jungfrau][Gotthard] ADC Temperature"); " °C", "[n_value]\n\t[Jungfrau][Gotthard] ADC Temperature");
@ -1279,6 +1286,10 @@ class CmdProxy {
temp_fpgafr, getTemperature, slsDetectorDefs::TEMPERATURE_FPGA3, " °C", temp_fpgafr, getTemperature, slsDetectorDefs::TEMPERATURE_FPGA3, " °C",
"[n_value]\n\t[Eiger]Temperature of the left front end board fpga"); "[n_value]\n\t[Eiger]Temperature of the left front end board fpga");
GET_IND_COMMAND(temp_slowadc, getTemperature,
slsDetectorDefs::SLOW_ADC_TEMP, " °C",
"[n_value]\n\t[Ctb]Temperature of the slow adc");
/* dacs */ /* dacs */
DAC_COMMAND(vthreshold, getDAC, setDAC, defs::VTHRESHOLD, DAC_COMMAND(vthreshold, getDAC, setDAC, defs::VTHRESHOLD,

View File

@ -445,6 +445,26 @@ void Detector::setImageTestMode(int value, Positions pos) {
pimpl->Parallel(&Module::setImageTestMode, pos, value); pimpl->Parallel(&Module::setImageTestMode, pos, value);
} }
std::vector<defs::dacIndex> Detector::getTemperatureList() const {
std::vector<defs::dacIndex> retval;
switch (getDetectorType().squash()) {
case defs::CHIPTESTBOARD:
return std::vector<defs::dacIndex>{defs::SLOW_ADC_TEMP};
case defs::JUNGFRAU:
case defs::GOTTHARD:
return std::vector<defs::dacIndex>{defs::TEMPERATURE_ADC,
defs::TEMPERATURE_FPGA};
case defs::EIGER:
return std::vector<defs::dacIndex>{
defs::TEMPERATURE_FPGA, defs::TEMPERATURE_FPGAEXT,
defs::TEMPERATURE_10GE, defs::TEMPERATURE_DCDC,
defs::TEMPERATURE_SODL, defs::TEMPERATURE_SODR,
defs::TEMPERATURE_FPGA2, defs::TEMPERATURE_FPGA3};
default:
return std::vector<defs::dacIndex>{};
}
}
Result<int> Detector::getTemperature(defs::dacIndex index, Result<int> Detector::getTemperature(defs::dacIndex index,
Positions pos) const { Positions pos) const {
switch (index) { switch (index) {

View File

@ -1047,6 +1047,20 @@ TEST_CASE("extsig", "[.cmd][.new]") {
/** temperature */ /** temperature */
TEST_CASE("templist", "[.cmd][.new]") {
Detector det;
CmdProxy proxy(&det);
REQUIRE_NOTHROW(proxy.Call("templist", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("templist", {}, -1, PUT));
}
TEST_CASE("tempvalues", "[.cmd][.new]") {
Detector det;
CmdProxy proxy(&det);
REQUIRE_NOTHROW(proxy.Call("tempvalues", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("tempvalues", {}, -1, PUT));
}
TEST_CASE("temp_adc", "[.cmd][.new]") { TEST_CASE("temp_adc", "[.cmd][.new]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);

View File

@ -515,6 +515,26 @@ std::string ToString(const defs::dacIndex s) {
return std::string("highvoltage"); return std::string("highvoltage");
case defs::IO_DELAY: case defs::IO_DELAY:
return std::string("iodelay"); return std::string("iodelay");
case defs::TEMPERATURE_ADC:
return std::string("temp_adc");
case defs::TEMPERATURE_FPGA:
return std::string("temp_fpga");
case defs::TEMPERATURE_FPGAEXT:
return std::string("temp_fpgaext");
case defs::TEMPERATURE_10GE:
return std::string("temp_10ge");
case defs::TEMPERATURE_DCDC:
return std::string("temp_dcdc");
case defs::TEMPERATURE_SODL:
return std::string("temp_sodl");
case defs::TEMPERATURE_SODR:
return std::string("temp_sodr");
case defs::TEMPERATURE_FPGA2:
return std::string("temp_fpgafl");
case defs::TEMPERATURE_FPGA3:
return std::string("temp_fpgafr");
case defs::SLOW_ADC_TEMP:
return std::string("temp_slowadc");
default: default:
return std::string("Unknown"); return std::string("Unknown");
} }
@ -874,7 +894,26 @@ template <> defs::dacIndex StringTo(const std::string &s) {
return defs::HIGH_VOLTAGE; return defs::HIGH_VOLTAGE;
if (s == "iodelay") if (s == "iodelay")
return defs::IO_DELAY; return defs::IO_DELAY;
if (s == "temp_adc")
return defs::TEMPERATURE_ADC;
if (s == "temp_fpga")
return defs::TEMPERATURE_FPGA;
if (s == "temp_fpgaext")
return defs::TEMPERATURE_FPGAEXT;
if (s == "temp_10ge")
return defs::TEMPERATURE_10GE;
if (s == "temp_dcdc")
return defs::TEMPERATURE_DCDC;
if (s == "temp_sodl")
return defs::TEMPERATURE_SODL;
if (s == "temp_sodr")
return defs::TEMPERATURE_SODR;
if (s == "temp_fpgafl")
return defs::TEMPERATURE_FPGA2;
if (s == "temp_fpgafr")
return defs::TEMPERATURE_FPGA3;
if (s == "temp_slowadc")
return defs::SLOW_ADC_TEMP;
throw sls::RuntimeError("Unknown dac Index " + s); throw sls::RuntimeError("Unknown dac Index " + s);
} }