From 3007694b77b6a0054118bda2acd56074a59231f6 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 16 Jun 2017 13:53:27 +0200 Subject: [PATCH] bug (from eiger_newheader) with imagesize of fifo different from actual image size --- slsReceiverSoftware/include/GeneralData.h | 17 +---------------- slsReceiverSoftware/include/Listener.h | 3 ++- slsReceiverSoftware/include/ZmqSocket.h | 2 +- slsReceiverSoftware/src/DataProcessor.cpp | 2 +- slsReceiverSoftware/src/File.cpp | 3 ++- slsReceiverSoftware/src/Listener.cpp | 17 +++++++++++++---- .../src/UDPStandardImplementation.cpp | 4 ++-- 7 files changed, 22 insertions(+), 26 deletions(-) diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index a94d60dd6..1c96c8273 100644 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -57,9 +57,6 @@ public: /** Max Frames per binary file */ uint32_t maxFramesPerFile; - /** Data size that is saved into the fifo buffer at a time*/ - uint32_t fifoBufferSize; - /** Header size of data saved into fifo buffer at a time*/ uint32_t fifoBufferHeaderSize; @@ -100,7 +97,6 @@ public: packetIndexMask(0), packetIndexOffset(0), maxFramesPerFile(0), - fifoBufferSize(0), fifoBufferHeaderSize(0), defaultFifoDepth(0), threadsPerReceiver(1), @@ -210,7 +206,6 @@ public: packetIndexMask, packetIndexOffset, maxFramesPerFile, - fifoBufferSize, fifoBufferHeaderSize, defaultFifoDepth, threadsPerReceiver, @@ -240,7 +235,6 @@ class GotthardData : public GeneralData { frameIndexOffset = 1; packetIndexMask = 1; maxFramesPerFile = MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 25000; nPixelsX_Streamer = nPixelsX; @@ -266,7 +260,6 @@ class ShortGotthardData : public GeneralData { imageSize = dataSize*packetsPerFrame; frameIndexMask = 0xFFFFFFFF; maxFramesPerFile = SHORT_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 25000; nPixelsX_Streamer = 1280; @@ -331,7 +324,6 @@ class PropixData : public GeneralData { frameIndexOffset = 1; packetIndexMask = 1; maxFramesPerFile = MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 25000; nPixelsX_Streamer = nPixelsX; @@ -362,7 +354,6 @@ class Moench02Data : public GeneralData { frameIndexOffset = 8; packetIndexMask = 0xFF; maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; nPixelsX_Streamer = nPixelsX; @@ -398,7 +389,6 @@ class Moench03Data : public GeneralData { frameIndexOffset = (6+8); packetIndexMask = 0xFFFFFFFF; maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; nPixelsX_Streamer = nPixelsX; @@ -426,7 +416,6 @@ class JCTBData : public GeneralData { packetsPerFrame = 1; imageSize = dataSize*packetsPerFrame; maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; nPixelsX_Streamer = nPixelsX; @@ -460,7 +449,6 @@ class JungfrauData : public GeneralData { packetsPerFrame = 128; imageSize = dataSize*packetsPerFrame; maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 2500; nPixelsX_Streamer = nPixelsX; @@ -509,7 +497,6 @@ private: imageSize = dataSize*packetsPerFrame; frameIndexMask = 0xffffff; maxFramesPerFile = EIGER_MAX_FRAMES_PER_FILE; - fifoBufferSize = imageSize; fifoBufferHeaderSize= FIFO_HEADER_NUMBYTES + sizeof(slsReceiverDefs::sls_detector_header); defaultFifoDepth = 100; footerOffset = headerSizeinPacket + dataSize; @@ -564,7 +551,6 @@ private: void SetDynamicRange(int dr, bool tgEnable) { packetsPerFrame = (tgEnable ? 4 : 16) * dr; imageSize = dataSize*packetsPerFrame; - fifoBufferSize = packetSize*packetsPerFrame; } /** @@ -574,10 +560,9 @@ private: */ void SetTenGigaEnable(bool tgEnable, int dr) { dataSize = (tgEnable ? 4096 : 1024); - packetSize = (tgEnable ? 4112 : 1040);; + packetSize = (tgEnable ? 4112 : 1040); packetsPerFrame = (tgEnable ? 4 : 16) * dr; imageSize = dataSize*packetsPerFrame; - fifoBufferSize = packetSize*packetsPerFrame; footerOffset = packetHeaderSize+dataSize; }; diff --git a/slsReceiverSoftware/include/Listener.h b/slsReceiverSoftware/include/Listener.h index 2449ffe7f..8a0e57d2c 100644 --- a/slsReceiverSoftware/include/Listener.h +++ b/slsReceiverSoftware/include/Listener.h @@ -276,6 +276,7 @@ class Listener : private virtual slsReceiverDefs, public ThreadObject { /** Listening buffer for one packet - might be removed when we can peek and eiger fnum is in header */ char* listeningPacket; - + /** if the standard header is implemented in firmware */ + bool standardheader; }; diff --git a/slsReceiverSoftware/include/ZmqSocket.h b/slsReceiverSoftware/include/ZmqSocket.h index a692846c7..e8e9d3418 100644 --- a/slsReceiverSoftware/include/ZmqSocket.h +++ b/slsReceiverSoftware/include/ZmqSocket.h @@ -17,7 +17,7 @@ #include //json header in zmq stream using namespace rapidjson; -#define DEFAULT_ZMQ_PORTNO 40001 +#define DEFAULT_ZMQ_PORTNO 70001 class ZmqSocket { diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index b7b622435..0038656c3 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -330,7 +330,7 @@ void DataProcessor::ProcessAnImage(char* buf) { if (*fileWriteEnable) - file->WriteToFile(buf, generalData->fifoBufferSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump); + file->WriteToFile(buf, generalData->imageSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump); if (rawDataReadyCallBack) { rawDataReadyCallBack( diff --git a/slsReceiverSoftware/src/File.cpp b/slsReceiverSoftware/src/File.cpp index 9107f4c94..f559ab6ee 100644 --- a/slsReceiverSoftware/src/File.cpp +++ b/slsReceiverSoftware/src/File.cpp @@ -29,7 +29,8 @@ File::File(int ind, uint32_t maxf, const uint32_t* ppf, numUnitsPerDetector(nunits), numImages(nf), dynamicRange(dr), - udpPortNumber(portno) + udpPortNumber(portno), + fifo(f) { master = index?false:true; diff --git a/slsReceiverSoftware/src/Listener.cpp b/slsReceiverSoftware/src/Listener.cpp index 60524b098..1b03ccaff 100644 --- a/slsReceiverSoftware/src/Listener.cpp +++ b/slsReceiverSoftware/src/Listener.cpp @@ -58,6 +58,15 @@ Listener::Listener(detectorType dtype, Fifo*& f, runStatus* s, uint32_t* portno, } NumberofListeners++; FILE_LOG (logDEBUG) << "Number of Listeners: " << NumberofListeners; + + switch(myDetectorType){ + case JUNGFRAU: + standardheader = true; + break; + default: + standardheader = false; + break; + } } @@ -318,7 +327,7 @@ uint32_t Listener::ListenToAnImage(char* buf) { //if(!index) cprintf(RED,"carry flag\n"); //check if its the current image packet // -------------------------- new header ---------------------------------------------------------------------- - if (myDetectorType == JUNGFRAU) { + if (standardheader) { old_header = (sls_detector_header*) (carryOverPacket + esize); fnum = old_header->frameNumber; pnum = old_header->packetNumber; @@ -346,7 +355,7 @@ uint32_t Listener::ListenToAnImage(char* buf) { //writer header if(isHeaderEmpty) { // -------------------------- new header ---------------------------------------------------------------------- - if (myDetectorType == JUNGFRAU) { + if (standardheader) { memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header)); } // -------------------old header ------------------------------------------------------------------------------ @@ -387,7 +396,7 @@ uint32_t Listener::ListenToAnImage(char* buf) { numPacketsCaught++; //record immediately to get more time before socket shutdown // -------------------------- new header ---------------------------------------------------------------------- - if (myDetectorType == JUNGFRAU) { + if (standardheader) { old_header = (sls_detector_header*) (listeningPacket + esize); fnum = old_header->frameNumber; pnum = old_header->packetNumber; @@ -426,7 +435,7 @@ uint32_t Listener::ListenToAnImage(char* buf) { numpackets++; //number of packets in this image (each time its copied to buf) if(isHeaderEmpty) { // -------------------------- new header ---------------------------------------------------------------------- - if (myDetectorType == JUNGFRAU) { + if (standardheader) { memcpy((char*)new_header, (char*)old_header, sizeof(sls_detector_header)); } // -------------------old header ------------------------------------------------------------------------------ diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 7db29d4a6..b4fc0bdfc 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -443,7 +443,7 @@ int UDPStandardImplementation::startReceiver(char *c) { //callbacks if (startAcquisitionCallBack) { startAcquisitionCallBack(filePath, fileName, fileIndex, - (generalData->fifoBufferSize) * numberofJobs + (generalData->fifoBufferHeaderSize), pStartAcquisition); + (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize), pStartAcquisition); if (rawDataReadyCallBack != NULL) { cout << "Data Write has been defined externally" << endl; } @@ -728,7 +728,7 @@ int UDPStandardImplementation::SetupFifoStructure() { //create fifo structure bool success = true; fifo.push_back( new Fifo ( - (generalData->fifoBufferSize) * numberofJobs + (generalData->fifoBufferHeaderSize), + (generalData->imageSize) * numberofJobs + (generalData->fifoBufferHeaderSize), fifoDepth, success)); if (!success) { cprintf(BG_RED,"Error: Could not allocate memory for fifo structure of index %d\n", i);