diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 302c9f2cc..a6478c3d1 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -12,6 +12,7 @@ target_link_libraries(_slsdet PUBLIC slsDetectorShared slsReceiverShared slsSupportLib + ${ZeroMQ_LIBRARIES} ) diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index e657ea250..fc395eecb 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -639,7 +639,7 @@ class Detector(CppDetectorApi): @property def vthreshold(self): - return element_if_equal(self.getDAC(dacIndex.THRESHOLD)) + return element_if_equal(self.getDAC(dacIndex.VTHRESHOLD, False)) @property def type(self): diff --git a/python/slsdet/eiger.py b/python/slsdet/eiger.py index a451cea66..c19213cb1 100755 --- a/python/slsdet/eiger.py +++ b/python/slsdet/eiger.py @@ -60,23 +60,23 @@ class EigerDacs(DetectorDacs): """ Eiger specific dacs """ - _dacs = [('vsvp', dacIndex.SVP,0, 4000, 0), - ('vtr', dacIndex.VTR,0, 4000, 2500), - ('vrf', dacIndex.VRF,0, 4000, 3300), - ('vrs', dacIndex.VRS,0, 4000, 1400), - ('vsvn', dacIndex.SVN,0, 4000, 4000), - ('vtgstv', dacIndex.VTGSTV,0, 4000, 2556), - ('vcmp_ll', dacIndex.VCMP_LL,0, 4000, 1500), - ('vcmp_lr', dacIndex.VCMP_LR,0, 4000, 1500), - ('vcall', dacIndex.CAL,0, 4000, 4000), - ('vcmp_rl', dacIndex.VCMP_RL,0, 4000, 1500), - ('rxb_rb', dacIndex.RXB_RB,0, 4000, 1100), - ('rxb_lb', dacIndex.RXB_LB,0, 4000, 1100), - ('vcmp_rr', dacIndex.VCMP_RR,0, 4000, 1500), - ('vcp', dacIndex.VCP,0, 4000, 200), - ('vcn', dacIndex.VCN,0, 4000, 2000), - ('vis', dacIndex.VIS,0, 4000, 1550), - ('iodelay', dacIndex.IO_DELAY,0, 4000, 660)] + _dacs = [('vsvp', dacIndex.VSVP,0, 4000, 0), + ('vtrim', dacIndex.VTRIM,0, 4000, 2500), + ('vrpreamp', dacIndex.VRPREAMP,0, 4000, 3300), + ('vrshaper', dacIndex.VRSHAPER,0, 4000, 1400), + ('vsvn', dacIndex.VSVN,0, 4000, 4000), + ('vtgstv', dacIndex.VTGSTV,0, 4000, 2556), + ('vcmp_ll', dacIndex.VCMP_LL,0, 4000, 1500), + ('vcmp_lr', dacIndex.VCMP_LR,0, 4000, 1500), + ('vcal', dacIndex.VCAL,0, 4000, 4000), + ('vcmp_rl', dacIndex.VCMP_RL,0, 4000, 1500), + ('rxb_rb', dacIndex.RXB_RB,0, 4000, 1100), + ('rxb_lb', dacIndex.RXB_LB,0, 4000, 1100), + ('vcmp_rr', dacIndex.VCMP_RR,0, 4000, 1500), + ('vcp', dacIndex.VCP,0, 4000, 200), + ('vcn', dacIndex.VCN,0, 4000, 2000), + ('vishaper', dacIndex.VISHAPER,0, 4000, 1550), + ('iodelay', dacIndex.IO_DELAY,0, 4000, 660)] _dacnames = [_d[0] for _d in _dacs] # # noinspection PyProtectedMember diff --git a/python/slsdet/mythen3.py b/python/slsdet/mythen3.py index 0a6e9f173..f83862377 100644 --- a/python/slsdet/mythen3.py +++ b/python/slsdet/mythen3.py @@ -13,49 +13,32 @@ import _slsdet dacIndex = _slsdet.slsDetectorDefs.dacIndex from .detector_property import DetectorProperty -# vcassh 1200, -# vth2 2800, -# vshaper 1280, -# vshaperneg 2800, -# vipre_out 1220, -# vth3 2800, -# vth1 2800, -# vicin 1708, -# vcas 1800, -# vpreamp 1100, -# vpl 1100, -# vipre 2624, -# viinsh 1708, -# vph 1712, -# vtrim 2800, -# vdcsh 800 - # @freeze class Mythen3Dacs(DetectorDacs): """ Jungfrau specific DACs """ - _dacs = [('vcassh', dacIndex.CASSH, 0, 4000, 1220), + _dacs = [('vcassh', dacIndex.VCASSH, 0, 4000, 1220), ('vth2', dacIndex.VTH2, 0, 4000, 2800), - ('vshaper', dacIndex.SHAPER1, 0, 4000, 1280), - ('vshaperneg', dacIndex.SHAPER2, 0, 4000, 2800), + ('vrshaper', dacIndex.VRSHAPER, 0, 4000, 1280), + ('vrshaper_n', dacIndex.VRSHAPER_N, 0, 4000, 2800), ('vipre_out', dacIndex.VIPRE_OUT, 0, 4000, 1220), ('vth3', dacIndex.VTH3, 0, 4000, 2800), - ('vth1', dacIndex.THRESHOLD, 0, 4000, 2800), + ('vth1', dacIndex.VTH1, 0, 4000, 2800), ('vicin', dacIndex.VICIN, 0, 4000, 1708), - ('vcas', dacIndex.CAS, 0, 4000, 1800), - ('vpreamp', dacIndex.PREAMP, 0, 4000, 1100), - ('vpl', dacIndex.VPL, 0, 4000, 1100), + ('vcas', dacIndex.VCAS, 0, 4000, 1800), + ('vrpreamp', dacIndex.VRPREAMP, 0, 4000, 1100), + ('vcal_n', dacIndex.VCAL_N, 0, 4000, 1100), ('vipre', dacIndex.VIPRE, 0, 4000, 2624), - ('viinsh', dacIndex.VIINSH, 0, 4000, 1708), - ('vph', dacIndex.CALIBRATION_PULSE, 0, 4000, 1712), - ('vtrim', dacIndex.TRIMBIT_SIZE, 0, 4000, 2800), - ('vdcsh', dacIndex.VDCSH, 0, 4000, 800), + ('vishaper', dacIndex.VISHAPER, 0, 4000, 1708), + ('vcal_p', dacIndex.VCAL_P, 0, 4000, 1712), + ('vtrim', dacIndex.VTRIM, 0, 4000, 2800), + ('vdcsh', dacIndex.VDCSH, 0, 4000, 800), ] _dacnames = [_d[0] for _d in _dacs] - +#vthreshold?? @freeze diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 2aa49aaf2..97f555ffc 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -86,6 +86,9 @@ void init_det(py::module &m) { .def("setDetectorSize", (void (Detector::*)(const defs::xy)) & Detector::setDetectorSize, py::arg()) + .def("getSettingsList", + (std::vector(Detector::*)() const) & + Detector::getSettingsList) .def("getSettings", (Result(Detector::*)(sls::Positions) const) & @@ -107,6 +110,12 @@ void init_det(py::module &m) { (void (Detector::*)(int, sls::Positions)) & Detector::setAllTrimbits, py::arg(), py::arg() = Positions{}) + .def("getGapPixelsinCallback", + (bool (Detector::*)() const) & Detector::getGapPixelsinCallback) + .def("setGapPixelsinCallback", + (void (Detector::*)(const bool)) & + Detector::setGapPixelsinCallback, + py::arg()) .def("registerAcquisitionFinishedCallback", (void (Detector::*)(void (*)(double, int, void *), void *)) & Detector::registerAcquisitionFinishedCallback, @@ -117,12 +126,6 @@ void init_det(py::module &m) { void (*)(detectorData *, uint64_t, uint32_t, void *), void *)) & Detector::registerDataCallback, py::arg(), py::arg()) - .def("getGapPixelsinCallback", - (bool (Detector::*)() const) & Detector::getGapPixelsinCallback) - .def("setGapPixelsinCallback", - (void (Detector::*)(const bool)) & - Detector::setGapPixelsinCallback, - py::arg()) .def("getNumberOfFrames", (Result(Detector::*)(sls::Positions) const) & Detector::getNumberOfFrames, @@ -295,6 +298,8 @@ void init_det(py::module &m) { (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & Detector::getTemperature, py::arg(), py::arg() = Positions{}) + .def("getDacList", (std::vector(Detector::*)() const) & + Detector::getDacList) .def("getDAC", (Result(Detector::*)(defs::dacIndex, bool, sls::Positions) const) & @@ -563,6 +568,10 @@ void init_det(py::module &m) { (Result(Detector::*)(sls::Positions) const) & Detector::getRxLastClientIP, py::arg() = Positions{}) + .def("getRxThreadIds", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getRxThreadIds, + py::arg() = Positions{}) .def("getFileFormat", (Result(Detector::*)(sls::Positions) const) & Detector::getFileFormat, @@ -1136,7 +1145,7 @@ void init_det(py::module &m) { Detector::setExternalSamplingSource, py::arg(), py::arg() = Positions{}) .def("getExternalSampling", - (Result(Detector::*)(sls::Positions) const) & + (Result(Detector::*)(sls::Positions) const) & Detector::getExternalSampling, py::arg() = Positions{}) .def("setExternalSampling", diff --git a/python/src/enums.cpp b/python/src/enums.cpp index e6425de6e..4f112d081 100644 --- a/python/src/enums.cpp +++ b/python/src/enums.cpp @@ -88,15 +88,42 @@ void init_enums(py::module &m) { .export_values(); py::enum_(Defs, "dacIndex") - .value("THRESHOLD", slsDetectorDefs::dacIndex::THRESHOLD) - .value("CALIBRATION_PULSE", - slsDetectorDefs::dacIndex::CALIBRATION_PULSE) - .value("TRIMBIT_SIZE", slsDetectorDefs::dacIndex::TRIMBIT_SIZE) - .value("PREAMP", slsDetectorDefs::dacIndex::PREAMP) - .value("SHAPER1", slsDetectorDefs::dacIndex::SHAPER1) - .value("SHAPER2", slsDetectorDefs::dacIndex::SHAPER2) - .value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC) - .value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA) + .value("DAC_0", slsDetectorDefs::dacIndex::DAC_0) + .value("DAC_1", slsDetectorDefs::dacIndex::DAC_1) + .value("DAC_2", slsDetectorDefs::dacIndex::DAC_2) + .value("DAC_3", slsDetectorDefs::dacIndex::DAC_3) + .value("DAC_4", slsDetectorDefs::dacIndex::DAC_4) + .value("DAC_5", slsDetectorDefs::dacIndex::DAC_5) + .value("DAC_6", slsDetectorDefs::dacIndex::DAC_6) + .value("DAC_7", slsDetectorDefs::dacIndex::DAC_7) + .value("DAC_8", slsDetectorDefs::dacIndex::DAC_8) + .value("DAC_9", slsDetectorDefs::dacIndex::DAC_9) + .value("DAC_10", slsDetectorDefs::dacIndex::DAC_10) + .value("DAC_11", slsDetectorDefs::dacIndex::DAC_11) + .value("DAC_12", slsDetectorDefs::dacIndex::DAC_12) + .value("DAC_13", slsDetectorDefs::dacIndex::DAC_13) + .value("DAC_14", slsDetectorDefs::dacIndex::DAC_14) + .value("DAC_15", slsDetectorDefs::dacIndex::DAC_15) + .value("DAC_16", slsDetectorDefs::dacIndex::DAC_16) + .value("DAC_17", slsDetectorDefs::dacIndex::DAC_17) + .value("VSVP", slsDetectorDefs::dacIndex::VSVP) + .value("VTRIM", slsDetectorDefs::dacIndex::VTRIM) + .value("VRPREAMP", slsDetectorDefs::dacIndex::VRPREAMP) + .value("VRSHAPER", slsDetectorDefs::dacIndex::VRSHAPER) + .value("VSVN", slsDetectorDefs::dacIndex::VSVN) + .value("VTGSTV", slsDetectorDefs::dacIndex::VTGSTV) + .value("VCMP_LL", slsDetectorDefs::dacIndex::VCMP_LL) + .value("VCMP_LR", slsDetectorDefs::dacIndex::VCMP_LR) + .value("VCAL", slsDetectorDefs::dacIndex::VCAL) + .value("VCMP_RL", slsDetectorDefs::dacIndex::VCMP_RL) + .value("RXB_RB", slsDetectorDefs::dacIndex::RXB_RB) + .value("RXB_LB", slsDetectorDefs::dacIndex::RXB_LB) + .value("VCMP_RR", slsDetectorDefs::dacIndex::VCMP_RR) + .value("VCP", slsDetectorDefs::dacIndex::VCP) + .value("VCN", slsDetectorDefs::dacIndex::VCN) + .value("VISHAPER", slsDetectorDefs::dacIndex::VISHAPER) + .value("VTHRESHOLD", slsDetectorDefs::dacIndex::VTHRESHOLD) + .value("IO_DELAY", slsDetectorDefs::dacIndex::IO_DELAY) .value("VREF_DS", slsDetectorDefs::dacIndex::VREF_DS) .value("VCASCN_PB", slsDetectorDefs::dacIndex::VCASCN_PB) .value("VCASCP_PB", slsDetectorDefs::dacIndex::VCASCP_PB) @@ -105,25 +132,46 @@ void init_enums(py::module &m) { .value("VIN_CM", slsDetectorDefs::dacIndex::VIN_CM) .value("VREF_COMP", slsDetectorDefs::dacIndex::VREF_COMP) .value("IB_TESTC", slsDetectorDefs::dacIndex::IB_TESTC) - .value("SVP", slsDetectorDefs::dacIndex::SVP) - .value("SVN", slsDetectorDefs::dacIndex::SVN) - .value("VTR", slsDetectorDefs::dacIndex::VTR) - .value("VRF", slsDetectorDefs::dacIndex::VRF) - .value("VRS", slsDetectorDefs::dacIndex::VRS) - .value("VTGSTV", slsDetectorDefs::dacIndex::VTGSTV) - .value("VCMP_LL", slsDetectorDefs::dacIndex::VCMP_LL) - .value("VCMP_LR", slsDetectorDefs::dacIndex::VCMP_LR) - .value("CAL", slsDetectorDefs::dacIndex::CAL) - .value("VCMP_RL", slsDetectorDefs::dacIndex::VCMP_RL) - .value("VCMP_RR", slsDetectorDefs::dacIndex::VCMP_RR) - .value("RXB_RB", slsDetectorDefs::dacIndex::RXB_RB) - .value("RXB_LB", slsDetectorDefs::dacIndex::RXB_LB) - .value("VCP", slsDetectorDefs::dacIndex::VCP) - .value("VCN", slsDetectorDefs::dacIndex::VCN) - .value("VIS", slsDetectorDefs::dacIndex::VIS) - .value("IO_DELAY", slsDetectorDefs::dacIndex::IO_DELAY) + .value("VB_COMP", slsDetectorDefs::dacIndex::VB_COMP) + .value("VDD_PROT", slsDetectorDefs::dacIndex::VDD_PROT) + .value("VIN_COM", slsDetectorDefs::dacIndex::VIN_COM) + .value("VREF_PRECH", slsDetectorDefs::dacIndex::VREF_PRECH) + .value("VB_PIXBUF", slsDetectorDefs::dacIndex::VB_PIXBUF) + .value("VB_DS", slsDetectorDefs::dacIndex::VB_DS) + .value("VREF_H_ADC", slsDetectorDefs::dacIndex::VREF_H_ADC) + .value("VB_COMP_FE", slsDetectorDefs::dacIndex::VB_COMP_FE) + .value("VB_COMP_ADC", slsDetectorDefs::dacIndex::VB_COMP_ADC) + .value("VCOM_CDS", slsDetectorDefs::dacIndex::VCOM_CDS) + .value("VREF_RSTORE", slsDetectorDefs::dacIndex::VREF_RSTORE) + .value("VB_OPA_1ST", slsDetectorDefs::dacIndex::VB_OPA_1ST) + .value("VREF_COMP_FE", slsDetectorDefs::dacIndex::VREF_COMP_FE) + .value("VCOM_ADC1", slsDetectorDefs::dacIndex::VCOM_ADC1) + .value("VREF_L_ADC", slsDetectorDefs::dacIndex::VREF_L_ADC) + .value("VREF_CDS", slsDetectorDefs::dacIndex::VREF_CDS) + .value("VB_CS", slsDetectorDefs::dacIndex::VB_CS) + .value("VB_OPA_FD", slsDetectorDefs::dacIndex::VB_OPA_FD) + .value("VCOM_ADC2", slsDetectorDefs::dacIndex::VCOM_ADC2) + .value("VCASSH", slsDetectorDefs::dacIndex::VCASSH) + .value("VTH2", slsDetectorDefs::dacIndex::VTH2) + .value("VRSHAPER_N", slsDetectorDefs::dacIndex::VRSHAPER_N) + .value("VIPRE_OUT", slsDetectorDefs::dacIndex::VIPRE_OUT) + .value("VTH3", slsDetectorDefs::dacIndex::VTH3) + .value("VTH1", slsDetectorDefs::dacIndex::VTH1) + .value("VICIN", slsDetectorDefs::dacIndex::VICIN) + .value("VCAS", slsDetectorDefs::dacIndex::VCAS) + .value("VCAL_N", slsDetectorDefs::dacIndex::VCAL_N) + .value("VIPRE", slsDetectorDefs::dacIndex::VIPRE) + .value("VCAL_P", slsDetectorDefs::dacIndex::VCAL_P) + .value("VDCSH", slsDetectorDefs::dacIndex::VDCSH) + .value("VBP_COLBUF", slsDetectorDefs::dacIndex::VBP_COLBUF) + .value("VB_SDA", slsDetectorDefs::dacIndex::VB_SDA) + .value("VCASC_SFP", slsDetectorDefs::dacIndex::VCASC_SFP) + .value("VIPRE_CDS", slsDetectorDefs::dacIndex::VIPRE_CDS) + .value("IBIAS_SFP", slsDetectorDefs::dacIndex::IBIAS_SFP) .value("ADC_VPP", slsDetectorDefs::dacIndex::ADC_VPP) .value("HIGH_VOLTAGE", slsDetectorDefs::dacIndex::HIGH_VOLTAGE) + .value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC) + .value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA) .value("TEMPERATURE_FPGAEXT", slsDetectorDefs::dacIndex::TEMPERATURE_FPGAEXT) .value("TEMPERATURE_10GE", slsDetectorDefs::dacIndex::TEMPERATURE_10GE) @@ -134,40 +182,6 @@ void init_enums(py::module &m) { slsDetectorDefs::dacIndex::TEMPERATURE_FPGA2) .value("TEMPERATURE_FPGA3", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA3) - .value("VIPRE", slsDetectorDefs::dacIndex::VIPRE) - .value("VIINSH", slsDetectorDefs::dacIndex::VIINSH) - .value("VDCSH", slsDetectorDefs::dacIndex::VDCSH) - .value("VTH2", slsDetectorDefs::dacIndex::VTH2) - .value("VPL", slsDetectorDefs::dacIndex::VPL) - .value("VTH3", slsDetectorDefs::dacIndex::VTH3) - .value("CASSH", slsDetectorDefs::dacIndex::CASSH) - .value("CAS", slsDetectorDefs::dacIndex::CAS) - .value("VICIN", slsDetectorDefs::dacIndex::VICIN) - .value("VIPRE_OUT", slsDetectorDefs::dacIndex::VIPRE_OUT) - .value("VREF_H_ADC", slsDetectorDefs::dacIndex::VREF_H_ADC) - .value("VB_COMP_FE", slsDetectorDefs::dacIndex::VB_COMP_FE) - .value("VB_COMP_ADC", slsDetectorDefs::dacIndex::VB_COMP_ADC) - .value("VCOM_CDS", slsDetectorDefs::dacIndex::VCOM_CDS) - .value("VREF_RSTORE", slsDetectorDefs::dacIndex::VREF_RSTORE) - .value("VB_OPA_1ST", slsDetectorDefs::dacIndex::VB_OPA_1ST) - .value("VREF_COMP_FE", slsDetectorDefs::dacIndex::VREF_COMP_FE) - .value("VCOM_ADC1", slsDetectorDefs::dacIndex::VCOM_ADC1) - .value("VREF_PRECH", slsDetectorDefs::dacIndex::VREF_PRECH) - .value("VREF_L_ADC", slsDetectorDefs::dacIndex::VREF_L_ADC) - .value("VREF_CDS", slsDetectorDefs::dacIndex::VREF_CDS) - .value("VB_CS", slsDetectorDefs::dacIndex::VB_CS) - .value("VB_OPA_FD", slsDetectorDefs::dacIndex::VB_OPA_FD) - .value("VCOM_ADC2", slsDetectorDefs::dacIndex::VCOM_ADC2) - .value("VB_DS", slsDetectorDefs::dacIndex::VB_DS) - .value("VB_COMP", slsDetectorDefs::dacIndex::VB_COMP) - .value("VB_PIXBUF", slsDetectorDefs::dacIndex::VB_PIXBUF) - .value("VIN_COM", slsDetectorDefs::dacIndex::VIN_COM) - .value("VDD_PROT", slsDetectorDefs::dacIndex::VDD_PROT) - .value("VBP_COLBUF", slsDetectorDefs::dacIndex::VBP_COLBUF) - .value("VB_SDA", slsDetectorDefs::dacIndex::VB_SDA) - .value("VCASC_SFP", slsDetectorDefs::dacIndex::VCASC_SFP) - .value("VIPRE_CDS", slsDetectorDefs::dacIndex::VIPRE_CDS) - .value("IBIAS_SFP", slsDetectorDefs::dacIndex::IBIAS_SFP) .value("V_POWER_A", slsDetectorDefs::dacIndex::V_POWER_A) .value("V_POWER_B", slsDetectorDefs::dacIndex::V_POWER_B) .value("V_POWER_C", slsDetectorDefs::dacIndex::V_POWER_C) diff --git a/slsDetectorGui/src/qTabDeveloper.cpp b/slsDetectorGui/src/qTabDeveloper.cpp index 994580e41..3e3742f7d 100644 --- a/slsDetectorGui/src/qTabDeveloper.cpp +++ b/slsDetectorGui/src/qTabDeveloper.cpp @@ -25,44 +25,40 @@ void qTabDeveloper::SetupWidgetWindow() { switch (detType) { case slsDetectorDefs::EIGER: dacWidgets.push_back(new qDacWidget( - this, det, true, "v SvP: ", getSLSIndex(detType, tempid++))); + this, det, true, "vsvp: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v SvN ", getSLSIndex(detType, tempid++))); + this, det, true, "vsvn ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vrf: ", getSLSIndex(detType, tempid++))); + this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vrs: ", getSLSIndex(detType, tempid++))); + this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vtr: ", getSLSIndex(detType, tempid++))); + this, det, true, "vtrim: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vtgstv: ", getSLSIndex(detType, tempid++))); + this, det, true, "vtgstv: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v cal: ", getSLSIndex(detType, tempid++))); + this, det, true, "vcal: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vcp ", getSLSIndex(detType, tempid++))); + this, det, true, "vcp ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vcn: ", getSLSIndex(detType, tempid++))); + this, det, true, "vcn: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v Vis: ", getSLSIndex(detType, tempid++))); + this, det, true, "vishaper: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v rxb_lb: ", getSLSIndex(detType, tempid++))); + this, det, true, "rxb_lb: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "v rxb_rb: ", getSLSIndex(detType, tempid++))); + this, det, true, "rxb_rb: ", getSLSIndex(detType, tempid++))); + dacWidgets.push_back(new qDacWidget( + this, det, true, "vcmp_ll: ", getSLSIndex(detType, tempid++))); + dacWidgets.push_back(new qDacWidget( + this, det, true, "vcmp_lr: ", getSLSIndex(detType, tempid++))); + dacWidgets.push_back(new qDacWidget( + this, det, true, "vcmp_rl: ", getSLSIndex(detType, tempid++))); + dacWidgets.push_back(new qDacWidget( + this, det, true, "vcmp_rr: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back( new qDacWidget(this, det, true, - "v Vcmp_ll: ", getSLSIndex(detType, tempid++))); - dacWidgets.push_back( - new qDacWidget(this, det, true, - "v Vcmp_lr: ", getSLSIndex(detType, tempid++))); - dacWidgets.push_back( - new qDacWidget(this, det, true, - "v Vcmp_rl: ", getSLSIndex(detType, tempid++))); - dacWidgets.push_back( - new qDacWidget(this, det, true, - "v Vcmp_rr: ", getSLSIndex(detType, tempid++))); - dacWidgets.push_back(new qDacWidget( - this, det, true, - "v threshold: ", getSLSIndex(detType, tempid++))); + "vthreshold: ", getSLSIndex(detType, tempid++))); adcWidgets.push_back(new qDacWidget( this, det, false, "Temperature FPGA Ext: ", getSLSIndex(detType, tempid++))); @@ -183,10 +179,10 @@ void qTabDeveloper::SetupWidgetWindow() { dacWidgets.push_back(new qDacWidget( this, det, true, "vth2: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "vshaper: ", getSLSIndex(detType, tempid++))); + this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back( new qDacWidget(this, det, true, - "vshaperneg: ", getSLSIndex(detType, tempid++))); + "vrshaper_n: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back( new qDacWidget(this, det, true, "vipre_out: ", getSLSIndex(detType, tempid++))); @@ -199,19 +195,22 @@ void qTabDeveloper::SetupWidgetWindow() { dacWidgets.push_back(new qDacWidget( this, det, true, "vcas: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "vpreamp: ", getSLSIndex(detType, tempid++))); + this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "vph: ", getSLSIndex(detType, tempid++))); + this, det, true, "vcal_p: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( this, det, true, "vipre: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "viinsh: ", getSLSIndex(detType, tempid++))); + this, det, true, "vishaper: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( - this, det, true, "vpl: ", getSLSIndex(detType, tempid++))); + this, det, true, "vcal_n: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( this, det, true, "vtrim: ", getSLSIndex(detType, tempid++))); dacWidgets.push_back(new qDacWidget( this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++))); + dacWidgets.push_back( + new qDacWidget(this, det, true, + "vthreshold: ", getSLSIndex(detType, tempid++))); break; case slsDetectorDefs::GOTTHARD2: @@ -384,25 +383,25 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) { case slsDetectorDefs::EIGER: switch (index) { case 0: - return slsDetectorDefs::SVP; + return slsDetectorDefs::VSVP; case 1: - return slsDetectorDefs::SVN; + return slsDetectorDefs::VSVN; case 2: - return slsDetectorDefs::VRF; + return slsDetectorDefs::VRPREAMP; case 3: - return slsDetectorDefs::VRS; + return slsDetectorDefs::VRSHAPER; case 4: - return slsDetectorDefs::VTR; + return slsDetectorDefs::VTRIM; case 5: return slsDetectorDefs::VTGSTV; case 6: - return slsDetectorDefs::CAL; + return slsDetectorDefs::VCAL; case 7: return slsDetectorDefs::VCP; case 8: return slsDetectorDefs::VCN; case 9: - return slsDetectorDefs::VIS; + return slsDetectorDefs::VISHAPER; case 10: return slsDetectorDefs::RXB_LB; case 11: @@ -416,7 +415,7 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) { case 15: return slsDetectorDefs::VCMP_RR; case 16: - return slsDetectorDefs::THRESHOLD; + return slsDetectorDefs::VTHRESHOLD; case 17: return slsDetectorDefs::TEMPERATURE_FPGAEXT; case 18: @@ -515,37 +514,39 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) { case slsDetectorDefs::MYTHEN3: switch (index) { case 0: - return slsDetectorDefs::CASSH; + return slsDetectorDefs::VCASSH; case 1: return slsDetectorDefs::VTH2; case 2: - return slsDetectorDefs::SHAPER1; + return slsDetectorDefs::VRSHAPER; case 3: - return slsDetectorDefs::SHAPER2; + return slsDetectorDefs::VRSHAPER_N; case 4: return slsDetectorDefs::VIPRE_OUT; case 5: return slsDetectorDefs::VTH3; case 6: - return slsDetectorDefs::THRESHOLD; + return slsDetectorDefs::VTH1; case 7: return slsDetectorDefs::VICIN; case 8: - return slsDetectorDefs::CAS; + return slsDetectorDefs::VCAS; case 9: - return slsDetectorDefs::PREAMP; + return slsDetectorDefs::VRPREAMP; case 10: - return slsDetectorDefs::CALIBRATION_PULSE; + return slsDetectorDefs::VCAL_P; case 11: return slsDetectorDefs::VIPRE; case 12: - return slsDetectorDefs::VIINSH; + return slsDetectorDefs::VISHAPER; case 13: - return slsDetectorDefs::VPL; + return slsDetectorDefs::VCAL_N; case 14: - return slsDetectorDefs::TRIMBIT_SIZE; + return slsDetectorDefs::VTRIM; case 15: return slsDetectorDefs::VDCSH; + case 16: + return slsDetectorDefs::VTHRESHOLD; default: throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index)); diff --git a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer index f4d213b2b..922b9c8a4 100755 Binary files a/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer and b/slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer differ diff --git a/slsDetectorServers/eigerDetectorServer/FebControl.c b/slsDetectorServers/eigerDetectorServer/FebControl.c index f5fc22ecb..6c88aefa8 100644 --- a/slsDetectorServers/eigerDetectorServer/FebControl.c +++ b/slsDetectorServers/eigerDetectorServer/FebControl.c @@ -15,10 +15,10 @@ // GetDAQStatusRegister(512,current_mode_bits_from_fpga)) { unsigned int Module_ndacs = 16; -char Module_dac_names[16][10] = {"SvP", "Vtr", "Vrf", "Vrs", - "SvN", "Vtgstv", "Vcmp_ll", "Vcmp_lr", - "cal", "Vcmp_rl", "rxb_rb", "rxb_lb", - "Vcmp_rr", "Vcp", "Vcn", "Vis"}; +char Module_dac_names[16][10] = {"VSvP", "Vtrim", "Vrpreamp", "Vrshaper", + "VSvN", "Vtgstv", "Vcmp_ll", "Vcmp_lr", + "Vcal", "Vcmp_rl", "rxb_rb", "rxb_lb", + "Vcmp_rr", "Vcp", "Vcn", "Vishaper"}; struct Module modules[10]; int moduleSize = 0; diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index bfbf7326d..1bb8e91f3 100755 Binary files a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer and b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer differ diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h index 5c640c4bc..7d615d69b 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorServer_defs.h @@ -12,42 +12,42 @@ /* Enums */ enum DACINDEX { - E_SVP, - E_VTR, - E_VRF, - E_VRS, - E_SVN, + E_VSVP, + E_VTRIM, + E_VRPREAMP, + E_VRSHAPER, + E_VSVN, E_VTGSTV, E_VCMP_LL, E_VCMP_LR, - E_CAL, + E_VCAL, E_VCMP_RL, E_RXB_RB, E_RXB_LB, E_VCMP_RR, E_VCP, E_VCN, - E_VIS, + E_VISHAPER, E_VTHRESHOLD }; #define DEFAULT_DAC_VALS \ { \ - 0, /* SvP */ \ - 2480, /* Vtr */ \ - 3300, /* Vrf */ \ - 1400, /* Vrs */ \ - 4000, /* SvN */ \ + 0, /* VSvP */ \ + 2480, /* Vtrim */ \ + 3300, /* Vrpreamp */ \ + 1400, /* Vrshaper */ \ + 4000, /* VSvN */ \ 2556, /* Vtgstv */ \ 1000, /* Vcmp_ll */ \ 1000, /* Vcmp_lr */ \ - 0, /* cal */ \ + 0, /* Vcal */ \ 1000, /* Vcmp_rl */ \ 1100, /* rxb_rb */ \ 1100, /* rxb_lb */ \ 1000, /* Vcmp_rr */ \ 1000, /* Vcp */ \ 2000, /* Vcn */ \ - 1550 /* Vis */ \ + 1550 /* Vishaper */ \ }; enum ADCINDEX { TEMP_FPGAEXT, diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index cfa43ebac..b186f5746 100755 Binary files a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer and b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer differ diff --git a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer index 6e0dc4b27..2f2d364a6 100755 Binary files a/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer and b/slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer differ diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index e11e969cd..7a8b78502 100755 Binary files a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer and b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer differ diff --git a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer index b65658212..2dfc4f23c 100755 Binary files a/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer and b/slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer differ diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index cac300d8d..bc05b9847 100755 Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer differ diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c index d3531591d..dfe0b8f8e 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c @@ -852,7 +852,7 @@ void updateGatePeriod() { uint32_t countermask = getCounterMask(); for (int i = 0; i != 3; ++i) { // only if counter enabled - if ((1 << i) & countermask) { + if (countermask & (1 << i)) { uint64_t sum = getExpTime(i) + getGateDelay(i); if (sum > max) { max = sum; @@ -1082,6 +1082,15 @@ void setDAC(enum DACINDEX ind, int val, int mV) { return; } + if (ind == M_VTHRESHOLD) { + LOG(logINFO, + ("Setting Threshold voltages to %d %s\n", val, (mV ? "mv" : ""))); + setDAC(M_VTH1, val, mV); + setDAC(M_VTH2, val, mV); + setDAC(M_VTH3, val, mV); + return; + } + char *dac_names[] = {DAC_NAMES}; LOG(logDEBUG1, ("Setting dac[%d - %s]: %d %s \n", (int)ind, dac_names[ind], val, (mV ? "mV" : "dac units"))); @@ -1106,6 +1115,23 @@ void setDAC(enum DACINDEX ind, int val, int mV) { } int getDAC(enum DACINDEX ind, int mV) { + if (ind == M_VTHRESHOLD) { + int ret[3] = {0}; + ret[0] = getDAC(M_VTH1, mV); + ret[1] = getDAC(M_VTH2, mV); + ret[2] = getDAC(M_VTH3, mV); + + if ((ret[0] == ret[1]) && (ret[1] == ret[2])) { + LOG(logINFO, ("\tvthreshold match\n")); + return ret[0]; + } else { + LOG(logERROR, ("\tvthreshold mismatch vth1:%d vth2:%d " + "vth3:%d\n", + ret[0], ret[1], ret[2])); + return -1; + } + } + if (!mV) { LOG(logDEBUG1, ("Getting DAC %d : %d dac\n", ind, detectorDacs[ind])); return detectorDacs[ind]; diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h index ea032377a..632cc66b1 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h @@ -56,43 +56,44 @@ /* Enums */ enum DACINDEX { - M_CASSH, + M_VCASSH, M_VTH2, - M_VRFSH, - M_VRFSHNPOL, + M_VRSHAPER, + M_VRSHAPER_N, M_VIPRE_OUT, M_VTH3, M_VTH1, M_VICIN, - M_CAS, - M_VRF, - M_VPL, + M_VCAS, + M_VRPREAMP, + M_VCAL_N, M_VIPRE, - M_VIINSH, - M_VPH, + M_VISHAPER, + M_VCAL_P, M_VTRIM, - M_VDCSH + M_VDCSH, + M_VTHRESHOLD }; #define DAC_NAMES \ - "vcassh", "vth2", "vshaper", "vshaperneg", "vipre_out", "vth3", "vth1", \ - "vicin", "vcas", "vpreamp", "vpl", "vipre", "viinsh", "vph", "vtrim", \ - "vdcsh" + "vcassh", "vth2", "vrshaper", "vrshaper_n", "vipre_out", "vth3", "vth1", \ + "vicin", "vcas", "vrpreamp", "vcal_n", "vipre", "vishaper", "vcal_p", \ + "vtrim", "vdcsh" #define DEFAULT_DAC_VALS \ { \ 1200, /* casSh */ \ 2800, /* Vth2 */ \ - 1280, /* VrfSh */ \ - 2800, /* VrfShNpol */ \ + 1280, /* Vrshaper */ \ + 2800, /* Vrshaper_n */ \ 1220, /* vIpreOut */ \ 2800, /* Vth3 */ \ 2800, /* Vth1 */ \ 1708, /* vIcin */ \ 1800, /* cas */ \ - 1100, /* Vrf */ \ - 1100, /* VPL */ \ + 1100, /* Vrpreamp */ \ + 1100, /* Vcal_n */ \ 2624, /* vIpre */ \ - 1708, /* vIinSh */ \ - 1712, /* VPH */ \ + 1708, /* vishaper */ \ + 1712, /* Vcal_p */ \ 2800, /* vTrim */ \ 800 /* VdcSh */ \ }; diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index da2eb635a..6e846c56f 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -751,23 +751,23 @@ int set_dac(int file_des) { case HIGH_VOLTAGE: break; #elif EIGERD - case THRESHOLD: + case VTHRESHOLD: serverDacIndex = E_VTHRESHOLD; break; - case SVP: - serverDacIndex = E_SVP; + case VSVP: + serverDacIndex = E_VSVP; break; - case SVN: - serverDacIndex = E_SVN; + case VSVN: + serverDacIndex = E_VSVN; break; - case VTR: - serverDacIndex = E_VTR; + case VTRIM: + serverDacIndex = E_VTRIM; break; - case VRF: - serverDacIndex = E_VRF; + case VRPREAMP: + serverDacIndex = E_VRPREAMP; break; - case VRS: - serverDacIndex = E_VRS; + case VRSHAPER: + serverDacIndex = E_VRSHAPER; break; case VTGSTV: serverDacIndex = E_VTGSTV; @@ -778,8 +778,8 @@ int set_dac(int file_des) { case VCMP_LR: serverDacIndex = E_VCMP_LR; break; - case CAL: - serverDacIndex = E_CAL; + case VCAL: + serverDacIndex = E_VCAL; break; case VCMP_RL: serverDacIndex = E_VCMP_RL; @@ -799,8 +799,8 @@ int set_dac(int file_des) { case VCN: serverDacIndex = E_VCN; break; - case VIS: - serverDacIndex = E_VIS; + case VISHAPER: + serverDacIndex = E_VISHAPER; break; case HIGH_VOLTAGE: case IO_DELAY: @@ -862,17 +862,17 @@ int set_dac(int file_des) { #elif MYTHEN3D case HIGH_VOLTAGE: break; - case CASSH: - serverDacIndex = M_CASSH; + case VCASSH: + serverDacIndex = M_VCASSH; break; case VTH2: serverDacIndex = M_VTH2; break; - case SHAPER1: - serverDacIndex = M_VRFSH; + case VRSHAPER: + serverDacIndex = M_VRSHAPER; break; - case SHAPER2: - serverDacIndex = M_VRFSHNPOL; + case VRSHAPER_N: + serverDacIndex = M_VRSHAPER_N; break; case VIPRE_OUT: serverDacIndex = M_VIPRE_OUT; @@ -880,36 +880,39 @@ int set_dac(int file_des) { case VTH3: serverDacIndex = M_VTH3; break; - case THRESHOLD: + case VTH1: serverDacIndex = M_VTH1; break; case VICIN: serverDacIndex = M_VICIN; break; - case CAS: - serverDacIndex = M_CAS; + case VCAS: + serverDacIndex = M_VCAS; break; - case PREAMP: - serverDacIndex = M_VRF; + case VRPREAMP: + serverDacIndex = M_VRPREAMP; break; - case CALIBRATION_PULSE: - serverDacIndex = M_VPH; + case VCAL_P: + serverDacIndex = M_VCAL_P; break; case VIPRE: serverDacIndex = M_VIPRE; break; - case VIINSH: - serverDacIndex = M_VIINSH; + case VISHAPER: + serverDacIndex = M_VISHAPER; break; - case VPL: - serverDacIndex = M_VPL; + case VCAL_N: + serverDacIndex = M_VCAL_N; break; - case TRIMBIT_SIZE: + case VTRIM: serverDacIndex = M_VTRIM; break; case VDCSH: serverDacIndex = M_VDCSH; break; + case VTHRESHOLD: + serverDacIndex = M_VTHRESHOLD; + break; #elif GOTTHARD2D case HIGH_VOLTAGE: break; @@ -1198,7 +1201,7 @@ int set_dac(int file_des) { case E_VCMP_LR: case E_VCMP_RL: case E_VCMP_RR: - case E_VRF: + case E_VRPREAMP: case E_VCP: setSettings(UNDEFINED); LOG(logERROR, diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index 2a4d121bd..c03e9638d 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -96,6 +96,9 @@ class Detector { */ void setDetectorSize(const defs::xy value); + /** list of possible settings for this detector */ + std::vector getSettingsList() const; + /** [Jungfrau][Gotthard][Gotthard2] */ Result getSettings(Positions pos = {}) const; @@ -309,6 +312,9 @@ class Detector { */ Result getTemperature(defs::dacIndex index, Positions pos = {}) const; + /** gets list of dac indices for this detector */ + std::vector getDacList() const; + Result getDAC(defs::dacIndex index, bool mV, Positions pos = {}) const; void setDAC(defs::dacIndex index, int value, bool mV, Positions pos = {}); @@ -585,6 +591,9 @@ class Detector { Result getRxLastClientIP(Positions pos = {}) const; + Result> + getRxThreadIds(Positions pos = {}) const; + /************************************************** * * * File * diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 3c7e1103d..b0d74eb32 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -331,6 +331,25 @@ std::string CmdProxy::DetectorSize(int action) { return os.str(); } +std::string CmdProxy::SettingsList(int action) { + std::ostringstream os; + os << cmd << ' '; + if (action == defs::HELP_ACTION) { + os << "\n\tList of settings implemented for this detector" << '\n'; + } else if (action == defs::GET_ACTION) { + if (!args.empty()) { + WrongNumberOfParameters(0); + } + auto t = det->getSettingsList(); + os << ToString(t) << "\n"; + } else if (action == defs::PUT_ACTION) { + throw sls::RuntimeError("Cannot put"); + } else { + throw sls::RuntimeError("Unknown action"); + } + return os.str(); +} + std::string CmdProxy::GapPixels(int action) { std::ostringstream os; os << cmd << ' '; @@ -877,7 +896,11 @@ std::string CmdProxy::DacList(int 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'; + if (!args.empty()) { + WrongNumberOfParameters(0); + } + auto t = det->getDacList(); + os << ToString(t) << '\n'; } else if (action == defs::PUT_ACTION) { throw sls::RuntimeError("Cannot put"); } else { @@ -890,29 +913,32 @@ 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." + os << "[(optional unit) mv] \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; - size_t spacepos = names[i].find(' '); - // chip test board (dac) - if (spacepos != std::string::npos) { - if (args.empty()) { - args.resize(1); - } - args[0] = names[i].substr(spacepos + 1 - 1); - names[i] = names[i].substr(0, spacepos); + bool mv = false; + if (args.size() == 1) { + if (args[0] != "mv") { + throw sls::RuntimeError("Unknown argument " + args[0] + + ". Did you mean mv?"); } - Call(names[i], args, det_id, action, each); - res[i] = each.str(); - res[i].pop_back(); // remove last \n character + mv = true; + } else if (args.size() > 1) { + WrongNumberOfParameters(1); } - os << sls::ToString(res) << '\n'; + auto t = det->getDacList(); + os << '['; + auto it = t.cbegin(); + os << ToString(*it) << ' ' + << OutString(det->getDAC(*it++, mv, {det_id})) + << (args.size() > 0 ? " mv" : ""); + while (it != t.cend()) { + os << ", " << ToString(*it) << ' ' + << OutString(det->getDAC(*it++, mv, {det_id})) + << (args.size() > 0 ? " mv" : ""); + } + os << "]\n"; } else if (action == defs::PUT_ACTION) { throw sls::RuntimeError("Cannot put"); } else { @@ -921,53 +947,6 @@ std::string CmdProxy::DacValues(int 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_rstore", "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", "vpl", "vipre", - "viinsh", "vph", "vtrim", "vdcsh"}; - break; - case defs::MOENCH: - return std::vector{"vbp_colbuf", "vipre", "vin_cm", - "vb_sda", "vcasc_sfp", "vout_cm", - "vipre_cds", "ibias_sfp"}; - 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 */ std::string CmdProxy::ReceiverStatus(int action) { diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index e17172e02..0790f7b9b 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -478,8 +478,19 @@ class CmdProxy { {"digitest", "imagetest"}, /** temperature */ + /** dacs */ + {"vtr", "vtrim"}, + {"vrf", "vrpreamp"}, + {"vrs", "vrshaper"}, {"vcall", "vcal"}, + {"vis", "vishaper"}, + {"vshaper", "vrshaper"}, + {"vpreamp", "vrpreamp"}, + {"vshaperneg", "vrshaper_n"}, + {"viinsh", "vishaper"}, + {"vpl", "vcal_n"}, + {"vph", "vcal_p"}, /* acquisition */ {"busy", "clearbusy"}, @@ -562,6 +573,7 @@ class CmdProxy { {"detectornumber", &CmdProxy::detectornumber}, {"type", &CmdProxy::type}, {"detsize", &CmdProxy::DetectorSize}, + {"settingslist", &CmdProxy::SettingsList}, {"settings", &CmdProxy::settings}, {"trimbits", &CmdProxy::trimbits}, {"trimval", &CmdProxy::trimval}, @@ -608,9 +620,9 @@ class CmdProxy { {"vthreshold", &CmdProxy::vthreshold}, {"vsvp", &CmdProxy::vsvp}, {"vsvn", &CmdProxy::vsvn}, - {"vtr", &CmdProxy::vtr}, - {"vrf", &CmdProxy::vrf}, - {"vrs", &CmdProxy::vrs}, + {"vtrim", &CmdProxy::vtrim}, + {"vrpreamp", &CmdProxy::vrpreamp}, + {"vrshaper", &CmdProxy::vrshaper}, {"vtgstv", &CmdProxy::vtgstv}, {"vcmp_ll", &CmdProxy::vcmp_ll}, {"vcmp_lr", &CmdProxy::vcmp_lr}, @@ -621,7 +633,7 @@ class CmdProxy { {"rxb_lb", &CmdProxy::rxb_lb}, {"vcp", &CmdProxy::vcp}, {"vcn", &CmdProxy::vcn}, - {"vis", &CmdProxy::vis}, + {"vishaper", &CmdProxy::vishaper}, {"iodelay", &CmdProxy::iodelay}, {"vref_ds", &CmdProxy::vref_ds}, {"vcascn_pb", &CmdProxy::vcascn_pb}, @@ -631,18 +643,14 @@ class CmdProxy { {"vin_cm", &CmdProxy::vin_cm}, {"vref_comp", &CmdProxy::vref_comp}, {"ib_test_c", &CmdProxy::ib_test_c}, - {"vpreamp", &CmdProxy::vpreamp}, - {"vshaper", &CmdProxy::vshaper}, - {"vshaperneg", &CmdProxy::vshaperneg}, + {"vrshaper_n", &CmdProxy::vrshaper_n}, {"vipre", &CmdProxy::vipre}, - {"viinsh", &CmdProxy::viinsh}, {"vdcsh", &CmdProxy::vdcsh}, {"vth1", &CmdProxy::vth1}, {"vth2", &CmdProxy::vth2}, {"vth3", &CmdProxy::vth3}, - {"vpl", &CmdProxy::vpl}, - {"vph", &CmdProxy::vph}, - {"vtrim", &CmdProxy::vtrim}, + {"vcal_n", &CmdProxy::vcal_n}, + {"vcal_p", &CmdProxy::vcal_p}, {"vcassh", &CmdProxy::vcassh}, {"vcas", &CmdProxy::vcas}, {"vicin", &CmdProxy::vicin}, @@ -729,6 +737,7 @@ class CmdProxy { {"rx_realudpsocksize", &CmdProxy::rx_realudpsocksize}, {"rx_lock", &CmdProxy::rx_lock}, {"rx_lastclient", &CmdProxy::rx_lastclient}, + {"rx_threads", &CmdProxy::rx_threads}, /* File */ {"fformat", &CmdProxy::fformat}, @@ -923,6 +932,7 @@ class CmdProxy { std::string PackageVersion(int action); std::string ClientVersion(int action); std::string DetectorSize(int action); + std::string SettingsList(int action); std::string GapPixels(int action); /* acquisition parameters */ std::string acquire(int action); @@ -940,7 +950,6 @@ class CmdProxy { std::string Dac(int action); std::string DacList(int action); std::string DacValues(int action); - std::vector DacCommands(); /* acquisition */ std::string ReceiverStatus(int action); std::string DetectorStatus(int action); @@ -1180,29 +1189,33 @@ class CmdProxy { /* dacs */ - DAC_COMMAND(vthreshold, getDAC, setDAC, defs::THRESHOLD, + DAC_COMMAND(vthreshold, getDAC, setDAC, defs::VTHRESHOLD, "[dac or mv value][(optional unit) mv] \n\t[Eiger][Mythen3] " "Detector threshold voltage for single photon counters."); - DAC_COMMAND(vsvp, getDAC, setDAC, defs::SVP, + DAC_COMMAND(vsvp, getDAC, setDAC, defs::VSVP, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "?? "); // TODO - DAC_COMMAND(vsvn, getDAC, setDAC, defs::SVN, + DAC_COMMAND(vsvn, getDAC, setDAC, defs::VSVN, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " - "?? "); // TODO + "?? \n\t[Mythen3] voltage " + "to define feedback resistance of the first shaper"); // TODO - DAC_COMMAND(vtr, getDAC, setDAC, defs::VTR, + DAC_COMMAND(vtrim, getDAC, setDAC, defs::VTRIM, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " - "?? "); // TODO + "?? \n\t[Mythen3] Dac for " + "the voltage defining the trim bit size."); // TODO - DAC_COMMAND(vrf, getDAC, setDAC, defs::VRF, + DAC_COMMAND(vrpreamp, getDAC, setDAC, defs::VRPREAMP, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " - "?? "); // TODO + "?? \n\t[Mythen3] voltage " + "to define the preamplifier feedback resistance."); // TODO - DAC_COMMAND(vrs, getDAC, setDAC, defs::VRS, + DAC_COMMAND(vrshaper, getDAC, setDAC, defs::VRSHAPER, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " - "?? "); // TODO + "?? \n\t[Mythen3] voltage to define feedback resistance of " + "the first shaper"); // TODO DAC_COMMAND(vtgstv, getDAC, setDAC, defs::VTGSTV, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " @@ -1216,7 +1229,7 @@ class CmdProxy { "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "?? "); // TODO - DAC_COMMAND(vcal, getDAC, setDAC, defs::CAL, + DAC_COMMAND(vcal, getDAC, setDAC, defs::VCAL, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "?? "); // TODO @@ -1244,9 +1257,10 @@ class CmdProxy { "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "?? "); // TODO - DAC_COMMAND(vis, getDAC, setDAC, defs::VIS, + DAC_COMMAND(vishaper, getDAC, setDAC, defs::VISHAPER, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " - "?? "); // TODO + "?? \n\t[Mythen3] Dac for " + "the bias current for the shaper."); // TODO DAC_COMMAND(iodelay, getDAC, setDAC, defs::IO_DELAY, "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " @@ -1284,15 +1298,7 @@ class CmdProxy { "[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for " "?? "); // TODO - 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(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(vshaperneg, getDAC, setDAC, defs::SHAPER2, + DAC_COMMAND(vrshaper_n, getDAC, setDAC, defs::VRSHAPER_N, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage " "to define feedback resistance of the second shaper."); @@ -1301,15 +1307,11 @@ class CmdProxy { "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the " "preamplifier's input transistor current.\n\t[Moench] Dac for 1"); - DAC_COMMAND(viinsh, getDAC, setDAC, defs::VIINSH, - "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " - "the bias current for the shaper."); - DAC_COMMAND(vdcsh, getDAC, setDAC, defs::VDCSH, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "the reference (DC) voltage for the shaper."); - DAC_COMMAND(vth1, getDAC, setDAC, defs::THRESHOLD, + DAC_COMMAND(vth1, getDAC, setDAC, defs::VTH1, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "first detector threshold voltage."); @@ -1321,23 +1323,19 @@ class CmdProxy { "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "third detector threshold voltage."); - DAC_COMMAND(vpl, getDAC, setDAC, defs::VPL, + DAC_COMMAND(vcal_n, getDAC, setDAC, defs::VCAL_N, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "the low voltage for analog pulsing."); - DAC_COMMAND(vph, getDAC, setDAC, defs::CALIBRATION_PULSE, + DAC_COMMAND(vcal_p, getDAC, setDAC, defs::VCAL_P, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "the high voltage for analog pulsing."); - 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(vcassh, getDAC, setDAC, defs::CASSH, + DAC_COMMAND(vcassh, getDAC, setDAC, defs::VCASSH, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "the shaper's cascode voltage."); - DAC_COMMAND(vcas, getDAC, setDAC, defs::CAS, + DAC_COMMAND(vcas, getDAC, setDAC, defs::VCAS, "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "the preamplifier's cascode voltage."); @@ -1663,6 +1661,14 @@ class CmdProxy { rx_lastclient, getRxLastClientIP, "\n\tClient IP Address that last communicated with the receiver."); + GET_COMMAND( + rx_threads, getRxThreadIds, + "\n\tGet thread ids from the receiver in order of [parent, tcp, " + "listener 0, " + "processor 0, streamer 0, listener 1, processor 1, streamer 1]. If no " + "streamer yet or there is no second interface, it gives 0 in its " + "place."); + /* File */ INTEGER_COMMAND( diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 5ef42bd2c..ce698f575 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -141,6 +141,38 @@ void Detector::setDetectorSize(const defs::xy value) { pimpl->setNumberOfChannels(value); } +std::vector Detector::getSettingsList() const { + switch (getDetectorType().squash()) { + case defs::EIGER: + return std::vector{ + defs::STANDARD, defs::HIGHGAIN, defs::LOWGAIN, defs::VERYHIGHGAIN, + defs::VERYLOWGAIN}; + case defs::GOTTHARD: + return std::vector{ + defs::HIGHGAIN, defs::DYNAMICGAIN, defs::LOWGAIN, defs::MEDIUMGAIN, + defs::VERYHIGHGAIN}; + case defs::JUNGFRAU: + return std::vector{ + defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1, + defs::FIXGAIN2, defs::FORCESWITCHG1, defs::FORCESWITCHG2}; + case defs::GOTTHARD2: + return std::vector{ + defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1, + defs::FIXGAIN2}; + case defs::MOENCH: + return std::vector{ + defs::G1_HIGHGAIN, defs::G1_LOWGAIN, + defs::G2_HIGHCAP_HIGHGAIN, defs::G2_HIGHCAP_LOWGAIN, + defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN, + defs::G4_HIGHGAIN, defs::G4_LOWGAIN}; + case defs::CHIPTESTBOARD: + case defs::MYTHEN3: + throw RuntimeError("Settings not implemented for this detector"); + default: + throw RuntimeError("Unknown detector type"); + } +} + Result Detector::getSettings(Positions pos) const { return pimpl->Parallel(&Module::getSettings, pos); } @@ -405,6 +437,53 @@ Result Detector::getTemperature(defs::dacIndex index, return res; } +std::vector Detector::getDacList() const { + std::vector retval; + switch (getDetectorType().squash()) { + case defs::EIGER: + return std::vector{ + defs::VSVP, defs::VTRIM, defs::VRPREAMP, defs::VRSHAPER, + defs::VSVN, defs::VTGSTV, defs::VCMP_LL, defs::VCMP_LR, + defs::VCAL, defs::VCMP_RL, defs::RXB_RB, defs::RXB_LB, + defs::VCMP_RR, defs::VCP, defs::VCN, defs::VISHAPER, + defs::VTHRESHOLD}; + case defs::GOTTHARD: + return std::vector{ + defs::VREF_DS, defs::VCASCN_PB, defs::VCASCP_PB, defs::VOUT_CM, + defs::VCASC_OUT, defs::VIN_CM, defs::VREF_COMP, defs::IB_TESTC}; + case defs::JUNGFRAU: + return std::vector{ + defs::VB_COMP, defs::VDD_PROT, defs::VIN_COM, defs::VREF_PRECH, + defs::VB_PIXBUF, defs::VB_DS, defs::VREF_DS, defs::VREF_COMP}; + case defs::GOTTHARD2: + return std::vector{ + defs::VREF_H_ADC, defs::VB_COMP_FE, defs::VB_COMP_ADC, + defs::VCOM_CDS, defs::VREF_RSTORE, defs::VB_OPA_1ST, + defs::VREF_COMP_FE, defs::VCOM_ADC1, defs::VREF_PRECH, + defs::VREF_L_ADC, defs::VREF_CDS, defs::VB_CS, + defs::VB_OPA_FD, defs::VCOM_ADC2}; + case defs::MYTHEN3: + return std::vector{ + defs::VCASSH, defs::VTH2, defs::VRSHAPER, defs::VRSHAPER_N, + defs::VIPRE_OUT, defs::VTH3, defs::VTH1, defs::VICIN, + defs::VCAS, defs::VRPREAMP, defs::VCAL_N, defs::VIPRE, + defs::VISHAPER, defs::VCAL_P, defs::VTRIM, defs::VDCSH, + defs::VTHRESHOLD}; + case defs::MOENCH: + return std::vector{ + defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA, + defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP}; + case defs::CHIPTESTBOARD: + for (int i = 0; i != 18; ++i) { + retval.push_back(static_cast(i)); + } + break; + default: + throw RuntimeError("Unknown detector type"); + } + return retval; +} + Result Detector::getDAC(defs::dacIndex index, bool mV, Positions pos) const { return pimpl->Parallel(&Module::setDAC, pos, -1, index, mV); @@ -759,6 +838,11 @@ Result Detector::getRxLastClientIP(Positions pos) const { return pimpl->Parallel(&Module::getReceiverLastClientIP, pos); } +Result> +Detector::getRxThreadIds(Positions pos) const { + return pimpl->Parallel(&Module::getReceiverThreadIds, pos); +} + // File Result Detector::getFileFormat(Positions pos) const { diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 77dbf835f..11e8ac25c 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -289,7 +289,7 @@ template Ret Module::sendToReceiver(int fnum) const { << sizeof(Ret) << "]"; Ret retval{}; sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval)); - LOG(logDEBUG1) << "Got back: " << retval; + LOG(logDEBUG1) << "Got back: " << ToString(retval); return retval; } @@ -2614,6 +2614,11 @@ sls::IpAddr Module::getReceiverLastClientIP() const { return sendToReceiver(F_GET_LAST_RECEIVER_CLIENT_IP); } +std::array Module::getReceiverThreadIds() const { + return sendToReceiver>( + F_GET_RECEIVER_THREAD_IDS); +} + void Module::exitReceiver() { LOG(logDEBUG1) << "Sending exit command to receiver server"; sendToReceiver(F_EXIT_RECEIVER, nullptr, nullptr); diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index 1e59c868b..255ec15c1 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -1309,6 +1309,8 @@ class Module : public virtual slsDetectorDefs { */ sls::IpAddr getReceiverLastClientIP() const; + std::array getReceiverThreadIds() const; + /** * Exits the receiver TCP server */ diff --git a/slsDetectorSoftware/tests/test-CmdProxy-chiptestboard.cpp b/slsDetectorSoftware/tests/test-CmdProxy-chiptestboard.cpp index b7300b515..922ae606d 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-chiptestboard.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-chiptestboard.cpp @@ -33,21 +33,21 @@ TEST_CASE("dac", "[.cmd][.dacs][.new]") { // REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcal", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcmp_rl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcmp_rr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("rxb_rb", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcal", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcmp_rl", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcmp_rr", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("rxb_rb", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // jungfrau REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdd_prot", {}, -1, GET)); @@ -55,30 +55,30 @@ TEST_CASE("dac", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vref_prech", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_pixbuf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_ds", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); // gotthard - // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vcascp_pb", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vout_cm", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vcasc_out", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vin_cm", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcascp_pb", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vout_cm", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcasc_out", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vin_cm", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); // mythen3 - // REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vicin", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-eiger.cpp b/slsDetectorSoftware/tests/test-CmdProxy-eiger.cpp index c2752e03d..f9975b2f5 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-eiger.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-eiger.cpp @@ -131,22 +131,22 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") { CmdProxy proxy(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::EIGER) { - SECTION("vsvp") { test_dac(defs::SVP, "vsvp", 5); } - SECTION("vtr") { test_dac(defs::VRF, "vtr", 1200); } - SECTION("vrf") { test_dac(defs::VRF, "vrf", 1500); } - SECTION("vrs") { test_dac(defs::VRF, "vrs", 1510); } - SECTION("vsvn") { test_dac(defs::SVN, "vsvn", 3800); } + SECTION("vsvp") { test_dac(defs::VSVP, "vsvp", 5); } + SECTION("vtrim") { test_dac(defs::VTRIM, "vtrim", 1200); } + SECTION("vrpreamp") { test_dac(defs::VRPREAMP, "vrpreamp", 1500); } + SECTION("vrshaper") { test_dac(defs::VRSHAPER, "vrshaper", 1510); } + SECTION("vsvn") { test_dac(defs::VSVN, "vsvn", 3800); } SECTION("vtgstv") { test_dac(defs::VTGSTV, "vtgstv", 2550); } SECTION("vcmp_ll") { test_dac(defs::VCMP_LL, "vcmp_ll", 1400); } SECTION("vcmp_lr") { test_dac(defs::VCMP_LR, "vcmp_lr", 1400); } - SECTION("vcal") { test_dac(defs::CAL, "vcal", 1400); } + SECTION("vcal") { test_dac(defs::VCAL, "vcal", 1400); } SECTION("vcmp_rl") { test_dac(defs::VCMP_RL, "vcmp_rl", 1400); } SECTION("rxb_rb") { test_dac(defs::RXB_RB, "rxb_rb", 1400); } SECTION("rxb_lb") { test_dac(defs::RXB_LB, "rxb_lb", 1400); } SECTION("vcmp_rr") { test_dac(defs::VCMP_RR, "vcmp_rr", 1400); } SECTION("vcp") { test_dac(defs::VCP, "vcp", 1400); } SECTION("vcn") { test_dac(defs::VCN, "vcn", 1400); } - SECTION("vis") { test_dac(defs::VIS, "vis", 1400); } + SECTION("vishaper") { test_dac(defs::VISHAPER, "vishaper", 1400); } SECTION("iodelay") { test_dac(defs::IO_DELAY, "iodelay", 1400); } SECTION("vthreshold") { // Read out individual vcmp to be able to reset after @@ -171,9 +171,9 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") { // Reset dacs after test for (int i = 0; i != det.size(); ++i) { det.setDAC(defs::VCMP_LL, vcmp_ll[i], false, {i}); - det.setDAC(defs::VCMP_LR, vcmp_ll[i], false, {i}); - det.setDAC(defs::VCMP_RL, vcmp_ll[i], false, {i}); - det.setDAC(defs::VCMP_RR, vcmp_ll[i], false, {i}); + det.setDAC(defs::VCMP_LR, vcmp_lr[i], false, {i}); + det.setDAC(defs::VCMP_RL, vcmp_rl[i], false, {i}); + det.setDAC(defs::VCMP_RR, vcmp_rr[i], false, {i}); det.setDAC(defs::VCP, vcp[i], false, {i}); } } @@ -187,17 +187,17 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); // mythen3 - REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); - // REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-gotthard.cpp b/slsDetectorSoftware/tests/test-CmdProxy-gotthard.cpp index 189ad6741..58d859aa7 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-gotthard.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-gotthard.cpp @@ -37,9 +37,9 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); @@ -50,7 +50,7 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // jungfrau REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); @@ -62,17 +62,17 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") { // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); // mythen3 - REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp index 052f4a97e..6ccefb534 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp @@ -55,9 +55,9 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); @@ -68,7 +68,7 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // gotthard REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); @@ -89,17 +89,17 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); // mythen3 - REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp index fa5d65221..3d6482cf6 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp @@ -36,9 +36,9 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); @@ -49,7 +49,7 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // gotthard // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); @@ -61,17 +61,17 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") { // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); // mythen3 - REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-moench.cpp b/slsDetectorSoftware/tests/test-CmdProxy-moench.cpp index 730e3b6b9..9d5c39531 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-moench.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-moench.cpp @@ -40,9 +40,9 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); @@ -53,7 +53,7 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // jungfrau REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); @@ -74,17 +74,17 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); // mythen3 - REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-mythen3.cpp b/slsDetectorSoftware/tests/test-CmdProxy-mythen3.cpp index 798683c7a..4730a280f 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-mythen3.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-mythen3.cpp @@ -25,28 +25,54 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs", "[.cmd][.dacs][.new]") { CmdProxy proxy(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::MYTHEN3) { - SECTION("vcassh") { test_dac(defs::CASSH, "vcassh", 1200); } + SECTION("vcassh") { test_dac(defs::VCASSH, "vcassh", 1200); } SECTION("vth2") { test_dac(defs::VTH2, "vth2", 2800); } - SECTION("vshaper") { test_dac(defs::SHAPER1, "vshaper", 1280); } - SECTION("vshaperneg") { test_dac(defs::SHAPER2, "vshaperneg", 2800); } + SECTION("vrshaper") { test_dac(defs::VRSHAPER, "vrshaper", 1280); } + SECTION("vrshaper_n") { + test_dac(defs::VRSHAPER_N, "vrshaper_n", 2800); + } SECTION("vipre_out") { test_dac(defs::VIPRE_OUT, "vipre_out", 1220); } SECTION("vth3") { test_dac(defs::VTH3, "vth3", 2800); } - SECTION("vth1") { test_dac(defs::THRESHOLD, "vth1", 2880); } + SECTION("vth1") { test_dac(defs::VTH1, "vth1", 2880); } SECTION("vicin") { test_dac(defs::VICIN, "vicin", 1708); } - SECTION("vcas") { test_dac(defs::CAS, "vcas", 1800); } - SECTION("vpreamp") { test_dac(defs::PREAMP, "vpreamp", 1100); } - SECTION("vpl") { test_dac(defs::VPL, "vpl", 1100); } + SECTION("vcas") { test_dac(defs::VCAS, "vcas", 1800); } + SECTION("vrpreamp") { test_dac(defs::VRPREAMP, "vrpreamp", 1100); } + SECTION("vcal_n") { test_dac(defs::VCAL_N, "vcal_n", 1100); } SECTION("vipre") { test_dac(defs::VIPRE, "vipre", 2624); } - SECTION("viinsh") { test_dac(defs::VIINSH, "viinsh", 1708); } - SECTION("vph") { test_dac(defs::CALIBRATION_PULSE, "vph", 1712); } - SECTION("vtrim") { test_dac(defs::TRIMBIT_SIZE, "vtrim", 2800); } + SECTION("vishaper") { test_dac(defs::VISHAPER, "vishaper", 1708); } + SECTION("vcal_p") { test_dac(defs::VCAL_P, "vcal_p", 1712); } + SECTION("vtrim") { test_dac(defs::VTRIM, "vtrim", 2800); } SECTION("vdcsh") { test_dac(defs::VDCSH, "vdcsh", 800); } + SECTION("vthreshold") { + // Read out individual vcmp to be able to reset after + // the test is done + auto vth1 = det.getDAC(defs::VTH1, false); + auto vth2 = det.getDAC(defs::VTH2, false); + auto vth3 = det.getDAC(defs::VTH3, false); + { + std::ostringstream oss; + proxy.Call("vthreshold", {"1234"}, -1, PUT, oss); + REQUIRE(oss.str() == "vthreshold 1234\n"); + } + { + std::ostringstream oss; + proxy.Call("vthreshold", {}, -1, GET, oss); + REQUIRE(oss.str() == "vthreshold 1234\n"); + } + + // Reset dacs after test + for (int i = 0; i != det.size(); ++i) { + det.setDAC(defs::VTH1, vth1[i], false, {i}); + det.setDAC(defs::VTH2, vth2[i], false, {i}); + det.setDAC(defs::VTH3, vth3[i], false, {i}); + } + } REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); @@ -57,7 +83,7 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs", "[.cmd][.dacs][.new]") { REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); + // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET)); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp b/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp index 95c2ab9f8..d283a4531 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-rx.cpp @@ -372,6 +372,13 @@ TEST_CASE("rx_lastclient", "[.cmd][.rx][.new]") { } } +TEST_CASE("rx_threads", "[.cmd][.rx][.new]") { + Detector det; + CmdProxy proxy(&det); + std::ostringstream oss; + REQUIRE_NOTHROW(proxy.Call("rx_threads", {}, -1, GET, oss)); +} + /* File */ TEST_CASE("fformat", "[.cmd][.new]") { diff --git a/slsDetectorSoftware/tests/test-CmdProxy.cpp b/slsDetectorSoftware/tests/test-CmdProxy.cpp index 72d61cfc3..72db5a351 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy.cpp @@ -126,6 +126,18 @@ TEST_CASE("detsize", "[.cmd][.new]") { REQUIRE_NOTHROW(proxy.Call("detsize", {}, -1, GET)); } +TEST_CASE("settingslist", "[.cmd][.new]") { + Detector det; + CmdProxy proxy(&det); + auto det_type = det.getDetectorType().squash(); + if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) { + REQUIRE_THROWS(proxy.Call("settingslist", {}, -1, GET)); + } else { + REQUIRE_NOTHROW(proxy.Call("settingslist", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("settingslist", {}, -1, PUT)); + } +} + TEST_CASE("settings", "[.cmd][.new]") { Detector det; CmdProxy proxy(&det); diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 7561d9085..ef9dbfc52 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -36,6 +36,7 @@ ClientInterface::ClientInterface(int portNumber) portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2), server(portNumber) { functionTable(); + parentThreadId = syscall(SYS_gettid); // start up tcp thread tcpThread = sls::make_unique(&ClientInterface::startTCPServer, this); @@ -71,8 +72,8 @@ void ClientInterface::registerCallBackRawDataModifyReady( } void ClientInterface::startTCPServer() { - LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) - << "]"; + tcpThreadId = syscall(SYS_gettid); + LOG(logINFOBLUE) << "Created [ TCP server Tid: " << tcpThreadId << "]"; LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << '\n'; // server = sls::make_unique(portNumber); @@ -102,8 +103,7 @@ void ClientInterface::startTCPServer() { if (receiver) { receiver->shutDownUDPSockets(); } - LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) - << "]"; + LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << tcpThreadId << "]"; } // clang-format off @@ -199,6 +199,7 @@ int ClientInterface::functionTable(){ flist[F_GET_RECEIVER_PROGRESS] = &ClientInterface::get_progress; flist[F_SET_RECEIVER_NUM_GATES] = &ClientInterface::set_num_gates; flist[F_SET_RECEIVER_GATE_DELAY] = &ClientInterface::set_gate_delay; + flist[F_GET_RECEIVER_THREAD_IDS] = &ClientInterface::get_thread_ids; for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) { LOG(logDEBUG1) << "function fnum: " << i << " (" << @@ -564,6 +565,8 @@ void ClientInterface::setDetectorType(detectorType arg) { if (rawDataModifyReadyCallBack != nullptr) impl()->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack, pRawDataReady); + + impl()->setThreadIds(parentThreadId, tcpThreadId); } int ClientInterface::set_roi(Interface &socket) { @@ -1746,4 +1749,10 @@ int ClientInterface::set_gate_delay(Interface &socket) { std::to_string(gateIndex)); } return socket.Send(OK); +} + +int ClientInterface::get_thread_ids(Interface &socket) { + auto retval = impl()->getThreadIds(); + LOG(logDEBUG1) << "thread ids retval: " << sls::ToString(retval); + return socket.sendResult(retval); } \ No newline at end of file diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index 76eb3aa2f..c34e2cc50 100644 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -155,6 +155,7 @@ class ClientInterface : private virtual slsDetectorDefs { int get_progress(sls::ServerInterface &socket); int set_num_gates(sls::ServerInterface &socket); int set_gate_delay(sls::ServerInterface &socket); + int get_thread_ids(sls::ServerInterface &socket); Implementation *impl() { if (receiver != nullptr) { @@ -179,4 +180,7 @@ class ClientInterface : private virtual slsDetectorDefs { void (*rawDataModifyReadyCallBack)(char *, char *, uint32_t &, void *) = nullptr; void *pRawDataReady{nullptr}; + + pid_t parentThreadId{0}; + pid_t tcpThreadId{0}; }; diff --git a/slsReceiverSoftware/src/HDF5File.cpp b/slsReceiverSoftware/src/HDF5File.cpp index 136bbf2c3..707c9fe35 100644 --- a/slsReceiverSoftware/src/HDF5File.cpp +++ b/slsReceiverSoftware/src/HDF5File.cpp @@ -31,48 +31,29 @@ HDF5File::HDF5File(int ind, uint32_t *maxf, int *nd, std::string *fname, parameterNames.clear(); parameterDataTypes.clear(); - parameterNames.push_back("frame number"); - parameterDataTypes.push_back(PredType::STD_U64LE); - - parameterNames.push_back("exp length or sub exposure time"); - parameterDataTypes.push_back(PredType::STD_U32LE); - - parameterNames.push_back("packets caught"); - parameterDataTypes.push_back(PredType::STD_U32LE); - - parameterNames.push_back("bunch id"); - parameterDataTypes.push_back(PredType::STD_U64LE); - - parameterNames.push_back("timestamp"); - parameterDataTypes.push_back(PredType::STD_U64LE); - - parameterNames.push_back("mod id"); - parameterDataTypes.push_back(PredType::STD_U16LE); - - parameterNames.push_back("row"); - parameterDataTypes.push_back(PredType::STD_U16LE); - - parameterNames.push_back("column"); - parameterDataTypes.push_back(PredType::STD_U16LE); - - parameterNames.push_back("reserved"); - parameterDataTypes.push_back(PredType::STD_U16LE); - - parameterNames.push_back("debug"); - parameterDataTypes.push_back(PredType::STD_U32LE); - - parameterNames.push_back("round robin number"); - parameterDataTypes.push_back(PredType::STD_U16LE); - - parameterNames.push_back("detector type"); - parameterDataTypes.push_back(PredType::STD_U8LE); - - parameterNames.push_back("detector header version"); - parameterDataTypes.push_back(PredType::STD_U8LE); - - parameterNames.push_back("packets caught bit mask"); + parameterNames = std::vector{ + "frame number", + "exp length or sub exposure time", + "packets caught", + "bunch id", + "timestamp", + "mod id", + "row", + "column", + "reserved", + "debug", + "round robin number", + "detector type", + "detector header version", + "packets caught bit mask", + }; StrType strdatatype(PredType::C_S1, sizeof(bitset_storage)); - parameterDataTypes.push_back(strdatatype); + parameterDataTypes = std::vector{ + PredType::STD_U64LE, PredType::STD_U32LE, PredType::STD_U32LE, + PredType::STD_U64LE, PredType::STD_U64LE, PredType::STD_U16LE, + PredType::STD_U16LE, PredType::STD_U16LE, PredType::STD_U16LE, + PredType::STD_U32LE, PredType::STD_U16LE, PredType::STD_U8LE, + PredType::STD_U8LE, strdatatype}; } HDF5File::~HDF5File() { CloseAllFiles(); } @@ -461,9 +442,9 @@ void HDF5File::CreateDataFile() { paralist.setChunk(1, chunkpara_dims); for (unsigned int i = 0; i < parameterNames.size(); ++i) { - DataSet *ds = new DataSet( - filefd->createDataSet(parameterNames[i], parameterDataTypes[i], - *dataspace_para, paralist)); + DataSet *ds = new DataSet(filefd->createDataSet( + parameterNames[i].c_str(), parameterDataTypes[i], + *dataspace_para, paralist)); dataset_para.push_back(ds); } } catch (const Exception &error) { @@ -1011,7 +992,7 @@ void HDF5File::CreateVirtualDataFile(uint32_t maxFramesPerFile, uint64_t numf) { for (unsigned int k = 0; k < parameterNames.size(); ++k) { if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, relative_srcFileName.c_str(), - parameterNames[k], + parameterNames[k].c_str(), srcDataspace_para) < 0) { throw sls::RuntimeError( "Could not set mapping for paramter " + @@ -1043,7 +1024,7 @@ void HDF5File::CreateVirtualDataFile(uint32_t maxFramesPerFile, uint64_t numf) { // virtual parameter dataset for (unsigned int i = 0; i < parameterNames.size(); ++i) { hid_t vdsdataset_para = H5Dcreate2( - virtualfd, parameterNames[i], + virtualfd, parameterNames[i].c_str(), GetDataTypeinC(parameterDataTypes[i]), vdsDataspace_para, H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT); if (vdsdataset_para < 0) @@ -1134,9 +1115,8 @@ void HDF5File::LinkVirtualInMaster(std::string fname, std::string dsetname) { (std::string(parameterNames[i])).c_str()); if (H5Lcreate_external(relative_virtualfname.c_str(), - (std::string(parameterNames[i])).c_str(), - mfd, linkname, H5P_DEFAULT, - H5P_DEFAULT) < 0) { + parameterNames[i].c_str(), mfd, linkname, + H5P_DEFAULT, H5P_DEFAULT) < 0) { H5Fclose(mfd); mfd = 0; throw sls::RuntimeError( diff --git a/slsReceiverSoftware/src/HDF5File.h b/slsReceiverSoftware/src/HDF5File.h index 961db527b..8827b30fe 100644 --- a/slsReceiverSoftware/src/HDF5File.h +++ b/slsReceiverSoftware/src/HDF5File.h @@ -84,7 +84,7 @@ class HDF5File : private virtual slsDetectorDefs, public File { uint64_t numActualPacketsInFile; int numFilesinAcquisition; - std::vector parameterNames; + std::vector parameterNames; std::vector parameterDataTypes; DataSpace *dataspace_para; std::vector dataset_para; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 75398a59f..31e7304ca 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -445,6 +445,37 @@ void Implementation::setFramePaddingEnable(const bool i) { LOG(logINFO) << "Frame Padding: " << framePadding; } +void Implementation::setThreadIds(const pid_t parentTid, const pid_t tcpTid) { + parentThreadId = parentTid; + tcpThreadId = tcpTid; +} + +std::array Implementation::getThreadIds() const { + LOG(logDEBUG3) << __SHORT_AT__ << " called"; + + std::array retval{}; + int id = 0; + retval[id++] = parentThreadId; + retval[id++] = tcpThreadId; + retval[id++] = listener[0]->GetThreadId(); + retval[id++] = dataProcessor[0]->GetThreadId(); + if (dataStreamEnable) { + retval[id++] = dataStreamer[0]->GetThreadId(); + } else { + retval[id++] = 0; + } + if (numThreads == 2) { + retval[id++] = listener[1]->GetThreadId(); + retval[id++] = dataProcessor[1]->GetThreadId(); + if (dataStreamEnable) { + retval[id++] = dataStreamer[1]->GetThreadId(); + } else { + retval[id++] = 0; + } + } + return retval; +} + /************************************************** * * * File Parameters * diff --git a/slsReceiverSoftware/src/Implementation.h b/slsReceiverSoftware/src/Implementation.h index 0a91fd3c7..5f6e94374 100644 --- a/slsReceiverSoftware/src/Implementation.h +++ b/slsReceiverSoftware/src/Implementation.h @@ -42,6 +42,8 @@ class Implementation : private virtual slsDetectorDefs { void setFrameDiscardPolicy(const frameDiscardPolicy i); bool getFramePaddingEnable() const; void setFramePaddingEnable(const bool i); + void setThreadIds(const pid_t parentTid, const pid_t tcpTid); + std::array getThreadIds() const; /************************************************** * * @@ -269,6 +271,8 @@ class Implementation : private virtual slsDetectorDefs { uint32_t fifoDepth; frameDiscardPolicy frameDiscardMode; bool framePadding; + pid_t parentThreadId; + pid_t tcpThreadId; // file parameters fileFormat fileFormatType; diff --git a/slsReceiverSoftware/src/ThreadObject.cpp b/slsReceiverSoftware/src/ThreadObject.cpp index 45f84580f..0f8f9b9e3 100644 --- a/slsReceiverSoftware/src/ThreadObject.cpp +++ b/slsReceiverSoftware/src/ThreadObject.cpp @@ -28,6 +28,8 @@ ThreadObject::~ThreadObject() { sem_destroy(&semaphore); } +pid_t ThreadObject::GetThreadId() const { return threadId; } + bool ThreadObject::IsRunning() const { return runningFlag; } void ThreadObject::StartRunning() { runningFlag = true; } @@ -35,8 +37,9 @@ void ThreadObject::StartRunning() { runningFlag = true; } void ThreadObject::StopRunning() { runningFlag = false; } void ThreadObject::RunningThread() { + threadId = syscall(SYS_gettid); LOG(logINFOBLUE) << "Created [ " << type << "Thread " << index - << ", Tid: " << syscall(SYS_gettid) << "]"; + << ", Tid: " << threadId << "]"; while (!killThread) { while (IsRunning()) { ThreadExecution(); @@ -45,7 +48,8 @@ void ThreadObject::RunningThread() { sem_wait(&semaphore); } LOG(logINFOBLUE) << "Exiting [ " << type << " Thread " << index - << ", Tid: " << syscall(SYS_gettid) << "]"; + << ", Tid: " << threadId << "]"; + threadId = 0; } void ThreadObject::Continue() { sem_post(&semaphore); } diff --git a/slsReceiverSoftware/src/ThreadObject.h b/slsReceiverSoftware/src/ThreadObject.h index 3003d0be3..4216c4360 100644 --- a/slsReceiverSoftware/src/ThreadObject.h +++ b/slsReceiverSoftware/src/ThreadObject.h @@ -25,10 +25,12 @@ class ThreadObject : private virtual slsDetectorDefs { std::thread threadObject; sem_t semaphore; const std::string type; + pid_t threadId{0}; public: ThreadObject(int threadIndex, std::string threadType); virtual ~ThreadObject(); + pid_t GetThreadId() const; bool IsRunning() const; void StartRunning(); void StopRunning(); diff --git a/slsSupportLib/include/ToString.h b/slsSupportLib/include/ToString.h index 267221516..ca9bab50b 100644 --- a/slsSupportLib/include/ToString.h +++ b/slsSupportLib/include/ToString.h @@ -34,6 +34,8 @@ std::string ToString(const defs::externalSignalFlag s); std::string ToString(const defs::readoutMode s); std::string ToString(const defs::frameModeType s); std::string ToString(const defs::detectorModeType s); +std::string ToString(const defs::dacIndex s); +std::string ToString(const std::vector &vec); std::string ToString(const defs::burstMode s); std::string ToString(const defs::timingSourceType s); @@ -261,4 +263,13 @@ ToString(const T &obj) { return obj.str(); } +template +std::vector StringTo(const std::vector& strings){ + std::vector result; + result.reserve(strings.size()); + for (const auto& s : strings) + result.push_back(StringTo(s)); + return result; +} + } // namespace sls diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index f63a6e888..52ce82470 100644 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -64,6 +64,8 @@ #define DEFAULT_STREAMING_TIMER_IN_MS 200 +#define NUM_RX_THREAD_IDS 8 + #ifdef __cplusplus class slsDetectorDefs { public: @@ -230,14 +232,42 @@ typedef struct { detector dacs indexes */ enum dacIndex { - THRESHOLD, - CALIBRATION_PULSE, - TRIMBIT_SIZE, - PREAMP, - SHAPER1, - SHAPER2, - TEMPERATURE_ADC, - TEMPERATURE_FPGA, + 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, + VSVP, + VTRIM, + VRPREAMP, + VRSHAPER, + VSVN, + VTGSTV, + VCMP_LL, + VCMP_LR, + VCAL, + VCMP_RL, + RXB_RB, + RXB_LB, + VCMP_RR, + VCP, + VCN, + VISHAPER, + VTHRESHOLD, + IO_DELAY, VREF_DS, VCASCN_PB, VCASCP_PB, @@ -246,42 +276,12 @@ typedef struct { VIN_CM, VREF_COMP, IB_TESTC, - SVP, - SVN, - VTR, - VRF, - VRS, - VTGSTV, - VCMP_LL, - VCMP_LR, - CAL, - VCMP_RL, - VCMP_RR, - RXB_RB, - RXB_LB, - VCP, - VCN, - VIS, - IO_DELAY, - ADC_VPP, - HIGH_VOLTAGE, - TEMPERATURE_FPGAEXT, - TEMPERATURE_10GE, - TEMPERATURE_DCDC, - TEMPERATURE_SODL, - TEMPERATURE_SODR, - TEMPERATURE_FPGA2, - TEMPERATURE_FPGA3, - VIPRE, - VIINSH, - VDCSH, - VTH2, - VPL, - VTH3, - CASSH, - CAS, - VICIN, - VIPRE_OUT, + VB_COMP, + VDD_PROT, + VIN_COM, + VREF_PRECH, + VB_PIXBUF, + VB_DS, VREF_H_ADC, VB_COMP_FE, VB_COMP_ADC, @@ -290,22 +290,39 @@ typedef struct { VB_OPA_1ST, VREF_COMP_FE, VCOM_ADC1, - VREF_PRECH, VREF_L_ADC, VREF_CDS, VB_CS, VB_OPA_FD, VCOM_ADC2, - VB_DS, - VB_COMP, - VB_PIXBUF, - VIN_COM, - VDD_PROT, + VCASSH, + VTH2, + VRSHAPER_N, + VIPRE_OUT, + VTH3, + VTH1, + VICIN, + VCAS, + VCAL_N, + VIPRE, + VCAL_P, + VDCSH, VBP_COLBUF, VB_SDA, VCASC_SFP, VIPRE_CDS, IBIAS_SFP, + ADC_VPP, + HIGH_VOLTAGE, + TEMPERATURE_ADC, + TEMPERATURE_FPGA, + TEMPERATURE_FPGAEXT, + TEMPERATURE_10GE, + TEMPERATURE_DCDC, + TEMPERATURE_SODL, + TEMPERATURE_SODR, + TEMPERATURE_FPGA2, + TEMPERATURE_FPGA3, V_POWER_A = 100, V_POWER_B = 101, V_POWER_C = 102, diff --git a/slsSupportLib/include/sls_detector_funcs.h b/slsSupportLib/include/sls_detector_funcs.h index ab70c32c6..aad684fc1 100755 --- a/slsSupportLib/include/sls_detector_funcs.h +++ b/slsSupportLib/include/sls_detector_funcs.h @@ -303,6 +303,7 @@ enum detFuncs { F_SETUP_RECEIVER, F_SET_RECEIVER_NUM_GATES, F_SET_RECEIVER_GATE_DELAY, + F_GET_RECEIVER_THREAD_IDS, NUM_REC_FUNCTIONS }; @@ -605,8 +606,9 @@ const char* getFunctionNameFromEnum(enum detFuncs func) { case F_GET_ADDITIONAL_JSON_PARAMETER: return "F_GET_ADDITIONAL_JSON_PARAMETER"; case F_GET_RECEIVER_PROGRESS: return "F_GET_RECEIVER_PROGRESS"; case F_SETUP_RECEIVER: return "F_SETUP_RECEIVER"; - case F_SET_RECEIVER_NUM_GATES: return "F_SET_RECEIVER_NUM_GATES" ; - case F_SET_RECEIVER_GATE_DELAY: return "F_SET_RECEIVER_GATE_DELAY" ; + case F_SET_RECEIVER_NUM_GATES: return "F_SET_RECEIVER_NUM_GATES"; + case F_SET_RECEIVER_GATE_DELAY: return "F_SET_RECEIVER_GATE_DELAY"; + case F_GET_RECEIVER_THREAD_IDS: return "F_GET_RECEIVER_THREAD_IDS"; case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS"; default: return "Unknown Function"; diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index 40aa820fa..8207dce86 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -3,10 +3,10 @@ #define APILIB 0x200409 #define APIRECEIVER 0x200409 #define APIGUI 0x200409 -#define APICTB 0x200605 -#define APIGOTTHARD 0x200605 -#define APIGOTTHARD2 0x200605 -#define APIJUNGFRAU 0x200605 -#define APIMOENCH 0x200605 -#define APIEIGER 0x200605 -#define APIMYTHEN3 0x200608 +#define APICTB 0x200609 +#define APIGOTTHARD 0x200609 +#define APIGOTTHARD2 0x200609 +#define APIJUNGFRAU 0x200609 +#define APIMYTHEN3 0x200609 +#define APIMOENCH 0x200608 +#define APIEIGER 0x200609 diff --git a/slsSupportLib/src/ToString.cpp b/slsSupportLib/src/ToString.cpp index cc6eabbaa..8b33f553d 100644 --- a/slsSupportLib/src/ToString.cpp +++ b/slsSupportLib/src/ToString.cpp @@ -215,6 +215,184 @@ std::string ToString(const defs::detectorModeType s) { } } +std::string ToString(const defs::dacIndex s) { + switch (s) { + case defs::DAC_0: + return std::string("dac 0"); + case defs::DAC_1: + return std::string("dac 1"); + case defs::DAC_2: + return std::string("dac 2"); + case defs::DAC_3: + return std::string("dac 3"); + case defs::DAC_4: + return std::string("dac 4"); + case defs::DAC_5: + return std::string("dac 5"); + case defs::DAC_6: + return std::string("dac 6"); + case defs::DAC_7: + return std::string("dac 7"); + case defs::DAC_8: + return std::string("dac 8"); + case defs::DAC_9: + return std::string("dac 9"); + case defs::DAC_10: + return std::string("dac 10"); + case defs::DAC_11: + return std::string("dac 11"); + case defs::DAC_12: + return std::string("dac 12"); + case defs::DAC_13: + return std::string("dac 13"); + case defs::DAC_14: + return std::string("dac 14"); + case defs::DAC_15: + return std::string("dac 15"); + case defs::DAC_16: + return std::string("dac 16"); + case defs::DAC_17: + return std::string("dac 17"); + case defs::VSVP: + return std::string("vsvp"); + case defs::VTRIM: + return std::string("vtrim"); + case defs::VRPREAMP: + return std::string("vrpreamp"); + case defs::VRSHAPER: + return std::string("vrshaper"); + case defs::VSVN: + return std::string("vsvn"); + case defs::VTGSTV: + return std::string("vtgstv"); + case defs::VCMP_LL: + return std::string("vcmp_ll"); + case defs::VCMP_LR: + return std::string("vcmp_lr"); + case defs::VCAL: + return std::string("vcal"); + case defs::VCMP_RL: + return std::string("vcmp_rl"); + case defs::RXB_RB: + return std::string("rxb_rb"); + case defs::RXB_LB: + return std::string("rxb_lb"); + case defs::VCMP_RR: + return std::string("vcmp_rr"); + case defs::VCP: + return std::string("vcp"); + case defs::VCN: + return std::string("vcn"); + case defs::VISHAPER: + return std::string("vishaper"); + case defs::VTHRESHOLD: + return std::string("vthreshold"); + case defs::VREF_DS: + return std::string("vref_ds"); + case defs::VCASCN_PB: + return std::string("vcascn_pb"); + case defs::VCASCP_PB: + return std::string("vcascp_pb"); + case defs::VOUT_CM: + return std::string("vout_cm"); + case defs::VCASC_OUT: + return std::string("vcasc_out"); + case defs::VIN_CM: + return std::string("vin_cm"); + case defs::VREF_COMP: + return std::string("vref_comp"); + case defs::IB_TESTC: + return std::string("ib_test_c"); + case defs::VB_COMP: + return std::string("vb_comp"); + case defs::VDD_PROT: + return std::string("vdd_prot"); + case defs::VIN_COM: + return std::string("vin_com"); + case defs::VREF_PRECH: + return std::string("vref_prech"); + case defs::VB_PIXBUF: + return std::string("vb_pixbuf"); + case defs::VB_DS: + return std::string("vb_ds"); + case defs::VREF_H_ADC: + return std::string("vref_h_adc"); + case defs::VB_COMP_FE: + return std::string("vb_comp_fe"); + case defs::VB_COMP_ADC: + return std::string("vb_comp_adc"); + case defs::VCOM_CDS: + return std::string("vcom_cds"); + case defs::VREF_RSTORE: + return std::string("vref_rstore"); + case defs::VB_OPA_1ST: + return std::string("vb_opa_1st"); + case defs::VREF_COMP_FE: + return std::string("vref_comp_fe"); + case defs::VCOM_ADC1: + return std::string("vcom_adc1"); + case defs::VREF_L_ADC: + return std::string("vref_l_adc"); + case defs::VREF_CDS: + return std::string("vref_cds"); + case defs::VB_CS: + return std::string("vb_cs"); + case defs::VB_OPA_FD: + return std::string("vb_opa_fd"); + case defs::VCOM_ADC2: + return std::string("vcom_adc2"); + case defs::VCASSH: + return std::string("vcassh"); + case defs::VTH2: + return std::string("vth2"); + case defs::VRSHAPER_N: + return std::string("vrshaper_n"); + case defs::VIPRE_OUT: + return std::string("vipre_out"); + case defs::VTH3: + return std::string("vth3"); + case defs::VTH1: + return std::string("vth1"); + case defs::VICIN: + return std::string("vicin"); + case defs::VCAS: + return std::string("vcas"); + case defs::VCAL_N: + return std::string("vcal_n"); + case defs::VIPRE: + return std::string("vipre"); + case defs::VCAL_P: + return std::string("vcal_p"); + case defs::VDCSH: + return std::string("vdcsh"); + case defs::VBP_COLBUF: + return std::string("vbp_colbuf"); + case defs::VB_SDA: + return std::string("vb_sda"); + case defs::VCASC_SFP: + return std::string("vcasc_sfp"); + case defs::VIPRE_CDS: + return std::string("vipre_cds"); + case defs::IBIAS_SFP: + return std::string("ibias_sfp"); + default: + return std::string("Unknown"); + } +} + +std::string ToString(const std::vector &vec) { + std::ostringstream os; + os << '['; + if (!vec.empty()) { + auto it = vec.begin(); + os << ToString(*it++); + while (it != vec.end()) + os << ", " << ToString(*it++); + } + os << ']'; + return os.str(); +} + std::string ToString(const defs::burstMode s) { switch (s) { case defs::BURST_OFF: @@ -392,26 +570,164 @@ template <> defs::detectorModeType StringTo(const std::string &s) { } template <> defs::dacIndex StringTo(const std::string &s) { + if (s == "dac 0") + return defs::DAC_0; + if (s == "dac 1") + return defs::DAC_1; + if (s == "dac 2") + return defs::DAC_2; + if (s == "dac 3") + return defs::DAC_3; + if (s == "dac 4") + return defs::DAC_4; + if (s == "dac 5") + return defs::DAC_5; + if (s == "dac 6") + return defs::DAC_6; + if (s == "dac 7") + return defs::DAC_7; + if (s == "dac 8") + return defs::DAC_8; + if (s == "dac 9") + return defs::DAC_9; + if (s == "dac 10") + return defs::DAC_10; + if (s == "dac 11") + return defs::DAC_11; + if (s == "dac 12") + return defs::DAC_12; + if (s == "dac 13") + return defs::DAC_13; + if (s == "dac 14") + return defs::DAC_14; + if (s == "dac 15") + return defs::DAC_15; + if (s == "dac 16") + return defs::DAC_16; + if (s == "dac 17") + return defs::DAC_17; + if (s == "vsvp") + return defs::VSVP; + if (s == "vtrim") + return defs::VTRIM; + if (s == "vrpreamp") + return defs::VRPREAMP; + if (s == "vrshaper") + return defs::VRSHAPER; + if (s == "vsvn") + return defs::VSVN; + if (s == "vtgstv") + return defs::VTGSTV; if (s == "vcmp_ll") return defs::VCMP_LL; if (s == "vcmp_lr") return defs::VCMP_LR; + if (s == "vcal") + return defs::VCAL; if (s == "vcmp_rl") return defs::VCMP_RL; + if (s == "rxb_rb") + return defs::RXB_RB; + if (s == "rxb_lb") + return defs::RXB_LB; if (s == "vcmp_rr") return defs::VCMP_RR; - if (s == "vthreshold") - return defs::THRESHOLD; - if (s == "vrf") - return defs::VRF; - if (s == "vrs") - return defs::VRS; - if (s == "vtr") - return defs::VTR; - if (s == "vcall") - return defs::CAL; if (s == "vcp") return defs::VCP; + if (s == "vcn") + return defs::VCN; + if (s == "vishaper") + return defs::VISHAPER; + if (s == "vthreshold") + return defs::VTHRESHOLD; + if (s == "vref_ds") + return defs::VREF_DS; + if (s == "vcascn_pb") + return defs::VCASCN_PB; + if (s == "vcascp_pb") + return defs::VCASCP_PB; + if (s == "vout_cm") + return defs::VOUT_CM; + if (s == "vcasc_out") + return defs::VCASC_OUT; + if (s == "vin_cm") + return defs::VIN_CM; + if (s == "vref_comp") + return defs::VREF_COMP; + if (s == "ib_test_c") + return defs::IB_TESTC; + if (s == "vb_comp") + return defs::VB_COMP; + if (s == "vdd_prot") + return defs::VDD_PROT; + if (s == "vin_com") + return defs::VIN_COM; + if (s == "vref_prech") + return defs::VREF_PRECH; + if (s == "vb_pixbuf") + return defs::VB_PIXBUF; + if (s == "vb_ds") + return defs::VB_DS; + if (s == "vref_h_adc") + return defs::VREF_H_ADC; + if (s == "vb_comp_fe") + return defs::VB_COMP_FE; + if (s == "vb_comp_adc") + return defs::VB_COMP_ADC; + if (s == "vcom_cds") + return defs::VCOM_CDS; + if (s == "vref_rstore") + return defs::VREF_RSTORE; + if (s == "vb_opa_1st") + return defs::VB_OPA_1ST; + if (s == "vref_comp_fe") + return defs::VREF_COMP_FE; + if (s == "vcom_adc1") + return defs::VCOM_ADC1; + if (s == "vref_l_adc") + return defs::VREF_L_ADC; + if (s == "vref_cds") + return defs::VREF_CDS; + if (s == "vb_cs") + return defs::VB_CS; + if (s == "vb_opa_fd") + return defs::VB_OPA_FD; + if (s == "vcom_adc2") + return defs::VCOM_ADC2; + if (s == "vcassh") + return defs::VCASSH; + if (s == "vth2") + return defs::VTH2; + if (s == "vrshaper_n") + return defs::VRSHAPER_N; + if (s == "vipre_out") + return defs::VIPRE_OUT; + if (s == "vth3") + return defs::VTH3; + if (s == "vth1") + return defs::VTH1; + if (s == "vicin") + return defs::VICIN; + if (s == "vcas") + return defs::VCAS; + if (s == "vcal_n") + return defs::VCAL_N; + if (s == "vipre") + return defs::VIPRE; + if (s == "vcal_p") + return defs::VCAL_P; + if (s == "vdcsh") + return defs::VDCSH; + if (s == "vbp_colbuf") + return defs::VBP_COLBUF; + if (s == "vb_sda") + return defs::VB_SDA; + if (s == "vcasc_sfp") + return defs::VCASC_SFP; + if (s == "vipre_cds") + return defs::VIPRE_CDS; + if (s == "ibias_sfp") + return defs::IBIAS_SFP; throw sls::RuntimeError("Unknown dac Index " + s); } diff --git a/slsSupportLib/tests/test-ToString.cpp b/slsSupportLib/tests/test-ToString.cpp index 952f71182..169755584 100644 --- a/slsSupportLib/tests/test-ToString.cpp +++ b/slsSupportLib/tests/test-ToString.cpp @@ -232,9 +232,32 @@ TEST_CASE("Streaming of slsDetectorDefs::ROI") { REQUIRE(oss.str() == "[-10, 1]"); } -TEST_CASE("std::array"){ - std::array arr{4,6,7}; +TEST_CASE("std::array") { + std::array arr{4, 6, 7}; REQUIRE(ToString(arr) == "[4, 6, 7]"); } +TEST_CASE("string to dac index") { + // test a few dacs + REQUIRE(defs::VCAL == StringTo("vcal")); + REQUIRE(defs::VIN_CM == StringTo("vin_cm")); + REQUIRE(defs::VB_DS == StringTo("vb_ds")); +} +TEST_CASE("dac index to string") { + REQUIRE(ToString(defs::VCAL) == "vcal"); + REQUIRE(ToString(defs::VB_DS) == "vb_ds"); +} + +TEST_CASE("convert vector of strings to dac index") { + std::vector dacs{"vcassh", "vth2", "vrshaper"}; + std::vector daci{defs::VCASSH, defs::VTH2, defs::VRSHAPER}; + auto r = StringTo(dacs); + REQUIRE(r == daci); +} + +TEST_CASE("vector of dac index to string") { + std::vector daci{defs::VCASSH, defs::VTH2, defs::VRSHAPER}; + auto r = ToString(daci); + REQUIRE(r == "[vcassh, vth2, vrshaper]"); +} \ No newline at end of file