From 966896b9424fc79b48f2582462f9f116d83822fe Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 25 Feb 2019 12:57:44 +0100 Subject: [PATCH] moench: get zmq goes to the receiver instead of shm, setand get threshold energey updates zmq and shm value, setand get roi anyways goes to the ddetector, so only updates zmq or gets it from rxr --- .../slsDetector/slsDetector.cpp | 52 +++++++++++++++++-- .../include/slsReceiverTCPIPInterface.h | 3 ++ .../src/slsReceiverTCPIPInterface.cpp | 20 +++++++ slsSupportLib/include/sls_detector_funcs.h | 2 + 4 files changed, 73 insertions(+), 4 deletions(-) diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index dc03efd1d..c3446d89d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -1281,6 +1281,24 @@ slsDetectorDefs::detectorSettings slsDetector::sendSettingsOnly(detectorSettings } int slsDetector::getThresholdEnergy() { + // moench - get threshold energy from processor (due to different clients, diff shm) + if (thisDetector->myDetectorType == MOENCH) { + // get json from rxr, parse for threshold and update shm + getAdditionalJsonHeader(); + std::string result = getAdditionalJsonParameter("threshold"); + // convert to integer + try { + // udpate shm + thisDetector->currentThresholdEV = stoi(result); + return thisDetector->currentThresholdEV; + + } + // not found or cannot scan integer + catch(...) { + return -1; + } + } + int fnum = F_GET_THRESHOLD_ENERGY; int ret = FAIL; int retval = -1; @@ -1316,8 +1334,11 @@ int slsDetector::setThresholdEnergy(int e_eV, detectorSettings isettings, int tb // moench - send threshold energy to processor else if (thisDetector->myDetectorType == MOENCH) { std::string result = setAdditionalJsonParameter("threshold", std::to_string(e_eV)); - if (result == std::to_string(e_eV)) - return e_eV; + if (result == std::to_string(e_eV)) { + // update shm + thisDetector->currentThresholdEV = e_eV; + return thisDetector->currentThresholdEV; + } return -1; } @@ -2412,7 +2433,7 @@ std::string slsDetector::setReceiver(const std::string &receiverIP) { setReceiverStreamingFrequency(thisDetector->receiver_read_freq); setReceiverStreamingPort(getReceiverStreamingPort()); setReceiverStreamingIP(getReceiverStreamingIP()); - setAdditionalJsonHeader(getAdditionalJsonHeader()); + setAdditionalJsonHeader(thisDetector->receiver_additionalJsonHeader); enableDataStreamingFromReceiver(enableDataStreamingFromReceiver(-1)); if (thisDetector->myDetectorType == GOTTHARD) { sendROI(-1, nullptr); @@ -2670,10 +2691,29 @@ std::string slsDetector::setAdditionalJsonHeader(const std::string &jsonheader) if (ret == FORCE_UPDATE) { ret = updateReceiver(); } - return getAdditionalJsonHeader(); + return std::string(thisDetector->receiver_additionalJsonHeader); } std::string slsDetector::getAdditionalJsonHeader() { + int fnum = F_GET_ADDITIONAL_JSON_HEADER; + int ret = FAIL; + char retvals[MAX_STR_LENGTH] = {0}; + FILE_LOG(logDEBUG1) << "Getting additional json header "; + + if (thisDetector->receiverOnlineFlag == ONLINE_FLAG) { + auto receiver = sls::ClientSocket(true, thisDetector->receiver_hostname, thisDetector->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(thisDetector->receiver_additionalJsonHeader, 0, MAX_STR_LENGTH); + sls::strcpy_safe(thisDetector->receiver_additionalJsonHeader, retvals); + } + } + if (ret == FORCE_UPDATE) { + ret = updateReceiver(); + } return std::string(thisDetector->receiver_additionalJsonHeader); } @@ -3068,6 +3108,10 @@ slsDetectorDefs::ROI *slsDetector::getROI(int &n) { n = thisDetector->nROI; if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { getTotalNumberOfChannels(); + // moench - get json header(due to different clients, diff shm) (get roi is from detector: updated anyway) + if (thisDetector->myDetectorType == MOENCH) { + getAdditionalJsonHeader(); + } } return thisDetector->roiLimits; } diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index b82b2201d..fc091c5e7 100644 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -253,6 +253,9 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { /** set additional json header */ int set_additional_json_header(); + /** get additional json header */ + int get_additional_json_header(); + /** set udp socket buffer size */ int set_udp_socket_buffer_size(); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index f2550ee6c..f85df5fcf 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -220,6 +220,7 @@ int slsReceiverTCPIPInterface::function_table(){ flist[F_ENABLE_GAPPIXELS_IN_RECEIVER] = &slsReceiverTCPIPInterface::enable_gap_pixels; flist[F_RESTREAM_STOP_FROM_RECEIVER] = &slsReceiverTCPIPInterface::restream_stop; flist[F_ADDITIONAL_JSON_HEADER] = &slsReceiverTCPIPInterface::set_additional_json_header; + flist[F_GET_ADDITIONAL_JSON_HEADER] = &slsReceiverTCPIPInterface::get_additional_json_header; flist[F_RECEIVER_UDP_SOCK_BUF_SIZE] = &slsReceiverTCPIPInterface::set_udp_socket_buffer_size; flist[F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE]= &slsReceiverTCPIPInterface::get_real_udp_socket_buffer_size; flist[F_SET_RECEIVER_FRAMES_PER_FILE] = &slsReceiverTCPIPInterface::set_frames_per_file; @@ -1702,6 +1703,25 @@ int slsReceiverTCPIPInterface::set_additional_json_header() { +int slsReceiverTCPIPInterface::get_additional_json_header() { + ret = OK; + memset(mess, 0, sizeof(mess)); + char retval[MAX_STR_LENGTH] = {0}; + + // no arg, check receiver is null + interface->Server_ReceiveArg(ret, mess, nullptr, 0, true, receiver); + + // base object not null + if (ret == OK) { + // get + strcpy(retval, receiver->getAdditionalJsonHeader().c_str()); + FILE_LOG(logDEBUG1) << "additional json header:" << retval; + } + return interface->Server_SendResult(true, ret, retval, MAX_STR_LENGTH, mess); +} + + + int slsReceiverTCPIPInterface::set_udp_socket_buffer_size() { ret = OK; memset(mess, 0, sizeof(mess)); diff --git a/slsSupportLib/include/sls_detector_funcs.h b/slsSupportLib/include/sls_detector_funcs.h index 6ff0b521a..f73fa01a8 100644 --- a/slsSupportLib/include/sls_detector_funcs.h +++ b/slsSupportLib/include/sls_detector_funcs.h @@ -111,6 +111,7 @@ enum detFuncs{ F_ENABLE_GAPPIXELS_IN_RECEIVER, /** < sets gap pixels in the receiver */ F_RESTREAM_STOP_FROM_RECEIVER, /** < restream stop from receiver */ F_ADDITIONAL_JSON_HEADER, /** < additional json header */ + F_GET_ADDITIONAL_JSON_HEADER,/** < get additional json header */ F_RECEIVER_UDP_SOCK_BUF_SIZE, /** < UDP socket buffer size */ F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE, /** < real UDP socket buffer size */ F_SET_RECEIVER_FRAMES_PER_FILE, /** < receiver frames per file */ @@ -226,6 +227,7 @@ static const char* getFunctionNameFromEnum(enum detFuncs func) { case F_ENABLE_GAPPIXELS_IN_RECEIVER: return "F_ENABLE_GAPPIXELS_IN_RECEIVER"; case F_RESTREAM_STOP_FROM_RECEIVER: return "F_RESTREAM_STOP_FROM_RECEIVER"; case F_ADDITIONAL_JSON_HEADER: return "F_ADDITIONAL_JSON_HEADER"; + case F_GET_ADDITIONAL_JSON_HEADER: return "F_GET_ADDITIONAL_JSON_HEADER"; case F_RECEIVER_UDP_SOCK_BUF_SIZE: return "F_RECEIVER_UDP_SOCK_BUF_SIZE"; case F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE: return "F_RECEIVER_REAL_UDP_SOCK_BUF_SIZE"; case F_SET_RECEIVER_FRAMES_PER_FILE: return "F_SET_RECEIVER_FRAMES_PER_FILE";