diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index e337c87b7..903a40fde 100755 Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer differ diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h index 3d7cbb1c7..864620fb4 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h @@ -33,7 +33,7 @@ /** Other Definitions */ #define BIT16_MASK (0xFFFF) -#define DAC_NAMES "cassh", "vth2", "vshaper", "vshaperneg", "vipreout", "vth3", "vth1", "vicin", "cas", "vpreamp", "vph", "vipre", "viinsh", "vpl", "vtrim", "vdcsh" +#define DAC_NAMES "vcassh", "vth2", "vshaper", "vshaperneg", "vipreout", "vth3", "vth1", "vicin", "vcas", "vpreamp", "vph", "vipre", "viinsh", "vpl", "vtrim", "vdcsh" /* Enums */ enum CLKINDEX {RUN_CLK, TICK_CLK, SAMPLING_CLK, NUM_CLOCKS}; enum DACINDEX {M_CASSH, M_VTH2, M_VRFSH, M_VRFSHNPOL, M_VIPRE_OUT, M_VTH3, M_VTH1, M_VICIN, M_CAS, M_VRF, M_VPH, M_VIPRE, M_VIINSH, M_VPL, M_VTRIM, M_VDCSH}; diff --git a/slsDetectorSoftware/include/CmdProxy.h b/slsDetectorSoftware/include/CmdProxy.h index d385e9fbe..238f7b2c8 100644 --- a/slsDetectorSoftware/include/CmdProxy.h +++ b/slsDetectorSoftware/include/CmdProxy.h @@ -595,8 +595,8 @@ class CmdProxy { {"vref_comp", &CmdProxy::vref_comp}, {"ib_test_c", &CmdProxy::ib_test_c}, {"vpreamp", &CmdProxy::vpreamp}, - {"vshaper1", &CmdProxy::vshaper1}, - {"vshaper2", &CmdProxy::vshaper2}, + {"vshaper", &CmdProxy::vshaper}, + {"vshaperneg", &CmdProxy::vshaperneg}, {"vipre", &CmdProxy::vipre}, {"viinsh", &CmdProxy::viinsh}, {"vdcsh", &CmdProxy::vdcsh}, @@ -606,8 +606,8 @@ class CmdProxy { {"vpl", &CmdProxy::vpl}, {"vph", &CmdProxy::vph}, {"vtrim", &CmdProxy::vtrim}, - {"cassh", &CmdProxy::cassh}, - {"cas", &CmdProxy::cas}, + {"vcassh", &CmdProxy::vcassh}, + {"vcas", &CmdProxy::vcas}, {"vicin", &CmdProxy::vicin}, {"vipre_out", &CmdProxy::vipre_out}, {"vref_h_adc", &CmdProxy::vref_h_adc}, @@ -632,6 +632,8 @@ class CmdProxy { {"vdd_prot", &CmdProxy::vdd_prot}, {"dac", &CmdProxy::Dac}, + {"daclist", &CmdProxy::DacList}, + {"dacvalues", &CmdProxy::DacValues}, /* acquisition */ @@ -862,6 +864,9 @@ class CmdProxy { std::string ClockDivider(int action); /* dacs */ std::string Dac(int action); + std::string DacList(int action); + std::string DacValues(int action); + std::vector DacCommands(); /* acquisition */ /* Network Configuration (Detector<->Receiver) */ /* Receiver Config */ @@ -1083,10 +1088,10 @@ class CmdProxy { DAC_COMMAND(vpreamp, getDAC, setDAC, defs::PREAMP, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage to define the preamplifier feedback resistance."); - DAC_COMMAND(vshaper1, getDAC, setDAC, defs::SHAPER1, + DAC_COMMAND(vshaper, getDAC, setDAC, defs::SHAPER1, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage to define feedback resistance of the first shaper"); - DAC_COMMAND(vshaper2, getDAC, setDAC, defs::SHAPER2, + DAC_COMMAND(vshaperneg, getDAC, setDAC, defs::SHAPER2, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage to define feedback resistance of the second shaper."); DAC_COMMAND(vipre, getDAC, setDAC, defs::VIPRE, @@ -1116,10 +1121,10 @@ class CmdProxy { DAC_COMMAND(vtrim, getDAC, setDAC, defs::TRIMBIT_SIZE, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the voltage defining the trim bit size."); - DAC_COMMAND(cassh, getDAC, setDAC, defs::CASSH, + DAC_COMMAND(vcassh, getDAC, setDAC, defs::CASSH, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the shaper's cascode voltage."); - DAC_COMMAND(cas, getDAC, setDAC, defs::CAS, + DAC_COMMAND(vcas, getDAC, setDAC, defs::CAS, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the preamplifier's cascode voltage."); DAC_COMMAND(vicin, getDAC, setDAC, defs::VICIN, diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index df8dc04b1..b544601a0 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -540,6 +540,71 @@ std::string CmdProxy::Dac(int action) { return os.str(); } +std::string CmdProxy::DacList(int action) { + std::ostringstream os; + os << cmd << ' '; + if (action == defs::HELP_ACTION) { + os << "\n\tGets the list of commands for every dac for this detector." << '\n'; + } else if (action == defs::GET_ACTION) { + os << sls::ToString(DacCommands()) << '\n'; + } else if (action == defs::PUT_ACTION) { + throw sls::RuntimeError("Cannot put"); + } else { + throw sls::RuntimeError("Unknown action"); + } + return os.str(); +} + +std::string CmdProxy::DacValues(int action) { + std::ostringstream os; + os << cmd << ' '; + if (action == defs::HELP_ACTION) { + os << "\n\tGets the list of commands for every dac for this detector." << '\n'; + } else if (action == defs::GET_ACTION) { + std::vector names = DacCommands(); + std::vector res(names.size()); + std::vector args; + for (size_t i = 0; i < names.size(); ++i) { + // for multiple values for each command (to use ToString on vector) + std::ostringstream each; + Call(names[i], args, det_id, action, each); + res[i] = each.str(); + res[i].pop_back(); //remove last \n character + } + os << sls::ToString(res) << '\n'; + } else if (action == defs::PUT_ACTION) { + throw sls::RuntimeError("Cannot put"); + } else { + throw sls::RuntimeError("Unknown action"); + } + return os.str(); +} + +std::vector CmdProxy::DacCommands() { + switch (det->getDetectorType().squash(defs::GENERIC)) { + case defs::EIGER: + return std::vector {"vsvp", "vtr", "vrf", "vrs", "vsvn", "vtgstv", "vcmp_ll", "vcmp_lr", "vcal", "vcmp_rl", "rxb_rb", "rxb_lb", "vcmp_rr", "vcp", "vcn", "vis", "vthreshold"}; + break; + case defs::JUNGFRAU: + return std::vector {"vb_comp", "vdd_prot", "vin_com", "vref_prech", "vb_pixbuf", "vb_ds", "vref_ds", "vref_comp"}; + break; + case defs::GOTTHARD: + return std::vector {"vref_ds", "vcascn_pb", "vcascp_pb", "vout_cm", "vcasc_out", "vin_cm", "vref_comp", "ib_test_c"}; + break; + case defs::GOTTHARD2: + return std::vector {"vref_h_adc", "vb_comp_fe", "vb_comp_adc", "vcom_cds", "vref_restore", "vb_opa_1st", "vref_comp_fe", "vcom_adc1", "vref_prech", "vref_l_adc", "vref_cds", "vb_cs", "vb_opa_fd", "vcom_adc2"}; + break; + case defs::MYTHEN3: + return std::vector {"vcassh", "vth2", "vshaper", "vshaperneg", "vipre_out", "vth3", "vth1", "vicin", "vcas", "vpreamp", "vph", "vipre", "viinsh", "vpl", "vtrim", "vdcsh"}; + break; + case defs::CHIPTESTBOARD: + return std::vector {"dac 0", "dac 1", "dac 2", "dac 3", "dac 4", "dac 5", "dac 6", "dac 7", "dac 8", "dac 9", "dac 10", "dac 11", "dac 12", "dac 13", "dac 14", "dac 15", "dac 16", "dac 17"}; + break; + default: + throw sls::RuntimeError("Unknown detector type."); + } +} + /* acquisition */ /* Network Configuration (Detector<->Receiver) */ /* Receiver Config */ diff --git a/slsDetectorSoftware/tests/test-multiSlsDetectorClient.cpp b/slsDetectorSoftware/tests/test-multiSlsDetectorClient.cpp index 6fc21ae32..1fa8ee4e2 100644 --- a/slsDetectorSoftware/tests/test-multiSlsDetectorClient.cpp +++ b/slsDetectorSoftware/tests/test-multiSlsDetectorClient.cpp @@ -262,8 +262,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vref_comp", GET)); REQUIRE_THROWS(multiSlsDetectorClient("ib_test_c", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vpreamp", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper1", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper2", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaper", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaperneg", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre", GET)); REQUIRE_THROWS(multiSlsDetectorClient("viinsh", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vdcsh", GET)); @@ -273,8 +273,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vpl", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vph", GET)); //REQUIRE_THROWS(multiSlsDetectorClient("vtrim", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cassh", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cas", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcassh", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcas", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vicin", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre_out", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vref_h_adc", GET)); @@ -430,8 +430,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vin_cm", GET)); REQUIRE_THROWS(multiSlsDetectorClient("ib_test_c", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vpreamp", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper1", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper2", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaper", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaperneg", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre", GET)); REQUIRE_THROWS(multiSlsDetectorClient("viinsh", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vdcsh", GET)); @@ -441,8 +441,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vpl", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vph", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vtrim", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cassh", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cas", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcassh", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcas", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vicin", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre_out", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vref_h_adc", GET)); @@ -585,8 +585,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vis", GET)); REQUIRE_THROWS(multiSlsDetectorClient("iodelay", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vpreamp", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper1", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("vshaper2", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaper", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vshaperneg", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre", GET)); REQUIRE_THROWS(multiSlsDetectorClient("viinsh", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vdcsh", GET)); @@ -596,8 +596,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vpl", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vph", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vtrim", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cassh", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cas", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcassh", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcas", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vicin", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre_out", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vref_h_adc", GET)); @@ -665,8 +665,8 @@ TEST_CASE("dacs", "[.cmd]") { // REQUIRE_THROWS(multiSlsDetectorClient("vref_comp", GET)); // REQUIRE_THROWS(multiSlsDetectorClient("ib_test_c", GET)); //REQUIRE_THROWS(multiSlsDetectorClient("vpreamp", GET)); - //REQUIRE_THROWS(multiSlsDetectorClient("vshaper1", GET)); - //REQUIRE_THROWS(multiSlsDetectorClient("vshaper2", GET)); + //REQUIRE_THROWS(multiSlsDetectorClient("vshaper", GET)); + //REQUIRE_THROWS(multiSlsDetectorClient("vshaperneg", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre", GET)); REQUIRE_THROWS(multiSlsDetectorClient("viinsh", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vdcsh", GET)); @@ -676,8 +676,8 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_THROWS(multiSlsDetectorClient("vpl", GET)); //REQUIRE_THROWS(multiSlsDetectorClient("vph", GET)); //REQUIRE_THROWS(multiSlsDetectorClient("vtrim", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cassh", GET)); - REQUIRE_THROWS(multiSlsDetectorClient("cas", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcassh", GET)); + REQUIRE_THROWS(multiSlsDetectorClient("vcas", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vicin", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vipre_out", GET)); REQUIRE_THROWS(multiSlsDetectorClient("vref_h_adc", GET)); @@ -730,30 +730,30 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_NOTHROW(multiSlsDetectorClient("vpreamp " + std::to_string(prev_val), PUT)); { std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper1", GET, nullptr, oss)); - std::string s = (oss.str()).erase (0, strlen("vshaper1 ")); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper", GET, nullptr, oss)); + std::string s = (oss.str()).erase (0, strlen("vshaper ")); prev_val = std::stoi(s); } { - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper1 1000", PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper 1000", PUT)); std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper1", GET, nullptr, oss)); - REQUIRE(oss.str() == "vshaper1 1000\n"); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper", GET, nullptr, oss)); + REQUIRE(oss.str() == "vshaper 1000\n"); } - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper1 " + std::to_string(prev_val), PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper " + std::to_string(prev_val), PUT)); { std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper2", GET, nullptr, oss)); - std::string s = (oss.str()).erase (0, strlen("vshaper2 ")); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaperneg", GET, nullptr, oss)); + std::string s = (oss.str()).erase (0, strlen("vshaperneg ")); prev_val = std::stoi(s); } { - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper2 1000", PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaperneg 1000", PUT)); std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper2", GET, nullptr, oss)); - REQUIRE(oss.str() == "vshaper2 1000\n"); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaperneg", GET, nullptr, oss)); + REQUIRE(oss.str() == "vshaperneg 1000\n"); } - REQUIRE_NOTHROW(multiSlsDetectorClient("vshaper2 " + std::to_string(prev_val), PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vshaperneg " + std::to_string(prev_val), PUT)); { std::ostringstream oss; REQUIRE_NOTHROW(multiSlsDetectorClient("vipre", GET, nullptr, oss)); @@ -873,30 +873,30 @@ TEST_CASE("dacs", "[.cmd]") { REQUIRE_NOTHROW(multiSlsDetectorClient("vtrim " + std::to_string(prev_val), PUT)); { std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("cassh", GET, nullptr, oss)); - std::string s = (oss.str()).erase (0, strlen("cassh ")); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcassh", GET, nullptr, oss)); + std::string s = (oss.str()).erase (0, strlen("vcassh ")); prev_val = std::stoi(s); } { - REQUIRE_NOTHROW(multiSlsDetectorClient("cassh 1000", PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcassh 1000", PUT)); std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("cassh", GET, nullptr, oss)); - REQUIRE(oss.str() == "cassh 1000\n"); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcassh", GET, nullptr, oss)); + REQUIRE(oss.str() == "vcassh 1000\n"); } - REQUIRE_NOTHROW(multiSlsDetectorClient("cassh " + std::to_string(prev_val), PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcassh " + std::to_string(prev_val), PUT)); { std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("cas", GET, nullptr, oss)); - std::string s = (oss.str()).erase (0, strlen("cas ")); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcas", GET, nullptr, oss)); + std::string s = (oss.str()).erase (0, strlen("vcas ")); prev_val = std::stoi(s); } { - REQUIRE_NOTHROW(multiSlsDetectorClient("cas 1000", PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcas 1000", PUT)); std::ostringstream oss; - REQUIRE_NOTHROW(multiSlsDetectorClient("cas", GET, nullptr, oss)); - REQUIRE(oss.str() == "cas 1000\n"); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcas", GET, nullptr, oss)); + REQUIRE(oss.str() == "vcas 1000\n"); } - REQUIRE_NOTHROW(multiSlsDetectorClient("cas " + std::to_string(prev_val), PUT)); + REQUIRE_NOTHROW(multiSlsDetectorClient("vcas " + std::to_string(prev_val), PUT)); { std::ostringstream oss; REQUIRE_NOTHROW(multiSlsDetectorClient("vicin", GET, nullptr, oss)); diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index 0fbe80dcd..b3d283e72 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -8,5 +8,5 @@ #define APICTB 0x191029 #define APIGOTTHARD 0x191029 #define APIGOTTHARD2 0x191029 -#define APIMYTHEN3 0x191029 #define APIEIGER 0x191029 +#define APIMYTHEN3 0x191030