diff --git a/slsDetectorGui/forms/form_tab_dataoutput.ui b/slsDetectorGui/forms/form_tab_dataoutput.ui index 7593e0dc2..b34600481 100755 --- a/slsDetectorGui/forms/form_tab_dataoutput.ui +++ b/slsDetectorGui/forms/form_tab_dataoutput.ui @@ -442,11 +442,6 @@ Disabled if receiver pc is not same as client pc. Binary - - - ASCII - - HDF5 diff --git a/slsDetectorGui/include/qDefs.h b/slsDetectorGui/include/qDefs.h index cb71e5f98..415c5fa56 100755 --- a/slsDetectorGui/include/qDefs.h +++ b/slsDetectorGui/include/qDefs.h @@ -244,6 +244,28 @@ class qDefs : public QWidget { } }; + // executing multiSlsDetector funtion and using return value to set QWidget function + // (handling -1 for comboboxes) + template + static void IgnoreNonCriticalExceptionsandMinus1(multiSlsDetector* det, + const std::string message, const std::string source, + W* wid, void (W::*someQfunc)(WRT), + RT (multiSlsDetector::*somefunc)(CT...), + typename NonDeduced::type... Args) { + try { + int val = static_cast((det->*somefunc)(Args...)); + if (val == -1) { + Message(qDefs::WARNING, message + std::string(" is inconsistent for all detectors\n"), source); + } else { + (wid->*someQfunc)(val); + } + } + // catch them here as they are not critical + catch (const sls::NonCriticalError &e) { + ExceptionMessage(message, e.what(), source); + } + }; + // executing multiSlsDetector funtion and returning its value (integers, where value cannot be -1) /* can easily get out of hand diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp index 12b6dd734..86b1a42fc 100755 --- a/slsDetectorGui/src/qTabAdvanced.cpp +++ b/slsDetectorGui/src/qTabAdvanced.cpp @@ -159,7 +159,7 @@ void qTabAdvanced::GetControlPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get detector control port." + "Could not get detector control port.", "qTabAdvanced::GetControlPort", spinControlPort, &QSpinBox::setValue, @@ -174,7 +174,7 @@ void qTabAdvanced::GetStopPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get detector stop port." + "Could not get detector stop port.", "qTabAdvanced::GetStopPort", spinStopPort, &QSpinBox::setValue, @@ -189,7 +189,7 @@ void qTabAdvanced::GetDetectorUDPIP() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get detector UDP IP." + "Could not get detector UDP IP.", "qTabAdvanced::GetDetectorUDPIP", dispDetectorUDPIP, &QLineEdit::setText, @@ -204,7 +204,7 @@ void qTabAdvanced::GetDetectorUDPMAC() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get detector UDP MAC." + "Could not get detector UDP MAC.", "qTabAdvanced::GetDetectorUDPMAC", dispDetectorUDPMAC, &QLineEdit::setText, @@ -219,7 +219,7 @@ void qTabAdvanced::GetCltZMQPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get client zmq port." + "Could not get client zmq port.", "qTabAdvanced::GetCltZMQPort", spinZMQPort, &QSpinBox::setValue, @@ -234,7 +234,7 @@ void qTabAdvanced::GetCltZMQIP() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get client zmq ip." + "Could not get client zmq ip.", "qTabAdvanced::GetCltZMQIP", dispZMQIP, &QLineEdit::setText, @@ -249,7 +249,7 @@ void qTabAdvanced::GetRxrHostname() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver hostname." + "Could not get receiver hostname.", "qTabAdvanced::GetRxrHostname", dispRxrHostname, &QLineEdit::setText, @@ -300,7 +300,7 @@ void qTabAdvanced::GetRxrTCPPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver tcp port." + "Could not get receiver tcp port.", "qTabAdvanced::GetRxrTCPPort", spinRxrTCPPort, &QSpinBox::setValue, @@ -315,7 +315,7 @@ void qTabAdvanced::GetRxrUDPPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver udp port." + "Could not get receiver udp port.", "qTabAdvanced::GetRxrUDPPort", spinRxrUDPPort, &QSpinBox::setValue, @@ -330,7 +330,7 @@ void qTabAdvanced::GetRxrUDPIP() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver udp ip." + "Could not get receiver udp ip.", "qTabAdvanced::GetRxrUDPIP", dispRxrUDPIP, &QLineEdit::setText, @@ -345,7 +345,7 @@ void qTabAdvanced::GetRxrUDPMAC() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver udp mac." + "Could not get receiver udp mac.", "qTabAdvanced::GetRxrUDPMAC", dispRxrUDPMAC, &QLineEdit::setText, @@ -360,7 +360,7 @@ void qTabAdvanced::GetRxrZMQPort() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver zmq port." + "Could not get receiver zmq port.", "qTabAdvanced::GetRxrZMQPort", spinRxrZMQPort, &QSpinBox::setValue, @@ -375,7 +375,7 @@ void qTabAdvanced::GetRxrZMQIP() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get receiver zmq ip." + "Could not get receiver zmq ip.", "qTabAdvanced::GetRxrZMQIP", dispRxrZMQIP, &QLineEdit::setText, @@ -710,7 +710,7 @@ void qTabAdvanced::SetROI() { FILE_LOG(logINFO) << "Setting ROI:" << nroi; qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not set these ROIs." + "Could not set these ROIs.", "qTabAdvanced::SetROI", &multiSlsDetector::setROI, nroi, roi, -1); @@ -724,7 +724,7 @@ void qTabAdvanced::GetAllTrimbits() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get all trimbits value." + "Could not get all trimbits value.", "qTabAdvanced::GetAllTrimbits", spinSetAllTrimbits, &QSpinBox::setValue, @@ -736,8 +736,9 @@ void qTabAdvanced::GetAllTrimbits() { void qTabAdvanced::SetAllTrimbits() { int value = spinSetAllTrimbits->value(); FILE_LOG(logINFO) << "Setting all trimbits:" << value; + try { - myDet->setAllTrimbits(value, -1); + myDet->setAllTrimbits(value); } catch (const sls::NonCriticalError &e) { qDefs::ExceptionMessage("Could not set all trimbits.", e.what(), "qTabAdvanced::SetAllTrimbits"); GetAllTrimbits(); @@ -750,7 +751,7 @@ void qTabAdvanced::GetNumStoragecells() { qDefs::IgnoreNonCriticalExceptions( myDet, - "Could not get number of additional storage cells." + "Could not get number of additional storage cells.", "qTabAdvanced::GetNumStoragecells", spinNumStoragecells, &QSpinBox::setValue, @@ -775,11 +776,17 @@ void qTabAdvanced::GetSubExposureTime() { disconnect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubExposureTime())); try { - double value = (double)(myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME,-1) * (1E-9)); - qDefs::timeUnit unit; - double time = qDefs::getCorrectTime(unit, value); - spinSubExpTime->setValue(time); - comboSubExpTimeUnit->setCurrentIndex((int)unit); + int64_t retval = myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME); + if (retval == -1) { + qDefs::Message(qDefs::WARNING, "Subexptime is inconsistent for all detectors.", "qTabAdvanced::GetSubExposureTime"); + spinSubExpTime->setValue(-1); + } else { + double value = (double)( retval * (1E-9)); + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit, value); + spinSubExpTime->setValue(time); + comboSubExpTimeUnit->setCurrentIndex((int)unit); + } } catch (const sls::NonCriticalError &e) { qDefs::ExceptionMessage("Could not get sub exposure time.", e.what(), "qTabSettings::GetSubExposureTime"); } @@ -806,11 +813,17 @@ void qTabAdvanced::GetSubDeadTime() { disconnect(comboSubDeadTimeUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubDeadTime())); try { - double value = (double)(myDet->setTimer(slsDetectorDefs::SUBFRAME_DEADTIME,-1) * (1E-9)); - qDefs::timeUnit unit; - double time = qDefs::getCorrectTime(unit, value); - spinSubDeadTime->setValue(time); - comboSubDeadTimeUnit->setCurrentIndex((int)unit); + int64_t retval = myDet->setTimer(slsDetectorDefs::SUBFRAME_DEADTIME); + if (retval == -1) { + qDefs::Message(qDefs::WARNING, "Sub dead time is inconsistent for all detectors.", "qTabAdvanced::GetSubDeadTime"); + spinSubDeadTime->setValue(-1); + } else { + double value = (double)(retval * (1E-9)); + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit, value); + spinSubDeadTime->setValue(time); + comboSubDeadTimeUnit->setCurrentIndex((int)unit); + } } catch (const sls::NonCriticalError &e) { qDefs::ExceptionMessage("Could not get sub dead time.", e.what(), "qTabSettings::GetSubDeadTime"); } diff --git a/slsDetectorGui/src/qTabDataOutput.cpp b/slsDetectorGui/src/qTabDataOutput.cpp index 788b891cb..cc2b103b0 100755 --- a/slsDetectorGui/src/qTabDataOutput.cpp +++ b/slsDetectorGui/src/qTabDataOutput.cpp @@ -97,7 +97,7 @@ void qTabDataOutput::EnableBrowse() { btnOutputBrowse->setEnabled(true); } else { std::string hostname; - size_t len = 15; + const size_t len = 15; char host[len]{}; if (gethostname(host, len) == 0) { hostname.assign(host); @@ -117,17 +117,16 @@ void qTabDataOutput::EnableBrowse() { void qTabDataOutput::GetOutputDir() { - FILE_LOG(logDEBUG) << "Getting output directory"; + FILE_LOG(logDEBUG) << "Getting file path"; disconnect(dispOutputDir, SIGNAL(editingFinished()), this, SLOT(SetOutputDir())); - qDefs::IgnoreNonCriticalExceptions( - myDet, - "Could not get output file path." - "qTabDataOutput::GetOutputDir", - dispOutputDir, - &QLineEdit::setText, - &multiSlsDetector::getFilePath, comboDetector->currentIndex() - 1); + try { + std::string path = myDet->getFilePath(comboDetector->currentIndex() - 1); + dispOutputDir->setText(QString(path.c_str())); + } catch (const sls::NonCriticalError &e) { + qDefs::ExceptionMessage("Could not get file path.", e.what(), "qTabDataOutput::GetOutputDir"); + } connect(dispOutputDir, SIGNAL(editingFinished()), this, SLOT(SetOutputDir())); } @@ -140,9 +139,9 @@ void qTabDataOutput::BrowseOutputDir() { } void qTabDataOutput::SetOutputDir() { - FILE_LOG(logDEBUG) << "Setting output directory"; - QString path = dispOutputDir->text(); + FILE_LOG(logDEBUG) << "Setting output directory to " << path.toAscii().constData(); + // empty if (path.isEmpty()) { qDefs::Message(qDefs::WARNING, "Invalid Output Path. Must not be empty.", "qTabDataOutput::SetOutputDir"); @@ -169,10 +168,10 @@ void qTabDataOutput::GetFileFormat() { FILE_LOG(logDEBUG) << "Getting File Format"; disconnect(comboFileFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(SetFileFormat(int))); - qDefs::IgnoreNonCriticalExceptions( + qDefs::IgnoreNonCriticalExceptionsandMinus1( myDet, - "Could not get file format." - "qTabAdvanced::GetFileFormat", + "Could not get file format.", + "qTabDataOutput::GetFileFormat", comboFileFormat, &QComboBox::setCurrentIndex, &multiSlsDetector::getFileFormat, -1); @@ -181,7 +180,7 @@ void qTabDataOutput::GetFileFormat() { } void qTabDataOutput::SetFileFormat(int format) { - FILE_LOG(logINFO) << "Setting File Format"; + FILE_LOG(logINFO) << "Setting File Format to " << slsDetectorDefs::getFileFormatType((slsDetectorDefs::fileFormat)format); try { myDet->setFileFormat((slsDetectorDefs::fileFormat)comboFileFormat->currentIndex()); } catch (const sls::NonCriticalError &e) { @@ -190,6 +189,65 @@ void qTabDataOutput::SetFileFormat(int format) { } } +void qTabDataOutput::GetFileOverwrite() { + FILE_LOG(logDEBUG) << "Getting File Over Write Enable"; + disconnect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); + + try { + int retval = myDet->getFileOverWrite(); + if (retval == -1) { + qDefs::Message(qDefs::WARNING, "File over write is inconsistent for all detectors.", "qTabDataOutput::GetFileOverwrite"); + } else { + chkOverwriteEnable->setChecked(retval == 0 ? false : true); + } + } catch (const sls::NonCriticalError &e) { + qDefs::ExceptionMessage("Could not get file over write enable.", e.what(), "qTabDataOutput::GetFileOverwrite"); + } + + connect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); +} + +void qTabDataOutput::SetOverwriteEnable(bool enable) { + FILE_LOG(logINFO) << "Setting File Over Write Enable to " << enable; + + try { + myDet->setFileOverWrite(enable); + } catch (const sls::NonCriticalError &e) { + qDefs::ExceptionMessage("Could not set file over write enable.", e.what(), "qTabDataOutput::SetOverwriteEnable"); + GetFileOverwrite(); + } +} + +void qTabDataOutput::GetTenGigaEnable() { + FILE_LOG(logDEBUG) << "Getting 10GbE enable"; + disconnect(chkTenGiga, SIGNAL(toggled(bool)), this, SLOT(SetTenGigaEnable(bool))); + + try { + int retval = myDet->enableTenGigabitEthernet(); + if (retval == -1) { + qDefs::Message(qDefs::WARNING, "10GbE enable is inconsistent for all detectors.", "qTabDataOutput::GetTenGigaEnable"); + } else { + chkTenGiga->setChecked(retval == 0 ? false : true); + } + } catch (const sls::NonCriticalError &e) { + qDefs::ExceptionMessage("Could not get 10GbE enable.", e.what(), "qTabDataOutput::GetTenGigaEnable"); + } + + connect(chkTenGiga, SIGNAL(toggled(bool)), this, SLOT(SetTenGigaEnable(bool))); +} + +void qTabDataOutput::SetTenGigaEnable(bool enable) { + FILE_LOG(logINFO) << "Setting 10GbE to " << enable; + + try { + myDet->enableTenGigabitEthernet(enable); + } catch (const sls::NonCriticalError &e) { + qDefs::ExceptionMessage("Could not set 10GbE enable.", e.what(), "qTabDataOutput::SetTenGigaEnable"); + GetTenGigaEnable(); + } +} + + @@ -313,26 +371,7 @@ void qTabDataOutput::GetRateCorrection() { -void qTabDataOutput::GetTenGigaEnable(bool enable, int get) { - if (get || enable == -1) { - FILE_LOG(logDEBUG) << "Getting 10Gbe enable"; - } else { - FILE_LOG(logINFO) << (enable == 0 ? "Disabling" : "Enabling") << "10GbE"; - } - disconnect(chkTenGiga, SIGNAL(toggled(bool)), this, SLOT(GetTenGigaEnable(bool))); - int ret; - if (get) - ret = myDet->GetTenGigaEnable(-1); - else - ret = myDet->GetTenGigaEnable(enable); - if (ret > 0) - chkTenGiga->setChecked(true); - else - chkTenGiga->setChecked(false); - connect(chkTenGiga, SIGNAL(toggled(bool)), this, SLOT(GetTenGigaEnable(bool))); - qDefs::checkErrorMessage(myDet, "qTabDataOutput::GetTenGigaEnable"); -} void qTabDataOutput::GetSpeed() { @@ -458,28 +497,6 @@ void qTabDataOutput::SetFlags() { -void qTabDataOutput::GetFileOverwrite() { - FILE_LOG(logDEBUG) << "Getting File Over Write Enable"; - disconnect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); - - chkOverwriteEnable->setChecked(myDet->overwriteFile()); - - connect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); -} - - -void qTabDataOutput::SetOverwriteEnable(bool enable) { - FILE_LOG(logINFO) << "Setting File Over Write Enable"; - disconnect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); - - int valid = (enable ? 1 : 0); - if (myDet->overwriteFile(enable) != valid) - qDefs::Message(qDefs::WARNING, "Could not over write enable.", "qTabDataOutput::SetOverwriteEnable"); - - connect(chkOverwriteEnable, SIGNAL(toggled(bool)), this, SLOT(SetOverwriteEnable(bool))); - - GetFileOverwrite(); -} void qTabDataOutput::Refresh() { diff --git a/slsReceiverSoftware/src/slsReceiverImplementation.cpp b/slsReceiverSoftware/src/slsReceiverImplementation.cpp index 65c7a7106..7efcee9f8 100755 --- a/slsReceiverSoftware/src/slsReceiverImplementation.cpp +++ b/slsReceiverSoftware/src/slsReceiverImplementation.cpp @@ -514,8 +514,6 @@ int slsReceiverImplementation::setReadOutFlags(const readOutFlags f) { flag.append("parallel "); if (f & NONPARALLEL) flag.append("nonparallel "); - if (f & SAFE) - flag.append("safe "); if (f & DIGITAL_ONLY) flag.append("digital "); if (f & ANALOG_AND_DIGITAL) diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 06b1c6f12..f7de19dc0 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -645,8 +645,8 @@ format }; /** returns string from file format index - \param s can be BINARY, ASCII, HDF5 - \returns string binary, ascii, hdf5 + \param s can be BINARY, HDF5 + \returns string binary, hdf5 */ static std::string getFileFormatType(fileFormat f) { switch (f) {