From 03402d0e9e1ebcf1749233626e043797004f8105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=B6jdh?= Date: Wed, 20 Mar 2019 16:23:41 +0100 Subject: [PATCH] Error handling with exceptions in slsDetector and multiSlsDetector (#14) * less error mask * removing error mask from slsDetector * removed ErrorMask * setonline, setreceiveornline bug fix --- integrationTests/src/a.cpp | 30 +- integrationTests/src/test-slsDetector.cpp | 12 +- .../multiSlsDetector/multiSlsDetector.cpp | 206 +-- .../multiSlsDetector/multiSlsDetector.h | 18 +- .../slsDetector/slsDetector.cpp | 1604 +++++------------ slsDetectorSoftware/slsDetector/slsDetector.h | 38 +- .../slsDetector/slsDetectorCommand.cpp | 2 +- .../include/sls_detector_exceptions.h | 13 +- slsSupportLib/src/ClientSocket.cpp | 5 +- 9 files changed, 521 insertions(+), 1407 deletions(-) diff --git a/integrationTests/src/a.cpp b/integrationTests/src/a.cpp index afbf0e58e..5e5fd6fcc 100644 --- a/integrationTests/src/a.cpp +++ b/integrationTests/src/a.cpp @@ -16,16 +16,36 @@ using sls::RuntimeError; using sls::SharedMemoryError; using sls::SocketError; +using sls::DetectorError; int main() { - // const std::string hostname = "beb083"; - // auto type = slsDetector::getTypeFromDetector(hostname); - // slsDetector d(type); - // d.setHostname(hostname); - // d.setReceiverHostname("mpc2408"); + const std::string hostname = "beb083"; + auto type = slsDetector::getTypeFromDetector(hostname); + slsDetector d(type); + d.setHostname(hostname); + d.setOnline(true); + std::cout << "hostname: " << d.getHostname() << '\n'; + d.setThresholdTemperature(50); + // try{ + // d.setThresholdTemperature(50); + // }catch(const DetectorError &e){ + // std::cout << "Caught: " << e.what() << '\n'; + // } // std::cout << "hostname: " << d.getHostname() << '\n'; + // std::cout << "exptime: " << d.setDAC(-1, slsDetectorDefs::E_Vrf, 0) << '\n'; + + + + + // slsDetector d2(type); + // std::cout << "Online: " << d2.getOnlineFlag() << '\n'; + // d2.setHostname("beb55555"); + // d2.setOnline(true); + // std::cout << "Online: " << d2.getOnlineFlag() << '\n'; + // std::cout << "hostname: " << d2.getHostname() << '\n'; + // std::cout << "port: " << d.getControlPort() << '\n'; // d.setOnline(true); // d.setReceiverOnline(true); diff --git a/integrationTests/src/test-slsDetector.cpp b/integrationTests/src/test-slsDetector.cpp index ee2d2218f..1a6630dda 100644 --- a/integrationTests/src/test-slsDetector.cpp +++ b/integrationTests/src/test-slsDetector.cpp @@ -16,6 +16,7 @@ auto type_enum = slsDetectorDefs::detectorType::EIGER; const std::string hostname = "beb083"; const std::string type_string = "Eiger"; const std::string my_ip = "129.129.205.242"; + TEST_CASE("single EIGER detector no receiver basic set and get") { //TODO! this test should take command line arguments for config @@ -195,13 +196,4 @@ TEST_CASE("Excersise all possible set timer functions") { CHECK(d.setTimer(slsDetectorDefs::timerIndex::SUBFRAME_ACQUISITION_TIME) == subtime); } -// TEST_CASE("ACQ") { -// auto type = slsDetector::getTypeFromDetector(hostname); -// auto d = slsDetector(type); -// d.setHostname(hostname); -// d.setOnline(true); - -// d.prepareAcquisition(); -// d.startAcquisition(); -// d.stopAcquisition(); -// } \ No newline at end of file +// TEST_CASE() \ No newline at end of file diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 3463eb34b..1b2df2c8b 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -26,6 +26,8 @@ #include #include +using sls::NotImplementedError; +using sls::RuntimeError; using sls::SharedMemory; using sls::SharedMemoryError; @@ -177,7 +179,7 @@ int64_t multiSlsDetector::getId(idMode mode, int detPos) { } int64_t multiSlsDetector::getReceiverSoftwareVersion(int detPos) const { - if (detPos >= 0) { + if (detPos >= 0) { return detectors[detPos]->getReceiverSoftwareVersion(); } @@ -397,14 +399,6 @@ void multiSlsDetector::addSlsDetector(const std::string &hostname) { // get type by connecting detectorType type = slsDetector::getTypeFromDetector(hostname.c_str(), DEFAULT_PORTNO); - if (type == GENERIC) { - FILE_LOG(logERROR) << "Could not connect to Detector " << hostname - << " to determine the type!"; - setErrorMask(getErrorMask() | MULTI_DETECTORS_NOT_ADDED); - appendNotAddedList(hostname.c_str()); - return; - } - int pos = (int)detectors.size(); detectors.push_back(sls::make_unique(type, multiId, pos, false)); multi_shm()->numberOfDetectors = detectors.size(); @@ -759,19 +753,21 @@ int multiSlsDetector::readConfigurationFile(const std::string &fname) { } int multiSlsDetector::writeConfigurationFile(const std::string &fname) { + //TODO! make exception safe! const std::vector names = {"detsizechan", "hostname", "outdir", "threaded"}; - char *args[100]; - for (auto &arg : args) { - arg = new char[1000]; - } int ret = OK, ret1 = OK; std::ofstream outfile; size_t iline = 0; outfile.open(fname.c_str(), std::ios_base::out); if (outfile.is_open()) { + char *args[100]; + for (auto &arg : args) { + arg = new char[1000]; + } + auto cmd = slsDetectorCommand(this); // complete size of detector @@ -792,9 +788,6 @@ int multiSlsDetector::writeConfigurationFile(const std::string &fname) { for (size_t idet = 0; idet < detectors.size(); ++idet) { outfile << std::endl; ret1 = detectors[idet]->writeConfigurationFile(outfile, this); - if (detectors[idet]->getErrorMask()) { - setErrorMask(getErrorMask() | (1 << idet)); - } if (ret1 == FAIL) { ret = FAIL; } @@ -811,30 +804,15 @@ int multiSlsDetector::writeConfigurationFile(const std::string &fname) { } outfile.close(); FILE_LOG(logDEBUG1) << "wrote " << iline << " lines to configuration file "; + for (auto &arg : args) { + delete[] arg; + } } else { - FILE_LOG(logERROR) << "Could not open configuration file " << fname << " for writing"; - setErrorMask(getErrorMask() | MULTI_CONFIG_FILE_ERROR); - ret = FAIL; + throw RuntimeError("Could not open configuration file " + fname + " for writing"); } - - for (auto &arg : args) { - delete[] arg; - } - return ret; } -std::string multiSlsDetector::getSettingsFile(int detPos) { - // single - if (detPos >= 0) { - return detectors[detPos]->getSettingsFile(); - } - - // multi - auto r = serialCall(&slsDetector::getSettingsFile); - return sls::concatenateIfDifferent(r); -} - slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int detPos) { // single if (detPos >= 0) { @@ -858,7 +836,7 @@ multiSlsDetector::setSettings(detectorSettings isettings, int detPos) { return (detectorSettings)sls::minusOneIfDifferent(r); } -int multiSlsDetector::getThresholdEnergy(int detPos){ +int multiSlsDetector::getThresholdEnergy(int detPos) { // single if (detPos >= 0) { return detectors[detPos]->getThresholdEnergy(); @@ -1072,7 +1050,6 @@ int multiSlsDetector::configureMAC(int detPos) { int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int detPos) { // single if (detPos >= 0) { - // error for setting values individually // FIXME: what else? and error code if (t != -1) { @@ -1081,16 +1058,11 @@ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int detPos) { case CYCLES_NUMBER: case STORAGE_CELL_NUMBER: case MEASUREMENTS_NUMBER: - FILE_LOG(logERROR) - << "Cannot set number of frames, cycles, " - "storage cells or measurements individually."; - setErrorMask(getErrorMask() | MUST_BE_MULTI_CMD); - return multi_shm()->timerValue[index]; + throw RuntimeError("Cannot set number of frames, cycles,storage cells or measurements individually."); default: break; } } - return detectors[detPos]->setTimer(index, t); } @@ -1274,9 +1246,7 @@ int multiSlsDetector::setSpeed(speedVariable index, int value, int detPos) { int multiSlsDetector::setDynamicRange(int dr, int detPos) { // single if (detPos >= 0) { - FILE_LOG(logERROR) << "Dynamic Range cannot be set individually"; - setErrorMask(getErrorMask() | MUST_BE_MULTI_CMD); - return -1; + throw RuntimeError("Dynamic Range cannot be set individually"); } // multi @@ -1421,12 +1391,11 @@ uint32_t multiSlsDetector::writeRegister(uint32_t addr, uint32_t val, } // can't have different values - FILE_LOG(logERROR) << "Error: Different Values for function writeRegister " - "(write 0x" - << std::hex << val << " to addr 0x" << std::hex << addr - << std::dec << ")"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; + std::ostringstream ss; + ss << "Error: Different Values for function writeRegister (write 0x" + << std::hex << val << " to addr 0x" << std::hex << addr + << std::dec << ")"; + throw RuntimeError(ss.str()); } uint32_t multiSlsDetector::readRegister(uint32_t addr, int detPos) { @@ -1442,11 +1411,10 @@ uint32_t multiSlsDetector::readRegister(uint32_t addr, int detPos) { } // can't have different values - FILE_LOG(logERROR) << "Error: Different Values for function readRegister " - "(read from 0x" - << std::hex << addr << std::dec << ")"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; + std::ostringstream ss; + ss << "Error: Different Values for function readRegister (read from 0x" + << std::hex << addr << std::dec << ")"; + throw RuntimeError(ss.str()); } uint32_t multiSlsDetector::setBit(uint32_t addr, int n, int detPos) { @@ -1462,12 +1430,12 @@ uint32_t multiSlsDetector::setBit(uint32_t addr, int n, int detPos) { } // can't have different values - FILE_LOG(logERROR) << "Error: Different Values for function setBit " - "(set bit " - << n << " to addr 0x" << std::hex << addr << std::dec - << ")"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; + std::ostringstream ss; + ss << "Error: Different Values for function setBit " + "(set bit " + << n << " to addr 0x" << std::hex << addr << std::dec + << ")"; + throw RuntimeError(ss.str()); } uint32_t multiSlsDetector::clearBit(uint32_t addr, int n, int detPos) { @@ -1483,12 +1451,10 @@ uint32_t multiSlsDetector::clearBit(uint32_t addr, int n, int detPos) { } // can't have different values - FILE_LOG(logERROR) << "Error: Different Values for function clearBit " - "(clear bit " - << n << " to addr 0x" << std::hex << addr << std::dec - << ")"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; + std::ostringstream ss; + ss << "Error: Different Values for function clearBit (clear bit " + << n << " to addr 0x" << std::hex << addr << std::dec << ")"; + throw RuntimeError(ss.str()); } std::string multiSlsDetector::setDetectorMAC(const std::string &detectorMAC, int detPos) { @@ -1955,10 +1921,7 @@ int multiSlsDetector::loadImageToDetector(imageType index, int nch = multi_shm()->numberOfChannels; short int imageVals[nch]; if (readDataFile(fname, imageVals, nch) < nch * (int)sizeof(short int)) { - FILE_LOG(logERROR) << "Could not open file or not enough data in file " - "to load image to detector."; - setErrorMask(getErrorMask() | MULTI_OTHER_ERROR); - return -1; + throw RuntimeError("Could not open file or not enough data in file to load image to detector."); } // send image to all @@ -1994,11 +1957,8 @@ int multiSlsDetector::writeCounterBlockFile(const std::string &fname, if (sls::allEqualTo(r, static_cast(OK))) { if (writeDataFile(fname, nch, imageVals) < nch * (int)sizeof(short int)) { - FILE_LOG(logERROR) << "Could not open file to write or did not " - "write enough data in file " - "to wrte counter block file from detector."; - setErrorMask(getErrorMask() | MULTI_OTHER_ERROR); - return -1; + throw RuntimeError("Could not open file to write or did not write enough data" + " in file to write counter block file from detector."); } return OK; } @@ -2400,9 +2360,7 @@ int multiSlsDetector::setAllTrimbits(int val, int detPos) { int multiSlsDetector::enableGapPixels(int val, int detPos) { if (getDetectorTypeAsEnum() != EIGER) { if (val >= 0) { - FILE_LOG(logERROR) << "Function (enableGapPixels) not implemented " - "for this detector"; - setErrorMask(getErrorMask() | MULTI_OTHER_ERROR); + throw NotImplementedError("Function (enableGapPixels) not implemented for this detector"); } return 0; } @@ -2410,10 +2368,7 @@ int multiSlsDetector::enableGapPixels(int val, int detPos) { // single if (detPos >= 0) { if (val >= 0) { - FILE_LOG(logERROR) << "Function (enableGapPixels) must be called " - "from a multi detector level."; - setErrorMask(getErrorMask() | MUST_BE_MULTI_CMD); - return -1; + throw RuntimeError("Function (enableGapPixels) must be called from a multi detector level."); } return detectors[detPos]->enableGapPixels(val); } @@ -2952,10 +2907,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) { portnum += (iSocket % numSocketsPerDetector); try { zmqSocket.push_back(sls::make_unique( - detectors[iSocket / numSocketsPerDetector] - ->getClientStreamingIP() - .c_str(), - portnum)); + detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(), portnum)); FILE_LOG(logINFO) << "Zmq Client[" << iSocket << "] at " << zmqSocket.back()->GetZmqServerAddress(); } catch (...) { FILE_LOG(logERROR) << "Could not create Zmq socket on port " << portnum; @@ -3352,12 +3304,7 @@ int multiSlsDetector::enableDataStreamingToClient(int enable) { // create data threads } else { if (createReceivingDataSockets() == FAIL) { - FILE_LOG(logERROR) - << "Could not create data threads in client."; - detectors[0]->setErrorMask((detectors[0]->getErrorMask()) | - (DATA_STREAMING)); - // only for the first det as theres no general one - setErrorMask(getErrorMask() | (1 << 0)); + throw RuntimeError("Could not create data threads in client."); } } } @@ -3414,25 +3361,19 @@ int multiSlsDetector::setPattern(const std::string &fname, int detPos) { if (detPos >= 0) { return detectors[detPos]->setPattern(fname); } - - // multi - int addr = 0; - FILE *fd = fopen(fname.c_str(), "r"); if (fd == nullptr) { - FILE_LOG(logERROR) << "Could not open file"; - setErrorMask(getErrorMask() | MULTI_OTHER_ERROR); - return -1; + throw RuntimeError("multiSlsDetector::setPattern: Could not open file"); + } else { + int addr{0}; + uint64_t word{0}; + while (fread(&word, sizeof(word), 1, fd)) { + serialCall(&slsDetector::setPatternWord, addr, word); + ++addr; + } + fclose(fd); + return addr; } - - uint64_t word; - while (fread(&word, sizeof(word), 1, fd)) { - serialCall(&slsDetector::setPatternWord, addr, word); - ++addr; - } - - fclose(fd); - return addr; } uint64_t multiSlsDetector::setPatternWord(int addr, uint64_t word, int detPos) { @@ -3505,40 +3446,30 @@ uint64_t multiSlsDetector::getPatternMask(int detPos) { if (sls::allEqual(r)) { return r.front(); } + // should not have different values + throw RuntimeError("multiSlsDetector::getPatternMask: Error: Different Values returned)"); - // can't have different values - FILE_LOG(logERROR) << "Error: Different Values returned)"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; } int multiSlsDetector::setPatternBitMask(uint64_t mask, int detPos) { - // single if (detPos >= 0) { return detectors[detPos]->setPatternBitMask(mask); } - - // multi auto r = parallelCall(&slsDetector::setPatternBitMask, mask); return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } uint64_t multiSlsDetector::getPatternBitMask(int detPos) { - // single if (detPos >= 0) { return detectors[detPos]->getPatternBitMask(); } - - // multi auto r = parallelCall(&slsDetector::getPatternBitMask); if (sls::allEqual(r)) { return r.front(); } - // can't have different values - FILE_LOG(logERROR) << "Error: Different Values returned)"; - setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES); - return -1; + // should not have different values + throw RuntimeError("multiSlsDetector::getPatternBitMask Different Values returned)"); } int multiSlsDetector::setLEDEnable(int enable, int detPos) { @@ -3612,7 +3543,6 @@ int multiSlsDetector::retrieveDetectorSetup(const std::string &fname1, // } skip = 0; } - if (level != 2) { if (std::string(args[0]) == std::string("trimbits")) { skip = 1; @@ -3627,24 +3557,15 @@ int multiSlsDetector::retrieveDetectorSetup(const std::string &fname1, infile.close(); } else { - FILE_LOG(logERROR) << "Error opening " << fname << " for reading"; - return FAIL; + throw RuntimeError("Error opening " + fname + " for reading"); } FILE_LOG(logDEBUG1) << "Read " << iline << " lines"; - - if (getErrorMask()) { - return FAIL; - } - return OK; } int multiSlsDetector::dumpDetectorSetup(const std::string &fname, int level) { detectorType type = getDetectorTypeAsEnum(); - // std::string names[100]; std::vector names; - // int nvar = 0; - // common config names.emplace_back("fname"); names.emplace_back("index"); @@ -4026,16 +3947,3 @@ int multiSlsDetector::kbhit() { select(STDIN_FILENO + 1, &fds, nullptr, nullptr, &tv); return FD_ISSET(STDIN_FILENO, &fds); } - -bool multiSlsDetector::isDetectorIndexOutOfBounds(int detPos) { - // position exceeds multi list size - if (detPos >= static_cast(detectors.size())) { - FILE_LOG(logERROR) << "Position " << detPos - << " is out of bounds with " - "a detector list of " - << detectors.size(); - setErrorMask(getErrorMask() | MULTI_POS_EXCEEDS_LIST); - return true; - } - return false; -} diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 59bcb90b1..0eddf81ad 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -108,11 +108,7 @@ struct sharedMultiSlsDetector { bool receiver_upstream; }; -class multiSlsDetector : public virtual slsDetectorDefs, - public virtual errorDefs { - - // private: - +class multiSlsDetector : public virtual slsDetectorDefs { public: /** * Constructor @@ -480,13 +476,6 @@ class multiSlsDetector : public virtual slsDetectorDefs, */ int writeConfigurationFile(const std::string &fname); - /** - * Returns the trimfile or settings file name (Useless??) - * @param detPos -1 for all detectors in list or specific detector position - * @returns the trimfile or settings file name - */ - std::string getSettingsFile(int detPos = -1); - /** * Get detector settings * @param detPos -1 for all detectors in list or specific detector position @@ -1841,11 +1830,6 @@ class multiSlsDetector : public virtual slsDetectorDefs, */ int acquire(); - /** - * Returns true if detector position is out of bounds - */ - bool isDetectorIndexOutOfBounds(int detPos); - /** * Combines data from all readouts and gives it to the gui * or just gives progress of acquisition by polling receivers diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 23e9df63e..183f12868 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -24,8 +24,10 @@ #include #include +using sls::DetectorError; using sls::DetectorSocket; using sls::NotImplementedError; +using sls::ReceiverError; using sls::ReceiverSocket; using sls::RuntimeError; using sls::SharedMemory; @@ -64,6 +66,7 @@ slsDetector::slsDetector(int multi_id, int det_id, bool verify) slsDetector::~slsDetector() = default; int slsDetector::checkDetectorVersionCompatibility() { + //TODO! Verify that this works as intended when version don't match int fnum = F_CHECK_VERSION; int ret = FAIL; int64_t arg = 0; @@ -86,21 +89,17 @@ int slsDetector::checkDetectorVersionCompatibility() { arg = APIMOENCH; break; default: - FILE_LOG(logERROR) << "Check version compatibility is not implemented for this detector"; - setErrorMask((getErrorMask()) | (VERSION_COMPATIBILITY)); - return FAIL; + throw NotImplementedError("Check version compatibility is not implemented for this detector"); } - FILE_LOG(logDEBUG1) << "Checking version compatibility with detector with " - "value " + FILE_LOG(logDEBUG1) << "Checking version compatibility with detector with value " << std::hex << arg << std::dec; // control server if (detector_shm()->onlineFlag == ONLINE_FLAG) { - - // in case it throws - detector_shm()->detectorControlAPIVersion = 0; - detector_shm()->detectorStopAPIVersion = 0; - detector_shm()->onlineFlag = OFFLINE_FLAG; + // in case it throws + detector_shm()->detectorControlAPIVersion = 0; + detector_shm()->detectorStopAPIVersion = 0; + detector_shm()->onlineFlag = OFFLINE_FLAG; auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); @@ -112,55 +111,40 @@ int slsDetector::checkDetectorVersionCompatibility() { detector_shm()->detectorControlAPIVersion = arg; detector_shm()->detectorStopAPIVersion = arg; detector_shm()->onlineFlag = ONLINE_FLAG; - } - - // pointless -// if (ret == FAIL) { -// setErrorMask((getErrorMask()) | (VERSION_COMPATIBILITY)); -// } - return ret; } int slsDetector::checkReceiverVersionCompatibility() { + //TODO! Verify that this works as intended when version don't match int fnum = F_RECEIVER_CHECK_VERSION; int ret = FAIL; - // char mess[MAX_STR_LENGTH]{}; int64_t arg = APIRECEIVER; - FILE_LOG(logDEBUG1) << "Checking version compatibility with receiver with " - "value " + FILE_LOG(logDEBUG1) << "Checking version compatibility with receiver with value " << std::hex << arg << std::dec; if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - - // in case it throws - detector_shm()->receiverAPIVersion = 0; - detector_shm()->receiverOnlineFlag = OFFLINE_FLAG; + // in case it throws + detector_shm()->receiverAPIVersion = 0; + detector_shm()->receiverOnlineFlag = OFFLINE_FLAG; auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); // success - detector_shm()->receiverAPIVersion = arg; - detector_shm()->receiverOnlineFlag = ONLINE_FLAG; + detector_shm()->receiverAPIVersion = arg; + detector_shm()->receiverOnlineFlag = ONLINE_FLAG; } - - // pointless -// if (ret == FAIL) { -// setErrorMask((getErrorMask()) | (VERSION_COMPATIBILITY)); -// } - return ret; } int64_t slsDetector::getId(idMode mode) { - int arg = (int)mode; + int arg = static_cast(mode); int64_t retval = -1; FILE_LOG(logDEBUG1) << "Getting id type " << mode; - //These four should not go to detector... + //These should not go to detector... assert(mode != THIS_SOFTWARE_VERSION); assert(mode != RECEIVER_VERSION); assert(mode != CLIENT_SOFTWARE_API_VERSION); @@ -172,9 +156,7 @@ int64_t slsDetector::getId(idMode mode) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); } - if (ret != FAIL) { - FILE_LOG(logDEBUG1) << "Id (" << mode << "): 0x" << std::hex << retval << std::dec; - } + FILE_LOG(logDEBUG1) << "Id (" << mode << "): 0x" << std::hex << retval << std::dec; if (ret == FORCE_UPDATE) { updateDetector(); } @@ -231,13 +213,10 @@ void slsDetector::initSharedMemory(detectorType type, } else { detector_shm.OpenSharedMemory(); if (verify && detector_shm()->shmversion != SLS_SHMVERSION) { - FILE_LOG(logERROR) << "Single shared memory " - "(" - << multi_id << "-" << detId << ":) " - "version mismatch " - "(expected 0x" - << std::hex << SLS_SHMVERSION << " but got 0x" << detector_shm()->shmversion << ")" << std::dec; - throw SharedMemoryError("Shared memory version mismatch (det)"); + std::ostringstream ss; + ss << "Single shared memory (" << multi_id << "-" << detId << ":) version mismatch (expected 0x" + << std::hex << SLS_SHMVERSION << " but got 0x" << detector_shm()->shmversion << ")" << std::dec; + throw SharedMemoryError(ss.str()); } } } @@ -295,8 +274,7 @@ void slsDetector::setDetectorSpecificParameters(detectorType type, detParameterL list.nGappixelsY = 1; break; default: - FILE_LOG(logERROR) << "Unknown detector type! " << type; - throw RuntimeError("Unknown detector type"); + throw RuntimeError("Unknown detector type! " + slsDetectorDefs::detectorTypeToString(type)); } } @@ -320,7 +298,6 @@ void slsDetector::initializeDetectorStructure(detectorType type) { detector_shm()->nROI = 0; memset(detector_shm()->roiLimits, 0, MAX_ROIS * sizeof(ROI)); detector_shm()->roFlags = NORMAL_READOUT; - sls::strcpy_safe(detector_shm()->settingsFile, "none"); detector_shm()->currentSettings = UNINITIALIZED; detector_shm()->currentThresholdEV = -1; detector_shm()->timerValue[FRAME_NUMBER] = 1; @@ -456,14 +433,11 @@ slsDetectorDefs::sls_detector_module *slsDetector::createModule(detectorType typ } void slsDetector::deleteModule(sls_detector_module *myMod) { - delete[] myMod->dacs; - delete[] myMod->chanregs; - delete myMod; -} - -void slsDetector::connectDataError() { - FILE_LOG(logERROR) << "Cannot connect to receiver"; - setErrorMask((getErrorMask()) | (CANNOT_CONNECT_TO_RECEIVER)); + if (myMod != nullptr) { + delete[] myMod->dacs; + delete[] myMod->chanregs; + delete myMod; + } } int slsDetector::sendModule(sls_detector_module *myMod, sls::ClientSocket &client) { @@ -540,21 +514,20 @@ int slsDetector::receiveModule(sls_detector_module *myMod, sls::ClientSocket &cl slsDetectorDefs::detectorType slsDetector::getDetectorTypeFromShm(int multi_id, bool verify) { if (!detector_shm.IsExisting()) { - FILE_LOG(logERROR) << "Shared memory " << detector_shm.GetName() - << " does not exist.\n" - << "Corrupted Multi Shared memory. Please free shared memory."; - throw SharedMemoryError("Corrupted multi shared memory."); + throw SharedMemoryError("Shared memory " + detector_shm.GetName() + + "does not exist.\n Corrupted Multi Shared memory. Please free shared memory."); } detector_shm.OpenSharedMemory(); if (verify && detector_shm()->shmversion != SLS_SHMVERSION) { - FILE_LOG(logERROR) << "Single shared memory (" - << multi_id << "-" << detId - << ":)version mismatch (expected 0x" - << std::hex << SLS_SHMVERSION - << " but got 0x" << detector_shm()->shmversion << ")" << std::dec; + std::ostringstream ss; + ss << "Single shared memory (" + << multi_id << "-" << detId + << ":)version mismatch (expected 0x" + << std::hex << SLS_SHMVERSION + << " but got 0x" << detector_shm()->shmversion << ")" << std::dec; detector_shm.UnmapSharedMemory(); - throw SharedMemoryError("Shared memory version mismatch"); + throw SharedMemoryError(ss.str()); } auto type = detector_shm()->myDetectorType; return type; @@ -583,10 +556,9 @@ int slsDetector::setDetectorType(detectorType const type) { // if unspecified, then get from detector if (type == GET_DETECTOR_TYPE) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { - //Create socket auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - detector_shm()->myDetectorType = (detectorType)retval; + detector_shm()->myDetectorType = static_cast(retval); FILE_LOG(logDEBUG1) << "Detector Type: " << retval; } if (ret == FORCE_UPDATE) { @@ -603,27 +575,26 @@ int slsDetector::setDetectorType(detectorType const type) { int arg = (int)detector_shm()->myDetectorType; retval = GENERIC; FILE_LOG(logDEBUG1) << "Sending detector type to Receiver: " << (int)detector_shm()->myDetectorType; - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); FILE_LOG(logDEBUG1) << "Receiver Type: " << retval; if (ret == FORCE_UPDATE) { - receiver.close(); //need to find a better solution + receiver.close(); //TODO! Should find a better solution ret = updateCachedReceiverVariables(); } } return retval; } -slsDetectorDefs::detectorType slsDetector::getDetectorTypeAsEnum() { +slsDetectorDefs::detectorType slsDetector::getDetectorTypeAsEnum() const { return detector_shm()->myDetectorType; } -std::string slsDetector::getDetectorTypeAsString() { +std::string slsDetector::getDetectorTypeAsString() const { return slsDetectorDefs::detectorTypeToString(getDetectorTypeAsEnum()); } -int slsDetector::getTotalNumberOfChannels() { +int slsDetector::getTotalNumberOfChannels() const { return detector_shm()->nChans * detector_shm()->nChips; } @@ -657,31 +628,32 @@ void slsDetector::updateTotalNumberOfChannels() { } } -int slsDetector::getTotalNumberOfChannels(dimension d) { +int slsDetector::getTotalNumberOfChannels(dimension d) const { return detector_shm()->nChan[d] * detector_shm()->nChip[d]; } -int slsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d) { - return (detector_shm()->nChan[d] * detector_shm()->nChip[d] + detector_shm()->gappixels * detector_shm()->nGappixels[d]); +int slsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d) const { + return (detector_shm()->nChan[d] * detector_shm()->nChip[d] + + detector_shm()->gappixels * detector_shm()->nGappixels[d]); } -int slsDetector::getNChans() { +int slsDetector::getNChans() const { return detector_shm()->nChans; } -int slsDetector::getNChans(dimension d) { +int slsDetector::getNChans(dimension d) const { return detector_shm()->nChan[d]; } -int slsDetector::getNChips() { +int slsDetector::getNChips() const { return detector_shm()->nChips; } -int slsDetector::getNChips(dimension d) { +int slsDetector::getNChips(dimension d) const { return detector_shm()->nChip[d]; } -int slsDetector::getDetectorOffset(dimension d) { +int slsDetector::getDetectorOffset(dimension d) const { return detector_shm()->offset[d]; } @@ -698,35 +670,25 @@ void slsDetector::updateMultiSize(int detx, int dety) { int slsDetector::setOnline(int value) { if (value != GET_ONLINE_FLAG) { + int old_flag = detector_shm()->onlineFlag; + detector_shm()->onlineFlag = OFFLINE_FLAG; - // set offline - if (value == OFFLINE_FLAG) { - detector_shm()->onlineFlag = value; - } + if (value == ONLINE_FLAG) { - // set online - else { - int old = detector_shm()->onlineFlag; - - // connect and set offline flag (set it to fail in case it throws) - detector_shm()->onlineFlag = OFFLINE_FLAG; auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); - client.close(); + client.close(); detector_shm()->onlineFlag = ONLINE_FLAG; - // connecting first time - if (detector_shm()->onlineFlag == ONLINE_FLAG && old == OFFLINE_FLAG) { - // check version compatibility (first time) + if (old_flag == OFFLINE_FLAG) { + + // check version compatibility (first time) if ((detector_shm()->detectorControlAPIVersion == 0) || (detector_shm()->detectorStopAPIVersion == 0)) { checkDetectorVersionCompatibility(); } - // check detector version could set it offline - if (detector_shm()->onlineFlag == ONLINE_FLAG) { - FILE_LOG(logINFO) << "Detector connecting for the first time - updating!"; - updateDetector(); - } + FILE_LOG(logINFO) << "Detector connecting - updating!"; + updateDetector(); } } } @@ -755,20 +717,16 @@ int slsDetector::setControlPort(int port_number) { int fnum = F_SET_PORT; int ret = FAIL; int retval = -1; - - FILE_LOG(logDEBUG1) << "Setting control port " - << " to " << port_number; + FILE_LOG(logDEBUG1) << "Setting control port to " << port_number; if (port_number >= 0 && port_number != detector_shm()->controlPort) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { - auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); - ret = client.sendCommandThenRead(fnum, &port_number, sizeof(port_number), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_CONTROL_PORT)); - } else { - detector_shm()->controlPort = retval; - FILE_LOG(logDEBUG1) << "Control port: " << retval; - } + auto client = DetectorSocket(detector_shm()->hostname, + detector_shm()->controlPort); + ret = client.sendCommandThenRead(fnum, &port_number, sizeof(port_number), + &retval, sizeof(retval)); + detector_shm()->controlPort = retval; + FILE_LOG(logDEBUG1) << "Control port: " << retval; } else { detector_shm()->controlPort = port_number; } @@ -788,14 +746,11 @@ int slsDetector::setStopPort(int port_number) { if (port_number >= 0 && port_number != detector_shm()->stopPort) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { - auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); + auto stop = DetectorSocket(detector_shm()->hostname, + detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, &port_number, sizeof(port_number), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_STOP_PORT)); - } else { - detector_shm()->stopPort = retval; - FILE_LOG(logDEBUG1) << "Stop port: " << retval; - } + detector_shm()->stopPort = retval; + FILE_LOG(logDEBUG1) << "Stop port: " << retval; } else { detector_shm()->stopPort = port_number; } @@ -811,19 +766,15 @@ int slsDetector::setReceiverPort(int port_number) { int ret = FAIL; int retval = -1; - FILE_LOG(logDEBUG1) << "Setting reciever port " - << " to " << port_number; + FILE_LOG(logDEBUG1) << "Setting reciever port to " << port_number; if (port_number >= 0 && port_number != detector_shm()->receiverTCPPort) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto stop = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto stop = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = stop.sendCommandThenRead(fnum, &port_number, sizeof(port_number), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_DATA_PORT)); - } else { - detector_shm()->receiverTCPPort = retval; - FILE_LOG(logDEBUG1) << "Receiver port: " << retval; - } + detector_shm()->receiverTCPPort = retval; + FILE_LOG(logDEBUG1) << "Receiver port: " << retval; } else { detector_shm()->receiverTCPPort = port_number; @@ -856,13 +807,7 @@ int slsDetector::lockServer(int lock) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &lock, sizeof(lock), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Lock: " << retval; - } + FILE_LOG(logDEBUG1) << "Lock: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -879,13 +824,7 @@ std::string slsDetector::getLastClientIP() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Last client IP to detector: " << retval; - } + FILE_LOG(logDEBUG1) << "Last client IP to detector: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -901,7 +840,6 @@ int slsDetector::exitServer() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - // no ret handling as ret never fail FILE_LOG(logINFO) << "Shutting down the Detector server"; } return ret; @@ -918,12 +856,8 @@ int slsDetector::execCommand(const std::string &cmd) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, arg, sizeof(arg), retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logINFO) << "Detector " << detId << " returned:\n" - << retval; - } + FILE_LOG(logINFO) << "Detector " << detId << " returned:\n" + << retval; } return ret; } @@ -1067,9 +1001,7 @@ int slsDetector::writeConfigurationFile(const std::string &fname, multiSlsDetect iline = writeConfigurationFile(outfile, m); outfile.close(); } else { - FILE_LOG(logERROR) << "Error opening configuration file " << fname << " for writing"; - setErrorMask((getErrorMask()) | (CONFIG_FILE)); - return FAIL; + throw RuntimeError("Could not open configuration file for writing"); } FILE_LOG(logINFO) << iline << " lines written to configuration file"; return OK; @@ -1125,9 +1057,7 @@ int slsDetector::writeConfigurationFile(std::ofstream &outfile, multiSlsDetector names.emplace_back("vhighvoltage"); break; default: - FILE_LOG(logERROR) << "Unknown detector type " << detector_shm()->myDetectorType; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return FAIL; + throw RuntimeError("Write configuration file called with unknown detector: " + std::to_string(detector_shm()->myDetectorType)); } auto cmd = slsDetectorCommand(m); @@ -1139,17 +1069,6 @@ int slsDetector::writeConfigurationFile(std::ofstream &outfile, multiSlsDetector return OK; } -std::string slsDetector::getSettingsFile() { - std::string s(detector_shm()->settingsFile); - // return without suffix .sn[detid] - if (s.length() > 6) { - if (s.substr(s.length() - 6, 3) == std::string(".sn") && s.substr(s.length() - 3) != std::string("xxx")) { - return s.substr(0, s.length() - 6); - } - } - return std::string(detector_shm()->settingsFile); -} - slsDetectorDefs::detectorSettings slsDetector::getSettings() { return sendSettingsOnly(GET_SETTINGS); } @@ -1172,9 +1091,9 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings(detectorSettings iset detector_shm()->currentSettings = isettings; return detector_shm()->currentSettings; default: - FILE_LOG(logERROR) << "Unknown settings " << getDetectorSettings(isettings) << " for this detector!"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); - return GET_SETTINGS; + std::ostringstream ss; + ss << "Unknown settings " << getDetectorSettings(isettings) << " for this detector!"; + throw RuntimeError(ss.str()); } } @@ -1192,19 +1111,12 @@ slsDetectorDefs::detectorSettings slsDetector::sendSettingsOnly(detectorSettings if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Settings: " << retval; - detector_shm()->currentSettings = (detectorSettings)retval; - } + FILE_LOG(logDEBUG1) << "Settings: " << retval; + detector_shm()->currentSettings = (detectorSettings)retval; } if (ret == FORCE_UPDATE) { updateDetector(); } - return detector_shm()->currentSettings; } @@ -1219,7 +1131,6 @@ int slsDetector::getThresholdEnergy() { // udpate shm detector_shm()->currentThresholdEV = stoi(result); return detector_shm()->currentThresholdEV; - } // not found or cannot scan integer catch (...) { @@ -1235,19 +1146,12 @@ int slsDetector::getThresholdEnergy() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Threshold: " << retval; - detector_shm()->currentThresholdEV = retval; - } + FILE_LOG(logDEBUG1) << "Threshold: " << retval; + detector_shm()->currentThresholdEV = retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); } - return detector_shm()->currentThresholdEV; } @@ -1269,10 +1173,7 @@ int slsDetector::setThresholdEnergy(int e_eV, detectorSettings isettings, int tb } return -1; } - - FILE_LOG(logERROR) << "Set threshold energy not implemented for this detector"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return -1; + throw RuntimeError("Set threshold energy not implemented for this detector"); } int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, int tb) { @@ -1302,18 +1203,16 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti detector_shm()->currentSettings = VERYLOWGAIN; break; default: - FILE_LOG(logERROR) << "Unknown settings " << getDetectorSettings(is) << " for this detector!"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); - return FAIL; + std::ostringstream ss; + ss << "Unknown settings " << getDetectorSettings(is) << " for this detector!"; + throw RuntimeError(ss.str()); } //verify e_eV exists in trimEneregies[] if (!detector_shm()->nTrimEn || (e_eV < detector_shm()->trimEnergies[0]) || (e_eV > detector_shm()->trimEnergies[detector_shm()->nTrimEn - 1])) { - FILE_LOG(logERROR) << "This energy " << e_eV << " not defined for this module!"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); - return FAIL; + throw RuntimeError("This energy " + std::to_string(e_eV) + " not defined for this module!"); } //find if interpolation required @@ -1373,35 +1272,28 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti sls_detector_module *myMod1 = createModule(); sls_detector_module *myMod2 = createModule(); if (nullptr == readSettingsFile(settingsfname1, myMod1, tb)) { - setErrorMask((getErrorMask()) | (SETTINGS_FILE_NOT_OPEN)); + deleteModule(myMod1); deleteModule(myMod2); - return FAIL; + throw RuntimeError("setThresholdEnergyAndSettings: Could not open settings file"); } if (nullptr == readSettingsFile(settingsfname2, myMod2, tb)) { - setErrorMask((getErrorMask()) | (SETTINGS_FILE_NOT_OPEN)); deleteModule(myMod1); deleteModule(myMod2); - return FAIL; + throw RuntimeError("setThresholdEnergyAndSettings: Could not open settings file"); } if (myMod1->iodelay != myMod2->iodelay) { - FILE_LOG(logERROR) << "Iodelays do not match between files"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); deleteModule(myMod1); deleteModule(myMod2); - return FAIL; + throw RuntimeError("setThresholdEnergyAndSettings: Iodelays do not match between files"); } - // myMod = createModule(); - // myMod->iodelay = myMod1->iodelay; //interpolate module myMod = interpolateTrim(myMod1, myMod2, e_eV, trim1, trim2, tb); if (myMod == nullptr) { - FILE_LOG(logERROR) << "Could not interpolate, different dac values in files"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); deleteModule(myMod1); deleteModule(myMod2); - return FAIL; + throw RuntimeError("setThresholdEnergyAndSettings: Could not interpolate, different dac values in files"); } //interpolate tau myMod->iodelay = myMod1->iodelay; @@ -1417,9 +1309,7 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti setModule(*myMod, tb); deleteModule(myMod); if (getSettings() != is) { - FILE_LOG(logERROR) << "Could not set settings in detector"; - setErrorMask((getErrorMask()) | (SETTINGS_NOT_SET)); - return FAIL; + throw RuntimeError("setThresholdEnergyAndSettings: Could not set settings in detector"); } return OK; } @@ -1491,14 +1381,9 @@ slsDetectorDefs::runStatus slsDetector::getRunStatus() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Detector status: " << runStatusType(retval); - if (ret == FORCE_UPDATE) { - updateDetector(); - } + FILE_LOG(logDEBUG1) << "Detector status: " << runStatusType(retval); + if (ret == FORCE_UPDATE) { + updateDetector(); } } return retval; @@ -1512,13 +1397,7 @@ int slsDetector::prepareAcquisition() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (PREPARE_ACQUISITION)); - } else { - FILE_LOG(logDEBUG1) << "Prepare Acquisition successful"; - } + FILE_LOG(logDEBUG1) << "Prepare Acquisition successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1535,13 +1414,7 @@ int slsDetector::startAcquisition() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Starting Acquisition successful"; - } + FILE_LOG(logDEBUG1) << "Starting Acquisition successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1563,14 +1436,9 @@ int slsDetector::stopAcquisition() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Stopping Acquisition successful"; - if (ret == FORCE_UPDATE) { - updateDetector(); - } + FILE_LOG(logDEBUG1) << "Stopping Acquisition successful"; + if (ret == FORCE_UPDATE) { + updateDetector(); } } detector_shm()->stoppedFlag = 1; @@ -1590,13 +1458,7 @@ int slsDetector::sendSoftwareTrigger() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Sending software trigger successful"; - } + FILE_LOG(logDEBUG1) << "Sending software trigger successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1613,14 +1475,8 @@ int slsDetector::startAndReadAll() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - detector_shm()->stoppedFlag = 1; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Detector successfully finished acquisition"; - } + //TODO! how to we hande this? ret == FAIL --> detector_shm()->stoppedFlag = 1; + FILE_LOG(logDEBUG1) << "Detector successfully finished acquisition"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1636,13 +1492,7 @@ int slsDetector::startReadOut() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Starting detector readout successful"; - } + FILE_LOG(logDEBUG1) << "Starting detector readout successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1657,14 +1507,8 @@ int slsDetector::readAll() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - detector_shm()->stoppedFlag = 1; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Detector successfully finished reading all frames"; - } + //TODO! how to we hande this? ret == FAIL --> detector_shm()->stoppedFlag = 1; + FILE_LOG(logDEBUG1) << "Detector successfully finished reading all frames"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1703,9 +1547,7 @@ int slsDetector::configureMAC() { // rx_udpip and rx_udpmac is none if ((!strcmp(detector_shm()->receiverUDPIP, "none")) || (!strcmp(detector_shm()->receiverUDPMAC, "none"))) { - FILE_LOG(logERROR) << "Configure MAC Error. IP/MAC Addresses not set"; - setErrorMask((getErrorMask()) | (COULD_NOT_CONFIGURE_MAC)); - return FAIL; + throw RuntimeError("configureMAC: Error. IP/MAC Addresses not set"); } FILE_LOG(logDEBUG1) << "rx_hostname and rx_udpip is valid "; @@ -1757,39 +1599,33 @@ int slsDetector::configureMAC() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_CONFIGURE_MAC)); - } else { - // get detectormac, detector ip - uint64_t idetectormac = 0; - uint32_t idetectorip = 0; - sscanf(retvals[0], "%lx", &idetectormac); - sscanf(retvals[1], "%x", &idetectorip); - snprintf(retvals[0], sizeof(retvals[0]), "%02x:%02x:%02x:%02x:%02x:%02x", - (unsigned int)((idetectormac >> 40) & 0xFF), - (unsigned int)((idetectormac >> 32) & 0xFF), - (unsigned int)((idetectormac >> 24) & 0xFF), - (unsigned int)((idetectormac >> 16) & 0xFF), - (unsigned int)((idetectormac >> 8) & 0xFF), - (unsigned int)((idetectormac >> 0) & 0xFF)); - snprintf(retvals[1], sizeof(retvals[1]), "%d.%d.%d.%d", - (idetectorip >> 24) & 0xff, - (idetectorip >> 16) & 0xff, - (idetectorip >> 8) & 0xff, - (idetectorip)&0xff); - // update if different - if (strcasecmp(retvals[0], detector_shm()->detectorMAC)) { - // memset(detector_shm()->detectorMAC, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->detectorMAC, retvals[0]); - FILE_LOG(logINFO) << detId << ": Detector MAC updated to " << detector_shm()->detectorMAC; - } - if (strcasecmp(retvals[1], detector_shm()->detectorIP)) { - // memset(detector_shm()->detectorIP, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->detectorIP, retvals[1]); - FILE_LOG(logINFO) << detId << ": Detector IP updated to " << detector_shm()->detectorIP; - } + // get detectormac, detector ip + uint64_t idetectormac = 0; + uint32_t idetectorip = 0; + sscanf(retvals[0], "%lx", &idetectormac); + sscanf(retvals[1], "%x", &idetectorip); + snprintf(retvals[0], sizeof(retvals[0]), "%02x:%02x:%02x:%02x:%02x:%02x", + (unsigned int)((idetectormac >> 40) & 0xFF), + (unsigned int)((idetectormac >> 32) & 0xFF), + (unsigned int)((idetectormac >> 24) & 0xFF), + (unsigned int)((idetectormac >> 16) & 0xFF), + (unsigned int)((idetectormac >> 8) & 0xFF), + (unsigned int)((idetectormac >> 0) & 0xFF)); + snprintf(retvals[1], sizeof(retvals[1]), "%d.%d.%d.%d", + (idetectorip >> 24) & 0xff, + (idetectorip >> 16) & 0xff, + (idetectorip >> 8) & 0xff, + (idetectorip)&0xff); + // update if different + if (strcasecmp(retvals[0], detector_shm()->detectorMAC)) { + // memset(detector_shm()->detectorMAC, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->detectorMAC, retvals[0]); + FILE_LOG(logINFO) << detId << ": Detector MAC updated to " << detector_shm()->detectorMAC; + } + if (strcasecmp(retvals[1], detector_shm()->detectorIP)) { + // memset(detector_shm()->detectorIP, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->detectorIP, retvals[1]); + FILE_LOG(logINFO) << detId << ": Detector IP updated to " << detector_shm()->detectorIP; } } if (ret == FORCE_UPDATE) { @@ -1819,21 +1655,16 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (DETECTOR_TIMER_VALUE_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << getTimerType(index) << ": " << retval; - detector_shm()->timerValue[index] = retval; - // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) - if (index == SAMPLES && - (detector_shm()->myDetectorType == CHIPTESTBOARD || detector_shm()->myDetectorType == MOENCH)) { - updateTotalNumberOfChannels(); - } - if (ret == FORCE_UPDATE) { - client.close(); - ret = updateDetector(); - } + FILE_LOG(logDEBUG1) << getTimerType(index) << ": " << retval; + detector_shm()->timerValue[index] = retval; + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) + if (index == SAMPLES && + (detector_shm()->myDetectorType == CHIPTESTBOARD || detector_shm()->myDetectorType == MOENCH)) { + updateTotalNumberOfChannels(); + } + if (ret == FORCE_UPDATE) { + client.close(); + ret = updateDetector(); } } @@ -1881,37 +1712,11 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { : 1); } FILE_LOG(logDEBUG1) << "Sending " << (((index == FRAME_NUMBER) || (index == CYCLES_NUMBER) || (index == STORAGE_CELL_NUMBER)) ? "(#Frames) * (#cycles) * (#storage cells)" : getTimerType(index)) << " to receiver: " << args[1]; - ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - switch (index) { - case ACQUISITION_TIME: - setErrorMask((getErrorMask()) | (RECEIVER_ACQ_TIME_NOT_SET)); - break; - case FRAME_PERIOD: - setErrorMask((getErrorMask()) | (RECEIVER_ACQ_PERIOD_NOT_SET)); - break; - case SUBFRAME_ACQUISITION_TIME: - case SUBFRAME_DEADTIME: - case SAMPLES: - setErrorMask((getErrorMask()) | (RECEIVER_TIMER_NOT_SET)); - break; - case FRAME_NUMBER: - case CYCLES_NUMBER: - case STORAGE_CELL_NUMBER: - setErrorMask((getErrorMask()) | (RECEIVER_FRAME_NUM_NOT_SET)); - break; - default: - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - break; - } - } else if (ret == FORCE_UPDATE) { + if (ret == FORCE_UPDATE) { receiver.close(); ret = updateCachedReceiverVariables(); } - break; default: break; @@ -1929,15 +1734,9 @@ int64_t slsDetector::getTimeLeft(timerIndex index) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, &index, sizeof(index), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << getTimerType(index) << " left: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } + FILE_LOG(logDEBUG1) << getTimerType(index) << " left: " << retval; + if (ret == FORCE_UPDATE) { + ret = updateDetector(); } } return retval; @@ -1953,13 +1752,7 @@ int slsDetector::setSpeed(speedVariable sp, int value) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_SET_SPEED_PARAMETERS)); - } else { - FILE_LOG(logDEBUG1) << "Speed index " << sp << ": " << retval; - } + FILE_LOG(logDEBUG1) << "Speed index " << sp << ": " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -1968,6 +1761,7 @@ int slsDetector::setSpeed(speedVariable sp, int value) { } int slsDetector::setDynamicRange(int n) { + //TODO! Properly handle fail int fnum = F_SET_DYNAMIC_RANGE; int ret = FAIL; int retval = -1; @@ -1979,34 +1773,11 @@ int slsDetector::setDynamicRange(int n) { // char mess[MAX_STR_LENGTH] = {}; auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &n, sizeof(n), &retval, sizeof(retval)); - if (ret == FAIL) { //TODO (Dhanya) handle FAIL at least - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); // may or may not be a fail, but better to have it till we introduce proper error handling - } - // handle ret - //TODO! (Erik) handle FAIL somehow - // if (ret == FAIL) { - // // eiger: dr set correctly, consequent rate correction was a problem - // if ((detector_shm()->myDetectorType == EIGER && - // strstr(mess, "Rate Correction") != nullptr)) { - // // rate correction is switched off if not 32 bit mode - // if (strstr(mess, "32") != nullptr) { - // setErrorMask((getErrorMask()) | (RATE_CORRECTION_NOT_32or16BIT)); - // } else { - // setErrorMask((getErrorMask()) | (COULD_NOT_SET_RATE_CORRECTION)); - // } - // ret = OK; // dr was set correctly to reach rate correction - // } else { - // setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - // } - // } - // ret might be set to OK above - if (ret != FAIL) { - FILE_LOG(logDEBUG1) << "Dynamic Range: " << retval; - detector_shm()->dynamicRange = retval; - if (ret == FORCE_UPDATE) { - client.close(); - ret = updateDetector(); - } + FILE_LOG(logDEBUG1) << "Dynamic Range: " << retval; + detector_shm()->dynamicRange = retval; + if (ret == FORCE_UPDATE) { + client.close(); + ret = updateDetector(); } } @@ -2034,16 +1805,10 @@ int slsDetector::setDynamicRange(int n) { FILE_LOG(logDEBUG1) << "Sending dynamic range to receiver: " << n; auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &n, sizeof(n), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_DYNAMIC_RANGE)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Dynamic range: " << retval; - if (ret == FORCE_UPDATE) { - receiver.close(); - ret = updateCachedReceiverVariables(); - } + FILE_LOG(logDEBUG1) << "Receiver Dynamic range: " << retval; + if (ret == FORCE_UPDATE) { + receiver.close(); + ret = updateCachedReceiverVariables(); } } return detector_shm()->dynamicRange; @@ -2067,14 +1832,8 @@ int slsDetector::setDAC(int val, dacIndex index, int mV) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Dac index " << index << ": " - << retval << (mV ? "mV" : "dac units"); - } + FILE_LOG(logDEBUG1) << "Dac index " << index << ": " + << retval << (mV ? "mV" : "dac units"); } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2085,22 +1844,14 @@ int slsDetector::setDAC(int val, dacIndex index, int mV) { int slsDetector::getADC(dacIndex index) { int fnum = F_GET_ADC; int ret = FAIL; - int arg = (int)index; + int arg = static_cast(index); int retval = -1; FILE_LOG(logDEBUG1) << "Getting ADC " << index; if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else - FILE_LOG(logDEBUG1) << "ADC (" << index << "): " << retval; - /*commented out to allow adc read during acquire - else if (ret == FORCE_UPDATE) - updateDetector();*/ + FILE_LOG(logDEBUG1) << "ADC (" << index << "): " << retval; } return retval; } @@ -2116,13 +1867,7 @@ slsDetectorDefs::externalCommunicationMode slsDetector::setExternalCommunication if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Timing Mode: " << retval; - } + FILE_LOG(logDEBUG1) << "Timing Mode: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2141,13 +1886,7 @@ slsDetectorDefs::externalSignalFlag slsDetector::setExternalSignalFlags( if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Ext Signal (" << signalindex << "): " << retval; - } + FILE_LOG(logDEBUG1) << "Ext Signal (" << signalindex << "): " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2165,17 +1904,11 @@ int slsDetector::setReadOutFlags(readOutFlags flag) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_SET_READOUT_FLAGS)); - } else { - FILE_LOG(logDEBUG1) << "Readout flag: " << retval; - detector_shm()->roFlags = (readOutFlags)retval; - // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) - if (detector_shm()->myDetectorType == CHIPTESTBOARD) { - updateTotalNumberOfChannels(); - } + FILE_LOG(logDEBUG1) << "Readout flag: " << retval; + detector_shm()->roFlags = (readOutFlags)retval; + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) + if (detector_shm()->myDetectorType == CHIPTESTBOARD) { + updateTotalNumberOfChannels(); } } if (ret == FORCE_UPDATE) { @@ -2193,13 +1926,7 @@ int slsDetector::setReadOutFlags(readOutFlags flag) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_SET_READOUT_FLAGS)); - } else { - FILE_LOG(logDEBUG1) << "Receiver readout flag: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver readout flag: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2219,13 +1946,7 @@ uint32_t slsDetector::writeRegister(uint32_t addr, uint32_t val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - } else { - FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; - } + FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2243,13 +1964,7 @@ uint32_t slsDetector::readRegister(uint32_t addr) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - } else { - FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; - } + FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2259,28 +1974,18 @@ uint32_t slsDetector::readRegister(uint32_t addr) { uint32_t slsDetector::setBit(uint32_t addr, int n) { if (n < 0 || n > 31) { - FILE_LOG(logERROR) << "Bit number " << n << " out of Range"; - setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - return -1; + throw RuntimeError("Bit number " + std::to_string(n) + " out of Range"); } else { uint32_t val = readRegister(addr); - if (getErrorMask() | REGISER_WRITE_READ) { - return -1; - } return writeRegister(addr, val | 1 << n); } } uint32_t slsDetector::clearBit(uint32_t addr, int n) { if (n < 0 || n > 31) { - FILE_LOG(logERROR) << "Bit number " << n << " out of Range"; - setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - return -1; + throw RuntimeError("Bit number " + std::to_string(n) + " out of Range"); } else { uint32_t val = readRegister(addr); - if (getErrorMask() | REGISER_WRITE_READ) { - return -1; - } return writeRegister(addr, val & ~(1 << n)); } } @@ -2290,8 +1995,7 @@ std::string slsDetector::setDetectorMAC(const std::string &detectorMAC) { if ((detectorMAC.length() != 17) || (detectorMAC[2] != ':') || (detectorMAC[5] != ':') || (detectorMAC[8] != ':') || (detectorMAC[11] != ':') || (detectorMAC[14] != ':')) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - FILE_LOG(logERROR) << "server MAC Address should be in xx:xx:xx:xx:xx:xx format"; + throw RuntimeError("server MAC Address should be in xx:xx:xx:xx:xx:xx format"); } // valid format else { @@ -2313,14 +2017,9 @@ std::string slsDetector::setDetectorIP(const std::string &detectorIP) { struct sockaddr_in sa; if (detectorIP.length() && detectorIP.length() < 16) { int result = inet_pton(AF_INET, detectorIP.c_str(), &(sa.sin_addr)); - // invalid format if (result == 0) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - FILE_LOG(logERROR) << "Detector IP Address should be VALID and in " - "xxx.xxx.xxx.xxx format"; - } - // valid format - else { + throw RuntimeError("setDetectorIP: IP Address should be VALID and in xxx.xxx.xxx.xxx format"); + } else { sls::strcpy_safe(detector_shm()->detectorIP, detectorIP.c_str()); if (!strcmp(detector_shm()->receiver_hostname, "none")) { FILE_LOG(logDEBUG1) << "Receiver hostname not set yet"; @@ -2430,15 +2129,9 @@ std::string slsDetector::setReceiverUDPIP(const std::string &udpip) { struct sockaddr_in sa; if (udpip.length() && udpip.length() < 16) { int result = inet_pton(AF_INET, udpip.c_str(), &(sa.sin_addr)); - // invalid format if (result == 0) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - FILE_LOG(logERROR) << "Receiver UDP IP Address should be VALID " - "and in xxx.xxx.xxx.xxx format" - << std::endl; - } - // valid format - else { + throw ReceiverError("setReceiverUDPIP: UDP IP Address should be VALID and in xxx.xxx.xxx.xxx format"); + } else { sls::strcpy_safe(detector_shm()->receiverUDPIP, udpip.c_str()); if (!strcmp(detector_shm()->receiver_hostname, "none")) { FILE_LOG(logDEBUG1) << "Receiver hostname not set yet"; @@ -2459,8 +2152,7 @@ std::string slsDetector::setReceiverUDPMAC(const std::string &udpmac) { if ((udpmac.length() != 17) || (udpmac[2] != ':') || (udpmac[5] != ':') || (udpmac[8] != ':') || (udpmac[11] != ':') || (udpmac[14] != ':')) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - FILE_LOG(logERROR) << "receiver udp MAC Address should be in xx:xx:xx:xx:xx:xx format"; + throw ReceiverError("setReceiverUDPMAC: udp MAC Address should be in xx:xx:xx:xx:xx:xx format"); } // valid format else { @@ -2530,12 +2222,8 @@ void slsDetector::setReceiverStreamingPort(int port) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Receiver streaming port: " << retval; - detector_shm()->receiver_zmqport = retval; - } + FILE_LOG(logDEBUG1) << "Receiver streaming port: " << retval; + detector_shm()->receiver_zmqport = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2550,9 +2238,7 @@ void slsDetector::setClientStreamingIP(const std::string &sourceIP) { struct addrinfo *result; // on failure to convert to a valid ip if (sls::ConvertHostnameToInternetAddress(sourceIP.c_str(), &result)) { - FILE_LOG(logWARNING) << "Could not convert zmqip into a valid IP" << sourceIP; - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - return; + throw RuntimeError("Could not convert zmqip into a valid IP" + sourceIP); } // on success put IP as std::string into arg memset(detector_shm()->zmqip, 0, MAX_STR_LENGTH); @@ -2573,9 +2259,7 @@ void slsDetector::setReceiverStreamingIP(std::string sourceIP) { // if empty, give rx_hostname if (sourceIP.empty()) { if (!strcmp(detector_shm()->receiver_hostname, "none")) { - FILE_LOG(logWARNING) << "Receiver hostname not set yet. Cannot create rx_zmqip from none"; - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - return; + throw RuntimeError("Receiver hostname not set yet. Cannot create rx_zmqip from none"); } sourceIP.assign(detector_shm()->receiver_hostname); } @@ -2585,9 +2269,7 @@ void slsDetector::setReceiverStreamingIP(std::string sourceIP) { struct addrinfo *result; // on failure to convert to a valid ip if (sls::ConvertHostnameToInternetAddress(sourceIP.c_str(), &result)) { - FILE_LOG(logWARNING) << "Could not convert rx_zmqip into a valid IP" << sourceIP; - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - return; + throw RuntimeError("Could not convert rx_zmqip into a valid IP" + sourceIP); } // on success put IP as std::string into arg sls::ConvertInternetAddresstoIpString(result, args, sizeof(args)); @@ -2606,16 +2288,12 @@ void slsDetector::setReceiverStreamingIP(std::string sourceIP) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Receiver streaming port: " << retvals; - memset(detector_shm()->receiver_zmqip, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->receiver_zmqip, retvals); - if (ret == FORCE_UPDATE) { - receiver.close(); - ret = updateCachedReceiverVariables(); - } + FILE_LOG(logDEBUG1) << "Receiver streaming port: " << retvals; + memset(detector_shm()->receiver_zmqip, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->receiver_zmqip, retvals); + if (ret == FORCE_UPDATE) { + receiver.close(); + ret = updateCachedReceiverVariables(); } } } @@ -2634,13 +2312,7 @@ int slsDetector::setDetectorNetworkParameter(networkParameter index, int delay) if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (DETECTOR_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Network Parameter (" << index << "): " << retval; - } + FILE_LOG(logDEBUG1) << "Network Parameter (" << index << "): " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2661,13 +2333,9 @@ std::string slsDetector::setAdditionalJsonHeader(const std::string &jsonheader) } else { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Additional json header: " << retvals; - memset(detector_shm()->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->receiver_additionalJsonHeader, retvals); - } + FILE_LOG(logDEBUG1) << "Additional json header: " << retvals; + memset(detector_shm()->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->receiver_additionalJsonHeader, retvals); } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2684,13 +2352,9 @@ std::string slsDetector::getAdditionalJsonHeader() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, retvals, sizeof(retvals)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Additional json header: " << retvals; - memset(detector_shm()->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->receiver_additionalJsonHeader, retvals); - } + FILE_LOG(logDEBUG1) << "Additional json header: " << retvals; + memset(detector_shm()->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->receiver_additionalJsonHeader, retvals); } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2701,16 +2365,12 @@ std::string slsDetector::getAdditionalJsonHeader() { std::string slsDetector::setAdditionalJsonParameter(const std::string &key, const std::string &value) { // validation (value or key is empty) if (!key.length() || !value.length()) { - FILE_LOG(logERROR) << "Could not set additional json header parameter as the key or value is empty"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return getAdditionalJsonParameter(key); + throw("Could not set additional json header parameter as the key or value is empty"); } // validation (ignore if key or value has , : ") if (key.find_first_of(",\":") != std::string::npos || value.find_first_of(",\":") != std::string::npos) { - FILE_LOG(logERROR) << "Could not set additional json header parameter as the key or value has illegal characters (,\":)"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return getAdditionalJsonParameter(key); + throw RuntimeError("Could not set additional json header parameter as the key or value has illegal characters (,\":)"); } // create actual key to search for and actual value to put, (key has additional ':' as value could exist the same way) @@ -2787,12 +2447,7 @@ int64_t slsDetector::setReceiverUDPSocketBufferSize(int64_t udpsockbufsize) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Receiver UDP Socket Buffer size: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver UDP Socket Buffer size: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2813,12 +2468,7 @@ int64_t slsDetector::getReceiverRealUDPSocketBufferSize() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); - } else { - FILE_LOG(logDEBUG1) << "Real Receiver UDP Socket Buffer size: " << retval; - } + FILE_LOG(logDEBUG1) << "Real Receiver UDP Socket Buffer size: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -2867,26 +2517,19 @@ int slsDetector::setUDPConnection() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Receiver UDP MAC returned : " << retvals; - memset(detector_shm()->receiverUDPMAC, 0, MAX_STR_LENGTH); - sls::strcpy_safe(detector_shm()->receiverUDPMAC, retvals); - if (ret == FORCE_UPDATE) { - receiver.close(); - ret = updateCachedReceiverVariables(); - } - - //configure detector with udp details - if (configureMAC() == FAIL) { - setReceiverOnline(OFFLINE_FLAG); //FIXME: Needed?? - } + FILE_LOG(logDEBUG1) << "Receiver UDP MAC returned : " << retvals; + memset(detector_shm()->receiverUDPMAC, 0, MAX_STR_LENGTH); + sls::strcpy_safe(detector_shm()->receiverUDPMAC, retvals); + if (ret == FORCE_UPDATE) { + receiver.close(); + ret = updateCachedReceiverVariables(); + } + //configure detector with udp details + if (configureMAC() == FAIL) { + setReceiverOnline(OFFLINE_FLAG); //FIXME: Needed?? } } else { - ret = FAIL; - setErrorMask((getErrorMask()) | (COULD_NOT_CONFIGURE_MAC)); + throw ReceiverError("setUDPConnection: Receiver is OFFLINE"); } printReceiverConfiguration(logDEBUG1); @@ -2903,13 +2546,7 @@ int slsDetector::digitalTest(digitalTestMode mode, int ival) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Digital Test returned: " << retval; - } + FILE_LOG(logDEBUG1) << "Digital Test returned: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -2924,13 +2561,10 @@ int slsDetector::loadImageToDetector(imageType index, const std::string &fname) FILE_LOG(logDEBUG1) << "Loading " << (!index ? "Dark" : "Gain") << "image from file " << fname; if (readDataFile(fname, args, nChan)) { - ret = sendImageToDetector(index, args); - return ret; + return sendImageToDetector(index, args); + } else { + throw RuntimeError("slsDetector::loadImageToDetector: Could not open file: " + fname); } - - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - FILE_LOG(logERROR) << "Could not open file " << fname; - return ret; } int slsDetector::sendImageToDetector(imageType index, int16_t imageVals[]) { @@ -2947,10 +2581,9 @@ int slsDetector::sendImageToDetector(imageType index, int16_t imageVals[]) { client.sendData(imageVals, nChan * sizeof(int16_t)); client.receiveData(&ret, sizeof(ret)); if (ret == FAIL) { - char mess[MAX_STR_LENGTH] = {0}; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); + char mess[MAX_STR_LENGTH]{}; client.receiveData(mess, MAX_STR_LENGTH); - FILE_LOG(logERROR) << "Detector " << detId << " returned error: " << mess; + throw DetectorError("Detector " + std::to_string(detId) + " returned error: " + std::string(mess)); } } if (ret == FORCE_UPDATE) { @@ -2966,12 +2599,11 @@ int slsDetector::writeCounterBlockFile(const std::string &fname, int startACQ) { FILE_LOG(logDEBUG1) << "Reading Counter to " << fname << (startACQ ? " and Restarting Acquisition" : "\n"); ret = getCounterBlock(retvals, startACQ); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); + if (ret != FAIL) { + return writeDataFile(fname, nChan, retvals); } else { - ret = writeDataFile(fname, nChan, retvals); + throw RuntimeError("slsDetector::writeCounterBlockFile: getCounterBlock failed"); } - return ret; } int slsDetector::getCounterBlock(int16_t image[], int startACQ) { @@ -2984,11 +2616,6 @@ int slsDetector::getCounterBlock(int16_t image[], int startACQ) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), image, nChan * sizeof(int16_t)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3005,9 +2632,6 @@ int slsDetector::resetCounterBlock(int startACQ) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3025,13 +2649,7 @@ int slsDetector::setCounterBit(int i) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_SET_COUNTER_BIT)); - } else { - FILE_LOG(logDEBUG1) << "Counter bit: " << retval; - } + FILE_LOG(logDEBUG1) << "Counter bit: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3071,8 +2689,6 @@ int slsDetector::setROI(int n, ROI roiLimits[]) { } int ret = sendROI(n, roiLimits); - if (ret == FAIL) - setErrorMask((getErrorMask()) | (COULDNOT_SET_ROI)); // moench (send to processor) if (detector_shm()->myDetectorType == MOENCH) { sendROIToProcessor(); @@ -3128,10 +2744,9 @@ int slsDetector::sendROI(int n, ROI roiLimits[]) { // handle ret if (ret == FAIL) { - char mess[MAX_STR_LENGTH] = {0}; - setErrorMask((getErrorMask()) | (COULDNOT_SET_ROI)); + char mess[MAX_STR_LENGTH]{}; client.receiveData(mess, MAX_STR_LENGTH); - FILE_LOG(logERROR) << "Detector " << detId << " returned error: " << mess; + throw RuntimeError("Detector " + std::to_string(detId) + " returned error: " + std::string(mess)); } else { client.receiveData(&nretval, sizeof(nretval)); int nrec = 0; @@ -3165,7 +2780,7 @@ int slsDetector::sendROI(int n, ROI roiLimits[]) { arg = detector_shm()->roiLimits; FILE_LOG(logDEBUG1) << "Sending ROI to receiver: " << detector_shm()->nROI; - auto receiver = ReceiverSocket( detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); receiver.sendData(&fnum, sizeof(fnum)); receiver.sendData(&narg, sizeof(narg)); if (narg != -1) { @@ -3178,14 +2793,11 @@ int slsDetector::sendROI(int n, ROI roiLimits[]) { } receiver.receiveData(&ret, sizeof(ret)); - // handle ret - char mess[MAX_STR_LENGTH] = {0}; if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_ROI)); + char mess[MAX_STR_LENGTH]{}; receiver.receiveData(mess, MAX_STR_LENGTH); - FILE_LOG(logERROR) << "Receiver " << detId << " returned error: " << mess; + throw ReceiverError("Receiver " + std::to_string(detId) + " returned error: " + std::string(mess)); } - if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); } @@ -3202,9 +2814,6 @@ int slsDetector::writeAdcRegister(int addr, int val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3223,14 +2832,8 @@ int slsDetector::activate(int const enable) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (DETECTOR_ACTIVATE)); - } else { - FILE_LOG(logDEBUG1) << "Activate: " << retval; - detector_shm()->activated = retval; - } + FILE_LOG(logDEBUG1) << "Activate: " << retval; + detector_shm()->activated = retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3244,13 +2847,9 @@ int slsDetector::activate(int const enable) { retval = -1; FILE_LOG(logDEBUG1) << "Setting activate flag " << arg << " to receiver"; - auto receiver = ReceiverSocket( detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_ACTIVATE)); - } else if (ret == FORCE_UPDATE) { + if (ret == FORCE_UPDATE) { receiver.close(); ret = updateCachedReceiverVariables(); } @@ -3268,13 +2867,8 @@ int slsDetector::setDeactivatedRxrPaddingMode(int padding) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_ACTIVATE)); - } else { - FILE_LOG(logDEBUG1) << "Deactivated Receiver Padding Enable:" << retval; - detector_shm()->receiver_deactivatedPaddingEnable = retval; - } + FILE_LOG(logDEBUG1) << "Deactivated Receiver Padding Enable:" << retval; + detector_shm()->receiver_deactivatedPaddingEnable = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -3282,7 +2876,7 @@ int slsDetector::setDeactivatedRxrPaddingMode(int padding) { return detector_shm()->receiver_deactivatedPaddingEnable; } -int slsDetector::getFlippedData(dimension d) { +int slsDetector::getFlippedData(dimension d) const { return detector_shm()->flippedData[d]; } @@ -3294,9 +2888,7 @@ int slsDetector::setFlippedData(dimension d, int value) { // flipped across y if (d == Y) { - FILE_LOG(logERROR) << "Flipped across Y axis is not implemented"; - setErrorMask((getErrorMask()) | (RECEIVER_FLIPPED_DATA_NOT_SET)); - return -1; + throw RuntimeError("Flipped across Y axis is not implemented"); } // replace get with shm value (write to shm right away as it is a det value, not rx value) @@ -3305,16 +2897,10 @@ int slsDetector::setFlippedData(dimension d, int value) { } args[1] = detector_shm()->flippedData[d]; FILE_LOG(logDEBUG1) << "Setting flipped data across axis " << d << " with value: " << value; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_FLIPPED_DATA_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Flipped data:" << retval << " ret: " << ret; - } + FILE_LOG(logDEBUG1) << "Flipped data:" << retval << " ret: " << ret; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -3332,11 +2918,7 @@ int slsDetector::setAllTrimbits(int val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (ALLTIMBITS_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "All trimbit value: " << retval; - } + FILE_LOG(logDEBUG1) << "All trimbit value: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3355,23 +2937,18 @@ int slsDetector::enableGapPixels(int val) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); + FILE_LOG(logDEBUG1) << "Gap pixels enable to receiver:" << retval; + detector_shm()->gappixels = retval; - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_ENABLE_GAPPIXELS_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Gap pixels enable to receiver:" << retval; - detector_shm()->gappixels = retval; - - // update databytes - detector_shm()->dataBytesInclGapPixels = 0; - if (detector_shm()->dynamicRange != 4) { - detector_shm()->dataBytesInclGapPixels = - (detector_shm()->nChip[X] * detector_shm()->nChan[X] + - detector_shm()->gappixels * detector_shm()->nGappixels[X]) * - (detector_shm()->nChip[Y] * detector_shm()->nChan[Y] + - detector_shm()->gappixels * detector_shm()->nGappixels[Y]) * - detector_shm()->dynamicRange / 8; - } + // update databytes + detector_shm()->dataBytesInclGapPixels = 0; + if (detector_shm()->dynamicRange != 4) { + detector_shm()->dataBytesInclGapPixels = + (detector_shm()->nChip[X] * detector_shm()->nChan[X] + + detector_shm()->gappixels * detector_shm()->nGappixels[X]) * + (detector_shm()->nChip[Y] * detector_shm()->nChan[Y] + + detector_shm()->gappixels * detector_shm()->nGappixels[Y]) * + detector_shm()->dynamicRange / 8; } } if (ret == FORCE_UPDATE) { @@ -3409,9 +2986,6 @@ int slsDetector::pulsePixel(int n, int x, int y) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3428,11 +3002,6 @@ int slsDetector::pulsePixelNMove(int n, int x, int y) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3449,11 +3018,6 @@ int slsDetector::pulseChip(int n) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3471,13 +3035,8 @@ int slsDetector::setThresholdTemperature(int val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (TEMPERATURE_CONTROL)); - } else { - FILE_LOG(logDEBUG1) << "Threshold temperature: " << retval; - } // no updateDetector as it is stop server + FILE_LOG(logDEBUG1) << "Threshold temperature: " << retval; + // no updateDetector as it is stop server } return retval; } @@ -3492,13 +3051,8 @@ int slsDetector::setTemperatureControl(int val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (TEMPERATURE_CONTROL)); - } else { - FILE_LOG(logDEBUG1) << "Temperature control: " << retval; - } // no updateDetector as it is stop server + FILE_LOG(logDEBUG1) << "Temperature control: " << retval; + // no updateDetector as it is stop server } return retval; } @@ -3513,13 +3067,8 @@ int slsDetector::setTemperatureEvent(int val) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto stop = DetectorSocket(detector_shm()->hostname, detector_shm()->stopPort); ret = stop.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (TEMPERATURE_CONTROL)); - } else { - FILE_LOG(logDEBUG1) << "Temperature event: " << retval; - } // no updateDetector as it is stop server + FILE_LOG(logDEBUG1) << "Temperature event: " << retval; + // no updateDetector as it is stop server } return retval; } @@ -3534,13 +3083,7 @@ int slsDetector::setStoragecellStart(int pos) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (STORAGE_CELL_START)); - } else { - FILE_LOG(logDEBUG1) << "Storage cell start: " << retval; - } + FILE_LOG(logDEBUG1) << "Storage cell start: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3549,12 +3092,13 @@ int slsDetector::setStoragecellStart(int pos) { } int slsDetector::programFPGA(const std::string &fname) { + //TODO! make exception safe! + //now malloced memory can leak // only jungfrau implemented (client processing, so check now) if (detector_shm()->myDetectorType != JUNGFRAU && - detector_shm()->myDetectorType != CHIPTESTBOARD && detector_shm()->myDetectorType != MOENCH) { - FILE_LOG(logERROR) << "Not implemented for this detector"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + detector_shm()->myDetectorType != CHIPTESTBOARD && + detector_shm()->myDetectorType != MOENCH) { + throw RuntimeError("Program FPGA is not implemented for this detector"); } FILE_LOG(logDEBUG1) << "Programming FPGA with file name:" << fname; size_t filesize = 0; @@ -3564,9 +3108,7 @@ int slsDetector::programFPGA(const std::string &fname) { { struct stat st; if (stat(fname.c_str(), &st)) { - FILE_LOG(logERROR) << "Programming file does not exist"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Programming file does not exist"); } } @@ -3574,18 +3116,15 @@ int slsDetector::programFPGA(const std::string &fname) { // open src FILE *src = fopen(fname.c_str(), "rb"); if (src == nullptr) { - FILE_LOG(logERROR) << "Could not open source file for programming: " << fname; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not open source file for programming: " + fname); } // create temp destination file char destfname[] = "/tmp/SLS_DET_MCB.XXXXXX"; int dst = mkstemp(destfname); // create temporary file and open it in r/w if (dst == -1) { - FILE_LOG(logERROR) << "Could not create destination file in /tmp for programming: " << destfname; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + fclose(src); + throw RuntimeError(std::string("Could not create destination file in /tmp for programming: ") + destfname); } // convert src to dst rawbin @@ -3616,64 +3155,42 @@ int slsDetector::programFPGA(const std::string &fname) { write(dst, &y, 1); } if (filepos < 0x1000000) { - FILE_LOG(logERROR) << "Could not convert programming file. EOF before end of flash"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Could not convert programming file. EOF before end of flash"); } } if (fclose(src)) { - FILE_LOG(logERROR) << "Could not close source file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not close source file"); } if (close(dst)) { - FILE_LOG(logERROR) << "Could not close destination file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not close destination file"); } FILE_LOG(logDEBUG1) << "File has been converted to " << destfname; //loading dst file to memory FILE *fp = fopen(destfname, "r"); if (fp == nullptr) { - FILE_LOG(logERROR) << "Could not open rawbin file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not open rawbin file"); } if (fseek(fp, 0, SEEK_END)) { - FILE_LOG(logERROR) << "Seek error in rawbin file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Seek error in rawbin file"); } filesize = ftell(fp); if (filesize <= 0) { - FILE_LOG(logERROR) << "Could not get length of rawbin file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not get length of rawbin file"); } rewind(fp); - fpgasrc = (char *)malloc(filesize + 1); + fpgasrc = (char *)malloc(filesize + 1); //<------------------- MALLOC! if (fpgasrc == nullptr) { - FILE_LOG(logERROR) << "Could not allocate size of program"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - return FAIL; + throw RuntimeError("Program FPGA: Could not allocate size of program"); } if (fread(fpgasrc, sizeof(char), filesize, fp) != filesize) { - FILE_LOG(logERROR) << "Could not read rawbin file"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - if (fpgasrc != nullptr) { - free(fpgasrc); - } - return FAIL; + free(fpgasrc); + throw RuntimeError("Program FPGA: Could not read rawbin file"); } if (fclose(fp)) { - FILE_LOG(logERROR) << "Could not close destination file after converting"; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - if (fpgasrc != nullptr) { - free(fpgasrc); - } - return FAIL; + free(fpgasrc); + throw RuntimeError("Program FPGA: Could not close destination file after converting"); } unlink(destfname); // delete temporary file FILE_LOG(logDEBUG1) << "Successfully loaded the rawbin file to program memory"; @@ -3693,9 +3210,8 @@ int slsDetector::programFPGA(const std::string &fname) { // opening error if (ret == FAIL) { client.receiveData(mess, sizeof(mess)); - FILE_LOG(logERROR) << "Detector " << detId << " returned error: " << mess; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); - filesize = 0; + free(fpgasrc); + throw RuntimeError("Detector " + std::to_string(detId) + " returned error: " + std::string(mess)); } //erasing flash @@ -3746,8 +3262,8 @@ int slsDetector::programFPGA(const std::string &fname) { } else { printf("\n"); client.receiveData(mess, sizeof(mess)); - FILE_LOG(logERROR) << "Detector returned error: " << mess; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); + free(fpgasrc); + throw RuntimeError("Detector returned error: " + std::string(mess)); } } printf("\n"); @@ -3760,8 +3276,8 @@ int slsDetector::programFPGA(const std::string &fname) { client.receiveData(&ret, sizeof(ret)); if (ret == FAIL) { client.receiveData(mess, sizeof(mess)); - FILE_LOG(logERROR) << "Detector returned error: " << mess; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); + free(fpgasrc); + throw RuntimeError("Detector returned error: " + std::string(mess)); } } @@ -3781,20 +3297,13 @@ int slsDetector::programFPGA(const std::string &fname) { stop.receiveData(&stopret, sizeof(stopret)); if (stopret == FAIL) { client.receiveData(mess, sizeof(mess)); - FILE_LOG(logERROR) << "Detector returned error: " << mess; - setErrorMask((getErrorMask()) | (PROGRAMMING_ERROR)); + free(fpgasrc); + throw RuntimeError("Detector returned error: " + std::string(mess)); } } } - if (ret != FAIL) { - FILE_LOG(logINFO) << "You can now restart the detector servers in normal mode."; - } - - //free resources - if (fpgasrc != nullptr) { - free(fpgasrc); - } - + FILE_LOG(logINFO) << "You can now restart the detector servers in normal mode."; + free(fpgasrc); return ret; } @@ -3802,15 +3311,9 @@ int slsDetector::resetFPGA() { int fnum = F_RESET_FPGA; int ret = FAIL; FILE_LOG(logDEBUG1) << "Sending reset FPGA"; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RESET_ERROR)); - } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3828,11 +3331,7 @@ int slsDetector::powerChip(int ival) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (POWER_CHIP)); - } else { - FILE_LOG(logDEBUG1) << "Power chip: " << retval; - } + FILE_LOG(logDEBUG1) << "Power chip: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3850,11 +3349,7 @@ int slsDetector::setAutoComparatorDisableMode(int ival) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (AUTO_COMP_DISABLE)); - } else { - FILE_LOG(logDEBUG1) << "Auto comp disable: " << retval; - } + FILE_LOG(logDEBUG1) << "Auto comp disable: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3884,7 +3379,6 @@ int slsDetector::setModule(sls_detector_module module, int tb) { int ret = FAIL; int retval = -1; FILE_LOG(logDEBUG1) << "Setting module with tb:" << tb; - //to exclude trimbits if (!tb) { module.nchan = 0; @@ -3896,17 +3390,10 @@ int slsDetector::setModule(sls_detector_module module, int tb) { client.sendData(&fnum, sizeof(fnum)); sendModule(&module, client); client.receiveData(&ret, sizeof(ret)); - - // handle ret if (ret == FAIL) { char mess[MAX_STR_LENGTH] = {0}; client.receiveData(mess, sizeof(mess)); - FILE_LOG(logERROR) << "Detector " << detId << " returned error: " << mess; - if (strstr(mess, "default tau") != nullptr) { - setErrorMask((getErrorMask()) | (RATE_CORRECTION_NO_TAU_PROVIDED)); - } else { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } + throw RuntimeError("Detector " + std::to_string(detId) + " returned error: " + mess); } client.receiveData(&retval, sizeof(retval)); FILE_LOG(logDEBUG1) << "Set Module returned: " << retval; @@ -3931,27 +3418,16 @@ slsDetectorDefs::sls_detector_module *slsDetector::getModule() { sls_detector_module *myMod = createModule(); if (myMod == nullptr) { - FILE_LOG(logERROR) << "Could not create module"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return nullptr; + throw RuntimeError("Could not create module"); } - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - receiveModule(myMod, client); - } + receiveModule(myMod, client); } if (ret == FORCE_UPDATE) { ret = updateDetector(); } - - // update client structure if (ret == OK) { if (myMod->eV != -1) { detector_shm()->currentThresholdEV = myMod->eV; @@ -3966,23 +3442,8 @@ int slsDetector::setRateCorrection(int64_t t) { int64_t arg = t; FILE_LOG(logDEBUG1) << "Setting Rate Correction to " << arg; if (detector_shm()->onlineFlag == ONLINE_FLAG) { - // char mess[MAX_STR_LENGTH]{}; auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - if (ret == FAIL) { //TODO (Dhanya) handle FAIL at least until we implement proper error handling - setErrorMask((getErrorMask()) | (COULD_NOT_SET_RATE_CORRECTION)); - } - // TODO! (Read error with this call) - // if (ret == FAIL) { - // if (strstr(mess, "default tau") != nullptr) { - // setErrorMask((getErrorMask()) | (RATE_CORRECTION_NO_TAU_PROVIDED)); - // } - // if (strstr(mess, "32") != nullptr) { - // setErrorMask((getErrorMask()) | (RATE_CORRECTION_NOT_32or16BIT)); - // } else { - // setErrorMask((getErrorMask()) | (COULD_NOT_SET_RATE_CORRECTION)); - // } - // } } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -3999,13 +3460,7 @@ int64_t slsDetector::getRateCorrection() { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Rate correction: " << retval; - } + FILE_LOG(logDEBUG1) << "Rate correction: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -4014,8 +3469,14 @@ int64_t slsDetector::getRateCorrection() { } void slsDetector::printReceiverConfiguration(TLogLevel level) { - FILE_LOG(level) << "#Detector " << detId << ":\n" - << "Receiver Hostname:\t" << getReceiverHostname() << "\nDetector UDP IP (Source):\t\t" << getDetectorIP() << "\nDetector UDP MAC:\t\t" << getDetectorMAC() << "\nReceiver UDP IP:\t" << getReceiverUDPIP() << "\nReceiver UDP MAC:\t" << getReceiverUDPMAC() << "\nReceiver UDP Port:\t" << getReceiverUDPPort() << "\nReceiver UDP Port2:\t" << getReceiverUDPPort2(); + FILE_LOG(level) << "#Detector " << detId + << ":\n Receiver Hostname:\t" << getReceiverHostname() + << "\nDetector UDP IP (Source):\t\t" << getDetectorIP() + << "\nDetector UDP MAC:\t\t" << getDetectorMAC() + << "\nReceiver UDP IP:\t" << getReceiverUDPIP() + << "\nReceiver UDP MAC:\t" << getReceiverUDPMAC() + << "\nReceiver UDP Port:\t" << getReceiverUDPPort() + << "\nReceiver UDP Port2:\t" << getReceiverUDPPort2(); } int slsDetector::setReceiverOnline(int value) { @@ -4023,27 +3484,23 @@ int slsDetector::setReceiverOnline(int value) { // no receiver if (!strcmp(detector_shm()->receiver_hostname, "none")) { detector_shm()->receiverOnlineFlag = OFFLINE_FLAG; - } - - else { - // set offline - if (value == OFFLINE_FLAG) { - detector_shm()->receiverOnlineFlag = value; - } + } else { + detector_shm()->receiverOnlineFlag = OFFLINE_FLAG; // set online - else { - // connect and set offline flag - detector_shm()->receiverOnlineFlag = OFFLINE_FLAG; + if (value == ONLINE_FLAG) { + + // connect and set offline flag auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); receiver.close(); - detector_shm()->receiverOnlineFlag = ONLINE_FLAG; + detector_shm()->receiverOnlineFlag = ONLINE_FLAG; // check for version compatibility if (detector_shm()->receiverAPIVersion == 0) { checkReceiverVersionCompatibility(); } - } + } + } } return detector_shm()->receiverOnlineFlag; @@ -4074,12 +3531,7 @@ int slsDetector::lockReceiver(int lock) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &lock, sizeof(lock), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Lock: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver Lock: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4096,12 +3548,7 @@ std::string slsDetector::getReceiverLastClientIP() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Last client IP to receiver: " << retval; - } + FILE_LOG(logDEBUG1) << "Last client IP to receiver: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4115,7 +3562,8 @@ int slsDetector::exitReceiver() { FILE_LOG(logDEBUG1) << "Sending exit command to receiver server"; if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); // no ret handling as ret never fail FILE_LOG(logINFO) << "Shutting down the receiver server"; @@ -4132,15 +3580,11 @@ int slsDetector::execReceiverCommand(const std::string &cmd) { FILE_LOG(logDEBUG1) << "Sending command to receiver: " << arg; if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, arg, sizeof(arg), retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logINFO) << "Receiver " << detId << " returned:\n" - << retval; - } + FILE_LOG(logINFO) << "Receiver " << detId << " returned:\n" + << retval; } return ret; } @@ -4239,11 +3683,9 @@ int slsDetector::updateCachedReceiverVariables() const { detector_shm()->receiver_silentMode = i32; if (!n) { - std::string msg = "Could not update receiver: " + - std::string(detector_shm()->receiver_hostname) + - ", received 0 bytes\n"; - FILE_LOG(logERROR) << msg; - throw RuntimeError(msg); + throw RuntimeError("Could not update receiver: " + + std::string(detector_shm()->receiver_hostname) + + ", received 0 bytes\n"); } return OK; } @@ -4261,12 +3703,7 @@ void slsDetector::sendMultiDetectorSize() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_MULTI_DET_SIZE_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver multi size returned: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver multi size returned: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4283,12 +3720,7 @@ void slsDetector::setDetectorId() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_DET_POSID_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Position Id returned: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver Position Id returned: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4306,12 +3738,7 @@ void slsDetector::setDetectorHostname() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_DET_HOSTNAME_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver set detector hostname: " << retvals; - } + FILE_LOG(logDEBUG1) << "Receiver set detector hostname: " << retvals; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4334,18 +3761,8 @@ std::string slsDetector::setFilePath(const std::string &path) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - if (ret == FAIL) { - if (!path.empty()) { - FILE_LOG(logERROR) << "file path does not exist"; - setErrorMask((getErrorMask()) | (FILE_PATH_DOES_NOT_EXIST)); - } else { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } - } else { - FILE_LOG(logDEBUG1) << "Receiver file path: " << retvals; - sls::strcpy_safe(detector_shm()->receiver_filePath, retvals); - } + FILE_LOG(logDEBUG1) << "Receiver file path: " << retvals; + sls::strcpy_safe(detector_shm()->receiver_filePath, retvals); } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4370,13 +3787,8 @@ std::string slsDetector::setFileName(const std::string &fname) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver file name: " << retvals; - sls::strcpy_safe(detector_shm()->receiver_fileName, retvals); - } + FILE_LOG(logDEBUG1) << "Receiver file name: " << retvals; + sls::strcpy_safe(detector_shm()->receiver_fileName, retvals); } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4396,14 +3808,8 @@ int slsDetector::setReceiverFramesPerFile(int f) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver frames per file: " << retval; - detector_shm()->receiver_framesPerFile = retval; - } + FILE_LOG(logDEBUG1) << "Receiver frames per file: " << retval; + detector_shm()->receiver_framesPerFile = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4415,19 +3821,14 @@ int slsDetector::setReceiverFramesPerFile(int f) { slsDetectorDefs::frameDiscardPolicy slsDetector::setReceiverFramesDiscardPolicy(frameDiscardPolicy f) { int fnum = F_RECEIVER_DISCARD_POLICY; int ret = FAIL; - int arg = (int)f; - auto retval = (frameDiscardPolicy)-1; + int arg = static_cast(f); + auto retval = static_cast(-1); FILE_LOG(logDEBUG1) << "Setting receiver frames discard policy to " << arg; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver frames discard policy: " << retval; - detector_shm()->receiver_frameDiscardMode = retval; - } + FILE_LOG(logDEBUG1) << "Receiver frames discard policy: " << retval; + detector_shm()->receiver_frameDiscardMode = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4441,18 +3842,11 @@ int slsDetector::setReceiverPartialFramesPadding(int f) { int arg = f; int retval = -1; FILE_LOG(logDEBUG1) << "Setting receiver partial frames enable to " << arg; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver partial frames enable: " << retval; - detector_shm()->receiver_framePadding = retval; - } + FILE_LOG(logDEBUG1) << "Receiver partial frames enable: " << retval; + detector_shm()->receiver_framePadding = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4471,14 +3865,8 @@ slsDetectorDefs::fileFormat slsDetector::setFileFormat(fileFormat f) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver file format: " << retval; - detector_shm()->receiver_fileFormatType = retval; - } + FILE_LOG(logDEBUG1) << "Receiver file format: " << retval; + detector_shm()->receiver_fileFormatType = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4502,18 +3890,11 @@ int slsDetector::setFileIndex(int i) { int arg = i; int retval = -1; FILE_LOG(logDEBUG1) << "Setting file index to " << arg; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver file index: " << retval; - detector_shm()->receiver_fileIndex = retval; - } + FILE_LOG(logDEBUG1) << "Receiver file index: " << retval; + detector_shm()->receiver_fileIndex = retval; } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4537,19 +3918,6 @@ int slsDetector::startReceiver() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_START_RECEIVER)); //TODO (Dhanya) Atleast put an error code for now - } - //TODO! (Erik) mess should be enum now ignoring - // if (ret == FAIL) { - // if (strstr(mess, "UDP") != nullptr) { - // setErrorMask((getErrorMask()) | (COULDNOT_CREATE_UDP_SOCKET)); - // } else if (strstr(mess, "file") != nullptr) { - // setErrorMask((getErrorMask()) | (COULDNOT_CREATE_FILE)); - // } else { - // setErrorMask((getErrorMask()) | (COULDNOT_START_RECEIVER)); - // } - // } } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4564,11 +3932,6 @@ int slsDetector::stopReceiver() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_STOP_RECEIVER)); - } } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4585,13 +3948,7 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Status: " << runStatusType(retval); - } + FILE_LOG(logDEBUG1) << "Receiver Status: " << runStatusType(retval); } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); //Do we need to handle this ret? @@ -4608,11 +3965,7 @@ int slsDetector::getFramesCaughtByReceiver() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Frames Caught by Receiver: " << retval; - } + FILE_LOG(logDEBUG1) << "Frames Caught by Receiver: " << retval; } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4628,11 +3981,7 @@ int slsDetector::getReceiverCurrentFrameIndex() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Current Frame Index of Receiver: " << retval; - } + FILE_LOG(logDEBUG1) << "Current Frame Index of Receiver: " << retval; } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4648,9 +3997,6 @@ int slsDetector::resetFramesCaught() { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4668,12 +4014,8 @@ int slsDetector::enableWriteToFile(int enable) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval; - detector_shm()->receiver_fileWriteEnable = retval; - } + FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval; + detector_shm()->receiver_fileWriteEnable = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4693,12 +4035,8 @@ int slsDetector::overwriteFile(int enable) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval; - detector_shm()->receiver_overWriteEnable = retval; - } + FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval; + detector_shm()->receiver_overWriteEnable = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4718,12 +4056,8 @@ int slsDetector::setReceiverStreamingFrequency(int freq) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_STREAMING_FREQUENCY)); - } else { - FILE_LOG(logDEBUG1) << "Receiver read frequency: " << retval; - detector_shm()->receiver_read_freq = retval; - } + FILE_LOG(logDEBUG1) << "Receiver read frequency: " << retval; + detector_shm()->receiver_read_freq = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4742,11 +4076,7 @@ int slsDetector::setReceiverStreamingTimer(int time_in_ms) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_STREAMING_TIMER)); - } else { - FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4765,12 +4095,8 @@ int slsDetector::enableDataStreamingFromReceiver(int enable) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (DATA_STREAMING)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; - detector_shm()->receiver_upstream = retval; - } + FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; + detector_shm()->receiver_upstream = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4789,17 +4115,13 @@ int slsDetector::enableTenGigabitEthernet(int i) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (DETECTOR_TEN_GIGA)); - } else { - FILE_LOG(logDEBUG1) << "10Gbe: " << retval; - detector_shm()->tenGigaEnable = retval; - client.close(); - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } - ret = configureMAC(); + FILE_LOG(logDEBUG1) << "10Gbe: " << retval; + detector_shm()->tenGigaEnable = retval; + client.close(); + if (ret == FORCE_UPDATE) { + ret = updateDetector(); } + ret = configureMAC(); } // receiver @@ -4809,17 +4131,13 @@ int slsDetector::enableTenGigabitEthernet(int i) { arg = detector_shm()->tenGigaEnable; retval = -1; FILE_LOG(logDEBUG1) << "Sending 10Gbe enable to receiver: " << arg; - - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_TEN_GIGA)); - } else { - FILE_LOG(logDEBUG1) << "Receiver 10Gbe enable: " << retval; - if (ret == FORCE_UPDATE) { - receiver.close(); - updateCachedReceiverVariables(); - } + FILE_LOG(logDEBUG1) << "Receiver 10Gbe enable: " << retval; + if (ret == FORCE_UPDATE) { + receiver.close(); + updateCachedReceiverVariables(); } } return detector_shm()->tenGigaEnable; @@ -4835,13 +4153,7 @@ int slsDetector::setReceiverFifoDepth(int i) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULD_NOT_SET_FIFO_DEPTH)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Fifo Depth: " << retval; - } + FILE_LOG(logDEBUG1) << "Receiver Fifo Depth: " << retval; } if (ret == FORCE_UPDATE) { updateCachedReceiverVariables(); @@ -4857,16 +4169,11 @@ int slsDetector::setReceiverSilentMode(int i) { FILE_LOG(logDEBUG1) << "Sending Receiver Silent Mode: " << arg; if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RECEIVER_PARAMETER_NOT_SET)); - } else { - FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; - detector_shm()->receiver_silentMode = retval; - } + FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; + detector_shm()->receiver_silentMode = retval; } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4878,15 +4185,10 @@ int slsDetector::restreamStopFromReceiver() { int fnum = F_RESTREAM_STOP_FROM_RECEIVER; int ret = FAIL; FILE_LOG(logDEBUG1) << "Restream stop dummy from Receiver via zmq"; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); + auto receiver = ReceiverSocket(detector_shm()->receiver_hostname, + detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (RESTREAM_STOP_FROM_RECEIVER)); - } } if (ret == FORCE_UPDATE) { ret = updateCachedReceiverVariables(); @@ -4916,16 +4218,12 @@ uint64_t slsDetector::setPatternWord(int addr, uint64_t word) { int mode = 0; // sets word uint64_t args[3] = {(uint64_t)mode, (uint64_t)addr, word}; uint64_t retval = -1; - FILE_LOG(logDEBUG1) << "Setting Pattern word, addr: 0x" << std::hex << addr << ", word: 0x" << word << std::dec; - + FILE_LOG(logDEBUG1) << "Setting Pattern word, addr: 0x" << std::hex << addr + << ", word: 0x" << word << std::dec; if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Set Pattern word: " << retval; - } + FILE_LOG(logDEBUG1) << "Set Pattern word: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -4939,23 +4237,16 @@ int slsDetector::setPatternLoops(int level, int &start, int &stop, int &n) { int mode = 1; // sets loop uint64_t args[5] = {(uint64_t)mode, (uint64_t)level, (uint64_t)start, (uint64_t)stop, (uint64_t)n}; int retvals[3] = {0, 0, 0}; - FILE_LOG(logDEBUG1) << "Setting Pat Loops, " - "level: " - << level << ", start: " << start << ", stop: " << stop << ", n: " << n; + FILE_LOG(logDEBUG1) << "Setting Pat Loops, level: " << level << ", start: " + << start << ", stop: " << stop << ", n: " << n; if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), retvals, sizeof(retvals)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Set Pat Loops: " << retvals[0] << ", " << retvals[1] << ", " << retvals[2]; - start = retvals[0]; - stop = retvals[1]; - n = retvals[2]; - } + FILE_LOG(logDEBUG1) << "Set Pat Loops: " << retvals[0] << ", " << retvals[1] << ", " << retvals[2]; + start = retvals[0]; + stop = retvals[1]; + n = retvals[2]; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -4976,13 +4267,7 @@ int slsDetector::setPatternWaitAddr(uint64_t level, uint64_t addr) { if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args.data(), sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Set Pat Wait Addr: " << retval; - } + FILE_LOG(logDEBUG1) << "Set Pat Wait Addr: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -4997,17 +4282,10 @@ uint64_t slsDetector::setPatternWaitTime(uint64_t level, uint64_t t) { uint64_t retval = -1; //TODO! is this what we want? std::array args{mode, level, t}; FILE_LOG(logDEBUG1) << "Setting Pat Wait Time, level: " << level << ", t: " << t; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args.data(), sizeof(args), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Set Pat Wait Time: " << retval; - } + FILE_LOG(logDEBUG1) << "Set Pat Wait Time: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5020,17 +4298,10 @@ int slsDetector::setPatternMask(uint64_t mask) { int ret = FAIL; uint64_t arg = mask; FILE_LOG(logDEBUG1) << "Setting Pattern Mask " << std::hex << mask << std::dec; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Pattern Mask successful"; - } + FILE_LOG(logDEBUG1) << "Pattern Mask successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5043,17 +4314,10 @@ uint64_t slsDetector::getPatternMask() { int ret = FAIL; uint64_t retval = -1; FILE_LOG(logDEBUG1) << "Getting Pattern Mask "; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Pattern Mask:" << retval; - } + FILE_LOG(logDEBUG1) << "Pattern Mask:" << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5066,17 +4330,10 @@ int slsDetector::setPatternBitMask(uint64_t mask) { int ret = FAIL; uint64_t arg = mask; FILE_LOG(logDEBUG1) << "Setting Pattern Bit Mask " << std::hex << mask << std::dec; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Pattern Bit Mask successful"; - } + FILE_LOG(logDEBUG1) << "Pattern Bit Mask successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5089,17 +4346,10 @@ uint64_t slsDetector::getPatternBitMask() { int ret = FAIL; uint64_t retval = -1; FILE_LOG(logDEBUG1) << "Getting Pattern Bit Mask "; - if (detector_shm()->onlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Pattern Bit Mask:" << retval; - } + FILE_LOG(logDEBUG1) << "Pattern Bit Mask:" << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5113,17 +4363,10 @@ int slsDetector::setLEDEnable(int enable) { int arg = enable; int retval = -1; FILE_LOG(logDEBUG1) << "Sending LED Enable: " << arg; - if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "LED Enable: " << retval; - } + FILE_LOG(logDEBUG1) << "LED Enable: " << retval; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5141,13 +4384,7 @@ int slsDetector::setDigitalIODelay(uint64_t pinMask, int delay) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto client = DetectorSocket(detector_shm()->hostname, detector_shm()->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else { - FILE_LOG(logDEBUG1) << "Digital IO Delay successful"; - } + FILE_LOG(logDEBUG1) << "Digital IO Delay successful"; } if (ret == FORCE_UPDATE) { ret = updateDetector(); @@ -5161,16 +4398,12 @@ slsDetectorDefs::sls_detector_module *slsDetector::interpolateTrim( // only implemented for eiger currently (in terms of which dacs) if (detector_shm()->myDetectorType != EIGER) { - FILE_LOG(logERROR) << "Interpolation of Trim values not implemented for this detector!"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return nullptr; + throw NotImplementedError("Interpolation of Trim values not implemented for this detector!"); } sls_detector_module *myMod = createModule(detector_shm()->myDetectorType); if (myMod == nullptr) { - FILE_LOG(logERROR) << "Could not create module"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return nullptr; + throw RuntimeError("Could not create module"); } enum eiger_DacIndex { SVP, VTR, @@ -5231,15 +4464,11 @@ slsDetectorDefs::sls_detector_module *slsDetector::readSettingsFile(const std::s sls_detector_module *myMod, int tb) { FILE_LOG(logDEBUG1) << "Read settings file " << fname; - - // flag creating module to delete later - bool modCreated = false; + bool modCreated = false; //If we create a module it must be deleted, TODO! usre RAII if (myMod == nullptr) { myMod = createModule(detector_shm()->myDetectorType); if (myMod == nullptr) { - FILE_LOG(logERROR) << "Could not create module"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return nullptr; + throw RuntimeError("Could not create module"); } modCreated = true; } @@ -5269,14 +4498,12 @@ slsDetectorDefs::sls_detector_module *slsDetector::readSettingsFile(const std::s names.emplace_back("VDAC7"); break; default: - FILE_LOG(logERROR) << "Unknown detector type - unknown format for settings file"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); if (modCreated) { if (myMod) { deleteModule(myMod); } } - return nullptr; + throw RuntimeError("Unknown detector type - unknown format for settings file"); } // open file @@ -5287,12 +4514,10 @@ slsDetectorDefs::sls_detector_module *slsDetector::readSettingsFile(const std::s infile.open(fname.c_str(), std::ios_base::in); } if (!infile.is_open()) { - FILE_LOG(logERROR) << "Could not open settings file for reading: " << fname; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); if (modCreated) { deleteModule(myMod); } - return nullptr; + throw RuntimeError("Could not open settings file for reading: " + fname); } // eiger @@ -5316,13 +4541,11 @@ slsDetectorDefs::sls_detector_module *slsDetector::readSettingsFile(const std::s } } if (!allread) { - FILE_LOG(logERROR) << "Could not load all values for settings for " << fname; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); if (modCreated) { deleteModule(myMod); } infile.close(); - return nullptr; + throw RuntimeError("readSettingsFile: Could not load all values for settings for " + fname); } for (int i = 0; i < myMod->ndac; ++i) { FILE_LOG(logDEBUG1) << "dac " << i << ":" << myMod->dacs[i]; @@ -5355,30 +4578,25 @@ slsDetectorDefs::sls_detector_module *slsDetector::readSettingsFile(const std::s } } if (!found) { - FILE_LOG(logERROR) << "Unknown dac " << sargname; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); + throw RuntimeError("readSettingsFile: Unknown dac: " + sargname); if (modCreated) { deleteModule(myMod); } infile.close(); - return nullptr; } } // not all read if (idac != names.size()) { - FILE_LOG(logERROR) << "Could read only " << idac << " dacs. Expected " << names.size() << " dacs"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); if (modCreated) { deleteModule(myMod); } infile.close(); - return nullptr; + throw RuntimeError("Could read only " + std::to_string(idac) + " dacs. Expected " + std::to_string(names.size()) + " dacs"); } } infile.close(); - sls::strcpy_safe(detector_shm()->settingsFile, fname.c_str()); - FILE_LOG(logINFO) << "Settings file loaded: " << detector_shm()->settingsFile; + FILE_LOG(logINFO) << "Settings file loaded: " << fname.c_str(); return myMod; } @@ -5419,9 +4637,7 @@ int slsDetector::writeSettingsFile(const std::string &fname, sls_detector_module names.emplace_back("VDAC15"); break; default: - FILE_LOG(logERROR) << "Unknown detector type - unknown format for settings file"; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return FAIL; + throw RuntimeError("Unknown detector type - unknown format for settings file"); } // open file @@ -5432,9 +4648,7 @@ int slsDetector::writeSettingsFile(const std::string &fname, sls_detector_module outfile.open(fname.c_str(), std::ios_base::out); } if (!outfile.is_open()) { - FILE_LOG(logERROR) << "Could not open settings file for writing: " << fname; - setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - return FAIL; + throw RuntimeError("Could not open settings file for writing: " + fname); } // eiger diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 433d7a7e0..56d1565e1 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -122,9 +122,6 @@ struct sharedSlsDetector { /** readout flags */ slsDetectorDefs::readOutFlags roFlags; - /** name root of the output files */ - char settingsFile[MAX_STR_LENGTH]; - /** detector settings (standard, fast, etc.) */ slsDetectorDefs::detectorSettings currentSettings; @@ -245,7 +242,7 @@ struct sharedSlsDetector { bool receiver_overWriteEnable; }; -class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { +class slsDetector : public virtual slsDetectorDefs{ public: /** * Constructor called when creating new shared memory @@ -328,11 +325,6 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { */ std::string getHostname() const; - /** - * Could not connect to receiver, log error - */ - void connectDataError(); - /** * Get detector type by connecting to the detector * @returns detector tpe or GENERIC if failed @@ -343,13 +335,13 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { * Get Detector type from shared memory variable * @returns detector type from shared memory variable */ - detectorType getDetectorTypeAsEnum(); + detectorType getDetectorTypeAsEnum() const; /** * Gets string version of detector type from shared memory variable * @returns string version of detector type from shared memory variable */ - std::string getDetectorTypeAsString(); + std::string getDetectorTypeAsString() const; /** * Gets detector type from detector and set it in receiver @@ -362,7 +354,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { * Returns the total number of channels from shared memory * @returns the total number of channels */ - int getTotalNumberOfChannels(); + int getTotalNumberOfChannels() const; /** * Update total number of channels (chiptestboard or moench) @@ -375,7 +367,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { * @param d dimension d * @returns the total number of channels in dimension d */ - int getTotalNumberOfChannels(dimension d); + int getTotalNumberOfChannels(dimension d) const; /** * Returns the total number of channels of in dimension d including gap pixels @@ -384,40 +376,40 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { * @returns the total number of channels including gap pixels in dimension d * including gap pixels */ - int getTotalNumberOfChannelsInclGapPixels(dimension d); + int getTotalNumberOfChannelsInclGapPixels(dimension d) const; /** * returns the number of channels per chip from shared memory (Mythen) * @returns number of channels per chip */ - int getNChans(); + int getNChans() const; /** * returns the number of channels per chip in dimension d from shared memory (Mythen) * @param d dimension d * @returns number of channels per chip in dimension d */ - int getNChans(dimension d); + int getNChans(dimension d) const; /** * returns the number of chips per module from shared memory (Mythen) * @returns number of chips per module */ - int getNChips(); + int getNChips() const; /** * returns the number of chips per module in dimension d from shared memory (Mythen) * @param d dimension d * @returns number of chips per module in dimension d */ - int getNChips(dimension d); + int getNChips(dimension d) const; /** * Get Detector offset from shared memory in dimension d * @param d dimension d * @returns offset in dimension d */ - int getDetectorOffset(dimension d); + int getDetectorOffset(dimension d) const; /** * Set Detector offset in shared memory in dimension d @@ -536,12 +528,6 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { */ int writeConfigurationFile(std::ofstream &outfile, multiSlsDetector *m); - /** - * Returns the trimfile or settings file name (Useless??) - * @returns the trimfile or settings file name - */ - std::string getSettingsFile(); - /** * Get detector settings * @returns current settings @@ -1106,7 +1092,7 @@ class slsDetector : public virtual slsDetectorDefs, public virtual errorDefs { * @param d axis across which data is flipped * @returns 1 for flipped, else 0 */ - int getFlippedData(dimension d = X); + int getFlippedData(dimension d = X) const; /** * Sets the enable which determines if diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 539aba522..d77c50673 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -3418,7 +3418,7 @@ std::string slsDetectorCommand::cmdSettings(int narg, char *args[], int action, else return std::string("failed"); } - return myDet->getSettingsFile(detPos); + return std::string("Specify file name for geting settings file"); } else if (cmd == "trimval") { if (action == PUT_ACTION) { if (sscanf(args[1], "%d", &val)) diff --git a/slsSupportLib/include/sls_detector_exceptions.h b/slsSupportLib/include/sls_detector_exceptions.h index b85959b98..3e046668e 100644 --- a/slsSupportLib/include/sls_detector_exceptions.h +++ b/slsSupportLib/include/sls_detector_exceptions.h @@ -7,6 +7,8 @@ *@short exceptions defined */ +#include "logger.h" + #include #include @@ -14,8 +16,15 @@ namespace sls{ struct RuntimeError : public std::runtime_error { public: - RuntimeError(): runtime_error("SLS Detector Package Failed") {} - RuntimeError(std::string msg): runtime_error(msg) {} + RuntimeError(): runtime_error("SLS Detector Package Failed") { + FILE_LOG(logERROR) << "SLS Detector Package Failed"; + } + RuntimeError(std::string msg): runtime_error(msg) { + FILE_LOG(logERROR) << msg; + } + RuntimeError(const char* msg): runtime_error(msg) { + FILE_LOG(logERROR) << msg; + } }; struct SharedMemoryError : public RuntimeError { diff --git a/slsSupportLib/src/ClientSocket.cpp b/slsSupportLib/src/ClientSocket.cpp index 792e36fa1..89c817129 100644 --- a/slsSupportLib/src/ClientSocket.cpp +++ b/slsSupportLib/src/ClientSocket.cpp @@ -19,7 +19,7 @@ ClientSocket::ClientSocket(const bool isRx, const std::string &host, uint16_t po hints.ai_flags |= AI_CANONNAME; if (getaddrinfo(host.c_str(), NULL, &hints, &result) != 0) { - std::string msg = "ClientSocket ERROR: decode host:" + host + " on port " + std::to_string(port) + "\n"; + std::string msg = "ClientSocket cannot decode host:" + host + " on port " + std::to_string(port) + "\n"; throw SocketError(msg); } @@ -32,7 +32,7 @@ ClientSocket::ClientSocket(const bool isRx, const std::string &host, uint16_t po if (::connect(getSocketId(), (struct sockaddr *)&serverAddr, sizeof(serverAddr)) != 0) { freeaddrinfo(result); - std::string msg = "ClientSocket ERROR: cannot connect to host:" + host + " on port " + std::to_string(port) + "\n"; + std::string msg = "ClientSocket: cannot connect to host:" + host + " on port " + std::to_string(port) + "\n"; FILE_LOG(logERROR) << msg; throw SocketError(msg); } @@ -57,6 +57,7 @@ void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) { receiveData(mess, sizeof(mess)); // cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); cprintf(RED, "%s returned error: %s", (isReceiver ? "Receiver" : "Detector"), mess); + std::cout << "\n"; //needed to reset the color. // unrecognized function, do not ask for retval if (strstr(mess, "Unrecognized Function") != nullptr)