diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 593bc967f..fcfa95de1 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -763,12 +763,30 @@ std::string multiSlsDetector::checkOnline(int detPos) { return sls::concatenateNonEmptyStrings(r); } -int multiSlsDetector::setPort(portType t, int num, int detPos) { +int multiSlsDetector::setControlPort(int port_number, int detPos) { if (detPos >= 0) { - return detectors[detPos]->setPort(t, num); + return detectors[detPos]->setControlPort(port_number); } - auto r = serialCall(&slsDetector::setPort, t, num); + auto r = serialCall(&slsDetector::setControlPort, port_number); + return sls::minusOneIfDifferent(r); +} + +int multiSlsDetector::setStopPort(int port_number, int detPos) { + if (detPos >= 0) { + return detectors[detPos]->setStopPort(port_number); + } + + auto r = serialCall(&slsDetector::setStopPort, port_number); + return sls::minusOneIfDifferent(r); +} + +int multiSlsDetector::setReceiverPort(int port_number, int detPos) { + if (detPos >= 0) { + return detectors[detPos]->setReceiverPort(port_number); + } + + auto r = serialCall(&slsDetector::setReceiverPort, port_number); return sls::minusOneIfDifferent(r); } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index da524b766..094dd138a 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -418,13 +418,30 @@ class multiSlsDetector : public virtual slsDetectorDefs, std::string checkOnline(int detPos = -1); /** - * Set/Gets TCP Port of detector or receiver - * @param t port type - * @param num port number (-1 gets) + * Set/Gets TCP Port of the detector + * @param port_number (-1 gets) * @param detPos -1 for all detectors in list or specific detector position * @returns port number */ - int setPort(portType t, int num = -1, int detPos = -1); + int setControlPort(int port_number = -1, int detPos = -1); + + /** + * Set/Gets TCP STOP Port of the detector + * @param port_number (-1 gets) + * @param detPos -1 for all detectors in list or specific detector position + * @returns port number + */ + int setStopPort(int port_number = -1, int detPos = -1); + + /** + * Set/Gets TCP Port of the receiver + * @param port_number (-1 gets) + * @param detPos -1 for all detectors in list or specific detector position + * @returns port number + */ + int setReceiverPort(int port_number = -1, int detPos = -1); + + /** * Lock server for this client IP diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b52ac0084..e1dbd2afb 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -67,7 +67,7 @@ slsDetector::~slsDetector() { int slsDetector::checkDetectorVersionCompatibility() { int fnum = F_CHECK_VERSION; int ret = FAIL; - char mess[MAX_STR_LENGTH] = {0}; + // char mess[MAX_STR_LENGTH]{}; int64_t arg = 0; // get api version number for detector server @@ -124,7 +124,7 @@ int slsDetector::checkDetectorVersionCompatibility() { int slsDetector::checkReceiverVersionCompatibility() { int fnum = F_RECEIVER_CHECK_VERSION; int ret = FAIL; - char mess[MAX_STR_LENGTH] = {0}; + // char mess[MAX_STR_LENGTH]{}; int64_t arg = APIRECEIVER; FILE_LOG(logDEBUG1) << "Checking version compatibility with receiver with " @@ -152,35 +152,29 @@ int slsDetector::checkReceiverVersionCompatibility() { } int64_t slsDetector::getId(idMode mode) { - int fnum = F_GET_ID; - int ret = FAIL; int arg = (int)mode; int64_t retval = -1; - FILE_LOG(logDEBUG1) << "Getting id type " << mode; - // client version if (mode == THIS_SOFTWARE_VERSION) { - ret = OK; - retval = GITDATE; - } - - // receiver version - else if (mode == RECEIVER_VERSION) { - fnum = F_GET_RECEIVER_ID; + return GITDATE; + } else if (mode == RECEIVER_VERSION) { + int ret = FAIL; if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { + int fnum = F_GET_RECEIVER_ID; auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else if (ret == FORCE_UPDATE) { - ret = updateReceiver(); } } - } - - // detector versions - else { + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } + return retval; + } else { + int fnum = F_GET_ID; + int ret = FAIL; if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); @@ -188,17 +182,17 @@ int64_t slsDetector::getId(idMode mode) { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else if (ret == FORCE_UPDATE) { - updateDetector(); } } - } - if (ret != FAIL) { - FILE_LOG(logDEBUG1) << "Id (" << mode << "): 0x" << std::hex << retval << std::dec; + if (ret != FAIL) { + FILE_LOG(logDEBUG1) << "Id (" << mode << "): 0x" << std::hex << retval << std::dec; + } + if (ret == FORCE_UPDATE) { + updateDetector(); + } + return retval; } - - return retval; } void slsDetector::freeSharedMemory(int multiId, int slsId) { @@ -218,11 +212,7 @@ void slsDetector::freeSharedMemory() { void slsDetector::setHostname(const std::string &hostname) { sls::strcpy_safe(thisDetector->hostname, hostname.c_str()); - - if (thisDetector->onlineFlag == ONLINE_FLAG) { - auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); - updateDetector(); - } + updateDetector(); } std::string slsDetector::getHostname() { @@ -695,11 +685,11 @@ int slsDetector::setDetectorType(detectorType const type) { } else { thisDetector->myDetectorType = (detectorType)retval; FILE_LOG(logDEBUG1) << "Detector Type: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } } else { ret = OK; } @@ -721,7 +711,9 @@ int slsDetector::setDetectorType(detectorType const type) { setErrorMask((getErrorMask()) | (RECEIVER_DET_HOSTTYPE_NOT_SET)); } else { FILE_LOG(logDEBUG1) << "Receiver Type: " << retval; + if (ret == FORCE_UPDATE) { + receiver.close(); //need to find a better solution ret = updateReceiver(); } } @@ -729,10 +721,6 @@ int slsDetector::setDetectorType(detectorType const type) { return retval; } -// int slsDetector::setDetectorType(const std::string& detector_type) { -// return setDetectorType(getDetectorType(detector_type)); -// } - slsDetectorDefs::detectorType slsDetector::getDetectorTypeAsEnum() { return thisDetector->myDetectorType; } @@ -823,6 +811,7 @@ int slsDetector::setOnline(int value) { if (thisDetector->onlineFlag == ONLINE_FLAG && old == OFFLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); FILE_LOG(logINFO) << "Detector connecting for the first time - updating!"; + client.close(); updateDetector(); } // error @@ -908,115 +897,33 @@ int slsDetector::setStopPort(int port_number) { return thisDetector->stopPort; } -int slsDetector::setPort(portType index, int num) { +int slsDetector::setReceiverPort(int port_number) { int fnum = F_SET_PORT; int ret = FAIL; int retval = -1; + FILE_LOG(logDEBUG1) << "Setting receiver port " + << " to " << port_number; - // set - if (num >= 0) { + // same port + if (port_number == thisDetector->receiverTCPPort) { + return thisDetector->receiverTCPPort; + } - switch (index) { - - case CONTROL_PORT: - FILE_LOG(logDEBUG1) << "Setting control port " - << " to " << num; - - // same port - if (num == thisDetector->controlPort) { - return thisDetector->controlPort; - } - - // set port - if (thisDetector->onlineFlag == ONLINE_FLAG) { - auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); - ret = client.sendCommandThenRead(fnum, &num, sizeof(num), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_CONTROL_PORT)); - } else { - thisDetector->controlPort = retval; - FILE_LOG(logDEBUG1) << "Control port: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } - } - } - break; - - case STOP_PORT: - FILE_LOG(logDEBUG1) << "Setting stop port " - << " to " << num; - - // same port - if (num == thisDetector->stopPort) { - return thisDetector->stopPort; - } - - // set port - if (thisDetector->onlineFlag == ONLINE_FLAG) { - auto stop = sls::ClientSocket(thisDetector->hostname, thisDetector->stopPort); - ret = stop.sendCommandThenRead(fnum, &num, sizeof(num), &retval, sizeof(retval)); - - // handle ret - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_STOP_PORT)); - } else { - thisDetector->stopPort = retval; - FILE_LOG(logDEBUG1) << "Stop port: " << retval; - } - } - break; - - case DATA_PORT: - FILE_LOG(logDEBUG1) << "Setting receiver port " - << " to " << num; - - // same port - if (num == thisDetector->receiverTCPPort) { - return thisDetector->receiverTCPPort; - } - - // if receiver hostname not given yet - if (!strcmp(thisDetector->receiver_hostname, "none")) { - thisDetector->receiverTCPPort = num; - break; - } - - // set port - if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { - auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); - ret = receiver.sendCommandThenRead(fnum, &num, sizeof(num), &retval, sizeof(retval)); - if (ret == FAIL) { - setErrorMask((getErrorMask()) | (COULDNOT_SET_DATA_PORT)); - } else { - thisDetector->receiverTCPPort = retval; - FILE_LOG(logDEBUG1) << "Receiver port: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } - } - } - break; - - default: - FILE_LOG(logERROR) << "Unknown port index " << index; - return -1; + // set port + if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { + auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); + ret = receiver.sendCommandThenRead(fnum, &port_number, sizeof(port_number), &retval, sizeof(retval)); + if (ret == FAIL) { + setErrorMask((getErrorMask()) | (COULDNOT_SET_DATA_PORT)); + } else { + thisDetector->receiverTCPPort = retval; + FILE_LOG(logDEBUG1) << "Receiver port: " << retval; } } - - // get - switch (index) { - case CONTROL_PORT: - return thisDetector->controlPort; - case STOP_PORT: - return thisDetector->stopPort; - case DATA_PORT: - return thisDetector->receiverTCPPort; - default: - return -1; + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); } + return thisDetector->receiverTCPPort; } int slsDetector::getControlPort() const { @@ -1046,11 +953,11 @@ int slsDetector::lockServer(int lock) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Lock: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -1069,11 +976,11 @@ std::string slsDetector::getLastClientIP() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Last client IP to detector: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return std::string(retval); } @@ -1102,8 +1009,6 @@ int slsDetector::execCommand(const std::string &cmd) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, arg, sizeof(arg), retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { @@ -1337,11 +1242,12 @@ slsDetectorDefs::detectorSettings slsDetector::sendSettingsOnly(detectorSettings } else { FILE_LOG(logDEBUG1) << "Settings: " << retval; thisDetector->currentSettings = (detectorSettings)retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + updateDetector(); + } + return thisDetector->currentSettings; } @@ -1361,11 +1267,11 @@ int slsDetector::getThresholdEnergy() { } else { FILE_LOG(logDEBUG1) << "Threshold: " << retval; thisDetector->currentThresholdEV = retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return thisDetector->currentThresholdEV; } @@ -1597,14 +1503,12 @@ slsDetectorDefs::runStatus slsDetector::getRunStatus() { auto stop = sls::ClientSocket(thisDetector->hostname, thisDetector->stopPort); ret = stop.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Detector status: " << runStatusType(retval); if (ret == FORCE_UPDATE) { - auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); - ret = updateDetector(); + updateDetector(); } } } @@ -1625,11 +1529,11 @@ int slsDetector::prepareAcquisition() { setErrorMask((getErrorMask()) | (PREPARE_ACQUISITION)); } else { FILE_LOG(logDEBUG1) << "Prepare Acquisition successful"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1648,11 +1552,11 @@ int slsDetector::startAcquisition() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Starting Acquisition successful"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1663,7 +1567,6 @@ int slsDetector::stopAcquisition() { s = getRunStatus(); r = getReceiverStatus(); } - int fnum = F_STOP_ACQUISITION; int ret = FAIL; FILE_LOG(logDEBUG1) << "Stopping Acquisition"; @@ -1672,19 +1575,16 @@ int slsDetector::stopAcquisition() { auto stop = sls::ClientSocket(thisDetector->hostname, thisDetector->stopPort); ret = stop.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Stopping Acquisition successful"; if (ret == FORCE_UPDATE) { - auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); - ret = updateDetector(); + updateDetector(); } } } thisDetector->stoppedFlag = 1; - // if rxr streaming and acquisition finished, restream dummy stop packet if ((thisDetector->receiver_upstream) && (s == IDLE) && (r == IDLE)) { restreamStopFromReceiver(); @@ -1707,11 +1607,11 @@ int slsDetector::sendSoftwareTrigger() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Sending software trigger successful"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1731,11 +1631,11 @@ int slsDetector::startAndReadAll() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Detector successfully finished acquisition"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1753,11 +1653,11 @@ int slsDetector::startReadOut() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Starting detector readout successful"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1765,7 +1665,6 @@ int slsDetector::readAll() { int fnum = F_READ_ALL; int ret = FAIL; FILE_LOG(logDEBUG1) << "Reading all frames"; - if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); @@ -1776,11 +1675,11 @@ int slsDetector::readAll() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Detector successfully finished reading all frames"; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1902,11 +1801,11 @@ int slsDetector::configureMAC() { sls::strcpy_safe(thisDetector->detectorIP, retvals[1]); FILE_LOG(logINFO) << detId << ": Detector IP updated to " << thisDetector->detectorIP; } - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -1970,7 +1869,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { // send to reciever if (thisDetector->receiverOnlineFlag == ONLINE_FLAG && ret == OK) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); - char mess[MAX_STR_LENGTH]{}; + // char mess[MAX_STR_LENGTH]{}; switch (index) { case FRAME_NUMBER: case FRAME_PERIOD: @@ -2022,6 +1921,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { break; } } else if (ret == FORCE_UPDATE) { + receiver.close(); ret = updateReceiver(); } @@ -2030,7 +1930,6 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { break; } } - return thisDetector->timerValue[index]; } @@ -2050,7 +1949,6 @@ int64_t slsDetector::getTimeLeft(timerIndex index) { } else { FILE_LOG(logDEBUG1) << getTimerType(index) << " left: " << retval; if (ret == FORCE_UPDATE) { - auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = updateDetector(); } } @@ -2074,91 +1972,93 @@ int slsDetector::setSpeed(speedVariable sp, int value) { setErrorMask((getErrorMask()) | (COULD_NOT_SET_SPEED_PARAMETERS)); } else { FILE_LOG(logDEBUG1) << "Speed index " << sp << ": " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } int slsDetector::setDynamicRange(int n) { - // int fnum = F_SET_DYNAMIC_RANGE; - // int ret = FAIL; - // int retval = -1; - // FILE_LOG(logDEBUG1) << "Setting dynamic range to " << n; + int fnum = F_SET_DYNAMIC_RANGE; + int ret = FAIL; + int retval = -1; + FILE_LOG(logDEBUG1) << "Setting dynamic range to " << n; - // // send to detector - // int olddr = thisDetector->dynamicRange; - // if (thisDetector->onlineFlag == ONLINE_FLAG) { - // char mess[MAX_STR_LENGTH] = {0}; - // ret = client.sendCommandThenRead(fnum, &n, sizeof(n), &retval, sizeof(retval), mess); + // send to detector + int olddr = thisDetector->dynamicRange; + if (thisDetector->onlineFlag == ONLINE_FLAG) { + // char mess[MAX_STR_LENGTH] = {}; + auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); + ret = client.sendCommandThenRead(fnum, &n, sizeof(n), &retval, sizeof(retval)); - // // handle ret - // if (ret == FAIL) { - // // eiger: dr set correctly, consequent rate correction was a problem - // if ((thisDetector->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; - // thisDetector->dynamicRange = retval; - // if (ret == FORCE_UPDATE) { - // ret = updateDetector(); - // } - // } - // } + // handle ret + //TODO! (Erik) handle FAIL somehow + // if (ret == FAIL) { + // // eiger: dr set correctly, consequent rate correction was a problem + // if ((thisDetector->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; + thisDetector->dynamicRange = retval; + if (ret == FORCE_UPDATE) { + client.close(); + ret = updateDetector(); + } + } + } - // // setting dr consequences on databytes shm - // // (a get can also change timer value, hence check difference) - // if (olddr != thisDetector->dynamicRange) { - // thisDetector->dataBytes = thisDetector->nChips * thisDetector->nChans * retval / 8; - // thisDetector->dataBytesInclGapPixels = - // (thisDetector->nChip[X] * thisDetector->nChan[X] + - // thisDetector->gappixels * thisDetector->nGappixels[X]) * - // (thisDetector->nChip[Y] * thisDetector->nChan[Y] + - // thisDetector->gappixels * thisDetector->nGappixels[Y]) * - // retval / 8; - // if (thisDetector->myDetectorType == CHIPTESTBOARD) { - // getTotalNumberOfChannels(); - // } - // FILE_LOG(logDEBUG1) << "Data bytes " << thisDetector->dataBytes; - // FILE_LOG(logDEBUG1) << "Data bytes including gap pixels" << thisDetector->dataBytesInclGapPixels; - // } + // setting dr consequences on databytes shm + // (a get can also change timer value, hence check difference) + if (olddr != thisDetector->dynamicRange) { + thisDetector->dataBytes = thisDetector->nChips * thisDetector->nChans * retval / 8; + thisDetector->dataBytesInclGapPixels = + (thisDetector->nChip[X] * thisDetector->nChan[X] + + thisDetector->gappixels * thisDetector->nGappixels[X]) * + (thisDetector->nChip[Y] * thisDetector->nChan[Y] + + thisDetector->gappixels * thisDetector->nGappixels[Y]) * + retval / 8; + if (thisDetector->myDetectorType == CHIPTESTBOARD) { + getTotalNumberOfChannels(); + } + FILE_LOG(logDEBUG1) << "Data bytes " << thisDetector->dataBytes; + FILE_LOG(logDEBUG1) << "Data bytes including gap pixels" << thisDetector->dataBytesInclGapPixels; + } - // // send to receiver - // if (thisDetector->receiverOnlineFlag == ONLINE_FLAG && ret == OK) { - // fnum = F_SET_RECEIVER_DYNAMIC_RANGE; - // ret = FAIL; - // n = thisDetector->dynamicRange; - // retval = -1; - // FILE_LOG(logDEBUG1) << "Sending dynamic range to receiver: " << n; - // if (connectData() == OK) { - // ret = receiver.sendCommandThenRead(fnum, &n, sizeof(n), &retval, sizeof(retval)); - // + // send to receiver + if (thisDetector->receiverOnlineFlag == ONLINE_FLAG && ret == OK) { + fnum = F_SET_RECEIVER_DYNAMIC_RANGE; + ret = FAIL; + n = thisDetector->dynamicRange; + retval = -1; + FILE_LOG(logDEBUG1) << "Sending dynamic range to receiver: " << n; + auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->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) { - // ret = updateReceiver(); - // } - // } - // } - // } + // 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 = updateReceiver(); + } + } + } return thisDetector->dynamicRange; } @@ -2187,11 +2087,11 @@ int slsDetector::setDAC(int val, dacIndex index, int mV) { } else { FILE_LOG(logDEBUG1) << "Dac index " << index << ": " << retval << (mV ? "mV" : "dac units"); - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2235,11 +2135,11 @@ slsDetectorDefs::externalCommunicationMode slsDetector::setExternalCommunication setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Timing Mode: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2260,11 +2160,11 @@ slsDetectorDefs::externalSignalFlag slsDetector::setExternalSignalFlags( setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Ext Signal (" << signalindex << "): " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2285,11 +2185,11 @@ int slsDetector::setReadOutFlags(readOutFlags flag) { } else { FILE_LOG(logDEBUG1) << "Readout flag: " << retval; thisDetector->roFlags = (readOutFlags)retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return thisDetector->roFlags; } @@ -2309,11 +2209,11 @@ uint32_t slsDetector::writeRegister(uint32_t addr, uint32_t val) { setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); } else { FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2333,11 +2233,11 @@ uint32_t slsDetector::readRegister(uint32_t addr) { setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); } else { FILE_LOG(logDEBUG1) << "Register 0x" << std::hex << addr << ": 0x" << std::hex << retval << std::dec; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2370,7 +2270,6 @@ uint32_t slsDetector::clearBit(uint32_t addr, int n) { } std::string slsDetector::setDetectorMAC(const std::string &detectorMAC) { - // invalid format if ((detectorMAC.length() != 17) || (detectorMAC[2] != ':') || (detectorMAC[5] != ':') || (detectorMAC[8] != ':') || @@ -2436,7 +2335,6 @@ std::string slsDetector::setReceiver(const std::string &receiverIP) { stopAcquisition(); } // update detector before receiver - // auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); updateDetector(); // start updating @@ -2606,11 +2504,11 @@ void slsDetector::setReceiverStreamingPort(int port) { } else { FILE_LOG(logDEBUG1) << "Receiver streaming port: " << retval; thisDetector->receiver_zmqport = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } int slsDetector::getReceiverStreamingPort() { @@ -2684,6 +2582,7 @@ void slsDetector::setReceiverStreamingIP(std::string sourceIP) { memset(thisDetector->receiver_zmqip, 0, MAX_STR_LENGTH); sls::strcpy_safe(thisDetector->receiver_zmqip, retvals); if (ret == FORCE_UPDATE) { + receiver.close(); ret = updateReceiver(); } } @@ -2710,11 +2609,11 @@ int slsDetector::setDetectorNetworkParameter(networkParameter index, int delay) setErrorMask((getErrorMask()) | (DETECTOR_NETWORK_PARAMETER)); } else { FILE_LOG(logDEBUG1) << "Network Parameter (" << index << "): " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2735,11 +2634,11 @@ std::string slsDetector::setAdditionalJsonHeader(const std::string &jsonheader) FILE_LOG(logDEBUG1) << "Additional json header: " << retvals; memset(thisDetector->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); sls::strcpy_safe(thisDetector->receiver_additionalJsonHeader, retvals); - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return getAdditionalJsonHeader(); } @@ -2762,11 +2661,11 @@ int slsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize) { setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); } else { FILE_LOG(logDEBUG1) << "Receiver UDP Socket Buffer size: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return retval; } @@ -2788,11 +2687,11 @@ int slsDetector::getReceiverRealUDPSocketBufferSize() { setErrorMask((getErrorMask()) | (COULDNOT_SET_NETWORK_PARAMETER)); } else { FILE_LOG(logDEBUG1) << "Real Receiver UDP Socket Buffer size: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return retval; } @@ -2845,6 +2744,7 @@ int slsDetector::setUDPConnection() { memset(thisDetector->receiverUDPMAC, 0, MAX_STR_LENGTH); sls::strcpy_safe(thisDetector->receiverUDPMAC, retvals); if (ret == FORCE_UPDATE) { + receiver.close(); ret = updateReceiver(); } @@ -2874,11 +2774,11 @@ int slsDetector::digitalTest(digitalTestMode mode, int ival) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Digital Test returned: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -2917,10 +2817,9 @@ int slsDetector::sendImageToDetector(imageType index, int16_t imageVals[]) { client.receiveData(mess, MAX_STR_LENGTH); FILE_LOG(logERROR) << "Detector " << detId << " returned error: " << mess; } - - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } + } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); } return ret; } @@ -2954,10 +2853,11 @@ int slsDetector::getCounterBlock(int16_t image[], int startACQ) { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -2970,14 +2870,13 @@ int slsDetector::resetCounterBlock(int startACQ) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -2997,11 +2896,11 @@ int slsDetector::setCounterBit(int i) { setErrorMask((getErrorMask()) | (COULD_NOT_SET_COUNTER_BIT)); } else { FILE_LOG(logDEBUG1) << "Counter bit: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -3092,12 +2991,10 @@ int slsDetector::sendROI(int n, ROI roiLimits[]) { FILE_LOG(logDEBUG1) << "ROI [" << i << "] (" << thisDetector->roiLimits[i].xmin << "," << thisDetector->roiLimits[i].xmax << "," << thisDetector->roiLimits[i].ymin << "," << thisDetector->roiLimits[i].ymax << ")"; } } - - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } - + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } // old firmware requires configuremac after setting roi if (thisDetector->myDetectorType == GOTTHARD) { ret = configureMAC(); @@ -3148,14 +3045,13 @@ int slsDetector::writeAdcRegister(int addr, int val) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (REGISER_WRITE_READ)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -3177,11 +3073,11 @@ int slsDetector::activate(int const enable) { } else { FILE_LOG(logDEBUG1) << "Activate: " << retval; thisDetector->activated = retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } // receiver if (thisDetector->receiverOnlineFlag == ONLINE_FLAG && ret == OK) { @@ -3198,6 +3094,7 @@ int slsDetector::activate(int const enable) { if (ret == FAIL) { setErrorMask((getErrorMask()) | (RECEIVER_ACTIVATE)); } else if (ret == FORCE_UPDATE) { + receiver.close(); ret = updateReceiver(); } } @@ -3220,11 +3117,11 @@ int slsDetector::setDeactivatedRxrPaddingMode(int padding) { } else { FILE_LOG(logDEBUG1) << "Deactivated Receiver Padding Enable:" << retval; thisDetector->receiver_deactivatedPaddingEnable = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return thisDetector->receiver_deactivatedPaddingEnable; } @@ -3278,17 +3175,15 @@ int slsDetector::setAllTrimbits(int val) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (ALLTIMBITS_NOT_SET)); } else { FILE_LOG(logDEBUG1) << "All trimbit value: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -3320,11 +3215,11 @@ int slsDetector::enableGapPixels(int val) { thisDetector->gappixels * thisDetector->nGappixels[Y]) * thisDetector->dynamicRange / 8; } - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->gappixels; } @@ -3357,14 +3252,13 @@ int slsDetector::pulsePixel(int n, int x, int y) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, args, sizeof(args), nullptr, 0); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -3381,10 +3275,11 @@ int slsDetector::pulsePixelNMove(int n, int x, int y) { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -3401,10 +3296,11 @@ int slsDetector::pulseChip(int n) { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (COULD_NOT_PULSE)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -3487,11 +3383,11 @@ int slsDetector::setStoragecellStart(int pos) { setErrorMask((getErrorMask()) | (STORAGE_CELL_START)); } else { FILE_LOG(logDEBUG1) << "Storage cell start: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -3756,10 +3652,11 @@ int slsDetector::resetFPGA() { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (RESET_ERROR)); - } else if (ret == FORCE_UPDATE) { - ret = updateDetector(); } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -3773,17 +3670,15 @@ int slsDetector::powerChip(int ival) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (POWER_CHIP)); } else { FILE_LOG(logDEBUG1) << "Power chip: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -3797,17 +3692,15 @@ int slsDetector::setAutoComparatorDisableMode(int ival) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (AUTO_COMP_DISABLE)); } else { FILE_LOG(logDEBUG1) << "Auto comp disable: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -3856,10 +3749,9 @@ int slsDetector::setModule(sls_detector_module module, int tb) { } client.receiveData(&retval, sizeof(retval)); FILE_LOG(logDEBUG1) << "Set Module returned: " << retval; - - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } + } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); } // update client structure @@ -3912,11 +3804,11 @@ slsDetectorDefs::sls_detector_module *slsDetector::getModule() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { receiveModule(myMod); - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } // update client structure if (ret == OK) { @@ -3950,28 +3842,27 @@ slsDetectorDefs::sls_detector_module *slsDetector::getModule() { int slsDetector::setRateCorrection(int64_t t) { int fnum = F_SET_RATE_CORRECT; int ret = FAIL; - // int64_t arg = t; - // FILE_LOG(logDEBUG1) << "Setting Rate Correction to " << arg; - - // if (thisDetector->onlineFlag == ONLINE_FLAG) { - // char mess[MAX_STR_LENGTH] = {0}; - // auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); - // ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0, mess); - - // // handle ret - // 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)); - // } - // } else if (ret == FORCE_UPDATE) { - // ret = updateDetector(); - // } - // } + int64_t arg = t; + FILE_LOG(logDEBUG1) << "Setting Rate Correction to " << arg; + if (thisDetector->onlineFlag == ONLINE_FLAG) { + // char mess[MAX_STR_LENGTH]{}; + auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); + ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), nullptr, 0); + // 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(); + } return ret; } @@ -3990,11 +3881,11 @@ int64_t slsDetector::getRateCorrection() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Rate correction: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -4053,11 +3944,11 @@ int slsDetector::lockReceiver(int lock) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Receiver Lock: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return retval; } @@ -4075,11 +3966,11 @@ std::string slsDetector::getReceiverLastClientIP() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Last client IP to receiver: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return retval; } @@ -4283,11 +4174,11 @@ void slsDetector::setDetectorHostname() { setErrorMask((getErrorMask()) | (RECEIVER_DET_HOSTNAME_NOT_SET)); } else { FILE_LOG(logDEBUG1) << "Receiver set detector hostname: " << retvals; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } std::string slsDetector::getFilePath() { @@ -4317,11 +4208,11 @@ std::string slsDetector::setFilePath(const std::string &path) { } else { FILE_LOG(logDEBUG1) << "Receiver file path: " << retvals; sls::strcpy_safe(thisDetector->receiver_filePath, retvals); - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_filePath; } @@ -4334,8 +4225,8 @@ std::string slsDetector::setFileName(const std::string &fname) { if (!fname.empty()) { int fnum = F_SET_RECEIVER_FILE_NAME; int ret = FAIL; - char args[MAX_STR_LENGTH] = {""}; - char retvals[MAX_STR_LENGTH] = {""}; + char args[MAX_STR_LENGTH]{}; + char retvals[MAX_STR_LENGTH]{}; sls::strcpy_safe(args, fname.c_str()); FILE_LOG(logDEBUG1) << "Sending file name to receiver: " << args; @@ -4348,11 +4239,11 @@ std::string slsDetector::setFileName(const std::string &fname) { } else { FILE_LOG(logDEBUG1) << "Receiver file name: " << retvals; sls::strcpy_safe(thisDetector->receiver_fileName, retvals); - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_fileName; } @@ -4375,11 +4266,11 @@ int slsDetector::setReceiverFramesPerFile(int f) { } else { FILE_LOG(logDEBUG1) << "Receiver frames per file: " << retval; thisDetector->receiver_framesPerFile = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_framesPerFile; } @@ -4394,19 +4285,16 @@ slsDetectorDefs::frameDiscardPolicy slsDetector::setReceiverFramesDiscardPolicy( if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->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 discard policy: " << retval; thisDetector->receiver_frameDiscardMode = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } - + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return thisDetector->receiver_frameDiscardMode; } @@ -4427,12 +4315,11 @@ int slsDetector::setReceiverPartialFramesPadding(int f) { } else { FILE_LOG(logDEBUG1) << "Receiver partial frames enable: " << retval; thisDetector->receiver_framePadding = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } - + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return thisDetector->receiver_framePadding; } @@ -4454,11 +4341,11 @@ slsDetectorDefs::fileFormat slsDetector::setFileFormat(fileFormat f) { } else { FILE_LOG(logDEBUG1) << "Receiver file format: " << retval; thisDetector->receiver_fileFormatType = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return getFileFormat(); } @@ -4489,11 +4376,11 @@ int slsDetector::setFileIndex(int i) { } else { FILE_LOG(logDEBUG1) << "Receiver file index: " << retval; thisDetector->receiver_fileIndex = retval; - if (ret == FORCE_UPDATE) { - updateReceiver(); // Do we need to handle this ret? - } } } + if (ret == FORCE_UPDATE) { + updateReceiver(); + } } return thisDetector->receiver_fileIndex; } @@ -4508,26 +4395,24 @@ int slsDetector::incrementFileIndex() { int slsDetector::startReceiver() { int fnum = F_START_RECEIVER; int ret = FAIL; - char mess[MAX_STR_LENGTH] = {0}; + // char mess[MAX_STR_LENGTH]{}; FILE_LOG(logDEBUG1) << "Starting Receiver"; - if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - //TODO! mess should be enum now ignoring - - // handle ret - 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)); - } - } else if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } + //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) { + ret = updateReceiver(); } return ret; } @@ -4536,7 +4421,6 @@ int slsDetector::stopReceiver() { int fnum = F_STOP_RECEIVER; int ret = FAIL; FILE_LOG(logDEBUG1) << "Stopping Receiver"; - if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); @@ -4544,10 +4428,11 @@ int slsDetector::stopReceiver() { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (COULDNOT_STOP_RECEIVER)); - } else if (ret == FORCE_UPDATE) { - ret = updateReceiver(); } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return ret; } @@ -4566,11 +4451,11 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus() { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Receiver Status: " << runStatusType(retval); - if (ret == FORCE_UPDATE) { - updateReceiver(); //Do we need to handle this ret? - } } } + if (ret == FORCE_UPDATE) { + updateReceiver(); //Do we need to handle this ret? + } return retval; } @@ -4583,17 +4468,15 @@ int slsDetector::getFramesCaughtByReceiver() { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Frames Caught by Receiver: " << retval; - if (ret == FORCE_UPDATE) { - updateReceiver(); //Do we need to handle this ret? - } } } + if (ret == FORCE_UPDATE) { + updateReceiver(); + } return retval; } @@ -4602,21 +4485,18 @@ int slsDetector::getReceiverCurrentFrameIndex() { int ret = FAIL; int retval = -1; FILE_LOG(logDEBUG1) << "Getting Current Frame Index of Receiver"; - if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Current Frame Index of Receiver: " << retval; - if (ret == FORCE_UPDATE) { - updateReceiver(); //Do we need to handle this ret? - } } } + if (ret == FORCE_UPDATE) { + updateReceiver(); + } return retval; } @@ -4628,14 +4508,13 @@ int slsDetector::resetFramesCaught() { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, nullptr, 0, nullptr, 0); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); - } else if (ret == FORCE_UPDATE) { - ret = updateReceiver(); } } + if (ret == FORCE_UPDATE) { + updateReceiver(); + } return ret; } @@ -4646,22 +4525,19 @@ int slsDetector::enableWriteToFile(int enable) { int arg = enable; int retval = -1; FILE_LOG(logDEBUG1) << "Sending enable file write to receiver: " << arg; - if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->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 write enable: " << retval; thisDetector->receiver_fileWriteEnable = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_fileWriteEnable; } @@ -4677,18 +4553,16 @@ int slsDetector::overwriteFile(int enable) { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->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 overwrite enable: " << retval; thisDetector->receiver_overWriteEnable = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_overWriteEnable; } @@ -4704,18 +4578,16 @@ int slsDetector::setReceiverStreamingFrequency(int freq) { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (RECEIVER_STREAMING_FREQUENCY)); } else { FILE_LOG(logDEBUG1) << "Receiver read frequency: " << retval; thisDetector->receiver_read_freq = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_read_freq; } @@ -4730,17 +4602,15 @@ int slsDetector::setReceiverStreamingTimer(int time_in_ms) { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (RECEIVER_STREAMING_TIMER)); } else { FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return retval; } @@ -4755,18 +4625,16 @@ int slsDetector::enableDataStreamingFromReceiver(int enable) { if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (DATA_STREAMING)); } else { FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; thisDetector->receiver_upstream = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } } return thisDetector->receiver_upstream; } @@ -4781,17 +4649,15 @@ int slsDetector::enableTenGigabitEthernet(int i) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->controlPort); ret = client.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (DETECTOR_TEN_GIGA)); } else { FILE_LOG(logDEBUG1) << "10Gbe: " << retval; thisDetector->tenGigaEnable = retval; + client.close(); if (ret == FORCE_UPDATE) { ret = updateDetector(); } - // have to configure mac after setting 10GbE ret = configureMAC(); } } @@ -4806,14 +4672,13 @@ int slsDetector::enableTenGigabitEthernet(int i) { auto receiver = sls::ClientSocket(thisDetector->receiver_hostname, thisDetector->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); - - // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (RECEIVER_TEN_GIGA)); } else { FILE_LOG(logDEBUG1) << "Receiver 10Gbe enable: " << retval; if (ret == FORCE_UPDATE) { - updateReceiver(); //Do we need to handle this ret? + receiver.close(); + updateReceiver(); } } } @@ -4836,11 +4701,11 @@ int slsDetector::setReceiverFifoDepth(int i) { setErrorMask((getErrorMask()) | (COULD_NOT_SET_FIFO_DEPTH)); } else { FILE_LOG(logDEBUG1) << "Receiver Fifo Depth: " << retval; - if (ret == FORCE_UPDATE) { - updateReceiver(); //Do we need to handle this ret? - } } } + if (ret == FORCE_UPDATE) { + updateReceiver(); + } return retval; } @@ -4861,11 +4726,11 @@ int slsDetector::setReceiverSilentMode(int i) { } else { FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; thisDetector->receiver_silentMode = retval; - if (ret == FORCE_UPDATE) { - ret = updateReceiver(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return thisDetector->receiver_silentMode; } @@ -4881,10 +4746,11 @@ int slsDetector::restreamStopFromReceiver() { // handle ret if (ret == FAIL) { setErrorMask((getErrorMask()) | (RESTREAM_STOP_FROM_RECEIVER)); - } else if (ret == FORCE_UPDATE) { - ret = updateReceiver(); } } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return ret; } @@ -4894,7 +4760,7 @@ int slsDetector::setCTBPattern(const std::string &fname) { FILE *fd = fopen(fname.c_str(), "r"); if (fd != nullptr) { while (fread(&word, sizeof(word), 1, fd)) { - setCTBWord(addr, word); + setCTBWord(addr, word); //TODO! (Erik) do we need to send pattern in 64bit chunks? ++addr; } fclose(fd); @@ -4915,17 +4781,15 @@ uint64_t slsDetector::setCTBWord(int addr, uint64_t word) { if (thisDetector->onlineFlag == ONLINE_FLAG) { auto client = sls::ClientSocket(thisDetector->hostname, thisDetector->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) << "Set CTB word: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -4951,11 +4815,11 @@ int slsDetector::setCTBPatLoops(int level, int &start, int &stop, int &n) { start = retvals[0]; stop = retvals[1]; n = retvals[2]; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return ret; } @@ -4978,11 +4842,11 @@ uint64_t slsDetector::setCTBPatWaitAddr(uint64_t level, uint64_t addr) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Set CTB Wait Addr: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } @@ -5003,11 +4867,11 @@ uint64_t slsDetector::setCTBPatWaitTime(uint64_t level, uint64_t t) { setErrorMask((getErrorMask()) | (OTHER_ERROR_CODE)); } else { FILE_LOG(logDEBUG1) << "Set CTB Wait Time: " << retval; - if (ret == FORCE_UPDATE) { - ret = updateDetector(); - } } } + if (ret == FORCE_UPDATE) { + ret = updateDetector(); + } return retval; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 48d3e8aa3..1212b1ccd 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -470,16 +470,6 @@ public: */ std::string checkOnline(); - - /** - * Set/Gets TCP Port of detector or receiver - * @param t port type - * @param num port number (-1 gets) - * @returns port number - */ - int setPort(portType index, int num=-1); - - int setControlPort(int port_number); /** @@ -496,6 +486,8 @@ public: */ int getStopPort() const; + int setReceiverPort(int port_number); + /** * Returns the receiver TCP port \sa sharedSlsDetector * @returns the receiver TCP port diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index e79f2f819..926f9fa57 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -2919,9 +2919,7 @@ std::string slsDetectorCommand::cmdPort(int narg, char *args[], int action, int if (action == HELP_ACTION) return helpPort(action); int val; //ret, - char ans[1000]; - portType index; - + char ans[MAX_STR_LENGTH]; if (action == PUT_ACTION) { if (sscanf(args[1], "%d", &val)) ; @@ -2929,20 +2927,22 @@ std::string slsDetectorCommand::cmdPort(int narg, char *args[], int action, int return std::string("could not scan port number") + std::string(args[1]); } + myDet->setOnline(ONLINE_FLAG, detPos); if (cmd == "port") { - index = CONTROL_PORT; + if (action == PUT_ACTION) + myDet->setControlPort(val, detPos); + sprintf(ans, "%d", myDet->setControlPort(-1, detPos)); } else if (cmd == "rx_tcpport") { - index = DATA_PORT; + if (action == PUT_ACTION) + myDet->setReceiverPort(val, detPos); + sprintf(ans, "%d", myDet->setReceiverPort(-1, detPos)); } else if (cmd == "stopport") { - index = STOP_PORT; + if (action == PUT_ACTION) + myDet->setStopPort(val, detPos); + sprintf(ans, "%d", myDet->setStopPort(-1, detPos)); } else return std::string("unknown port type ") + cmd; - myDet->setOnline(ONLINE_FLAG, detPos); - if (action == PUT_ACTION) - myDet->setPort(index, val, detPos); - - sprintf(ans, "%d", myDet->setPort(index, -1, detPos)); return std::string(ans); }