jungfrau header changed

This commit is contained in:
Dhanya Maliakal 2016-02-04 12:39:05 +01:00
parent 41f7743af9
commit 0c9806e17f
3 changed files with 46 additions and 39 deletions

View File

@ -37,8 +37,10 @@ typedef struct {
*/ */
typedef struct { typedef struct {
unsigned char emptyHeader[6]; unsigned char emptyHeader[6];
unsigned char frameNumber[8]; unsigned char reserved[4];
unsigned char packetNumber[8]; unsigned char packetNumber[1];
unsigned char frameNumber[3];
unsigned char bunchid[8];
} jfrau_packet_header_t; } jfrau_packet_header_t;

View File

@ -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); 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 //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) { while(status != TRANSMITTING && myDetectorType == EIGER && receivedSize != onePacketSize) {
if(receivedSize != EIGER_HEADER_LENGTH){ if(receivedSize != EIGER_HEADER_LENGTH){
@ -1606,20 +1605,26 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int lSize, in
totalListeningFrameCount[ithread] += (receivedSize/onePacketSize); totalListeningFrameCount[ithread] += (receivedSize/onePacketSize);
#ifdef MANUALDEBUG #ifdef MANUALDEBUG
if(receivedSize>0){
if(myDetectorType == JUNGFRAU){ if(myDetectorType == JUNGFRAU){
jfrau_packet_header_t* header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS); jfrau_packet_header_t* header;
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))); 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){ }else if(myDetectorType == EIGER){
eiger_packet_header_t* header = (eiger_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); 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); 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", cprintf(GREEN,"thread:%d footeroffset:%dsubframenum:%d oldpacketnum:%d new pnum:%d new fnum:%d\n",
ithread,footerOffset, ithread,footerOffset,
(*( (unsigned int*) header->subFameNumber)), (*( (unsigned int*) header->subFrameNumber)),
(*( (uint8_t*) header->dynamicRange)), (*( (uint8_t*) header->dynamicRange)),
(*( (uint16_t*) footer->packetNumber)), (*( (uint16_t*) footer->packetNumber)),
(uint32_t)(*( (uint64_t*) footer))); (uint32_t)(*( (uint64_t*) footer)));
} }
}
#endif #endif
@ -1645,7 +1650,7 @@ void UDPStandardImplementation::startFrameIndices(int ithread){
break; break;
case JUNGFRAU: case JUNGFRAU:
header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS); header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS);
startFrameIndex = (*( (uint64_t*) header->frameNumber)); startFrameIndex = (*( (uint32_t*) header->frameNumber))&0xffffff;
break; break;
default: default:
if(shortFrameEnable < 0){ 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); lastPacketOffset = (((numberofJobsPerBuffer * packetsPerFrame - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS);
#ifdef DEBUG4 #ifdef DEBUG4
header = (jfrau_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); header = (jfrau_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS);
cprintf(BLUE, "Listening_Thread: First Header:%llu\t First Packet:%llu\n", cprintf(BLUE, "Listening_Thread: First Header:%d\t First Packet:%d\n",
(long long unsigned int)(*( (uint64_t*) header->frameNumber)), (*( (uint32_t*) header->frameNumber))&0xffffff,
(long long unsigned int)(*( (uint64_t*) header->packetNumber))); (*( (uint8_t*) header->packetNumber)));
#endif #endif
header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset); header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset);
#ifdef DEBUG4 #ifdef DEBUG4
cprintf(BLUE, "Listening_Thread: Last Header:%llu\t Last Packet:%llu\n", cprintf(BLUE, "Listening_Thread: Last Header:%du\t Last Packet:%d\n",
(long long unsigned int)(*( (uint64_t*) header->frameNumber)), (*( (uint32_t*) header->frameNumber))&0xffffff,
(long long unsigned int)(*( (uint64_t*) header->packetNumber))); (*( (uint8_t*) header->packetNumber)));
#endif #endif
//jungfrau last packet value is 0, so find the last packet and store the others in a temp storage //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"); cprintf(RED,"entering missing packet zone\n");
lastFrameHeader64 = (*( (uint64_t*) header->frameNumber)); lastFrameHeader64 = (*( (uint32_t*) header->frameNumber))&0xffffff;
cSize += onePacketSize; cSize += onePacketSize;
lastPacketOffset -= onePacketSize; lastPacketOffset -= onePacketSize;
--packetCount; --packetCount;
while (lastFrameHeader64 == (*( (uint64_t*) header->frameNumber))){ while (lastFrameHeader64 == (*( (uint32_t*) header->frameNumber))&0xffffff){
cSize += onePacketSize; cSize += onePacketSize;
lastPacketOffset -= onePacketSize; lastPacketOffset -= onePacketSize;
header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset); header = (jfrau_packet_header_t*) (buffer[ithread]+lastPacketOffset);
#ifdef DEBUG4 #ifdef DEBUG4
cprintf(RED,"new header:%llu new packet:%llu\n", cprintf(RED,"new header:%d new packet:%d\n",
(long long unsigned int)(*( (uint64_t*) header->frameNumber)), (*( (uint32_t*) header->frameNumber))&0xffffff,
(long long unsigned int)(*( (uint64_t*) header->packetNumber))); (*( (uint8_t*) header->packetNumber)));
#endif #endif
--packetCount; --packetCount;
} }
@ -2529,7 +2534,7 @@ void UDPStandardImplementation::stopWriting(int ithread, char* wbuffer[]){
//statistics //statistics
FILE_LOG(logINFO) << "Status: Run Finished"; 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 Missing Packets padded: %d\n",numTotMissingPackets);
cprintf(RED, "Total Packets Caught: %lld\n",(long long int)totalPacketsCaught); cprintf(RED, "Total Packets Caught: %lld\n",(long long int)totalPacketsCaught);
cprintf(RED, "Total Frames Caught: %lld\n",(long long int)(totalPacketsCaught/packetsPerFrame)); 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 != EIGER){
if(myDetectorType == JUNGFRAU){ if(myDetectorType == JUNGFRAU){
jfrau_packet_header_t* header = (jfrau_packet_header_t*)(wbuffer[0] + HEADER_SIZE_NUM_TOT_PACKETS); 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{ }else{
uint64_t tempframenumber = ((uint32_t)(*((uint32_t*)(wbuffer[0] + HEADER_SIZE_NUM_TOT_PACKETS)))); 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 //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); lastpacket = (((packetsToSave - 1) * onePacketSize) + offset);
if(myDetectorType == JUNGFRAU){ if(myDetectorType == JUNGFRAU){
jfrau_packet_header_t* header = (jfrau_packet_header_t*) (wbuffer[0] + lastpacket); jfrau_packet_header_t* header = (jfrau_packet_header_t*) (wbuffer[0] + lastpacket);
currentFrameNumber = (*( (uint64_t*) header->frameNumber)); currentFrameNumber = (*( (uint32_t*) header->frameNumber))&0xffffff;
}else{ }else{
tempframenumber = ((uint32_t)(*((uint32_t*)(wbuffer[0] + lastpacket)))); tempframenumber = ((uint32_t)(*((uint32_t*)(wbuffer[0] + lastpacket))));
//for gotthard and normal frame, increment frame number to separate fnum and pnum //for gotthard and normal frame, increment frame number to separate fnum and pnum

View File

@ -1858,7 +1858,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
char fName[MAX_STR_LENGTH]=""; char fName[MAX_STR_LENGTH]="";
int acquisitionIndex = -1; int acquisitionIndex = -1;
int frameIndex= -1; int frameIndex= -1;
uint64_t currentIndex=0; int64_t currentIndex=0;
uint64_t startAcquisitionIndex=0; uint64_t startAcquisitionIndex=0;
uint64_t startFrameIndex=0; uint64_t startFrameIndex=0;
strcpy(mess,"Could not read frame\n"); strcpy(mess,"Could not read frame\n");
@ -1915,7 +1915,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
//fixed frame number //fixed frame number
jfrau_packet_header_t* header = (jfrau_packet_header_t*) origVal; jfrau_packet_header_t* header = (jfrau_packet_header_t*) origVal;
currentIndex = (*( (uint64_t*) header->frameNumber)); currentIndex = (*( (uint32_t*) header->frameNumber))&0xffffff;
#ifdef VERYVERBOSE #ifdef VERYVERBOSE
cout << "currentIndex:" << dec << currentIndex << endl; cout << "currentIndex:" << dec << currentIndex << endl;
#endif #endif
@ -1923,13 +1923,13 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
int64_t currentPacket = packetsPerFrame-1; int64_t currentPacket = packetsPerFrame-1;
int offsetsrc = 0; int offsetsrc = 0;
int offsetdest = 0; int offsetdest = 0;
uint64_t ifnum=-1; int64_t ifnum=-1;
uint64_t ipnum=-1; int64_t ipnum=-1;
while(currentPacket >= 0){ while(currentPacket >= 0){
header = (jfrau_packet_header_t*) (origVal + offsetsrc); header = (jfrau_packet_header_t*) (origVal + offsetsrc);
ifnum = (*( (uint64_t*) header->frameNumber)); ifnum = (*( (uint32_t*) header->frameNumber))&0xffffff;
ipnum = (*( (uint64_t*) header->packetNumber)); ipnum = (*( (uint8_t*) header->packetNumber));
if(ifnum != currentIndex) { if(ifnum != currentIndex) {
cout << "current packet " << currentPacket << " Wrong Frame number " << ifnum << ", copying blank packet" << endl; cout << "current packet " << currentPacket << " Wrong Frame number " << ifnum << ", copying blank packet" << endl;
memcpy(retval+offsetdest,blackpacket,oneDataSize); memcpy(retval+offsetdest,blackpacket,oneDataSize);
@ -1938,7 +1938,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
currentPacket--; currentPacket--;
continue; continue;
} }
if((int64_t)ipnum!= currentPacket){ if(ipnum!= currentPacket){
cout << "current packet " << currentPacket << " Wrong packet number " << ipnum << ", copying blank packet" << endl; cout << "current packet " << currentPacket << " Wrong packet number " << ipnum << ", copying blank packet" << endl;
memcpy(retval+offsetdest,blackpacket,oneDataSize); memcpy(retval+offsetdest,blackpacket,oneDataSize);
offsetdest += oneDataSize; offsetdest += oneDataSize;