diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index d680dad1d..71d112f95 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware -URL: origin git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git -Repository Root: origin git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git -Repsitory UUID: 879c5e2ee129acfd70aba4ae6fab829cc5409350 -Revision: 67 -Branch: gemma -Last Changed Author: Maliakal_Dhanya -Last Changed Rev: 67 -Last Changed Date: 2014-12-08 09:17:56 +0100 +URL: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git +Repository Root: origin maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git +Repsitory UUID: 750a0a06945a748a18d0b8b19b7cf94ecf2fec23 +Revision: 112 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 112 +Last Changed Date: 2015-06-26 15:57:28 +0200 diff --git a/slsReceiverSoftware/include/genericSocket.h b/slsReceiverSoftware/include/genericSocket.h index 0ccc80adf..fe49df0d2 100644 --- a/slsReceiverSoftware/include/genericSocket.h +++ b/slsReceiverSoftware/include/genericSocket.h @@ -60,7 +60,6 @@ class sockaddr_in; #include #endif - #include /******exit */ #include @@ -71,6 +70,8 @@ class sockaddr_in; #include #include + + using namespace std; #define DEFAULT_PACKET_SIZE 1286 @@ -279,7 +280,11 @@ typedef struct if (socketDescriptor >= 0){ \ close(socketDescriptor); \ } \ - file_des=-1; \ + if(is_a_server and getProtocol() == TCP){\ + if(file_des>0)\ + close(file_des);\ + } + file_des=-1; \ serverAddress.sin_port=-1; \ }; @@ -383,6 +388,7 @@ typedef struct #ifdef VERY_VERBOSE cout << "client connected "<< file_des << endl; #endif + } } @@ -399,7 +405,6 @@ typedef struct cerr << "Can not create socket "<=0){ + close(socketDescriptor); + socketDescriptor = -1; + } + } + } + /** @short free connection */ void Disconnect(){ if (protocol==UDP){ @@ -442,7 +457,8 @@ typedef struct void ShutDownSocket(){ - while(!shutdown(socketDescriptor, SHUT_RDWR)); + while(!shutdown(socketDescriptor, SHUT_RDWR)); + Disconnect(); }; @@ -518,6 +534,9 @@ typedef struct } mac[sizeof(mac)-1]='\0'; + if(sock!=1){ + close(sock); + } return string(mac); }; @@ -539,6 +558,9 @@ typedef struct strncpy(addr,p,sizeof(addr)-1); addr[sizeof(addr)-1]='\0'; + if(sock!=1){ + close(sock); + } return string(addr); }; diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index 967f26e15..19ffa6835 100644 --- a/slsReceiverSoftware/include/gitInfoReceiver.h +++ b/slsReceiverSoftware/include/gitInfoReceiver.h @@ -1,11 +1,11 @@ //#define SVNPATH "" -#define SVNURL "git@gitorious.psi.ch:sls_det_software/sls_receiver_software.git" +#define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "e019a6ce7d96d4ac9cb5762b7137245aedb4d5b8" -//#define SVNREV 0x22 +#define SVNREPUUID "750a0a06945a748a18d0b8b19b7cf94ecf2fec23" +//#define SVNREV 0x112 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Anna_Bergamaschi" -#define SVNREV 0x22 -#define SVNDATE 0x20141015 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x112 +#define SVNDATE 0x20150626 // diff --git a/slsReceiverSoftware/include/receiver_defs.h b/slsReceiverSoftware/include/receiver_defs.h index f208d93c7..0a4bda66b 100755 --- a/slsReceiverSoftware/include/receiver_defs.h +++ b/slsReceiverSoftware/include/receiver_defs.h @@ -51,6 +51,26 @@ + +#define PROPIX_PIXELS_IN_ROW 22 +#define PROPIX_PIXELS_IN_COL 22 +#define PROPIX_DATABYTES_PER_PIXEL 2 + +#define PROPIX_FIFO_SIZE 25000 //cannot be less than max jobs per thread = 1000 +#define PROPIX_PACKETS_PER_FRAME 2 +#define PROPIX_ONE_PACKET_SIZE 1286 +#define PROPIX_BUFFER_SIZE (PROPIX_ONE_PACKET_SIZE*PROPIX_PACKETS_PER_FRAME) //1286*2 +//#define PROPIX_DATA_BYTES (1280*PROPIX_PACKETS_PER_FRAME) //1280*2 +#define PROPIX_DATA_BYTES (PROPIX_PIXELS_IN_ROW * PROPIX_PIXELS_IN_COL * PROPIX_DATABYTES_PER_PIXEL) //22 * 22 * 2 + +#define PROPIX_FRAME_INDEX_MASK 0xFFFFFFFE +#define PROPIX_FRAME_INDEX_OFFSET 1 +#define PROPIX_PACKET_INDEX_MASK 0x1 + + + + + #define MOENCH_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000 /*#define MOENCH_ALIGNED_FRAME_SIZE 65536*/ #define MOENCH_PACKETS_PER_FRAME 40 @@ -68,8 +88,9 @@ -#define JCTB_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000 +#define JCTB_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000 /*#define MOENCH_ALIGNED_FRAME_SIZE 65536*/ +<<<<<<< HEAD #define JCTB_PACKETS_PER_FRAME 1 #define JCTB_ONE_PACKET_SIZE 8224 #define JCTB_BUFFER_SIZE (JCTB_ONE_PACKET_SIZE*40) @@ -78,9 +99,19 @@ #define JCTB_FRAME_INDEX_MASK 0xFFFFFFFF #define JCTB_FRAME_INDEX_OFFSET 6+8 #define JCTB_PACKET_INDEX_MASK 0xFFFFFFFF +======= +#define JCTB_PACKETS_PER_FRAME 50 +#define JCTB_ONE_PACKET_SIZE 8214 +#define JCTB_BUFFER_SIZE (MOENCH_ONE_PACKET_SIZE*MOENCH_PACKETS_PER_FRAME) +#define JCTB_DATA_BYTES (JCTB_BUFFER_PER_FRAME) -#define JCTB_BYTES_PER_ADC (2) -#define JCTB_PIXELS_IN_ONE_ROW 32 +#define JCTB_FRAME_INDEX_MASK 0xFFFFFF00 +#define JCTB_FRAME_INDEX_OFFSET 8 +#define JCTB_PACKET_INDEX_MASK 0xFF +>>>>>>> 8bad1d33fcf4601752bb6722a9eca00aa2cd4ed2 + +#define JCTB_BYTES_PER_ADC (2) +#define JCTB_PIXELS_IN_ONE_ROW 32 #define JCTB_BYTES_IN_ONE_ROW (JCTB_PIXELS_IN_ONE_ROW*2) diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index ea0e1a3d0..83d9416aa 100644 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -170,6 +170,9 @@ private: /** gotthard specific read frame */ int gotthard_read_frame(); + /** propix specific read frame */ + int propix_read_frame(); + /** moench specific read frame */ int moench_read_frame(); diff --git a/slsReceiverSoftware/include/sls_receiver_defs.h b/slsReceiverSoftware/include/sls_receiver_defs.h index 025e3b9cf..6abb30887 100755 --- a/slsReceiverSoftware/include/sls_receiver_defs.h +++ b/slsReceiverSoftware/include/sls_receiver_defs.h @@ -58,7 +58,8 @@ public: AGIPD, /**< agipd */ MOENCH, /**< moench */ JUNGFRAU, /**< jungfrau */ - JUNGFRAUCTB /**< jungfrauCTBversion */ + JUNGFRAUCTB, /**< jungfrauCTBversion */ + PROPIX /**< propix */ }; diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index bbb8b331d..670805a46 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -745,15 +745,17 @@ int UDPBaseImplementation::createUDPSockets(){ FILE_LOG(logDEBUG) << __AT__ << " if(!strlen(eth)){ cout<<"warning:eth is empty.listening to all"< /proc/sys/net/core/netdev_max_backlog")) cout << "\nWARNING: Could not change max length of input queue in file /proc/sys/net/core/netdev_max_backlog" << endl; + /** permanent setting heiner net.core.rmem_max = 104857600 # 100MiB net.core.netdev_max_backlog = 250000 @@ -261,6 +263,9 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD case GOTTHARD: cout << endl << "***** This is a GOTTHARD Receiver *****" << endl << endl; break; + case PROPIX: + cout << endl << "***** This is a PROPIX Receiver *****" << endl << endl; + break; case MOENCH: cout << endl << "***** This is a MOENCH Receiver *****" << endl << endl; break; @@ -279,7 +284,7 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD break; } - //moench variables + //detector specific variables if(myDetectorType == GOTTHARD){ fifosize = GOTTHARD_FIFO_SIZE; packetsPerFrame = GOTTHARD_PACKETS_PER_FRAME; @@ -290,6 +295,16 @@ int UDPStandardImplementation::setDetectorType(detectorType det){ FILE_LOG(logD frameIndexMask = GOTTHARD_FRAME_INDEX_MASK; frameIndexOffset = GOTTHARD_FRAME_INDEX_OFFSET; packetIndexMask = GOTTHARD_PACKET_INDEX_MASK; + }else if(myDetectorType == PROPIX){ + fifosize = PROPIX_FIFO_SIZE; + packetsPerFrame = PROPIX_PACKETS_PER_FRAME; + onePacketSize = PROPIX_ONE_PACKET_SIZE; + frameSize = PROPIX_BUFFER_SIZE; + bufferSize = PROPIX_BUFFER_SIZE; + maxPacketsPerFile = MAX_FRAMES_PER_FILE * PROPIX_PACKETS_PER_FRAME; + frameIndexMask = PROPIX_FRAME_INDEX_MASK; + frameIndexOffset = PROPIX_FRAME_INDEX_OFFSET; + packetIndexMask = PROPIX_PACKET_INDEX_MASK; }else if(myDetectorType == MOENCH){ fifosize = MOENCH_FIFO_SIZE; packetsPerFrame = MOENCH_PACKETS_PER_FRAME; @@ -562,19 +577,25 @@ int UDPStandardImplementation::getDynamicRange() const{ int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEBUG) << __AT__ << " called"; - cout << "Setting Dynamic Range" << endl; - int olddr = dynamicRange; + if(dr >= 0){ + cout << "Setting Dynamic Range to " << dr << endl; + dynamicRange = dr; if(myDetectorType == EIGER){ - if(!tengigaEnable) + if(!tengigaEnable){ packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS; - else + onePacketSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE; + + }else{ packetsPerFrame = EIGER_TEN_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS; + onePacketSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE; + } + frameSize = onePacketSize * packetsPerFrame; bufferSize = (frameSize/EIGER_MAX_PORTS) + EIGER_HEADER_LENGTH;//everything one port gets (img header plus packets) maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame; @@ -614,7 +635,8 @@ int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEB } } - } + }else cout << "Getting Dynamic Range " << endl; + return getDynamicRange(); } @@ -824,6 +846,8 @@ void UDPStandardImplementation::setupFifoStructure(){ fifosize = GOTTHARD_FIFO_SIZE; if(myDetectorType == MOENCH) fifosize = MOENCH_FIFO_SIZE; + if(myDetectorType == PROPIX) + fifosize = PROPIX_FIFO_SIZE; else if(myDetectorType == EIGER) fifosize = EIGER_FIFO_SIZE; @@ -890,7 +914,7 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui if (guiData == NULL){ guiData = latestData; #ifdef VERY_VERY_DEBUG - cout << "gui data not null anymore" << endl; + cprintf(CYAN,"gui data not null anymore\n"); #endif } @@ -904,14 +928,14 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui //could not get gui data if(!guiDataReady){ #ifdef VERY_VERY_DEBUG - cout << "gui data not ready" << endl; + cprintf(CYAN,"gui data not ready\n"); #endif *raw = NULL; } //data ready, set guidata to receive new data else{ #ifdef VERY_VERY_DEBUG - cout << "gui data ready" << endl; + cprintf(CYAN,"gui data ready\n"); #endif *raw = guiData; guiData = NULL; @@ -921,14 +945,14 @@ void UDPStandardImplementation::readFrame(char* c,char** raw, uint32_t &fnum, ui pthread_mutex_unlock(&dataReadyMutex);*/ if((nFrameToGui) && (writerthreads_mask)){ #ifdef VERY_VERY_DEBUG - cout << "gonna post" << endl; + cprintf(CYAN,"gonna post\n"); #endif /*if(nFrameToGui){*/ //release after getting data sem_post(&smp); } #ifdef VERY_VERY_DEBUG - cout << "done post" << endl; + cprintf(CYAN,"done post\n"); #endif } } @@ -947,7 +971,7 @@ cout << "copyframe" << endl; //else guidata always null as guidataready is always 1 after 1st frame, and seccond data never gets copied if((!nFrameToGui) && (!guiData)){ #ifdef VERY_VERY_DEBUG - cout << "doing nothing" << endl; + cprintf(GREEN,"doing nothing\n"); #endif pthread_mutex_lock(&dataReadyMutex); guiDataReady=0; @@ -957,12 +981,12 @@ cout << "copyframe" << endl; //random read or nth frame read, gui needs data now or it is the first frame else{ #ifdef VERY_VERY_DEBUG - cout << "gui needs data now or 1st frame" << endl; + cprintf(GREEN,"gui needs data now or 1st frame\n"); #endif pthread_mutex_lock(&dataReadyMutex); guiDataReady=0; #ifdef VERY_VERY_DEBUG - cout << "guidataready is 0, copying data" << endl; + cprintf(GREEN,"guidataready is 0, copying data\n"); #endif //eiger if(startbuf != NULL){ @@ -989,16 +1013,16 @@ cout << "copyframe" << endl; guiDataReady=1; pthread_mutex_unlock(&dataReadyMutex); #ifdef VERY_VERY_DEBUG - cout << "guidataready = 1" << endl; + cprintf(GREEN,"guidataready = 1\n"); #endif //nth frame read, block current process if the guireader hasnt read it yet if(nFrameToGui){ #ifdef VERY_VERY_DEBUG - cout<<"waiting after copying"<getErrorStatus(); - if(!iret) + if(!iret){ cout << "UDP port opened at port " << port[i] << endl; - else{ + //cprintf(YELLOW, "socket of port %d descriptor:%d\n",i,udpSocket[i]->getsocketDescriptor()); + }else{ #ifdef VERBOSE cprintf(BG_RED,"Could not create UDP socket on port %d error: %d\n", port[i], iret); #endif + shutDownUDPSockets(); return FAIL; } } + + return OK; } @@ -1252,7 +1284,7 @@ int UDPStandardImplementation::setupWriter(){ packetsInFile=0; packetsCaught=0; frameIndex=0; - if(sfilefd) sfilefd=NULL; + if(sfilefd) {cprintf(RED,"**FILE not closed!\n");fclose(sfilefd);sfilefd=NULL;} guiData = NULL; guiDataReady=0; strcpy(guiFileName,""); @@ -1378,9 +1410,13 @@ int UDPStandardImplementation::createNewFile(){ if(enableFileWrite && cbAction > DO_NOTHING){ //close if(sfilefd){ - fclose(sfilefd); + if(fclose(sfilefd)){ + cprintf(RED, "file close problem %d\n",fileno(sfilefd)); + fclose(sfilefd); + } sfilefd = NULL; } + //open file if(!overwrite){ if (NULL == (sfilefd = fopen((const char *) (savefilename), "wx"))){ @@ -1394,6 +1430,8 @@ int UDPStandardImplementation::createNewFile(){ //setting buffer setvbuf(sfilefd,NULL,_IOFBF,BUF_SIZE); + //cprintf(YELLOW, "file value:%d\n",fileno(sfilefd)); + //printing packet losses and file names if(!packetsCaught) cout << savefilename << endl; @@ -1436,9 +1474,11 @@ void UDPStandardImplementation::closeFile(int ithr){ if(!dataCompression){ if(sfilefd){ #ifdef VERBOSE - cout << "sfield:" << (int)sfilefd << endl; + cprintf(YELLOW, "gonna close file:%d\n",fileno(sfilefd)); #endif - fclose(sfilefd); + if(fclose(sfilefd)) + perror("file close ERROR"); + //cprintf(YELLOW, "check close file:%d\n",fileno(sfilefd)); sfilefd = NULL; } } @@ -1449,7 +1489,8 @@ void UDPStandardImplementation::closeFile(int ithr){ #ifdef VERBOSE cout << "sfield:" << (int)sfilefd << endl; #endif - fclose(sfilefd); + if(fclose(sfilefd)) + perror("close ERRROR"); sfilefd = NULL; } #endif @@ -1571,11 +1612,12 @@ int UDPStandardImplementation::stopReceiver(){ startReadout(); - while(status == TRANSMITTING) + while(status == TRANSMITTING){ + sem_post(&smp); usleep(5000); + } //semaphore destroy - sem_post(&smp); sem_destroy(&smp); //change status @@ -1586,6 +1628,9 @@ int UDPStandardImplementation::stopReceiver(){ cout << "Receiver Stopped.\nStatus:" << status << endl << endl; }else cout <<" Not idle to stop receiver" << endl; + + //sem_post(&smp); + return OK; } @@ -1789,6 +1834,7 @@ int UDPStandardImplementation::startListening(){ break; case GOTTHARD: + case PROPIX: if(shortFrame == -1){ lastpacketoffset = (((numJobsPerThread * packetsPerFrame - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); #ifdef VERYDEBUG @@ -1833,7 +1879,7 @@ int UDPStandardImplementation::startListening(){ while(!fifo[ithread]->push(buffer[ithread])); #ifdef FIFO_DEBUG //if(!ithread) - cprintf(RED, "%d listener pushed into fifo %x\n",ithread, (void*)(buffer[ithread])); + cprintf(MAGENTA, "%d listener pushed into fifo %x\n",ithread, (void*)(buffer[ithread])); #endif } @@ -1934,7 +1980,7 @@ int UDPStandardImplementation::startWriting(){ continue; } #ifdef VERYDEBUG - else cout <<"**NOT a dummy packet"<> frameIndexOffset); else tempframenum = ((((uint32_t)(*((uint32_t*)(wbuf[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))& (frameIndexMask)) >> frameIndexOffset); @@ -1976,46 +2022,52 @@ int UDPStandardImplementation::startWriting(){ for(i=0;i 0){ + } + + else if (numpackets > 0){ for(j=0;jnum1)) = currframenum; + + for (i = 0; i < packetsPerFrame/2; i++){ + //overwriting frame number in header + (*(uint32_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num1)) = currframenum; + //overwriting port number and dynamic range + if (!j) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num3)) = (dynamicRange<<2); + else (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num3)) = ((dynamicRange<<2)|(0x1)); + +#ifdef VERYDEBUG + cprintf(RED, "%d - 0x%x - %d\n", i, + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)), + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4))); +#endif + + } //for 32 bit,port number needs to be changed and packet number reconstructed if(dynamicRange == 32){ for (i = 0; i < packetsPerFrame/4; i++){ //new packet number that has space for 16 bit - (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num2)) - = ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num4))); - - //new port number as its the same everywhere for 32 bit!! - if((!j)&& (!bottom)) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = 0x00; - + (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num2)) + = ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num4))); #ifdef VERYDEBUG cprintf(RED, "%d - 0x%x - %d - %d\n", i, - (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)), - (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4)), - (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num2))); + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)), + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4)), + (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num2))); #endif } for (i = packetsPerFrame/4; i < packetsPerFrame/2; i++){ //new packet number that has space for 16 bit - (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num2)) - = ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num4))+(packetsPerFrame/4)); - - //new port number as its the same everywhere for 32 bit!! - if(!j) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = 0x00; - + (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num2)) + = ((*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + onePacketSize*i)))->num4))+(packetsPerFrame/4)); #ifdef VERYDEBUG cprintf(RED, "%d -0x%x - %d - %d\n", i, - (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)), - (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4)), - (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num2))); + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num3)), + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num4)), + (*(uint16_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*onePacketSize)))->num2))); #endif } } @@ -2025,18 +2077,18 @@ int UDPStandardImplementation::startWriting(){ writeToFile_withoutCompression(wbuf[j], numpackets,currframenum); } #ifdef VERYDEBUG - cout << "written everyting" << endl; + cprintf(BLUE,"written everyting\n"); #endif } if(myDetectorType == EIGER) { #ifdef VERYDEBUG - cout << "gonna copy frame" << endl; + cprintf(BLUE,"gonna copy frame\n"); #endif copyFrameToGui(wbuf,currframenum); #ifdef VERYDEBUG - cout << "copied frame" << endl; + cprintf(BLUE,"copied frame\n"); #endif for(i=0;ipush(wbuf[i])); @@ -2135,14 +2187,11 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ FILE_LOG(logDEBUG) << __AT__ << " called"; if (myDetectorType == EIGER){ - //add currframenum later in this method for scans - /*if(dynamicRange == 32) - startFrameIndex = htonl(*(unsigned int*)((eiger_image_header32 *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum); - else*/ - startFrameIndex = htonl(*(unsigned int*)((eiger_image_header *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum); + startFrameIndex = 1; + /*startFrameIndex = htonl(*(unsigned int*)((eiger_image_header *)((char*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS)))->fnum);*/ } //gotthard has +1 for frame number and not a short frame - else if ((myDetectorType == GOTTHARD) && (shortFrame == -1)) + else if ((myDetectorType == PROPIX) || ((myDetectorType == GOTTHARD) && (shortFrame == -1))) startFrameIndex = (((((uint32_t)(*((uint32_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1) & (frameIndexMask)) >> frameIndexOffset); else @@ -2157,6 +2206,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ acqStarted = true; cout << "startAcquisitionIndex:" << hex << startAcquisitionIndex<push(buffer[ithread]); + fifoFree[ithread]->push(buffer[ithread]);/** why not while(!)*/ #ifdef FIFO_DEBUG cprintf(BLUE,"%d listener empty buffer pushed into fifofree %x\n", ithread, (void*)(buffer[ithread])); #endif @@ -2208,7 +2258,7 @@ int i; if(rc == 266240) cprintf(GREEN, "%d Start of detector: Received test frame of 266240 bytes.\n",ithread); cout << ithread << "Discarding incomplete frame" << endl; - fifoFree[ithread]->push(buffer[ithread]); + fifoFree[ithread]->push(buffer[ithread]);/** why not while(!)*/ #ifdef FIFO_DEBUG cprintf(BLUE,"%d listener last buffer free pushed into fifofree %x\n", ithread,(void*)(buffer[ithread])); #endif @@ -2375,44 +2425,46 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num offset += EIGER_HEADER_LENGTH; #ifdef WRITE_HEADERS #ifdef VERY_DEBUG - int k = 0; - if(dynamicRange != 32){ - cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1))); - cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3))); - cprintf(RED, "p0 num:%d - %d\n", k, (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num4))); - k = 1; - cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1))); - cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p1 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4))); - k = 2; - cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); - cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p2 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4))); - }else{ - k = 0; - cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1))); - cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3))); - cprintf(RED, "p0 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num2))); - k = 1; - cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1))); - cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p1 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); - k = 2; - cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); - cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p2 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); - k = 256; - cprintf(RED, "p257 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); - cprintf(RED, "p257:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p256 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); - k = 512; - cprintf(RED, "p513 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); - cprintf(RED, "p513:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p512 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); - k = 768; - cprintf(RED, "p769 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); - cprintf(RED, "p769:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); - cprintf(RED, "p768 num:%d - %d\n", k,(*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + if(myDetectorType == EIGER){ + int k = 0; + if(dynamicRange != 32){ + cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1))); + cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3))); + cprintf(RED, "p0 num:%d - %d\n", k, (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num4))); + k = 1; + cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1))); + cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p1 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4))); + k = 2; + cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); + cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p2 num:%d - %d\n", k,(*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num4))); + }else{ + k = 0; + cprintf(RED, "\np1 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num1))); + cprintf(RED, "p1:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num3))); + cprintf(RED, "p0 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset+k*1040)))->num2))); + k = 1; + cprintf(RED, "p2 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num1))); + cprintf(RED, "p2:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p1 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + k = 2; + cprintf(RED, "p3 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); + cprintf(RED, "p3:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p2 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + k = 256; + cprintf(RED, "p257 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); + cprintf(RED, "p257:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p256 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + k = 512; + cprintf(RED, "p513 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); + cprintf(RED, "p513:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p512 num:%d - %d\n", k, (*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + k = 768; + cprintf(RED, "p769 fnum:0x%x\n", (*(unsigned int*)(((eiger_packet_header *)((char*)(buf + offset + k*1040)))->num1))); + cprintf(RED, "p769:0x%x\n", (*(uint8_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num3))); + cprintf(RED, "p768 num:%d - %d\n", k,(*(uint16_t*)(((eiger_packet_header *)((char*)(buf + offset +k*1040)))->num2))); + } } #endif #endif @@ -2421,7 +2473,7 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num //for progress and packet loss calculation(new files) if(myDetectorType == EIGER); - else if ((myDetectorType == GOTTHARD) && (shortFrame == -1)) + else if ((myDetectorType == PROPIX)||((myDetectorType == GOTTHARD) && (shortFrame == -1))) tempframenum = (((((uint32_t)(*((uint32_t*)(buf + HEADER_SIZE_NUM_TOT_PACKETS))))+1)& (frameIndexMask)) >> frameIndexOffset); else tempframenum = ((((uint32_t)(*((uint32_t*)(buf + HEADER_SIZE_NUM_TOT_PACKETS))))& (frameIndexMask)) >> frameIndexOffset); @@ -2458,7 +2510,7 @@ void UDPStandardImplementation::writeToFile_withoutCompression(char* buf,int num //for packet loss lastpacket = (((packetsToSave - 1) * onePacketSize) + offset); if(myDetectorType == EIGER); - else if ((myDetectorType == GOTTHARD) && (shortFrame == -1)) + else if ((myDetectorType == PROPIX)||((myDetectorType == GOTTHARD) && (shortFrame == -1))) tempframenum = (((((uint32_t)(*((uint32_t*)(buf + lastpacket))))+1)& (frameIndexMask)) >> frameIndexOffset); else tempframenum = ((((uint32_t)(*((uint32_t*)(buf + lastpacket))))& (frameIndexMask)) >> frameIndexOffset); @@ -2624,20 +2676,18 @@ int UDPStandardImplementation::enableTenGiga(int enable){ if(!tengigaEnable){ packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS; onePacketSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE; - maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame; }else{ packetsPerFrame = EIGER_TEN_GIGA_CONSTANT * dynamicRange * EIGER_MAX_PORTS; onePacketSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE; - maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame*4; } frameSize = onePacketSize * packetsPerFrame; bufferSize = (frameSize/EIGER_MAX_PORTS) + EIGER_HEADER_LENGTH;//everything one port gets (img header plus packets) - //maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame; + maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * packetsPerFrame; cout<<"packetsPerFrame:"<lastClientIP,"none"); strcpy(socket->thisClientIP,"none1"); strcpy(mess,"dummy message"); - function_table(); #ifdef VERBOSE cout << "Function table assigned." << endl; @@ -146,8 +145,18 @@ void slsReceiverTCPIPInterface::stop(){ cout<<"Shutting down TCP Socket and TCP thread"<shutDownUDPSockets(); + + cout << "Closing Files... " << endl; + receiverBase->closeFile(); + } + + killTCPServerThread = 1; socket->ShutDownSocket(); + socket->exitServer(); cout<<"Socket closed"<closeFile(); } + socket->exitServer(); pthread_exit(NULL); } @@ -1027,6 +1037,8 @@ int slsReceiverTCPIPInterface::read_frame(){ return moench_read_frame(); case EIGER: return eiger_read_frame(); + case PROPIX: + return propix_read_frame(); default: return gotthard_read_frame(); } @@ -1393,6 +1405,162 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){ +int slsReceiverTCPIPInterface::propix_read_frame(){ + ret=OK; + char fName[MAX_STR_LENGTH]=""; + int acquisitionIndex = -1; + int frameIndex= -1; + int i; + + + //retval is a full frame + int bufferSize = PROPIX_BUFFER_SIZE; + int onebuffersize = bufferSize/PROPIX_PACKETS_PER_FRAME; + int onedatasize = PROPIX_DATA_BYTES; + + char* raw = new char[bufferSize]; + int rnel = bufferSize/(sizeof(int)); + int* retval = new int[rnel]; + int* origVal = new int[rnel]; + //all initialized to 0 + for(i=0;igetFramesCaught()){ + startAcquisitionIndex=-1; + cout<<"haven't caught any frame yet"<getStartFrameIndex();*/ + receiverBase->readFrame(fName,&raw,index,startAcquisitionIndex,startFrameIndex); + + /**send garbage with -1 index to try again*/ + if (raw == NULL){ + startAcquisitionIndex = -1; +#ifdef VERBOSE + cout<<"data not ready for gui yet"<> PROPIX_FRAME_INDEX_OFFSET); + bindex2 = ((uint32_t)(*((uint32_t*)((char*)(raw+onebuffersize)))))+1; + pindex2 =(bindex2 & PROPIX_PACKET_INDEX_MASK); + index2 =((bindex2 & PROPIX_FRAME_INDEX_MASK) >> PROPIX_FRAME_INDEX_OFFSET); +#ifdef VERBOSE + cout << "index1:" << hex << index << endl; + cout << "index2:" << hex << index << endl; +#endif + + memcpy(origVal,raw,bufferSize); + raw=NULL; + + /*//ignore if half frame is missing + if ((bindex != 0xFFFFFFFF) && (bindex2 != 0xFFFFFFFF)){*/ + + //should be same frame + if (index == index2){ + //ideal situation (should be odd, even(index+1)) + if(!pindex){ + memcpy(retval,((char*) origVal)+4, onedatasize); + memcpy((((char*)retval)+onedatasize), ((char*) origVal)+10+onedatasize, onedatasize); + } + //swap to even,odd + else{ + memcpy((((char*)retval)+onedatasize),((char*) origVal)+4, onedatasize); + memcpy(retval, ((char*) origVal)+10+onedatasize, onedatasize); + index=index2; + } + }else + cout << "different frames caught. frame1:"<< hex << index << ":"<differentClients){ + cout << "Force update" << endl; + ret=FORCE_UPDATE; + } + + // send answer + socket->SendDataOnly(&ret,sizeof(ret)); + if(ret==FAIL){ + cout << "mess:" << mess << endl; + socket->SendDataOnly(mess,sizeof(mess)); + } + else{ + socket->SendDataOnly(fName,MAX_STR_LENGTH); + socket->SendDataOnly(&acquisitionIndex,sizeof(acquisitionIndex)); + socket->SendDataOnly(&frameIndex,sizeof(frameIndex)); + socket->SendDataOnly(retval,PROPIX_DATA_BYTES); + } + + delete [] retval; + delete [] origVal; + delete [] raw; + + return ret; +} + + + + + + + + int slsReceiverTCPIPInterface::eiger_read_frame(){ @@ -1458,13 +1626,13 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ int c2=(frameSize/2) + 8; //second port int retindex=0; int irow,ibytesperpacket; - int linesperpacket = (16/dynamicrange)* 1;// 16:1 line, 8:2 lines, 4:4 lines, 32: 0.5 + int linesperpacket = (16*1/dynamicrange);// 16:1 line, 8:2 lines, 4:4 lines, 32: 0.5 int numbytesperlineperport=(EIGER_PIXELS_IN_ONE_ROW/EIGER_MAX_PORTS)*dynamicrange/8;//16:1024,8:512,4:256,32:2048 int datapacketlength = EIGER_ONE_GIGA_ONE_DATA_SIZE; int total_num_bytes = 1040*(16*dynamicrange)*2; if(tenGigaEnable){ - linesperpacket = (16/dynamicrange)* 4;// 16:4 line, 8:8 lines, 4:16 lines, 32: 2 + linesperpacket = (16*4/dynamicrange);// 16:4 line, 8:8 lines, 4:16 lines, 32: 2 datapacketlength = EIGER_TEN_GIGA_ONE_DATA_SIZE; } //if 1GbE, one line is split into two packets for 32 bit mode, so its special @@ -1482,7 +1650,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ memcpy(retval+retindex ,origVal+c1 ,numbytesperlineperport); retindex += numbytesperlineperport; c1 += numbytesperlineperport; - if(dynamicrange == 32){ + if(dynamicrange == 32 && !tenGigaEnable){ c1 += 16; memcpy(retval+retindex ,origVal+c1 ,numbytesperlineperport); retindex += numbytesperlineperport; @@ -1493,7 +1661,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ memcpy(retval+retindex ,origVal+c2 ,numbytesperlineperport); retindex += numbytesperlineperport; c2 += numbytesperlineperport; - if(dynamicrange == 32){ + if(dynamicrange == 32 && !tenGigaEnable){ c2 += 16; memcpy(retval+retindex ,origVal+c2 ,numbytesperlineperport); retindex += numbytesperlineperport; @@ -1502,7 +1670,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ } ibytesperpacket += numbytesperlineperport; } - if(dynamicrange != 32) { + if(dynamicrange != 32 || tenGigaEnable) { c1 += 16; c2 += 16; } @@ -1519,7 +1687,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ for(irow=0;irow> 8) & 0x00FF00FF00FF00FFULL ); - temp = ((temp << 16) & 0xFFFF0000FFFF0000ULL ) | ((temp >> 16) & 0x0000FFFF0000FFFFULL ); - temp = (temp << 32) | ((temp >> 32) & 0xFFFFFFFFULL); - (*(((uint64_t*)retval)+i)) = temp; - */ - } - -/* - //dr = 16, hence uint16_t - for(inum = 0; inum < 2; inum++) - cprintf(MAGENTA,"after htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8)))))))); - for(inum = 254; inum < 258; inum++) - cprintf(MAGENTA,"after htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8)))))))); - for(inum = 0; inum < 2; inum++) - cprintf(MAGENTA,"after htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8)))))))); - for(inum = 254; inum < 258; inum++) - cprintf(MAGENTA,"after htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8)))))))); -*/ - acquisitionIndex = index-startAcquisitionIndex; @@ -2035,7 +2164,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() { sprintf(mess,"Receiver locked by %s\n", socket->lastClientIP); ret=FAIL; } - else if(myDetectorType == EIGER){ + else if ((dr>0) && (myDetectorType == EIGER)){ switch(dr){ case 4: case 8: @@ -2043,6 +2172,7 @@ int slsReceiverTCPIPInterface::set_dynamic_range() { case 32:break; default: sprintf(mess,"This dynamic range does not exist for eiger: %d\n",dr); + cprintf(RED,"%s", mess); ret=FAIL; break; } @@ -2052,8 +2182,9 @@ int slsReceiverTCPIPInterface::set_dynamic_range() { strcpy(mess,"Receiver not set up\n"); ret=FAIL; }else{ - retval=receiverBase->setDynamicRange(dr); - dynamicrange = dr; + if(dr > 0) receiverBase->setDynamicRange(dr); + retval = receiverBase->getDynamicRange(); + dynamicrange = retval; if(myDetectorType == EIGER){ if(!tenGigaEnable) packetsPerFrame = EIGER_ONE_GIGA_CONSTANT * dynamicrange * EIGER_MAX_PORTS;