From 1189b991e5ead4cdfab266b0c61a9ad5bb0b9d69 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 10 Jul 2019 17:39:43 +0200 Subject: [PATCH] quad implemented --- RELEASE.txt | 20 ++++- serverBin/eigerDetectorServerv4.0.1.22.1 | 1 - serverBin/eigerDetectorServerv4.0.3.23.0 | 1 + slsDetectorGui/src/qDrawPlot.cpp | 41 +++++++--- slsDetectorSoftware/commonFiles/error_defs.h | 5 ++ .../commonFiles/sls_detector_funcs.h | 1 + slsDetectorSoftware/eigerDetectorServer/Beb.c | 57 +++++++++---- slsDetectorSoftware/eigerDetectorServer/Beb.h | 1 + .../bin/eigerDetectorServerv4.0.1.22.1 | Bin 306422 -> 0 bytes .../eigerDetectorServer/gitInfo.txt | 10 +-- .../eigerDetectorServer/gitInfoEiger.h | 8 +- .../slsDetectorFunctionList.c | 4 + .../multiSlsDetector/multiSlsDetector.cpp | 47 +++++++---- .../multiSlsDetector/multiSlsDetector.h | 7 ++ .../slsDetector/slsDetector.cpp | 45 ++++++++++ slsDetectorSoftware/slsDetector/slsDetector.h | 7 ++ .../slsDetector/slsDetectorCommand.cpp | 24 +++++- .../slsDetector/slsDetectorUtils.h | 7 ++ .../slsDetectorFunctionList.h | 3 + .../slsDetectorServer_funcs.c | 59 ++++++++++++++ .../slsDetectorServer_funcs.h | 1 + slsReceiverSoftware/include/DataStreamer.h | 24 +++++- .../include/UDPBaseImplementation.h | 16 +++- slsReceiverSoftware/include/UDPInterface.h | 12 +++ .../include/UDPStandardImplementation.h | 18 ++++ slsReceiverSoftware/include/ZmqSocket.h | 38 +++++++-- .../include/slsReceiverTCPIPInterface.h | 3 + .../include/sls_receiver_funcs.h | 1 + slsReceiverSoftware/src/DataStreamer.cpp | 25 ++++-- .../src/UDPBaseImplementation.cpp | 18 ++++ .../src/UDPStandardImplementation.cpp | 77 +++++++++++++++++- .../src/slsReceiverTCPIPInterface.cpp | 53 +++++++++++- 32 files changed, 558 insertions(+), 76 deletions(-) delete mode 120000 serverBin/eigerDetectorServerv4.0.1.22.1 create mode 120000 serverBin/eigerDetectorServerv4.0.3.23.0 delete mode 100755 slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.0.1.22.1 diff --git a/RELEASE.txt b/RELEASE.txt index fd176c10e..c934c3cb2 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -17,6 +17,7 @@ This document describes the differences between 4.0.3 and 4.0.2 releases. 1. Topics Concerning ==================== + - software for eiger quad hardware integrated - command line framesl, cyclesl was printing in float @@ -27,13 +28,24 @@ This document describes the differences between 4.0.3 and 4.0.2 releases. Client ------ - 1. Command line commands framesl, cyclesl, fatesl, problesl and nframes was + 1. Command line quad integrates Eiger quad hardware + + 2. Command line commands framesl, cyclesl, fatesl, problesl and nframes was printing the result in decimals. It is now fixed to print as whole numbers. - Detector Server - --------------- - + Detector Server (Eiger) + ----------------------- + + 1. Command line quad integrates Eiger quad hardware + + + Receiver + -------- + + 1. Command line quad integrates Eiger quad hardware + + 3. Known Issues =============== diff --git a/serverBin/eigerDetectorServerv4.0.1.22.1 b/serverBin/eigerDetectorServerv4.0.1.22.1 deleted file mode 120000 index 04312328b..000000000 --- a/serverBin/eigerDetectorServerv4.0.1.22.1 +++ /dev/null @@ -1 +0,0 @@ -../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.0.1.22.1 \ No newline at end of file diff --git a/serverBin/eigerDetectorServerv4.0.3.23.0 b/serverBin/eigerDetectorServerv4.0.3.23.0 new file mode 120000 index 000000000..df9505dd7 --- /dev/null +++ b/serverBin/eigerDetectorServerv4.0.3.23.0 @@ -0,0 +1 @@ +../slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.0.3.23.0 \ No newline at end of file diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 87492eeea..c21b2f586 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -121,12 +121,21 @@ void qDrawPlot::SetupWidgetWindow(){ nPixelsX = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X); nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y); - if (detType == slsDetectorDefs::JUNGFRAUCTB) { - npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES_JCTB, -1) * 2)/25;// for moench 03 - nPixelsX = npixelsx_jctb; - nPixelsY = npixelsy_jctb; + switch(detType) { + case slsDetectorDefs::JUNGFRAUCTB: + npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES_JCTB, -1) * 2)/25;// for moench 03 + nPixelsX = npixelsx_jctb; + nPixelsY = npixelsy_jctb; + break; + case slsDetectorDefs::EIGER: + if (myDet->setQuad()) { + nPixelsX = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X) / 2; + nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y) * 2; + } + break; + default: + break; } - cout<<"nPixelsX:"<getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X); nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y); - if (detType == slsDetectorDefs::JUNGFRAUCTB) { - npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES_JCTB, -1) * 2)/25; // for moench 03 - nPixelsX = npixelsx_jctb; - nPixelsY = npixelsy_jctb; + switch(detType) { + case slsDetectorDefs::JUNGFRAUCTB: + npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES_JCTB, -1) * 2)/25;// for moench 03 + nPixelsX = npixelsx_jctb; + nPixelsY = npixelsy_jctb; + break; + case slsDetectorDefs::EIGER: + if (myDet->setQuad()) { + nPixelsX = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X) / 2; + nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y) * 2; + } + break; + default: + break; } + cout<<"nPixelsX:"<= 0) { + Beb_quadEnable = (val == 0 ? 0 : 1); + Beb_SetDetectorPosition(Beb_positions); + } + return Beb_quadEnable; +} int Beb_SetDetectorPosition(int pos[]) { if(!Beb_activated) return OK; - cprintf(BLUE,"Got Position values %d %d %d...\n", pos[0],pos[1], pos[2]); - pos[0] = Beb_swap_uint16(pos[0]); - //pos[1] = Beb_swap_uint16(pos[1]); - pos[2] = Beb_swap_uint16(pos[2]); + cprintf(BLUE,"Got Position values [%d %d %d]\n", pos[0], pos[1], pos[2]); + + + // save positions + Beb_positions[0] = pos[0]; + Beb_positions[1] = pos[1]; + Beb_positions[2] = pos[2]; + + // get left and right + int posLeft[3] = {pos[0], pos[1], pos[2]}; + int posRight[3] = {pos[0], pos[1] + 1, pos[2]}; + + if (Beb_quadEnable) { + posRight[0] = 1; // right is next row + posRight[1] = 0; // right same first column + } int ret = FAIL; //mapping new memory to read master top module configuration @@ -1233,26 +1253,28 @@ int Beb_SetDetectorPosition(int pos[]) { uint32_t value = 0; ret = OK; // x left + int posval = Beb_swap_uint16(posLeft[0]); value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); value &= UDP_HEADER_ID_MSK; // to keep previous id value - Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); + Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST, value | ((posval << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); - if((value & UDP_HEADER_X_MSK) != ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) + if((value & UDP_HEADER_X_MSK) != ((posval << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) ret = FAIL; // x right + posval = Beb_swap_uint16(posRight[0]); value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); value &= UDP_HEADER_ID_MSK; // to keep previous id value - Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); + Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, value | ((posval << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); - if((value & UDP_HEADER_X_MSK) != ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) + if((value & UDP_HEADER_X_MSK) != ((posval << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) ret = FAIL; // y left (column) // overwriting z anyway, so no need to look at previous z value - int posval = Beb_swap_uint16(Beb_top ? pos[1] : (pos[1]+1)); + posval = Beb_swap_uint16(posLeft[1]); Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); if(value != ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)) @@ -1260,7 +1282,7 @@ int Beb_SetDetectorPosition(int pos[]) { // y right // overwriting z anyway, so no need to look at previous z value - posval = Beb_swap_uint16(Beb_top ? (pos[1]+1) : pos[1]); + posval = Beb_swap_uint16(posRight[1]); Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); if(value != ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)) @@ -1269,19 +1291,21 @@ int Beb_SetDetectorPosition(int pos[]) { // z left + posval = Beb_swap_uint16(posLeft[2]); value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); value &= UDP_HEADER_Y_MSK; // to keep previous y value - Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, value | ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); + Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, value | ((posval << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); - if((value & UDP_HEADER_Z_MSK) != ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) + if((value & UDP_HEADER_Z_MSK) != ((posval << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) ret = FAIL; // z right + posval = Beb_swap_uint16(posRight[2]); value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); value &= UDP_HEADER_Y_MSK; // to keep previous y value - Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, value | ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); + Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, value | ((posval << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); - if((value & UDP_HEADER_Z_MSK) != ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) + if((value & UDP_HEADER_Z_MSK) != ((posval << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) ret = FAIL; @@ -1292,8 +1316,7 @@ int Beb_SetDetectorPosition(int pos[]) { cprintf(BLUE, "Position set to...\n" "Left: [%d, %d, %d]\n" "Right:[%d, %d, %d]\n", - Beb_swap_uint16(pos[0]), Beb_top ? pos[1] : (pos[1]+1), Beb_swap_uint16(pos[2]), - Beb_swap_uint16(pos[0]), Beb_top ? (pos[1]+1) : pos[1], Beb_swap_uint16(pos[2])); + posLeft[0], posLeft[1], posLeft[2], posRight[0], posRight[1], posRight[2]); } return ret; diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 73718db03..7f5be0088 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -91,6 +91,7 @@ struct BebInfo{ int Beb_GetBebFPGATemp(); void Beb_SetDetectorNumber(uint32_t detid); + int Beb_SetQuad(int val); int Beb_SetDetectorPosition(int pos[]); uint16_t Beb_swap_uint16( uint16_t val); diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.0.1.22.1 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv4.0.1.22.1 deleted file mode 100755 index 63e32f9fc826da5d13dfe0665ce70b1d4ae38f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306422 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 zgD#0+X53HpvCqnumberOfDetector[X]; // to copy data in multi module - int nY = thisMultiDetector->numberOfDetector[Y]; // for eiger, to reverse the data + int nX = 0; + int nY = 0; + int nDetPixelsX = 0; + int nDetPixelsY = 0; bool gappixelsenable = false; - bool eiger = false; - if (getDetectorsType() == EIGER) { - eiger = true; - nX *= 2; - gappixelsenable = detectors[0]->enableGapPixels(-1) >= 1 ? true : false; - } - + bool eiger = false; bool runningList[zmqSocket.size()], connectList[zmqSocket.size()]; int numRunning = 0; for (unsigned int i = 0; i < zmqSocket.size(); ++i) { @@ -5068,6 +5063,15 @@ void multiSlsDetector::readFrameFromReceiver() { // shape nPixelsX = doc["shape"][0].GetUint(); nPixelsY = doc["shape"][1].GetUint(); + // detector shape + nX = doc["detshape"][0].GetUint(); + nY = doc["detshape"][1].GetUint(); + nDetPixelsX = nX * nPixelsX; + nDetPixelsY = nY * nPixelsY; + // det type + eiger = (doc["detType"].GetUint() == (int)EIGER) ? true : false; + // gap pixels enable + gappixelsenable = (doc["gappixels"].GetUint() == 0) ? false : true; #ifdef VERBOSE cprintf(BLUE, "(Debug) One Time Header Info:\n" @@ -5076,9 +5080,13 @@ void multiSlsDetector::readFrameFromReceiver() { "dynamicRange: %u\n" "bytesPerPixel: %f\n" "nPixelsX: %u\n" - "nPixelsY: %u\n", + "nPixelsY: %u\n" + "nX: %u\n" + "nY: %u\n" + "eiger: %d\n" + "gappixelsenable: %d\n", size, multisize, dynamicRange, bytesPerPixel, - nPixelsX, nPixelsY); + nPixelsX, nPixelsY, nX, nY, eiger, gappixelsenable); #endif } // each time, parse rest of header @@ -5148,21 +5156,18 @@ void multiSlsDetector::readFrameFromReceiver() { } //send data to callback - if (data) { - int nCompletePixelsX = thisMultiDetector->numberOfChannelInclGapPixels[X]; - int nCompletePixelsY = thisMultiDetector->numberOfChannelInclGapPixels[Y]; - + if (data) { // 4bit gap pixels if (dynamicRange == 4 && gappixelsenable) { int n = processImageWithGapPixels(multiframe, multigappixels); thisData = new detectorData(NULL, NULL, NULL, getCurrentProgress(), - currentFileName.c_str(), nCompletePixelsX, nCompletePixelsY, + currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multigappixels, n, dynamicRange, currentFileIndex); } // normal pixels else { thisData = new detectorData(NULL, NULL, NULL, getCurrentProgress(), - currentFileName.c_str(), nCompletePixelsX, nCompletePixelsY, + currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multiframe, multisize, dynamicRange, currentFileIndex); } dataReady(thisData, currentFrameIndex, @@ -5429,3 +5434,9 @@ int multiSlsDetector::setCTBPatWaitAddr(int level, int addr) { int multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t) { return callDetectorMember(&slsDetector::setCTBPatWaitTime, level, t); } + +int multiSlsDetector::setQuad(int val) { + if (getNumberOfDetectors() > 1) + val = 0; + return callDetectorMember(&slsDetector::setQuad, val); +} diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 6bc712ea9..1f11e1b1f 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1869,6 +1869,13 @@ public: */ int setCTBPatWaitTime(int level, uint64_t t=-1); + /** + * Set or Get Quad Type (Only for Eiger Quad detector hardware) + * @param val 1 if quad type set, else 0, -1 gets + * @returns 1 if quad type set, else 0 + */ + int setQuad(int val = -1); + private: /** diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 73c30960d..91dd35fb3 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -9756,5 +9756,50 @@ int slsDetector::setCTBPatWaitTime(int level, uint64_t t) { } +int slsDetector::setQuad(int val) { + int fnum = F_QUAD, fnum2 = F_RECEIVER_QUAD; + int ret = FAIL; + int retval = -1; + // set row column header in detector + if (val >= 0) { + if (thisDetector->onlineFlag==ONLINE_FLAG) { + if (connectControl() == OK){ + controlSocket->SendDataOnly(&fnum,sizeof(fnum)); + controlSocket->SendDataOnly(&val,sizeof(val)); + controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); + if (ret==FAIL){ + char mess[MAX_STR_LENGTH] = {}; + controlSocket->ReceiveDataOnly(mess,sizeof(mess)); + std::cout<< "Detector returned error: " << mess << std::endl; + setErrorMask((getErrorMask())|(SOME_ERROR)); + } + controlSocket->ReceiveDataOnly(&retval,sizeof(retval)); + disconnectControl(); + if (ret==FORCE_UPDATE) + updateDetector(); + } + } + } else + ret = OK; + // set quad type to receiver (flipped data and detector shape, numdet) + if (ret != FAIL) { + ret = FAIL; + if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){ +#ifdef VERBOSE + if(val ==-1) + std::cout<< "Getting Receiver Quad mode" << endl; + else + std::cout<< "Setting Receiver Quad Mode to " << val << endl; +#endif + if (connectData() == OK){ + ret=thisReceiver->sendInt(fnum2,retval,val); + disconnectData(); + } + if(ret==FAIL) + setErrorMask((getErrorMask())|(RECEIVER_PARAMETER_NOT_SET)); + } + } + return retval; +} diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 779ad78e7..36b719595 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -2274,6 +2274,13 @@ public: */ int setCTBPatWaitTime(int level, uint64_t t=-1); + /** + * Set or Get Quad Type (Only for Eiger Quad detector hardware) + * @param val 1 if quad type set, else 0, -1 gets + * @returns 1 if quad type set, else 0 + */ + int setQuad(int val = -1); + private: /** diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index f7b0f0b1a..ced8c8d3b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -378,6 +378,13 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDetectorSize; ++i; + /*! \page config + - quad [i] if 1, sets the detector size to a quad (Specific to an EIGER quad hardware). 0 by default. \c Returns \c (int) + */ + descrToFuncMap[i].m_pFuncName="quad"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdDetectorSize; + ++i; + /*! \page config - roimask [i] ?? \c Returns \c (int) in hexadecimal */ @@ -4458,7 +4465,7 @@ string slsDetectorCommand::cmdDetectorSize(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); - if (cmd == "roi") + if (cmd == "roi" || cmd == "quad") myDet->setReceiverOnline(ONLINE_FLAG); if (action==PUT_ACTION) { @@ -4494,6 +4501,13 @@ string slsDetectorCommand::cmdDetectorSize(int narg, char *args[], int action) { myDet->setMaxNumberOfChannelsPerDetector(Y,val); } + if(cmd=="quad"){ + if (val >=0 ) { + sprintf(ans, "%d", myDet->setQuad(val)); + return string(ans); + } + } + if(cmd=="flippeddatax"){ if ((!sscanf(args[1],"%d",&val)) || (val!=0 && val != 1)) return string ("cannot scan flippeddata x mode: must be 0 or 1"); @@ -4533,7 +4547,13 @@ string slsDetectorCommand::cmdDetectorSize(int narg, char *args[], int action) { } else if (cmd=="detsizechan") { sprintf(ans,"%d %d",myDet->getMaxNumberOfChannelsPerDetector(X),myDet->getMaxNumberOfChannelsPerDetector(Y)); return string(ans); + } + + else if (cmd=="quad") { + sprintf(ans, "%d", myDet->setQuad()); + return string(ans); } + else if(cmd=="flippeddatax"){ myDet->setReceiverOnline(ONLINE_FLAG); ret = myDet->getFlippedData(X); @@ -4571,6 +4591,7 @@ string slsDetectorCommand::helpDetectorSize(int narg, char *args[], int action) os << "dr i \n sets the dynamic range of the detector"<< std::endl; os << "roi i xmin xmax ymin ymax \n sets region of interest where i is number of rois;i=0 to clear rois"<< std::endl; os << "detsizechan x y \n sets the maximum number of channels for complete detector set in both directions; -1 is no limit"<< std::endl; + os << "quad i \n if i = 1, sets the detector size to a quad (Specific to an EIGER quad hardware). 0 by default."<< std::endl; os << "flippeddatax x \n sets if the data should be flipped on the x axis"<< std::endl; os << "flippeddatay y \n sets if the data should be flipped on the y axis"<< std::endl; os << "gappixels i \n enables/disables gap pixels in system (detector & receiver). 1 sets, 0 unsets. Used in EIGER only and multidetector level." << std::endl; @@ -4581,6 +4602,7 @@ string slsDetectorCommand::helpDetectorSize(int narg, char *args[], int action) os << "dr \n gets the dynamic range of the detector"<< std::endl; os << "roi \n gets region of interest"<< std::endl; os << "detsizechan \n gets the maximum number of channels for complete detector set in both directions; -1 is no limit"<< std::endl; + os << "quad \n returns 1 if the detector size is a quad (Specific to an EIGER quad hardware). 0 by default."<< std::endl; os << "flippeddatax\n gets if the data will be flipped on the x axis"<< std::endl; os << "flippeddatay\n gets if the data will be flipped on the y axis"<< std::endl; os << "gappixels\n gets if gap pixels is enabled in system. Used in EIGER only and multidetector level." << std::endl; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index 13988d42c..76a397c9d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -1021,6 +1021,13 @@ virtual int setReceiverSilentMode(int i = -1)=0; */ virtual int checkVersionCompatibility(portType t) = 0; + /** + * Set or Get Quad Type (Only for Eiger Quad detector hardware) + * @param val 1 if quad type set, else 0, -1 gets + * @returns 1 if quad type set, else 0 + */ + virtual int setQuad(int val = -1) = 0; + protected: diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index b10be6845..35be5c9ea 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -194,6 +194,9 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32 #if defined(JUNGFRAUD) || defined(EIGERD) int setDetectorPosition(int pos[]); #endif +#ifdef EIGERD +int setQuad(int val); +#endif // very detector specific diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 8cd09f2b1..e906f1bea 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -211,6 +211,7 @@ const char* getFunctionName(enum detFuncs func) { case F_STORAGE_CELL_START: return "F_STORAGE_CELL_START"; case F_CHECK_VERSION: return "F_CHECK_VERSION"; case F_SOFTWARE_TRIGGER: return "F_SOFTWARE_TRIGGER"; + case F_QUAD: return "F_QUAD"; default: return "Unknown Function"; } @@ -297,6 +298,7 @@ void function_table() { flist[F_STORAGE_CELL_START] = &storage_cell_start; flist[F_CHECK_VERSION] = &check_version; flist[F_SOFTWARE_TRIGGER] = &software_trigger; + flist[F_QUAD] = &set_quad; // check if (NUM_DET_FUNCTIONS >= TOO_MANY_FUNCTIONS_DEFINED) { @@ -5926,3 +5928,60 @@ int software_trigger(int file_des) { return ret; } +int set_quad(int file_des) { + int ret=OK,ret1=OK; + int n=0; + int retval=-1; + sprintf(mess,"Setting quad failed\n"); + + // execute action +#ifndef EIGERD + //to receive any arguments + while (n > 0) + n = receiveData(file_des,mess,MAX_STR_LENGTH,OTHER); + ret = FAIL; + sprintf(mess,"Function (set_quad) is not implemented for this detector\n"); + cprintf(RED, "Warning: %s", mess); +#else + + // receive arguments + int arg=-1; + n = receiveData(file_des,&arg,sizeof(arg),INT32); + if (n < 0) return printSocketReadError(); + + // execute action + if (differentClients && lockStatus && arg!=-1) { + ret = FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + cprintf(RED, "Warning: %s", mess); + } +#ifdef SLS_DETECTOR_FUNCTION_LIST + else { +#ifdef VERBOSE + printf("Setting Quad :%d \n",arg); +#endif + retval=setQuad(arg); + if((arg != -1) && (retval != arg)) { + ret=FAIL; + cprintf(RED, "Warning: %s", mess); + } + } +#endif + if (ret==OK && differentClients) + ret=FORCE_UPDATE; + +#endif + + // ret could be swapped during sendData + ret1 = ret; + // send ok / fail + n = sendData(file_des,&ret1,sizeof(ret),INT32); + // send return argument + if (ret==FAIL) { + n += sendData(file_des,mess,sizeof(mess),OTHER); + } + n += sendData(file_des,&retval,sizeof(retval),INT32); + + // return ok / fail + return ret; +} \ No newline at end of file diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h index a4bbaeb64..210a5636d 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.h @@ -97,5 +97,6 @@ int auto_comp_disable(int); int storage_cell_start(int); int check_version(int); int software_trigger(int); +int set_quad(int); #endif diff --git a/slsReceiverSoftware/include/DataStreamer.h b/slsReceiverSoftware/include/DataStreamer.h index 8857102c7..e48a4a65a 100644 --- a/slsReceiverSoftware/include/DataStreamer.h +++ b/slsReceiverSoftware/include/DataStreamer.h @@ -30,9 +30,11 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { * @param fd flipped data enable for x and y dimensions * @param ajh additional json header * @param sm pointer to silent mode + * @param nd pointer to number of detectors in each dimension + * @param gpEnable pointer to gap pixels enable */ DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, - uint64_t* fi, int* fd, char* ajh, bool* sm); + uint64_t* fi, int* fd, char* ajh, bool* sm, int* nd, bool* gpEnable); /** * Destructor @@ -88,6 +90,18 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { */ int SetThreadPriority(int priority); + /** + * Set number of detectors + * @param number of detectors in both dimensions + */ + void SetNumberofDetectors(int* nd); + + /** + * Set Flipped data enable across both dimensions + * @param flipped data enable in both dimensions + */ + void SetFlippedData(int* fd); + /** * Creates Zmq Sockets * (throws an exception if it couldnt create zmq sockets) @@ -184,7 +198,7 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { uint64_t* fileIndex; /** flipped data across both dimensions enable */ - int* flippedData; + int flippedData[2]; /** additional json header */ char* additionJsonHeader; @@ -207,5 +221,11 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject { /** Complete buffer used for roi, eg. shortGotthard */ char* completeBuffer; + /** Number of Detectors in X and Y dimension */ + int numDet[2]; + + /** Gap Pixels Enable */ + bool* gapPixelsEnable; + }; diff --git a/slsReceiverSoftware/include/UDPBaseImplementation.h b/slsReceiverSoftware/include/UDPBaseImplementation.h index 695caa96a..381315519 100644 --- a/slsReceiverSoftware/include/UDPBaseImplementation.h +++ b/slsReceiverSoftware/include/UDPBaseImplementation.h @@ -72,6 +72,12 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter */ bool getGapPixelsEnable() const; + /** + * Get Quad type Enable (eiger and hardware specific) + * @return true if quad enabled, else false + */ + bool getQuad() const; + //***file parameters*** /** @@ -341,7 +347,7 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter void setMultiDetectorSize(const int* size); /* - * Get flipped data across 'axis' + * Set flipped data across 'axis' * @return if data is flipped across 'axis' */ void setFlippedData(int axis=0, int enable=-1); @@ -353,6 +359,12 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter */ int setGapPixelsEnable(const bool b); + /** + * Set Quad type Enable (eiger and hardware specific) + * @param true if quad enabled, else false + */ + void setQuad(const bool b); + //***file parameters*** /** @@ -739,6 +751,8 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter int flippedData[2]; /** gap pixels enable */ bool gapPixelsEnable; + /** quad type enable */ + bool quadEnable; //***receiver parameters*** /** Maximum Number of Listening Threads/ UDP Ports */ diff --git a/slsReceiverSoftware/include/UDPInterface.h b/slsReceiverSoftware/include/UDPInterface.h index 55e0d2cb6..40c37ac70 100644 --- a/slsReceiverSoftware/include/UDPInterface.h +++ b/slsReceiverSoftware/include/UDPInterface.h @@ -162,6 +162,12 @@ class UDPInterface { */ virtual bool getGapPixelsEnable() const = 0; + /** + * Get Quad type Enable (eiger and hardware specific) + * @return true if quad enabled, else false + */ + virtual bool getQuad() const = 0; + //***file parameters*** /** @@ -444,6 +450,12 @@ class UDPInterface { */ virtual int setGapPixelsEnable(const bool b) = 0; + /** + * Set Quad type Enable (eiger and hardware specific) + * @param true if quad enabled, else false + */ + virtual void setQuad(const bool b) = 0; + //***file parameters*** /** diff --git a/slsReceiverSoftware/include/UDPStandardImplementation.h b/slsReceiverSoftware/include/UDPStandardImplementation.h index 506aeb698..4215c5e2e 100644 --- a/slsReceiverSoftware/include/UDPStandardImplementation.h +++ b/slsReceiverSoftware/include/UDPStandardImplementation.h @@ -53,6 +53,18 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase */ int64_t getAcquisitionIndex() const; + /* + * Set multi detector size + * @param pointer to array of multi detector size in every dimension + */ + void setMultiDetectorSize(const int* size); + + /* + * Set flipped data across 'axis' + * @return if data is flipped across 'axis' + */ + void setFlippedData(int axis=0, int enable=-1); + /** * Set Gap Pixels Enable (eiger specific) * @param b true for gap pixels enable, else false @@ -60,6 +72,12 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase */ int setGapPixelsEnable(const bool b); + /** + * Set Quad type Enable (eiger and hardware specific) + * @param true if quad enabled, else false + */ + void setQuad(const bool b); + /** * Set File Format * @param f fileformat binary or hdf5 diff --git a/slsReceiverSoftware/include/ZmqSocket.h b/slsReceiverSoftware/include/ZmqSocket.h index e58419a1e..2063239f6 100644 --- a/slsReceiverSoftware/include/ZmqSocket.h +++ b/slsReceiverSoftware/include/ZmqSocket.h @@ -238,19 +238,42 @@ public: /** * Send Message Header - * @param buf message - * @param length length of message - * @param dummy true if end of acquistion else false + * @param index self index for debugging + * @param dummy true if a dummy message for end of acquisition + * @param jsonversion json version + * @param dynamicrange dynamic range + * @param fileIndex file or acquisition index + * @param ndetx number of detectors in x axis + * @param ndety number of detectors in y axis + * @param npixelsx number of pixels/channels in x axis for this zmq socket + * @param npixelsy number of pixels/channels in y axis for this zmq socket + * @param imageSize number of bytes for an image in this socket + * @param frameNumber current frame number + * @param expLength exposure length or subframe index if eiger + * @param packetNumber number of packets caught for this frame + * @param bunchId bunch id + * @param timestamp time stamp + * @param modId module Id + * @param row row index in complete detector + * @param column column index in complete detector + * @param reserved reserved + * @param debug debug + * @param roundRNumber not used yet + * @param detType detector enum + * @param version detector header version + * @param gapPixelsEnable gap pixels enable (exception: if gap pixels enable for 4 bit mode, data is not yet gap pixel enabled in receiver) + * @param flippedData int array of 2 elements for x and y, if it is flipped across x or y axis + * @param additionalJsonHeader additional json header * @returns 0 if error, else 1 */ int SendHeaderData ( int index, bool dummy, uint32_t jsonversion, uint32_t dynamicrange = 0, uint64_t fileIndex = 0, - uint32_t npixelsx = 0, uint32_t npixelsy = 0, uint32_t imageSize = 0, + uint32_t ndetx = 0, uint32_t ndety = 0, uint32_t npixelsx = 0, uint32_t npixelsy = 0, uint32_t imageSize = 0, uint64_t acqIndex = 0, uint64_t fIndex = 0, char* fname = NULL, uint64_t frameNumber = 0, uint32_t expLength = 0, uint32_t packetNumber = 0, uint64_t bunchId = 0, uint64_t timestamp = 0, uint16_t modId = 0, uint16_t row = 0, uint16_t column = 0, uint16_t reserved = 0, uint32_t debug = 0, uint16_t roundRNumber = 0, - uint8_t detType = 0, uint8_t version = 0, int* flippedData = 0, + uint8_t detType = 0, uint8_t version = 0, int gapPixelsEnable = 0, int* flippedData = 0, char* additionalJsonHeader = 0) { @@ -261,6 +284,7 @@ public: "\"jsonversion\":%u, " "\"bitmode\":%u, " "\"fileIndex\":%llu, " + "\"detshape\":[%u, %u], " "\"shape\":[%u, %u], " "\"size\":%u, " "\"acqIndex\":%llu, " @@ -283,11 +307,12 @@ public: "\"version\":%u, " //additional stuff + "\"gappixels\":%u, " "\"flippedDataX\":%u" ;//"}\n"; int length = sprintf(buf, jsonHeaderFormat, - jsonversion, dynamicrange, fileIndex, npixelsx, npixelsy, imageSize, + jsonversion, dynamicrange, fileIndex, ndetx, ndety, npixelsx, npixelsy, imageSize, acqIndex, fIndex, (fname == NULL)? "":fname, dummy?0:1, frameNumber, expLength, packetNumber, bunchId, timestamp, @@ -295,6 +320,7 @@ public: detType, version, //additional stuff + gapPixelsEnable, ((flippedData == 0 ) ? 0 :flippedData[0]) ); if (additionalJsonHeader && strlen(additionalJsonHeader)) { diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 1b28c2ed4..3c0bf3b9d 100644 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -284,6 +284,9 @@ class slsReceiverTCPIPInterface : private virtual slsReceiverDefs { /** set deactivated receiver padding enable */ int set_deactivated_receiver_padding_enable(); + /** set quad type */ + int set_quad_type(); + /** detector type */ detectorType myDetectorType; diff --git a/slsReceiverSoftware/include/sls_receiver_funcs.h b/slsReceiverSoftware/include/sls_receiver_funcs.h index 281088f19..5d3636e8c 100644 --- a/slsReceiverSoftware/include/sls_receiver_funcs.h +++ b/slsReceiverSoftware/include/sls_receiver_funcs.h @@ -71,6 +71,7 @@ enum recFuncs{ F_RECEIVER_DISCARD_POLICY, /** < frames discard policy */ F_RECEIVER_PADDING_ENABLE, /** < partial frames padding enable */ F_RECEIVER_DEACTIVATED_PADDING_ENABLE, /** < deactivated receiver padding enable */ + F_RECEIVER_QUAD, /* Always append functions hereafter!!! */ diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index 47689f48e..49a75579c 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -16,7 +16,7 @@ const std::string DataStreamer::TypeName = "DataStreamer"; DataStreamer::DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, - uint64_t* fi, int* fd, char* ajh, bool* sm) : + uint64_t* fi, int* fd, char* ajh, bool* sm, int* nd, bool* gpEnable) : ThreadObject(ind), runningFlag(0), generalData(0), @@ -26,14 +26,19 @@ DataStreamer::DataStreamer(int ind, Fifo*& f, uint32_t* dr, std::vector* r, roi(r), adcConfigured(-1), fileIndex(fi), - flippedData(fd), additionJsonHeader(ajh), acquisitionStartedFlag(false), measurementStartedFlag(false), firstAcquisitionIndex(0), firstMeasurementIndex(0), - completeBuffer(0) + completeBuffer(0), + gapPixelsEnable(gpEnable) { + flippedData[0] = fd[0]; + flippedData[1] = fd[1]; + numDet[0] = nd[0]; + numDet[1] = nd[1]; + if(ThreadObject::CreateThread() == FAIL) throw std::exception(); @@ -130,6 +135,16 @@ int DataStreamer::SetThreadPriority(int priority) { return OK; } +void DataStreamer::SetNumberofDetectors(int* nd) { + numDet[0] = nd[0]; + numDet[1] = nd[1]; +} + +void DataStreamer::SetFlippedData(int* fd) { + flippedData[0] = fd[0]; + flippedData[1] = fd[1]; +} + void DataStreamer::CreateZmqSockets(int* nunits, uint32_t port, const char* srcip) { uint32_t portnum = port + index; @@ -261,13 +276,13 @@ int DataStreamer::SendHeader(sls_receiver_header* rheader, uint32_t size, uint32 uint64_t acquisitionIndex = header.frameNumber - firstAcquisitionIndex; return zmqSocket->SendHeaderData(index, dummy, SLS_DETECTOR_JSON_HEADER_VERSION, *dynamicRange, *fileIndex, - nx, ny, size, + numDet[0], numDet[1], nx, ny, size, acquisitionIndex, frameIndex, fileNametoStream, header.frameNumber, header.expLength, header.packetNumber, header.bunchId, header.timestamp, header.modId, header.row, header.column, header.reserved, header.debug, header.roundRNumber, header.detType, header.version, - flippedData, + gapPixelsEnable ? 1 : 0, flippedData, additionJsonHeader ); } diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index fb7e15054..154f591d8 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -53,6 +53,7 @@ void UDPBaseImplementation::initializeMembers(){ flippedData[0] = 0; flippedData[1] = 0; gapPixelsEnable = false; + quadEnable = false; //***receiver parameters*** status = IDLE; @@ -137,6 +138,11 @@ bool UDPBaseImplementation::getGapPixelsEnable() const { return gapPixelsEnable; } +bool UDPBaseImplementation::getQuad() const { + FILE_LOG(logDEBUG) << __AT__ << " starting"; + return quadEnable; +} + /***file parameters***/ slsReceiverDefs::fileFormat UDPBaseImplementation::getFileFormat() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; @@ -392,6 +398,8 @@ void UDPBaseImplementation::setMultiDetectorSize(const int* size) { } strcat(message,")"); FILE_LOG(logINFO) << message; + + // overridden } void UDPBaseImplementation::setFlippedData(int axis, int enable){ @@ -399,6 +407,8 @@ void UDPBaseImplementation::setFlippedData(int axis, int enable){ if(axis<0 || axis>1) return; flippedData[axis] = enable==0?0:1; FILE_LOG(logINFO) << "Flipped Data: " << flippedData[0] << " , " << flippedData[1]; + + // overridden } int UDPBaseImplementation::setGapPixelsEnable(const bool b) { @@ -410,6 +420,14 @@ int UDPBaseImplementation::setGapPixelsEnable(const bool b) { return OK; } +void UDPBaseImplementation::setQuad(const bool b) { + FILE_LOG(logDEBUG) << __AT__ << " starting"; + quadEnable = b; + FILE_LOG(logINFO) << "Quad Enable: " << quadEnable; + + // overridden +} + /***file parameters***/ void UDPBaseImplementation::setFileFormat(const fileFormat f){ FILE_LOG(logDEBUG) << __AT__ << " starting"; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index d7ea6122e..2564f0349 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -111,6 +111,55 @@ int64_t UDPStandardImplementation::getAcquisitionIndex() const { } +void UDPStandardImplementation::setMultiDetectorSize(const int* size) { + char message[100]; + strcpy(message, "Detector Size: ("); + for (int i = 0; i < MAX_DIMENSIONS; ++i) { + if (myDetectorType == EIGER && (!i)) + numDet[i] = size[i]*2; + else + numDet[i] = size[i]; + sprintf(message,"%s%d",message,numDet[i]); + if (i < MAX_DIMENSIONS-1 ) + strcat(message,","); + } + strcat(message,")"); + + int sz[2] = {numDet[0], numDet[1]}; + if (quadEnable) { + sz[0] = 1; + sz[1] = 2; + } + for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it){ + (*it)->SetNumberofDetectors(sz); + } + + FILE_LOG(logINFO) << message; +} + +void UDPStandardImplementation::setFlippedData(int axis, int enable){ + if(axis<0 || axis>1) return; + flippedData[axis] = enable==0?0:1; + + if (!quadEnable) { + for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it){ + (*it)->SetFlippedData(flippedData); + } + } + else { + int fd[2] = {flippedData[0], flippedData[1]}; + if (dataStreamer.size() == 2) { + fd[0] = 0; + dataStreamer[0]->SetFlippedData(fd); + fd[0] = 1; + dataStreamer[1]->SetFlippedData(fd); + } + } + + FILE_LOG(logINFO) << "Flipped Data: " << flippedData[0] << " , " << flippedData[1]; +} + + int UDPStandardImplementation::setGapPixelsEnable(const bool b) { if (gapPixelsEnable != b) { @@ -130,6 +179,32 @@ int UDPStandardImplementation::setGapPixelsEnable(const bool b) { return OK; } +void UDPStandardImplementation::setQuad(const bool b) { + if (quadEnable != b) { + quadEnable = b; + + if (!quadEnable) { + for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it){ + (*it)->SetNumberofDetectors(numDet); + (*it)->SetFlippedData(flippedData); + } + } else { + int size[2] = {1, 2}; + for (std::vector::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it){ + (*it)->SetNumberofDetectors(size); + } + int fd[2] = {flippedData[0], flippedData[1]}; + if (dataStreamer.size() == 2) { + fd[0] = 0; + dataStreamer[0]->SetFlippedData(fd); + fd[0] = 1; + dataStreamer[1]->SetFlippedData(fd); + } + } + } + FILE_LOG(logINFO) << "Quad Enable: " << quadEnable; +} + void UDPStandardImplementation::setFileFormat(const fileFormat f){ switch(f){ @@ -252,7 +327,7 @@ int UDPStandardImplementation::setDataStreamEnable(const bool enable) { for ( int i = 0; i < numThreads; ++i ) { try { DataStreamer* s = new DataStreamer(i, fifo[i], &dynamicRange, - &roi, &fileIndex, flippedData, additionalJsonHeader, &silentMode); + &roi, &fileIndex, flippedData, additionalJsonHeader, &silentMode, (int*)numDet, &gapPixelsEnable); dataStreamer.push_back(s); dataStreamer[i]->SetGeneralData(generalData); dataStreamer[i]->CreateZmqSockets(&numThreads, streamingPort, streamingSrcIP); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 4536bbbb4..87b8851b0 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -246,6 +246,7 @@ const char* slsReceiverTCPIPInterface::getFunctionName(enum recFuncs func) { case F_RECEIVER_DISCARD_POLICY: return "F_RECEIVER_DISCARD_POLICY"; case F_RECEIVER_PADDING_ENABLE: return "F_RECEIVER_PADDING_ENABLE"; case F_RECEIVER_DEACTIVATED_PADDING_ENABLE: return "F_RECEIVER_DEACTIVATED_PADDING_ENABLE"; + case F_RECEIVER_QUAD: return "F_RECEIVER_QUAD"; default: return "Unknown Function"; } @@ -303,7 +304,7 @@ int slsReceiverTCPIPInterface::function_table(){ flist[F_RECEIVER_DISCARD_POLICY] = &slsReceiverTCPIPInterface::set_discard_policy; flist[F_RECEIVER_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_padding_enable; flist[F_RECEIVER_DEACTIVATED_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable; - + flist[F_RECEIVER_QUAD] = &slsReceiverTCPIPInterface::set_quad_type; #ifdef VERYVERBOSE for (int i = 0; i < NUM_REC_FUNCTIONS ; i++) { @@ -2982,3 +2983,53 @@ int slsReceiverTCPIPInterface::set_deactivated_receiver_padding_enable() { // return ok/fail return ret; } + + + +int slsReceiverTCPIPInterface::set_quad_type() { + ret = OK; + memset(mess, 0, sizeof(mess)); + int value = -1; + int retval = -1; + + // receive arguments + if (mySock->ReceiveDataOnly(&value,sizeof(value)) < 0 ) + return printSocketReadError(); + + // execute action +#ifdef SLS_RECEIVER_UDP_FUNCTIONS + if (receiverBase == NULL) + invalidReceiverObject(); + else { + // set + if(value >= 0) { + if (mySock->differentClients && lockStatus) + receiverlocked(); + else if (receiverBase->getStatus() != IDLE) + receiverNotIdle(); + else { + receiverBase->setQuad(value); // no check required + } + } + //get + retval = (int)receiverBase->getQuad(); // no check required + } +#endif +#ifdef VERYVERBOSE + FILE_LOG(logINFO) << "Quad mode:" << retval; +#endif + + if (ret == OK && mySock->differentClients) + ret = FORCE_UPDATE; + + // send answer + mySock->SendDataOnly(&ret,sizeof(ret)); + if (ret == FAIL) + mySock->SendDataOnly(mess,sizeof(mess)); + mySock->SendDataOnly(&retval,sizeof(retval)); + + // return ok/fail + return ret; +} + +