diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-chiptestboard.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-chiptestboard.cpp index 35313c02e..df94fa46a 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-chiptestboard.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-chiptestboard.cpp @@ -496,12 +496,8 @@ TEST_CASE("dac", "[.detectorintegration][dacs]") { auto det_type = det.getDetectorType().squash(); if (det_type == defs::CHIPTESTBOARD || det_type == defs::XILINX_CHIPTESTBOARD) { - for (int i = 0; i < 18; ++i) { - SECTION("dac " + std::to_string(i)) { - test_dac_caller(static_cast(i), "dac", 0); - } - } + // normal dacs // eiger // REQUIRE_THROWS(caller.call("dac", {"vthreshold"}, -1, GET)); // REQUIRE_THROWS(caller.call("dac", {"vsvp"}, -1, GET)); @@ -561,6 +557,27 @@ TEST_CASE("dac", "[.detectorintegration][dacs]") { REQUIRE_THROWS(caller.call("dac", {"vb_cs"}, -1, GET)); REQUIRE_THROWS(caller.call("dac", {"vb_opa_fd"}, -1, GET)); REQUIRE_THROWS(caller.call("dac", {"vcom_adc2"}, -1, GET)); + + // ctb and xilinx + for (int idac = 0; idac < 18; ++idac) { + + SECTION("dac " + std::to_string(idac)) { + test_dac_caller(static_cast(idac), 0); + test_dac_caller(static_cast(idac), 1200); + test_dac_caller(static_cast(idac), 1200, true); + test_dac_caller(static_cast(idac), -100); + + // dac name + std::string dacname_str = "dacname" + std::to_string(idac); + det.setDacName(static_cast(idac), dacname_str); + test_dacname_caller(dacname_str, -100); + } + REQUIRE_THROWS( + caller.call("dac", {std::to_string(idac), "-2"}, -1, PUT)); + // REQUIRE_THROWS( + // caller.call("dac", {std::to_string(idac), "-1"}, -1, PUT)); + // not yet implemented in v10.x.x + } } } diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp index 5c91a50fe..c31a99fd5 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp @@ -126,37 +126,30 @@ TEST_CASE("temp_fpgafr", "[.detectorintegration]") { /* dacs */ -TEST_CASE("Setting and reading back EIGER dacs", - "[.detectorintegration][dacs]") { +TEST_CASE("eiger dac", "[.detectorintegration][dacs]") { // vsvp, vtr, vrf, vrs, vsvn, vtgstv, vcmp_ll, vcmp_lr, vcal, vcmp_rl, // rxb_rb, rxb_lb, vcmp_rr, vcp, vcn, vis, vthreshold Detector det; Caller caller(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::EIGER) { - SECTION("vsvp") { test_dac_caller(defs::VSVP, "vsvp", 5); } - SECTION("vtrim") { test_dac_caller(defs::VTRIM, "vtrim", 1200); } - SECTION("vrpreamp") { - test_dac_caller(defs::VRPREAMP, "vrpreamp", 1500); - } - SECTION("vrshaper") { - test_dac_caller(defs::VRSHAPER, "vrshaper", 1510); - } - SECTION("vsvn") { test_dac_caller(defs::VSVN, "vsvn", 3800); } - SECTION("vtgstv") { test_dac_caller(defs::VTGSTV, "vtgstv", 2550); } - SECTION("vcmp_ll") { test_dac_caller(defs::VCMP_LL, "vcmp_ll", 1400); } - SECTION("vcmp_lr") { test_dac_caller(defs::VCMP_LR, "vcmp_lr", 1400); } - SECTION("vcal") { test_dac_caller(defs::VCAL, "vcal", 1400); } - SECTION("vcmp_rl") { test_dac_caller(defs::VCMP_RL, "vcmp_rl", 1400); } - SECTION("rxb_rb") { test_dac_caller(defs::RXB_RB, "rxb_rb", 1400); } - SECTION("rxb_lb") { test_dac_caller(defs::RXB_LB, "rxb_lb", 1400); } - SECTION("vcmp_rr") { test_dac_caller(defs::VCMP_RR, "vcmp_rr", 1400); } - SECTION("vcp") { test_dac_caller(defs::VCP, "vcp", 1400); } - SECTION("vcn") { test_dac_caller(defs::VCN, "vcn", 1400); } - SECTION("vishaper") { - test_dac_caller(defs::VISHAPER, "vishaper", 1400); - } - SECTION("iodelay") { test_dac_caller(defs::IO_DELAY, "iodelay", 1400); } + SECTION("vsvp") { test_dac_caller(defs::VSVP, 5); } + SECTION("vtrim") { test_dac_caller(defs::VTRIM, 1200); } + SECTION("vrpreamp") { test_dac_caller(defs::VRPREAMP, 1500); } + SECTION("vrshaper") { test_dac_caller(defs::VRSHAPER, 1510); } + SECTION("vsvn") { test_dac_caller(defs::VSVN, 3800); } + SECTION("vtgstv") { test_dac_caller(defs::VTGSTV, 2550); } + SECTION("vcmp_ll") { test_dac_caller(defs::VCMP_LL, 1400); } + SECTION("vcmp_lr") { test_dac_caller(defs::VCMP_LR, 1400); } + SECTION("vcal") { test_dac_caller(defs::VCAL, 1400); } + SECTION("vcmp_rl") { test_dac_caller(defs::VCMP_RL, 1400); } + SECTION("rxb_rb") { test_dac_caller(defs::RXB_RB, 1400); } + SECTION("rxb_lb") { test_dac_caller(defs::RXB_LB, 1400); } + SECTION("vcmp_rr") { test_dac_caller(defs::VCMP_RR, 1400); } + SECTION("vcp") { test_dac_caller(defs::VCP, 1400); } + SECTION("vcn") { test_dac_caller(defs::VCN, 1400); } + SECTION("vishaper") { test_dac_caller(defs::VISHAPER, 1400); } + SECTION("iodelay") { test_dac_caller(defs::IO_DELAY, 1400); } SECTION("vthreshold") { // Read out individual vcmp to be able to reset after // the test is done diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp index f2204d154..a942dc493 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp @@ -35,35 +35,34 @@ void test_valid_port_caller(const std::string &command, } } -void test_dac_caller(defs::dacIndex index, const std::string &dacname, - int dacvalue, bool mV) { +void test_dac(defs::dacIndex index, std::string dacname, int dacvalue, + bool mV) { Detector det; Caller caller(&det); - std::string dac = dacname; auto value = std::to_string(dacvalue); auto previous = det.getDAC(index, false); - // chip test board - if (dacname == "dac") { - dac = std::to_string(static_cast(index)); - } { std::ostringstream oss; - std::vector args = {dac, value}; + std::vector args = {dacname, value}; if (mV) args.push_back("mV"); std::cout << "args:" << ToString(args) << std::endl; caller.call("dac", args, -1, PUT, oss); - REQUIRE(oss.str() == std::string("dac ") + dac + " " + value + + REQUIRE(oss.str() == std::string("dac ") + dacname + " " + value + (mV ? " mV\n" : "\n")); } { std::ostringstream oss; - std::vector args = {dac}; + std::vector args = {dacname}; if (mV) args.push_back("mV"); caller.call("dac", args, -1, GET, oss); - REQUIRE(oss.str() == - "dac " + dac + " " + value + (mV ? " mV\n" : "\n")); + { + std::ostringstream oss_expected; + oss_expected << "dac " << dacname << " " << value + << (mV ? " mV" : "") << '\n'; + REQUIRE(oss.str() == oss_expected.str()); + } } // Reset all dacs to previous value for (int i = 0; i != det.size(); ++i) { @@ -71,6 +70,25 @@ void test_dac_caller(defs::dacIndex index, const std::string &dacname, } } +void test_dac_caller(defs::dacIndex index, int dacvalue, bool mV) { + std::string dacname = sls::ToString(index); + // ctb: use only the index for dacname + // so that cli output is not 'dac dac 0' + if (index <= defs::DAC_17) { + dacname = std::to_string(static_cast(index)); + } + test_dac(index, dacname, dacvalue, mV); +} + +void test_dacname_caller(std::string dacname, int dacvalue, bool mV) { + Detector det; + auto detType = det.getDetectorType().squash(defs::GENERIC); + REQUIRE((detType == defs::CHIPTESTBOARD || + detType == defs::XILINX_CHIPTESTBOARD)); + auto index = det.getDacIndex(dacname); + test_dac(index, dacname, dacvalue, mV); +} + void test_onchip_dac_caller(defs::dacIndex index, const std::string &dacname, int dacvalue) { Detector det; diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-global.h b/slsDetectorSoftware/tests/Caller/test-Caller-global.h index d6158c14d..c760d20c9 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-global.h +++ b/slsDetectorSoftware/tests/Caller/test-Caller-global.h @@ -21,8 +21,12 @@ void test_valid_port_caller(const std::string &command, const std::vector &arguments, int detector_id, int action); -void test_dac_caller(slsDetectorDefs::dacIndex index, - const std::string &dacname, int dacvalue, bool mV = false); +void test_dac(defs::dacIndex index, std::string dacname, int dacvalue, + bool mV = false); +void test_dac_caller(slsDetectorDefs::dacIndex index, int dacvalue, + bool mV = false); +void test_dacname_caller(std::string dacname, int dacvalue, bool mV = false); + void test_onchip_dac_caller(slsDetectorDefs::dacIndex index, const std::string &dacname, int dacvalue); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp index f70332e40..8271ef449 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp @@ -106,8 +106,7 @@ TEST_CASE("timegotthard2", "[.detectorintegration]") { } /* dacs */ -TEST_CASE("Setting and reading back GOTTHARD2 dacs", - "[.detectorintegration][dacs]") { +TEST_CASE("gotthard2 dac", "[.detectorintegration][dacs]") { // 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, @@ -117,46 +116,20 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", Caller caller(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::GOTTHARD2) { - SECTION("vref_h_adc") { - test_dac_caller(defs::VREF_H_ADC, "vref_h_adc", 2099); - } - SECTION("vb_comp_fe") { - test_dac_caller(defs::VB_COMP_FE, "vb_comp_fe", 0); - } - SECTION("vb_comp_adc") { - test_dac_caller(defs::VB_COMP_ADC, "vb_comp_adc", 0); - } - SECTION("vcom_cds") { - test_dac_caller(defs::VCOM_CDS, "vcom_cds", 1400); - } - SECTION("vref_rstore") { - test_dac_caller(defs::VREF_RSTORE, "vref_rstore", 640); - } - SECTION("vb_opa_1st") { - test_dac_caller(defs::VB_OPA_1ST, "vb_opa_1st", 0); - } - SECTION("vref_comp_fe") { - test_dac_caller(defs::VREF_COMP_FE, "vref_comp_fe", 0); - } - SECTION("vcom_adc1") { - test_dac_caller(defs::VCOM_ADC1, "vcom_adc1", 1400); - } - SECTION("vref_prech") { - test_dac_caller(defs::VREF_PRECH, "vref_prech", 1720); - } - SECTION("vref_l_adc") { - test_dac_caller(defs::VREF_L_ADC, "vref_l_adc", 700); - } - SECTION("vref_cds") { - test_dac_caller(defs::VREF_CDS, "vref_cds", 1200); - } - SECTION("vb_cs") { test_dac_caller(defs::VB_CS, "vb_cs", 2799); } - SECTION("vb_opa_fd") { - test_dac_caller(defs::VB_OPA_FD, "vb_opa_fd", 0); - } - SECTION("vcom_adc2") { - test_dac_caller(defs::VCOM_ADC2, "vcom_adc2", 1400); - } + SECTION("vref_h_adc") { test_dac_caller(defs::VREF_H_ADC, 2099); } + SECTION("vb_comp_fe") { test_dac_caller(defs::VB_COMP_FE, 0); } + SECTION("vb_comp_adc") { test_dac_caller(defs::VB_COMP_ADC, 0); } + SECTION("vcom_cds") { test_dac_caller(defs::VCOM_CDS, 1400); } + SECTION("vref_rstore") { test_dac_caller(defs::VREF_RSTORE, 640); } + SECTION("vb_opa_1st") { test_dac_caller(defs::VB_OPA_1ST, 0); } + SECTION("vref_comp_fe") { test_dac_caller(defs::VREF_COMP_FE, 0); } + SECTION("vcom_adc1") { test_dac_caller(defs::VCOM_ADC1, 1400); } + SECTION("vref_prech") { test_dac_caller(defs::VREF_PRECH, 1720); } + SECTION("vref_l_adc") { test_dac_caller(defs::VREF_L_ADC, 700); } + SECTION("vref_cds") { test_dac_caller(defs::VREF_CDS, 1200); } + SECTION("vb_cs") { test_dac_caller(defs::VB_CS, 2799); } + SECTION("vb_opa_fd") { test_dac_caller(defs::VB_OPA_FD, 0); } + SECTION("vcom_adc2") { test_dac_caller(defs::VCOM_ADC2, 1400); } // eiger REQUIRE_THROWS(caller.call("dac", {"vthreshold"}, -1, GET)); REQUIRE_THROWS(caller.call("dac", {"vsvp"}, -1, GET)); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp index 04db67f5f..df7a6c89d 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp @@ -17,30 +17,21 @@ using test::PUT; /* dacs */ -TEST_CASE("Setting and reading back Jungfrau dacs", - "[.detectorintegration][dacs]") { +TEST_CASE("jungfrau dac", "[.detectorintegration][dacs]") { // vb_comp, vdd_prot, vin_com, vref_prech, vb_pixbuf, vb_ds, vref_ds, // vref_comp Detector det; Caller caller(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::JUNGFRAU) { - SECTION("vb_comp") { test_dac_caller(defs::VB_COMP, "vb_comp", 1220); } - SECTION("vdd_prot") { - test_dac_caller(defs::VDD_PROT, "vdd_prot", 3000); - } - SECTION("vin_com") { test_dac_caller(defs::VIN_COM, "vin_com", 1053); } - SECTION("vref_prech") { - test_dac_caller(defs::VREF_PRECH, "vref_prech", 1450); - } - SECTION("vb_pixbuf") { - test_dac_caller(defs::VB_PIXBUF, "vb_pixbuf", 750); - } - SECTION("vb_ds") { test_dac_caller(defs::VB_DS, "vb_ds", 1000); } - SECTION("vref_ds") { test_dac_caller(defs::VREF_DS, "vref_ds", 480); } - SECTION("vref_comp") { - test_dac_caller(defs::VREF_COMP, "vref_comp", 420); - } + SECTION("vb_comp") { test_dac_caller(defs::VB_COMP, 1220); } + SECTION("vdd_prot") { test_dac_caller(defs::VDD_PROT, 3000); } + SECTION("vin_com") { test_dac_caller(defs::VIN_COM, 1053); } + SECTION("vref_prech") { test_dac_caller(defs::VREF_PRECH, 1450); } + SECTION("vb_pixbuf") { test_dac_caller(defs::VB_PIXBUF, 750); } + SECTION("vb_ds") { test_dac_caller(defs::VB_DS, 1000); } + SECTION("vref_ds") { test_dac_caller(defs::VREF_DS, 480); } + SECTION("vref_comp") { test_dac_caller(defs::VREF_COMP, 420); } // eiger REQUIRE_THROWS(caller.call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(caller.call("vsvp", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp index 4a4a93e3f..ac8bd0bbc 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp @@ -17,30 +17,21 @@ using test::PUT; /* dacs */ -TEST_CASE("Setting and reading back moench dacs", - "[.detectorintegration][dacs]") { +TEST_CASE("moench dac", "[.detectorintegration][dacs]") { // vbp_colbuf, vipre, vin_cm, vb_sda, vcasc_sfp, vout_cm, vipre_cds, // ibias_sfp Detector det; Caller caller(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::MOENCH) { - SECTION("vbp_colbuf") { - test_dac_caller(defs::VBP_COLBUF, "vbp_colbuf", 1300); - } - SECTION("vipre") { test_dac_caller(defs::VIPRE, "vipre", 1000); } - SECTION("vin_cm") { test_dac_caller(defs::VIN_CM, "vin_cm", 1400); } - SECTION("vb_sda") { test_dac_caller(defs::VB_SDA, "vb_sda", 680); } - SECTION("vcasc_sfp") { - test_dac_caller(defs::VCASC_SFP, "vcasc_sfp", 1428); - } - SECTION("vout_cm") { test_dac_caller(defs::VOUT_CM, "vout_cm", 1200); } - SECTION("vipre_cds") { - test_dac_caller(defs::VIPRE_CDS, "vipre_cds", 800); - } - SECTION("ibias_sfp") { - test_dac_caller(defs::IBIAS_SFP, "ibias_sfp", 900); - } + SECTION("vbp_colbuf") { test_dac_caller(defs::VBP_COLBUF, 1300); } + SECTION("vipre") { test_dac_caller(defs::VIPRE, 1000); } + SECTION("vin_cm") { test_dac_caller(defs::VIN_CM, 1400); } + SECTION("vb_sda") { test_dac_caller(defs::VB_SDA, 680); } + SECTION("vcasc_sfp") { test_dac_caller(defs::VCASC_SFP, 1428); } + SECTION("vout_cm") { test_dac_caller(defs::VOUT_CM, 1200); } + SECTION("vipre_cds") { test_dac_caller(defs::VIPRE_CDS, 800); } + SECTION("ibias_sfp") { test_dac_caller(defs::IBIAS_SFP, 900); } // eiger REQUIRE_THROWS(caller.call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(caller.call("vsvp", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp index 35345699f..3cd6e8432 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp @@ -19,8 +19,7 @@ using test::PUT; /* dacs */ -TEST_CASE("Setting and reading back MYTHEN3 dacs", - "[.detectorintegration][dacs]") { +TEST_CASE("mythen3 dac", "[.detectorintegration][dacs]") { // vcassh, vth2, vshaper, vshaperneg, vipre_out, vth3, vth1, // vicin, vcas, vpreamp, vpl, vipre, viinsh, vph, vtrim, vdcsh, @@ -28,32 +27,22 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs", Caller caller(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::MYTHEN3) { - SECTION("vcassh") { test_dac_caller(defs::VCASSH, "vcassh", 1200); } - SECTION("vth2") { test_dac_caller(defs::VTH2, "vth2", 2800); } - SECTION("vrshaper") { - test_dac_caller(defs::VRSHAPER, "vrshaper", 1280); - } - SECTION("vrshaper_n") { - test_dac_caller(defs::VRSHAPER_N, "vrshaper_n", 2800); - } - SECTION("vipre_out") { - test_dac_caller(defs::VIPRE_OUT, "vipre_out", 1220); - } - SECTION("vth3") { test_dac_caller(defs::VTH3, "vth3", 2800); } - SECTION("vth1") { test_dac_caller(defs::VTH1, "vth1", 2880); } - SECTION("vicin") { test_dac_caller(defs::VICIN, "vicin", 1708); } - SECTION("vcas") { test_dac_caller(defs::VCAS, "vcas", 1800); } - SECTION("vrpreamp") { - test_dac_caller(defs::VRPREAMP, "vrpreamp", 1100); - } - SECTION("vcal_n") { test_dac_caller(defs::VCAL_N, "vcal_n", 1100); } - SECTION("vipre") { test_dac_caller(defs::VIPRE, "vipre", 2624); } - SECTION("vishaper") { - test_dac_caller(defs::VISHAPER, "vishaper", 1708); - } - SECTION("vcal_p") { test_dac_caller(defs::VCAL_P, "vcal_p", 1712); } - SECTION("vtrim") { test_dac_caller(defs::VTRIM, "vtrim", 2800); } - SECTION("vdcsh") { test_dac_caller(defs::VDCSH, "vdcsh", 800); } + SECTION("vcassh") { test_dac_caller(defs::VCASSH, 1200); } + SECTION("vth2") { test_dac_caller(defs::VTH2, 2800); } + SECTION("vrshaper") { test_dac_caller(defs::VRSHAPER, 1280); } + SECTION("vrshaper_n") { test_dac_caller(defs::VRSHAPER_N, 2800); } + SECTION("vipre_out") { test_dac_caller(defs::VIPRE_OUT, 1220); } + SECTION("vth3") { test_dac_caller(defs::VTH3, 2800); } + SECTION("vth1") { test_dac_caller(defs::VTH1, 2880); } + SECTION("vicin") { test_dac_caller(defs::VICIN, 1708); } + SECTION("vcas") { test_dac_caller(defs::VCAS, 1800); } + SECTION("vrpreamp") { test_dac_caller(defs::VRPREAMP, 1100); } + SECTION("vcal_n") { test_dac_caller(defs::VCAL_N, 1100); } + SECTION("vipre") { test_dac_caller(defs::VIPRE, 2624); } + SECTION("vishaper") { test_dac_caller(defs::VISHAPER, 1708); } + SECTION("vcal_p") { test_dac_caller(defs::VCAL_P, 1712); } + SECTION("vtrim") { test_dac_caller(defs::VTRIM, 2800); } + SECTION("vdcsh") { test_dac_caller(defs::VDCSH, 800); } SECTION("vthreshold") { // Read out individual vcmp to be able to reset after // the test is done