From 0c9806e17f1b89a02c5b952f86f43fe79ba7372f Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 4 Feb 2016 12:39:05 +0100 Subject: [PATCH] jungfrau header changed --- slsReceiverSoftware/include/receiver_defs.h | 6 +- .../src/UDPStandardImplementation.cpp | 65 ++++++++++--------- .../src/slsReceiverTCPIPInterface.cpp | 14 ++-- 3 files changed, 46 insertions(+), 39 deletions(-) diff --git a/slsReceiverSoftware/include/receiver_defs.h b/slsReceiverSoftware/include/receiver_defs.h index 3cc5e8091..49522334d 100755 --- a/slsReceiverSoftware/include/receiver_defs.h +++ b/slsReceiverSoftware/include/receiver_defs.h @@ -37,8 +37,10 @@ typedef struct { */ typedef struct { unsigned char emptyHeader[6]; - unsigned char frameNumber[8]; - unsigned char packetNumber[8]; + unsigned char reserved[4]; + unsigned char packetNumber[1]; + unsigned char frameNumber[3]; + unsigned char bunchid[8]; } jfrau_packet_header_t; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index 8368fceb2..8a6a57aab 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -1591,7 +1591,6 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int lSize, in int receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, lSize + cSize); - //throw away packets that is not one packet size, need to check status if socket is shut down while(status != TRANSMITTING && myDetectorType == EIGER && receivedSize != onePacketSize) { if(receivedSize != EIGER_HEADER_LENGTH){ @@ -1606,19 +1605,25 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int lSize, in totalListeningFrameCount[ithread] += (receivedSize/onePacketSize); #ifdef MANUALDEBUG - if(myDetectorType == JUNGFRAU){ - jfrau_packet_header_t* header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS); - cprintf(RED,"framenumber:%llu\n",(long long unsigned int)(*( (uint64_t*) header->frameNumber))); - cprintf(RED,"packetnumber:%llu\n",(long long unsigned int)(*( (uint64_t*) header->packetNumber))); - }else if(myDetectorType == EIGER){ - eiger_packet_header_t* header = (eiger_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); - eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(buffer[ithread] + footerOffset + HEADER_SIZE_NUM_TOT_PACKETS); - cprintf(GREEN,"thread:%d footeroffset:%dsubframenum:%d oldpacketnum:%d new pnum:%d new fnum:%d\n", - ithread,footerOffset, - (*( (unsigned int*) header->subFameNumber)), - (*( (uint8_t*) header->dynamicRange)), - (*( (uint16_t*) footer->packetNumber)), - (uint32_t)(*( (uint64_t*) footer))); + if(receivedSize>0){ + if(myDetectorType == JUNGFRAU){ + jfrau_packet_header_t* header; + + for(int iloop=0;iloop<2;iloop++){ + header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + iloop * (JFRAU_HEADER_LENGTH+JFRAU_ONE_DATA_SIZE)); + cprintf(RED,"[%d]: packetnumber:%x\n",iloop, (*( (uint8_t*) header->packetNumber))); + cprintf(RED," : framenumber :%x\n", (*( (uint32_t*) header->frameNumber))&0xffffff); + } + }else if(myDetectorType == EIGER){ + eiger_packet_header_t* header = (eiger_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); + eiger_packet_footer_t* footer = (eiger_packet_footer_t*)(buffer[ithread] + footerOffset + HEADER_SIZE_NUM_TOT_PACKETS); + cprintf(GREEN,"thread:%d footeroffset:%dsubframenum:%d oldpacketnum:%d new pnum:%d new fnum:%d\n", + ithread,footerOffset, + (*( (unsigned int*) header->subFrameNumber)), + (*( (uint8_t*) header->dynamicRange)), + (*( (uint16_t*) footer->packetNumber)), + (uint32_t)(*( (uint64_t*) footer))); + } } #endif @@ -1645,7 +1650,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){ break; case JUNGFRAU: header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS); - startFrameIndex = (*( (uint64_t*) header->frameNumber)); + startFrameIndex = (*( (uint32_t*) header->frameNumber))&0xffffff; break; default: if(shortFrameEnable < 0){ @@ -1859,31 +1864,31 @@ uint32_t UDPStandardImplementation::processListeningBuffer(int ithread, int cSiz lastPacketOffset = (((numberofJobsPerBuffer * packetsPerFrame - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); #ifdef DEBUG4 header = (jfrau_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); - cprintf(BLUE, "Listening_Thread: First Header:%llu\t First Packet:%llu\n", - (long long unsigned int)(*( (uint64_t*) header->frameNumber)), - (long long unsigned int)(*( (uint64_t*) header->packetNumber))); + cprintf(BLUE, "Listening_Thread: First Header:%d\t First Packet:%d\n", + (*( (uint32_t*) header->frameNumber))&0xffffff, + (*( (uint8_t*) header->packetNumber))); #endif header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset); #ifdef DEBUG4 - cprintf(BLUE, "Listening_Thread: Last Header:%llu\t Last Packet:%llu\n", - (long long unsigned int)(*( (uint64_t*) header->frameNumber)), - (long long unsigned int)(*( (uint64_t*) header->packetNumber))); + cprintf(BLUE, "Listening_Thread: Last Header:%du\t Last Packet:%d\n", + (*( (uint32_t*) header->frameNumber))&0xffffff, + (*( (uint8_t*) header->packetNumber))); #endif //jungfrau last packet value is 0, so find the last packet and store the others in a temp storage - if(*( (uint64_t*) header->packetNumber)){ + if((*( (uint8_t*) header->packetNumber))){ cprintf(RED,"entering missing packet zone\n"); - lastFrameHeader64 = (*( (uint64_t*) header->frameNumber)); + lastFrameHeader64 = (*( (uint32_t*) header->frameNumber))&0xffffff; cSize += onePacketSize; lastPacketOffset -= onePacketSize; --packetCount; - while (lastFrameHeader64 == (*( (uint64_t*) header->frameNumber))){ + while (lastFrameHeader64 == (*( (uint32_t*) header->frameNumber))&0xffffff){ cSize += onePacketSize; lastPacketOffset -= onePacketSize; header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset); #ifdef DEBUG4 - cprintf(RED,"new header:%llu new packet:%llu\n", - (long long unsigned int)(*( (uint64_t*) header->frameNumber)), - (long long unsigned int)(*( (uint64_t*) header->packetNumber))); + cprintf(RED,"new header:%d new packet:%d\n", + (*( (uint32_t*) header->frameNumber))&0xffffff, + (*( (uint8_t*) header->packetNumber))); #endif --packetCount; } @@ -2529,7 +2534,7 @@ void UDPStandardImplementation::stopWriting(int ithread, char* wbuffer[]){ //statistics FILE_LOG(logINFO) << "Status: Run Finished"; - if(totalPacketsCaught != (numberOfFrames*packetsPerFrame)){ + if(totalPacketsCaught != ((uint64_t)numberOfFrames*packetsPerFrame)){ cprintf(RED, "Total Missing Packets padded: %d\n",numTotMissingPackets); cprintf(RED, "Total Packets Caught: %lld\n",(long long int)totalPacketsCaught); cprintf(RED, "Total Frames Caught: %lld\n",(long long int)(totalPacketsCaught/packetsPerFrame)); @@ -2555,7 +2560,7 @@ void UDPStandardImplementation::handleWithoutDataCompression(int ithread, char* if(myDetectorType != EIGER){ if(myDetectorType == JUNGFRAU){ jfrau_packet_header_t* header = (jfrau_packet_header_t*)(wbuffer[0] + HEADER_SIZE_NUM_TOT_PACKETS); - currentFrameNumber = (*( (uint64_t*) header->frameNumber)); + currentFrameNumber = (*( (uint32_t*) header->frameNumber))&0xffffff; }else{ uint64_t tempframenumber = ((uint32_t)(*((uint32_t*)(wbuffer[0] + HEADER_SIZE_NUM_TOT_PACKETS)))); //for gotthard and normal frame, increment frame number to separate fnum and pnum @@ -2677,7 +2682,7 @@ void UDPStandardImplementation::writeFileWithoutCompression(char* wbuffer[],uint lastpacket = (((packetsToSave - 1) * onePacketSize) + offset); if(myDetectorType == JUNGFRAU){ jfrau_packet_header_t* header = (jfrau_packet_header_t*) (wbuffer[0] + lastpacket); - currentFrameNumber = (*( (uint64_t*) header->frameNumber)); + currentFrameNumber = (*( (uint32_t*) header->frameNumber))&0xffffff; }else{ tempframenumber = ((uint32_t)(*((uint32_t*)(wbuffer[0] + lastpacket)))); //for gotthard and normal frame, increment frame number to separate fnum and pnum diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 87d920440..a79fb6ebd 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1858,7 +1858,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){ char fName[MAX_STR_LENGTH]=""; int acquisitionIndex = -1; int frameIndex= -1; - uint64_t currentIndex=0; + int64_t currentIndex=0; uint64_t startAcquisitionIndex=0; uint64_t startFrameIndex=0; strcpy(mess,"Could not read frame\n"); @@ -1915,7 +1915,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){ //fixed frame number jfrau_packet_header_t* header = (jfrau_packet_header_t*) origVal; - currentIndex = (*( (uint64_t*) header->frameNumber)); + currentIndex = (*( (uint32_t*) header->frameNumber))&0xffffff; #ifdef VERYVERBOSE cout << "currentIndex:" << dec << currentIndex << endl; #endif @@ -1923,13 +1923,13 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){ int64_t currentPacket = packetsPerFrame-1; int offsetsrc = 0; int offsetdest = 0; - uint64_t ifnum=-1; - uint64_t ipnum=-1; + int64_t ifnum=-1; + int64_t ipnum=-1; while(currentPacket >= 0){ header = (jfrau_packet_header_t*) (origVal + offsetsrc); - ifnum = (*( (uint64_t*) header->frameNumber)); - ipnum = (*( (uint64_t*) header->packetNumber)); + ifnum = (*( (uint32_t*) header->frameNumber))&0xffffff; + ipnum = (*( (uint8_t*) header->packetNumber)); if(ifnum != currentIndex) { cout << "current packet " << currentPacket << " Wrong Frame number " << ifnum << ", copying blank packet" << endl; memcpy(retval+offsetdest,blackpacket,oneDataSize); @@ -1938,7 +1938,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){ currentPacket--; continue; } - if((int64_t)ipnum!= currentPacket){ + if(ipnum!= currentPacket){ cout << "current packet " << currentPacket << " Wrong packet number " << ipnum << ", copying blank packet" << endl; memcpy(retval+offsetdest,blackpacket,oneDataSize); offsetdest += oneDataSize;