From bcf8d40fd2f7349fb7bb8651d4749ed8cf8dd4c5 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 12 Jun 2015 17:46:50 +0200 Subject: [PATCH 01/16] minor changes, but posted semaphore in stop receiver so rxr not waiting forever for gui when it will never come --- .../src/UDPStandardImplementation.cpp | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index d6e85c5c7..bd2e7560a 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -890,7 +890,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 +904,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 +921,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 +947,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 +957,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 +989,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"<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 +1939,7 @@ int UDPStandardImplementation::startWriting(){ continue; } #ifdef VERYDEBUG - else cout <<"**NOT a dummy packet"<push(wbuf[i])); @@ -2196,7 +2201,7 @@ int i; //free buffer if(rc <= 0){ cout << ithread << "Discarding empty frame/ End of acquisition" << endl; - fifoFree[ithread]->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 +2213,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 From 9a61841ac769d8d46e07fa95ab1047be14f816b5 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 16 Jun 2015 12:00:02 +0200 Subject: [PATCH 02/16] git version update --- slsReceiverSoftware/gitInfo.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index d680dad1d..a8b18fa13 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: 44d2a6ae0422ef1d792890a409d202d3cec5b7f7 +Revision: 108 +Branch: master +Last Changed Author: Dhanya_Maliakal +Last Changed Rev: 108 +Last Changed Date: 2015-06-12 17:46:50 +0200 From 8b282e3bbe4d9a15ae2de2157498aba31270dc6e Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 16 Jun 2015 16:28:24 +0200 Subject: [PATCH 03/16] write headers is compulsory for eiger --- .../src/UDPStandardImplementation.cpp | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index bd2e7560a..e6722aeda 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -27,6 +27,7 @@ using namespace std; +#define WRITE_HEADERS UDPStandardImplementation::UDPStandardImplementation() @@ -2380,44 +2381,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 From 237c5286cad8988da0d94dc1158498cdecd19bdf Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 26 Jun 2015 11:49:26 +0200 Subject: [PATCH 04/16] includes dynamic range in offline headers for eiger --- slsReceiverSoftware/gitInfo.txt | 8 +++--- slsReceiverSoftware/include/gitInfoReceiver.h | 12 ++++---- .../src/UDPStandardImplementation.cpp | 28 +++++++++++-------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index a8b18fa13..787a95474 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware 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: 44d2a6ae0422ef1d792890a409d202d3cec5b7f7 -Revision: 108 +Repsitory UUID: 2afc468d30f3078b2bb8637584ae3a88f476f20b +Revision: 110 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 108 -Last Changed Date: 2015-06-12 17:46:50 +0200 +Last Changed Rev: 110 +Last Changed Date: 2015-06-16 16:28:24 +0200 diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index 967f26e15..59e2a1dff 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 "2afc468d30f3078b2bb8637584ae3a88f476f20b" +//#define SVNREV 0x110 //#define SVNKIND "" //#define SVNSCHED "" -#define SVNAUTH "Anna_Bergamaschi" -#define SVNREV 0x22 -#define SVNDATE 0x20141015 +#define SVNAUTH "Dhanya_Maliakal" +#define SVNREV 0x110 +#define SVNDATE 0x20150616 // diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index e6722aeda..7c6f9ee4e 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -1982,13 +1982,27 @@ int UDPStandardImplementation::startWriting(){ for(i=0;i 0){ + } + + else if (numpackets > 0){ for(j=0;jnum1)) = currframenum; + //overwriting port number and dynamic range + if (!j) (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = (dynamicRange<<2); + else (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*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*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)), + (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4))); +#endif + + } //for 32 bit,port number needs to be changed and packet number reconstructed if(dynamicRange == 32){ @@ -1997,10 +2011,6 @@ int UDPStandardImplementation::startWriting(){ (*(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; - - #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)), @@ -2013,10 +2023,6 @@ int UDPStandardImplementation::startWriting(){ (*(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; - - #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)), From 7e02a9d3d18c8d4d4c220c5d535fc7a8144baae1 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 26 Jun 2015 15:57:28 +0200 Subject: [PATCH 05/16] resolved flip bytes in eiger --- .../src/slsReceiverTCPIPInterface.cpp | 39 ------------------- 1 file changed, 39 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 720784b14..5fc7ced7d 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1557,45 +1557,6 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ } } -/* - int inum = 0; - //dr = 16, hence uint16_t - for(inum = 0; inum < 2; inum++) - cprintf(YELLOW,"before htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8)))))))); - for(inum = 254; inum < 258; inum++) - cprintf(YELLOW,"before htonl %d,0 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+(inum*(dynamicrange/8)))))))); - for(inum = 0; inum < 2; inum++) - cprintf(YELLOW,"before htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8)))))))); - for(inum = 254; inum < 258; inum++) - cprintf(YELLOW,"before htonl %d,2 :%d\n",inum,((uint8_t)(*((uint8_t*)((char*)(retval+((2048+inum)*(dynamicrange/8)))))))); -*/ - - - //64 bit htonl cuz of endianness - for(i=0;i<(1024*(16*dynamicrange)*2)/8;i++){ - (*(((uint64_t*)retval)+i)) = be64toh(((uint64_t)(*(((uint64_t*)retval)+i)))); - /* - int64_t temp; - temp = ((uint64_t)(*(((uint64_t*)retval)+i))); - temp = ((temp << 8) & 0xFF00FF00FF00FF00ULL ) | ((temp >> 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; From 3600fb6304554178923167b6d50412a693100944 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 29 Jun 2015 16:57:16 +0200 Subject: [PATCH 06/16] git rev in --- slsReceiverSoftware/gitInfo.txt | 8 ++++---- slsReceiverSoftware/include/gitInfoReceiver.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index 787a95474..71d112f95 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware 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: 2afc468d30f3078b2bb8637584ae3a88f476f20b -Revision: 110 +Repsitory UUID: 750a0a06945a748a18d0b8b19b7cf94ecf2fec23 +Revision: 112 Branch: master Last Changed Author: Dhanya_Maliakal -Last Changed Rev: 110 -Last Changed Date: 2015-06-16 16:28:24 +0200 +Last Changed Rev: 112 +Last Changed Date: 2015-06-26 15:57:28 +0200 diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index 59e2a1dff..19ffa6835 100644 --- a/slsReceiverSoftware/include/gitInfoReceiver.h +++ b/slsReceiverSoftware/include/gitInfoReceiver.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "maliakal_d@gitorious.psi.ch:sls_det_software/sls_receiver_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "2afc468d30f3078b2bb8637584ae3a88f476f20b" -//#define SVNREV 0x110 +#define SVNREPUUID "750a0a06945a748a18d0b8b19b7cf94ecf2fec23" +//#define SVNREV 0x112 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Maliakal" -#define SVNREV 0x110 -#define SVNDATE 0x20150616 +#define SVNREV 0x112 +#define SVNDATE 0x20150626 // From 88e96d45e7da69dea0f98eb6f6001d41a6abf3cb Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 30 Jun 2015 17:21:45 +0200 Subject: [PATCH 07/16] getting dr from rxr fixed --- slsReceiverSoftware/src/UDPStandardImplementation.cpp | 8 +++++--- slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 7c6f9ee4e..0b22d8888 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -563,10 +563,11 @@ 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){ @@ -615,7 +616,8 @@ int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEB } } - } + }else cout << "Getting Dynamic Range " << endl; + return getDynamicRange(); } diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 5fc7ced7d..2c882b139 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1996,7 +1996,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: @@ -2004,6 +2004,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; } @@ -2013,8 +2014,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; From 4e5209699152d8a6f83754c8ff34fc2f6803838c Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 21 Jul 2015 16:25:56 +0200 Subject: [PATCH 08/16] included propix receiver --- slsReceiverSoftware/include/receiver_defs.h | 38 ++++- .../include/slsReceiverTCPIPInterface.h | 3 + .../include/sls_receiver_defs.h | 3 +- .../src/UDPStandardImplementation.cpp | 26 ++- .../src/slsReceiverTCPIPInterface.cpp | 158 ++++++++++++++++++ 5 files changed, 213 insertions(+), 15 deletions(-) diff --git a/slsReceiverSoftware/include/receiver_defs.h b/slsReceiverSoftware/include/receiver_defs.h index 6f3b1acd3..6466a45b5 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,19 +88,19 @@ -#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*/ -#define JCTB_PACKETS_PER_FRAME 50 +#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_BUFFER_SIZE (MOENCH_ONE_PACKET_SIZE*MOENCH_PACKETS_PER_FRAME) +#define JCTB_DATA_BYTES (JCTB_BUFFER_PER_FRAME) -#define JCTB_FRAME_INDEX_MASK 0xFFFFFF00 -#define JCTB_FRAME_INDEX_OFFSET 8 -#define JCTB_PACKET_INDEX_MASK 0xFF +#define JCTB_FRAME_INDEX_MASK 0xFFFFFF00 +#define JCTB_FRAME_INDEX_OFFSET 8 +#define JCTB_PACKET_INDEX_MASK 0xFF -#define JCTB_BYTES_PER_ADC (2) -#define JCTB_PIXELS_IN_ONE_ROW 32 +#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/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 0b22d8888..12edd0720 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -262,6 +262,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; @@ -280,7 +283,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; @@ -291,6 +294,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; @@ -827,6 +840,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; @@ -1797,6 +1812,7 @@ int UDPStandardImplementation::startListening(){ break; case GOTTHARD: + case PROPIX: if(shortFrame == -1){ lastpacketoffset = (((numJobsPerThread * packetsPerFrame - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); #ifdef VERYDEBUG @@ -1959,7 +1975,7 @@ int UDPStandardImplementation::startWriting(){ tempframenum += (startFrameIndex-1); //eiger frame numbers start at 1, so need to -1 //tempframenum = ((tempframenum / EIGER_32BIT_INITIAL_CONSTANT) + startFrameIndex)-1;//eiger 32 bit mode is a multiple of 17c. +startframeindex for scans - }else if ((myDetectorType == GOTTHARD) && (shortFrame == -1)) + }else if ((myDetectorType == PROPIX) || ((myDetectorType == GOTTHARD) && (shortFrame == -1))) tempframenum = (((((uint32_t)(*((uint32_t*)(wbuf[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1)& (frameIndexMask)) >> frameIndexOffset); else tempframenum = ((((uint32_t)(*((uint32_t*)(wbuf[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))& (frameIndexMask)) >> frameIndexOffset); @@ -2156,7 +2172,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ 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 @@ -2437,7 +2453,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); @@ -2474,7 +2490,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); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 2c882b139..631df46d1 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1027,6 +1027,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 +1395,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(){ From c0f2e5c6c2ce4475f4d56dd465f55255f7e24a04 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 30 Jul 2015 11:00:36 +0200 Subject: [PATCH 09/16] onepacketsize not consistent for 10g bug fix --- .../src/UDPStandardImplementation.cpp | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 12edd0720..03bada066 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -586,10 +586,15 @@ int32_t UDPStandardImplementation::setDynamicRange(int32_t dr){ FILE_LOG(logDEB 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; @@ -2009,15 +2014,15 @@ int UDPStandardImplementation::startWriting(){ for (i = 0; i < packetsPerFrame/2; i++){ //overwriting frame number in header - (*(uint32_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num1)) = currframenum; + (*(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 + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = (dynamicRange<<2); - else (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader + EIGER_ONE_GIGA_ONE_PACKET_SIZE*i)))->num3)) = ((dynamicRange<<2)|(0x1)); + 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*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num3)), - (*(uint8_t*)(((eiger_packet_header *)((char*)(wbuf[j] + totalheader +i*EIGER_ONE_GIGA_ONE_PACKET_SIZE)))->num4))); + (*(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 } @@ -2026,26 +2031,26 @@ int UDPStandardImplementation::startWriting(){ 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))); + (*(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)); + (*(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 } } @@ -2656,20 +2661,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:"< Date: Wed, 5 Aug 2015 09:11:50 +0200 Subject: [PATCH 10/16] corrected 10g mapping for gui --- .../src/slsReceiverTCPIPInterface.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 631df46d1..5cb2f0fb5 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1616,13 +1616,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 @@ -1640,7 +1640,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; @@ -1651,7 +1651,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; @@ -1660,7 +1660,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ } ibytesperpacket += numbytesperlineperport; } - if(dynamicrange != 32) { + if(dynamicrange != 32 || tenGigaEnable) { c1 += 16; c2 += 16; } @@ -1677,7 +1677,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){ for(irow=0;irow Date: Wed, 5 Aug 2015 12:08:28 +0200 Subject: [PATCH 11/16] proper freeng after udpsocket shutdown --- slsReceiverSoftware/include/genericSocket.h | 2 ++ slsReceiverSoftware/src/UDPStandardImplementation.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/slsReceiverSoftware/include/genericSocket.h b/slsReceiverSoftware/include/genericSocket.h index 0ccc80adf..216a9fa11 100644 --- a/slsReceiverSoftware/include/genericSocket.h +++ b/slsReceiverSoftware/include/genericSocket.h @@ -443,6 +443,8 @@ typedef struct void ShutDownSocket(){ while(!shutdown(socketDescriptor, SHUT_RDWR)); + close(socketDescriptor); + socketDescriptor = -1; }; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 03bada066..0104f9b47 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -1077,6 +1077,7 @@ int UDPStandardImplementation::createUDPSockets(){ #ifdef VERBOSE cprintf(BG_RED,"Could not create UDP socket on port %d error: %d\n", port[i], iret); #endif + shutDownUDPSockets(); return FAIL; } } From 52f83b9249bc9a32300053de62ba7adb46533725 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 10 Aug 2015 13:44:57 +0200 Subject: [PATCH 12/16] do not push, debug commands involved --- slsReceiverSoftware/include/genericSocket.h | 50 ++++++++++++++++--- .../src/UDPBaseImplementation.cpp | 8 ++- .../src/UDPStandardImplementation.cpp | 41 ++++++++++----- .../src/slsReceiverTCPIPInterface.cpp | 1 - 4 files changed, 79 insertions(+), 21 deletions(-) diff --git a/slsReceiverSoftware/include/genericSocket.h b/slsReceiverSoftware/include/genericSocket.h index 216a9fa11..3bb4adcff 100644 --- a/slsReceiverSoftware/include/genericSocket.h +++ b/slsReceiverSoftware/include/genericSocket.h @@ -60,7 +60,7 @@ class sockaddr_in; #include #endif - +#include "ansi.h" #include /******exit */ #include @@ -71,6 +71,8 @@ class sockaddr_in; #include #include +#include //SIGINT + using namespace std; #define DEFAULT_PACKET_SIZE 1286 @@ -125,6 +127,7 @@ typedef struct struct hostent *hostInfo = gethostbyname(host_ip_or_name); if (hostInfo == NULL){ cerr << "Exiting: Problem interpreting host: " << host_ip_or_name << "\n"; + cprintf(RED,"Exiting: Problem interpreting host:%s\n",host_ip_or_name); } else { // Set some fields in the serverAddress structure. serverAddress.sin_family = hostInfo->h_addrtype; @@ -134,6 +137,7 @@ typedef struct socketDescriptor=0; //You can use send and recv, //would it work????? } clientAddress_length=sizeof(clientAddress); + cprintf(MAGENTA, "client socket created %d \n",socketDescriptor,protocol); } @@ -176,6 +180,7 @@ typedef struct nsent(0), total_sent(0) { + signal(SIGCHLD,SIG_IGN); //memset(&serverAddress, 0, sizeof(sockaddr_in)); // memset(&clientAddress, 0, sizeof(sockaddr_in)); // serverAddress = {0}; @@ -205,9 +210,12 @@ typedef struct socketDescriptor = socket(AF_INET, getProtocol(),0); //tcp + cprintf(MAGENTA, "socket created %d protocol:%d\n",socketDescriptor,protocol); + if (socketDescriptor < 0) { cerr << "Can not create socket "<0) { if ((file_des = accept(socketDescriptor,(struct sockaddr *) &clientAddress, &clientAddress_length)) < 0) { cerr << "Error: with server accept, connection refused"<=0){ + close(file_des); + file_des=-1; + } + } +*/ + + if(file_des>=0){ //then was open if(is_a_server){ - close(file_des); + // cprintf(MAGENTA, "file_des disconnected %d \n",file_des); + if(close(file_des)) + cprintf(RED,"file_des not disconnected %d\n", file_des); + // cprintf(MAGENTA, "file_des disconnected %d \n",file_des); } else { - close(socketDescriptor); + //cprintf(MAGENTA, "socketDescriptor disconnected %d \n",socketDescriptor); + if(close(socketDescriptor)) + cprintf(RED,"socketDescriptor not disconnected %d\n", file_des); + // cprintf(MAGENTA, "socketDescriptor disconnected %d \n",socketDescriptor); socketDescriptor=-1; } file_des=-1; } + + + } }; void ShutDownSocket(){ - while(!shutdown(socketDescriptor, SHUT_RDWR)); - close(socketDescriptor); - socketDescriptor = -1; + while(!shutdown(socketDescriptor, SHUT_RDWR)); + Disconnect(); }; diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index bbb8b331d..80ce6b2c7 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -745,15 +745,19 @@ 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 @@ -1056,24 +1057,29 @@ int UDPStandardImplementation::createUDPSockets(){ if(!strlen(eth)){ cout<<"warning:eth is empty.listening to all"<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 @@ -1082,6 +1088,8 @@ int UDPStandardImplementation::createUDPSockets(){ } } + + return OK; } @@ -1276,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,""); @@ -1402,9 +1410,13 @@ int UDPStandardImplementation::createNewFile(){ if(enableFileWrite && cbAction > DO_NOTHING){ //close if(sfilefd){ - fclose(sfilefd); + if(fclose(sfilefd)){ + cprintf(YELLOW, "file clsoe problem %d\n",fileno(sfilefd)); + fclose(sfilefd); + } sfilefd = NULL; } + //open file if(!overwrite){ if (NULL == (sfilefd = fopen((const char *) (savefilename), "wx"))){ @@ -1418,6 +1430,9 @@ int UDPStandardImplementation::createNewFile(){ //setting buffer setvbuf(sfilefd,NULL,_IOFBF,BUF_SIZE); + cprintf(YELLOW, "file value:%d\n",fileno(sfilefd)); + + //cprintf(YELLOW, "file valuex:%d",(int)sfilefd); //printing packet losses and file names if(!packetsCaught) cout << savefilename << endl; @@ -1459,10 +1474,12 @@ void UDPStandardImplementation::closeFile(int ithr){ if(!dataCompression){ if(sfilefd){ -#ifdef VERBOSE - cout << "sfield:" << (int)sfilefd << endl; -#endif - fclose(sfilefd); +//#ifdef VERBOSE + cprintf(YELLOW, "gonna close file:%d\n",fileno(sfilefd)); +//#endif + if(fclose(sfilefd)) + perror("close ERRROR"); + cprintf(YELLOW, "check close file:%d\n",fileno(sfilefd)); sfilefd = NULL; } } @@ -1473,7 +1490,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 @@ -1612,7 +1630,6 @@ int UDPStandardImplementation::stopReceiver(){ }else cout <<" Not idle to stop receiver" << endl; - //sem_post(&smp); return OK; diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 5cb2f0fb5..dfa01e6e3 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -65,7 +65,6 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* strcpy(socket->lastClientIP,"none"); strcpy(socket->thisClientIP,"none1"); strcpy(mess,"dummy message"); - function_table(); #ifdef VERBOSE cout << "Function table assigned." << endl; From 5dd5c250f3c30593706dd67f3ed8c80a6440443d Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Aug 2015 14:55:15 +0200 Subject: [PATCH 13/16] removing unnecessary prints --- slsReceiverSoftware/include/genericSocket.h | 30 +++---------------- .../src/UDPBaseImplementation.cpp | 2 -- .../src/UDPStandardImplementation.cpp | 19 ++++++------ 3 files changed, 13 insertions(+), 38 deletions(-) diff --git a/slsReceiverSoftware/include/genericSocket.h b/slsReceiverSoftware/include/genericSocket.h index 3bb4adcff..aa79f3233 100644 --- a/slsReceiverSoftware/include/genericSocket.h +++ b/slsReceiverSoftware/include/genericSocket.h @@ -60,7 +60,6 @@ class sockaddr_in; #include #endif -#include "ansi.h" #include /******exit */ #include @@ -71,7 +70,6 @@ class sockaddr_in; #include #include -#include //SIGINT using namespace std; @@ -127,7 +125,6 @@ typedef struct struct hostent *hostInfo = gethostbyname(host_ip_or_name); if (hostInfo == NULL){ cerr << "Exiting: Problem interpreting host: " << host_ip_or_name << "\n"; - cprintf(RED,"Exiting: Problem interpreting host:%s\n",host_ip_or_name); } else { // Set some fields in the serverAddress structure. serverAddress.sin_family = hostInfo->h_addrtype; @@ -137,7 +134,6 @@ typedef struct socketDescriptor=0; //You can use send and recv, //would it work????? } clientAddress_length=sizeof(clientAddress); - cprintf(MAGENTA, "client socket created %d \n",socketDescriptor,protocol); } @@ -180,7 +176,6 @@ typedef struct nsent(0), total_sent(0) { - signal(SIGCHLD,SIG_IGN); //memset(&serverAddress, 0, sizeof(sockaddr_in)); // memset(&clientAddress, 0, sizeof(sockaddr_in)); // serverAddress = {0}; @@ -210,12 +205,10 @@ typedef struct socketDescriptor = socket(AF_INET, getProtocol(),0); //tcp - cprintf(MAGENTA, "socket created %d protocol:%d\n",socketDescriptor,protocol); if (socketDescriptor < 0) { cerr << "Can not create socket "<0) { if ((file_des = accept(socketDescriptor,(struct sockaddr *) &clientAddress, &clientAddress_length)) < 0) { cerr << "Error: with server accept, connection refused"<=0){ @@ -459,16 +443,10 @@ typedef struct if(file_des>=0){ //then was open if(is_a_server){ - // cprintf(MAGENTA, "file_des disconnected %d \n",file_des); - if(close(file_des)) - cprintf(RED,"file_des not disconnected %d\n", file_des); - // cprintf(MAGENTA, "file_des disconnected %d \n",file_des); + close(file_des); } else { - //cprintf(MAGENTA, "socketDescriptor disconnected %d \n",socketDescriptor); - if(close(socketDescriptor)) - cprintf(RED,"socketDescriptor not disconnected %d\n", file_des); - // cprintf(MAGENTA, "socketDescriptor disconnected %d \n",socketDescriptor); + close(socketDescriptor); socketDescriptor=-1; } file_des=-1; diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index 80ce6b2c7..670805a46 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -746,7 +746,6 @@ int UDPBaseImplementation::createUDPSockets(){ FILE_LOG(logDEBUG) << __AT__ << " cout<<"warning:eth is empty.listening to all"<getErrorStatus(); if(!iret){ cout << "UDP port opened at port " << port[i] << endl; - cprintf(YELLOW, "socket of port %d descriptor:%d\n",i,udpSocket[i]->getsocketDescriptor()); + //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); @@ -1411,7 +1411,7 @@ int UDPStandardImplementation::createNewFile(){ //close if(sfilefd){ if(fclose(sfilefd)){ - cprintf(YELLOW, "file clsoe problem %d\n",fileno(sfilefd)); + cprintf(RED, "file close problem %d\n",fileno(sfilefd)); fclose(sfilefd); } sfilefd = NULL; @@ -1430,9 +1430,8 @@ int UDPStandardImplementation::createNewFile(){ //setting buffer setvbuf(sfilefd,NULL,_IOFBF,BUF_SIZE); - cprintf(YELLOW, "file value:%d\n",fileno(sfilefd)); + //cprintf(YELLOW, "file value:%d\n",fileno(sfilefd)); - //cprintf(YELLOW, "file valuex:%d",(int)sfilefd); //printing packet losses and file names if(!packetsCaught) cout << savefilename << endl; @@ -1474,12 +1473,12 @@ void UDPStandardImplementation::closeFile(int ithr){ if(!dataCompression){ if(sfilefd){ -//#ifdef VERBOSE +#ifdef VERBOSE cprintf(YELLOW, "gonna close file:%d\n",fileno(sfilefd)); -//#endif +#endif if(fclose(sfilefd)) - perror("close ERRROR"); - cprintf(YELLOW, "check close file:%d\n",fileno(sfilefd)); + perror("file close ERROR"); + //cprintf(YELLOW, "check close file:%d\n",fileno(sfilefd)); sfilefd = NULL; } } From 587d357f3ee94ae5c75c0577b8f6826b2805d286 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Aug 2015 15:47:24 +0200 Subject: [PATCH 14/16] resetting frame index for scans for eiger --- slsReceiverSoftware/src/UDPStandardImplementation.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index bb7241665..bebb7ad5e 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -2187,11 +2187,8 @@ 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 = 0; + /*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 == PROPIX) || ((myDetectorType == GOTTHARD) && (shortFrame == -1))) @@ -2209,6 +2206,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ acqStarted = true; cout << "startAcquisitionIndex:" << hex << startAcquisitionIndex< Date: Thu, 20 Aug 2015 10:17:36 +0200 Subject: [PATCH 15/16] changed startframeindex to 1 as thats whats written to file in eiger --- slsReceiverSoftware/src/UDPStandardImplementation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index bebb7ad5e..683b6a9f9 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -2187,7 +2187,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ FILE_LOG(logDEBUG) << __AT__ << " called"; if (myDetectorType == EIGER){ - startFrameIndex = 0; + 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 From 0a0dfb2dc6765e0a8c3931ec92b47bfd78fc2939 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Fri, 21 Aug 2015 14:11:38 +0200 Subject: [PATCH 16/16] fixed problem with increasing file descriptor when connecting to receiver --- slsReceiverSoftware/include/genericSocket.h | 40 ++++++++++--------- .../src/slsReceiverTCPIPInterface.cpp | 11 +++++ 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/slsReceiverSoftware/include/genericSocket.h b/slsReceiverSoftware/include/genericSocket.h index aa79f3233..fe49df0d2 100644 --- a/slsReceiverSoftware/include/genericSocket.h +++ b/slsReceiverSoftware/include/genericSocket.h @@ -71,6 +71,7 @@ class sockaddr_in; #include + using namespace std; #define DEFAULT_PACKET_SIZE 1286 @@ -206,7 +207,6 @@ typedef struct socketDescriptor = socket(AF_INET, getProtocol(),0); //tcp - if (socketDescriptor < 0) { cerr << "Can not create socket "<= 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; \ }; @@ -401,7 +405,6 @@ typedef struct cerr << "Can not create socket "<=0){ + close(socketDescriptor); + socketDescriptor = -1; + } + } + } + /** @short free connection */ void Disconnect(){ if (protocol==UDP){ @@ -429,18 +442,6 @@ typedef struct socketDescriptor=-1; } else{ - - /* close(socketDescriptor); - socketDescriptor=-1; - if(is_a_server){ - if(file_des>=0){ - close(file_des); - file_des=-1; - } - } -*/ - - if(file_des>=0){ //then was open if(is_a_server){ close(file_des); @@ -451,9 +452,6 @@ typedef struct } file_des=-1; } - - - } }; @@ -536,6 +534,9 @@ typedef struct } mac[sizeof(mac)-1]='\0'; + if(sock!=1){ + close(sock); + } return string(mac); }; @@ -557,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/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index dfa01e6e3..65dbd890c 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -145,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); }