changes to make jungfrau work

This commit is contained in:
Dhanya Maliakal 2016-10-27 08:27:31 +02:00
parent 0cd9261332
commit 942f024761
4 changed files with 69 additions and 50 deletions

View File

@ -663,6 +663,9 @@ private:
/** Total fifo size */ /** Total fifo size */
uint32_t fifoSize; uint32_t fifoSize;
/** fifo buffer header size */
uint32_t fifoBufferHeaderSize;
/** Missing Packet */ /** Missing Packet */
int missingPacketinFile; int missingPacketinFile;

View File

@ -615,13 +615,14 @@ enum communicationProtocol{
/*int k = 0;*/ /*int k = 0;*/
while(length>0){ while(length>0){
nsending = (length>packet_size) ? packet_size:length; if(length<packet_size)
nsending = length; //works for jungfrau to read packet header
else
nsending = (length>packet_size) ? packet_size:length; //works for eiger to get packets to discard image header packets
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length); nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
if(nsent < packet_size) { if(nsent != nsending){ //if((nsent != nsending)){ && (nsent < packet_size)){
if(nsent){ if(nsent && (nsent != header_packet_size) && (nsent != -1))
if((nsent != header_packet_size) && (nsent != -1))
cprintf(RED,"Incomplete Packet size %d\n",nsent); cprintf(RED,"Incomplete Packet size %d\n",nsent);
}
break; break;
} }
length-=nsent; length-=nsent;

View File

@ -129,7 +129,7 @@ typedef struct {
#define JFRAU_FILE_FRAME_HEADER_LENGTH 16
#define JFRAU_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000 #define JFRAU_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
#define JFRAU_PACKETS_PER_FRAME 128 #define JFRAU_PACKETS_PER_FRAME 128
#define JFRAU_HEADER_LENGTH 22 #define JFRAU_HEADER_LENGTH 22

View File

@ -368,7 +368,7 @@ int UDPStandardImplementation::setupFifoStructure(){
fifo[i] = new CircularFifo<char>(fifoSize); fifo[i] = new CircularFifo<char>(fifoSize);
//allocate memory //allocate memory
mem0[i] = (char*)malloc((bufferSize * numberofJobsPerBuffer + HEADER_SIZE_NUM_TOT_PACKETS) * fifoSize); mem0[i] = (char*)malloc((bufferSize * numberofJobsPerBuffer + fifoBufferHeaderSize) * fifoSize);
if (mem0[i] == NULL){ if (mem0[i] == NULL){
cprintf(BG_RED,"Error: Could not allocate memory for listening \n"); cprintf(BG_RED,"Error: Could not allocate memory for listening \n");
return FAIL; return FAIL;
@ -376,10 +376,10 @@ int UDPStandardImplementation::setupFifoStructure(){
//push free address into fifoFree //push free address into fifoFree
buffer[i]=mem0[i]; buffer[i]=mem0[i];
while (buffer[i] < (mem0[i]+(bufferSize * numberofJobsPerBuffer + HEADER_SIZE_NUM_TOT_PACKETS) * (fifoSize-1))) { while (buffer[i] < (mem0[i]+(bufferSize * numberofJobsPerBuffer + fifoBufferHeaderSize) * (fifoSize-1))) {
//cprintf(BLUE,"fifofree %d: push 0x%p\n",i,(void*)buffer[i]); //cprintf(BLUE,"fifofree %d: push 0x%p\n",i,(void*)buffer[i]);
/*for(int k=0;k<bufferSize;k=k+4){ /*for(int k=0;k<bufferSize;k=k+4){
sprintf(buffer[i]+HEADER_SIZE_NUM_TOT_PACKETS+k,"mem%d",i); sprintf(buffer[i]+fifoBufferHeaderSize+k,"mem%d",i);
}*/ }*/
sprintf(buffer[i],"mem%d",i); sprintf(buffer[i],"mem%d",i);
while(!fifoFree[i]->push(buffer[i])); while(!fifoFree[i]->push(buffer[i]));
@ -387,7 +387,7 @@ int UDPStandardImplementation::setupFifoStructure(){
#ifdef DEBUG5 #ifdef DEBUG5
cprintf(BLUE,"Info: %d fifostructure free pushed into fifofree %p\n", i, (void*)(buffer[i])); cprintf(BLUE,"Info: %d fifostructure free pushed into fifofree %p\n", i, (void*)(buffer[i]));
#endif #endif
buffer[i] += (bufferSize * numberofJobsPerBuffer + HEADER_SIZE_NUM_TOT_PACKETS); buffer[i] += (bufferSize * numberofJobsPerBuffer + fifoBufferHeaderSize);
} }
} }
cout << "Fifo structure(s) reconstructed" << endl; cout << "Fifo structure(s) reconstructed" << endl;
@ -763,6 +763,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
maxFramesPerFile = MAX_FRAMES_PER_FILE; maxFramesPerFile = MAX_FRAMES_PER_FILE;
fifoSize = GOTTHARD_FIFO_SIZE; fifoSize = GOTTHARD_FIFO_SIZE;
fifoDepth = GOTTHARD_FIFO_SIZE; fifoDepth = GOTTHARD_FIFO_SIZE;
fifoBufferHeaderSize= HEADER_SIZE_NUM_TOT_PACKETS;
//footerOffset = Not applicable; //footerOffset = Not applicable;
break; break;
case PROPIX: case PROPIX:
@ -776,6 +777,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
maxFramesPerFile = MAX_FRAMES_PER_FILE; maxFramesPerFile = MAX_FRAMES_PER_FILE;
fifoSize = PROPIX_FIFO_SIZE; fifoSize = PROPIX_FIFO_SIZE;
fifoDepth = PROPIX_FIFO_SIZE; fifoDepth = PROPIX_FIFO_SIZE;
fifoBufferHeaderSize= HEADER_SIZE_NUM_TOT_PACKETS;
//footerOffset = Not applicable; //footerOffset = Not applicable;
break; break;
case MOENCH: case MOENCH:
@ -789,6 +791,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE; maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE;
fifoSize = MOENCH_FIFO_SIZE; fifoSize = MOENCH_FIFO_SIZE;
fifoDepth = MOENCH_FIFO_SIZE; fifoDepth = MOENCH_FIFO_SIZE;
fifoBufferHeaderSize= HEADER_SIZE_NUM_TOT_PACKETS;
//footerOffset = Not applicable; //footerOffset = Not applicable;
break; break;
case EIGER: case EIGER:
@ -804,6 +807,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
fifoSize = EIGER_FIFO_SIZE; fifoSize = EIGER_FIFO_SIZE;
fifoDepth = EIGER_FIFO_SIZE; fifoDepth = EIGER_FIFO_SIZE;
footerOffset = EIGER_DATA_PACKET_HEADER_SIZE + oneDataSize; footerOffset = EIGER_DATA_PACKET_HEADER_SIZE + oneDataSize;
fifoBufferHeaderSize= HEADER_SIZE_NUM_TOT_PACKETS;
break; break;
case JUNGFRAUCTB: case JUNGFRAUCTB:
packetsPerFrame = JCTB_PACKETS_PER_FRAME; packetsPerFrame = JCTB_PACKETS_PER_FRAME;
@ -816,6 +820,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE; maxFramesPerFile = JFCTB_MAX_FRAMES_PER_FILE;
fifoSize = JCTB_FIFO_SIZE; fifoSize = JCTB_FIFO_SIZE;
fifoDepth = JCTB_FIFO_SIZE; fifoDepth = JCTB_FIFO_SIZE;
fifoBufferHeaderSize= HEADER_SIZE_NUM_TOT_PACKETS;
//footerOffset = Not applicable; //footerOffset = Not applicable;
break; break;
case JUNGFRAU: case JUNGFRAU:
@ -829,6 +834,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE; maxFramesPerFile = JFRAU_MAX_FRAMES_PER_FILE;
fifoDepth = JFRAU_FIFO_SIZE; fifoDepth = JFRAU_FIFO_SIZE;
fifoSize = JFRAU_FIFO_SIZE; fifoSize = JFRAU_FIFO_SIZE;
fifoBufferHeaderSize= JFRAU_FILE_FRAME_HEADER_LENGTH;
//footerOffset = Not applicable; //footerOffset = Not applicable;
break; break;
default: default:
@ -1988,7 +1994,6 @@ void UDPStandardImplementation::startListening(){
} }
//write packet count to buffer //write packet count to buffer
if(myDetectorType == EIGER)
(*((uint32_t*)(buffer[ithread]))) = (rc/onePacketSize); (*((uint32_t*)(buffer[ithread]))) = (rc/onePacketSize);
if(dataCompressionEnable) if(dataCompressionEnable)
@ -2037,7 +2042,7 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
int receivedSize = 0; int receivedSize = 0;
//carry over from previous buffer //carry over from previous buffer
if(cSize) memcpy(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS, temp, cSize); if(cSize) memcpy(buffer[ithread] + fifoBufferHeaderSize, temp, cSize);
if(!activated){ if(!activated){
@ -2059,14 +2064,14 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
//copy dummy packets //copy dummy packets
receivedSize = framestoclone*packetsPerFrame*onePacketSize; receivedSize = framestoclone*packetsPerFrame*onePacketSize;
memset(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS, 0xFF,receivedSize); memset(buffer[ithread] + fifoBufferHeaderSize, 0xFF,receivedSize);
//set fnum, pnum and deactivatedpacket label //set fnum, pnum and deactivatedpacket label
eiger_packet_header_t* header; eiger_packet_header_t* header;
eiger_packet_footer_t* footer; eiger_packet_footer_t* footer;
int pnum=0; int pnum=0;
//loop by each packet //loop by each packet
for(int offset=HEADER_SIZE_NUM_TOT_PACKETS; for(int offset=fifoBufferHeaderSize;
offset<receivedSize; offset<receivedSize;
offset+=onePacketSize){ offset+=onePacketSize){
header = (eiger_packet_header_t*)(buffer[ithread] + offset); header = (eiger_packet_header_t*)(buffer[ithread] + offset);
@ -2090,12 +2095,22 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
return receivedSize; return receivedSize;
} }
if(status != TRANSMITTING){
if(status != TRANSMITTING) if(myDetectorType == JUNGFRAU){
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, (bufferSize * numberofJobsPerBuffer) - cSize); jfrau_packet_header_t* header;
int pcount = packetsPerFrame-1;
lSize = JFRAU_HEADER_LENGTH;
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + fifoBufferHeaderSize, lSize);
header = (jfrau_packet_header_t*)(buffer[ithread] + fifoBufferHeaderSize + iloop * (JFRAU_HEADER_LENGTH+JFRAU_ONE_DATA_SIZE));
}
else{
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + fifoBufferHeaderSize + cSize, (bufferSize * numberofJobsPerBuffer) - cSize);
//eiger returns 0 when header packet caught //eiger returns 0 when header packet caught
while(receivedSize < onePacketSize && status != TRANSMITTING) while(receivedSize < onePacketSize && status != TRANSMITTING)
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, (bufferSize * numberofJobsPerBuffer) - cSize); receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + fifoBufferHeaderSize + cSize, (bufferSize * numberofJobsPerBuffer) - cSize);
}
}
totalListeningPacketCount[ithread] += (receivedSize/onePacketSize); totalListeningPacketCount[ithread] += (receivedSize/onePacketSize);
@ -2105,14 +2120,14 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
if(myDetectorType == JUNGFRAU){ if(myDetectorType == JUNGFRAU){
jfrau_packet_header_t* header; jfrau_packet_header_t* header;
for(int iloop=0;iloop<2;iloop++){ for(int iloop=0;iloop<128;iloop++){
header = (jfrau_packet_header_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + iloop * (JFRAU_HEADER_LENGTH+JFRAU_ONE_DATA_SIZE)); header = (jfrau_packet_header_t*)(buffer[ithread] + fifoBufferHeaderSize + iloop * (JFRAU_HEADER_LENGTH+JFRAU_ONE_DATA_SIZE));
cprintf(RED,"[%d]: packetnumber:%x\n",iloop, (*( (uint8_t*) header->packetNumber))); cprintf(RED,"[%d]: packetnumber:%d\n",iloop, (*( (uint8_t*) header->packetNumber)));
cprintf(RED," : framenumber :%x\n", (*( (uint32_t*) header->frameNumber))&0xffffff); cprintf(RED," : framenumber :%d\n", (*( (uint32_t*) header->frameNumber))&frameIndexMask);
} }
}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]+fifoBufferHeaderSize);
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 + fifoBufferHeaderSize);
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->subFrameNumber)), (*( (unsigned int*) header->subFrameNumber)),
@ -2143,15 +2158,15 @@ void UDPStandardImplementation::startFrameIndices(int ithread){
startFrameIndex = 0; //frame number always resets startFrameIndex = 0; //frame number always resets
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] + fifoBufferHeaderSize);
startFrameIndex = (*( (uint32_t*) header->frameNumber))&0xffffff; startFrameIndex = (*( (uint32_t*) header->frameNumber))&frameIndexMask;
break; break;
default: default:
if(shortFrameEnable < 0){ if(shortFrameEnable < 0){
startFrameIndex = (((((uint32_t)(*((uint32_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1) startFrameIndex = (((((uint32_t)(*((uint32_t*)(buffer[ithread] + fifoBufferHeaderSize))))+1)
& (frameIndexMask)) >> frameIndexOffset); & (frameIndexMask)) >> frameIndexOffset);
}else{ }else{
startFrameIndex = ((((uint32_t)(*((uint32_t*)(buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS)))) startFrameIndex = ((((uint32_t)(*((uint32_t*)(buffer[ithread]+fifoBufferHeaderSize))))
& (frameIndexMask)) >> frameIndexOffset); & (frameIndexMask)) >> frameIndexOffset);
} }
break; break;
@ -2302,7 +2317,7 @@ uint32_t UDPStandardImplementation::processListeningBuffer(int ithread, int &cSi
case PROPIX: case PROPIX:
//for short frames, 1 packet/frame, so split frames is not a topic //for short frames, 1 packet/frame, so split frames is not a topic
if(shortFrameEnable == -1){ if(shortFrameEnable == -1){
lastPacketOffset = (((packetCount - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); lastPacketOffset = (((packetCount - 1) * onePacketSize) + fifoBufferHeaderSize);
#ifdef DEBUG4 #ifdef DEBUG4
cprintf(BLUE, "Listening_Thread %d: Last Packet Offset:%d\n",ithread, lastPacketOffset); cprintf(BLUE, "Listening_Thread %d: Last Packet Offset:%d\n",ithread, lastPacketOffset);
#endif #endif
@ -2319,17 +2334,17 @@ uint32_t UDPStandardImplementation::processListeningBuffer(int ithread, int &cSi
} }
} }
#ifdef DEBUG4 #ifdef DEBUG4
cprintf(BLUE, "Listening_Thread %d: First Header:%d\n", (((((uint32_t)(*((uint32_t*)(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS))))+1) cprintf(BLUE, "Listening_Thread %d: First Header:%d\n", (((((uint32_t)(*((uint32_t*)(buffer[ithread] + fifoBufferHeaderSize))))+1)
& (frameIndexMask)) >> frameIndexOffset)); & (frameIndexMask)) >> frameIndexOffset));
#endif #endif
break; break;
case MOENCH: case MOENCH:
lastPacketOffset = (((packetCount - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); lastPacketOffset = (((packetCount - 1) * onePacketSize) + fifoBufferHeaderSize);
#ifdef DEBUG4 #ifdef DEBUG4
cprintf(BLUE, "Listening_Thread %d: First Header:%d\t First Packet:%d\t Last Header:%d\t Last Packet:%d\tLast Packet Offset:%d\n", cprintf(BLUE, "Listening_Thread %d: First Header:%d\t First Packet:%d\t Last Header:%d\t Last Packet:%d\tLast Packet Offset:%d\n",
(((((uint32_t)(*((uint32_t*)(buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS))))) & (frameIndexMask)) >> frameIndexOffset), (((((uint32_t)(*((uint32_t*)(buffer[ithread]+fifoBufferHeaderSize))))) & (frameIndexMask)) >> frameIndexOffset),
((((uint32_t)(*((uint32_t*)(buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS))))) & (packetIndexMask)), ((((uint32_t)(*((uint32_t*)(buffer[ithread]+fifoBufferHeaderSize))))) & (packetIndexMask)),
(((((uint32_t)(*((uint32_t*)(buffer[ithread]+lastpacketoffset))))) & (frameIndexMask)) >> frameIndexOffset), (((((uint32_t)(*((uint32_t*)(buffer[ithread]+lastpacketoffset))))) & (frameIndexMask)) >> frameIndexOffset),
((((uint32_t)(*((uint32_t*)(buffer[ithread]+lastpacketoffset))))) & (packetIndexMask)), ((((uint32_t)(*((uint32_t*)(buffer[ithread]+lastpacketoffset))))) & (packetIndexMask)),
lastPacketOffset); lastPacketOffset);
@ -2357,33 +2372,33 @@ uint32_t UDPStandardImplementation::processListeningBuffer(int ithread, int &cSi
case JUNGFRAU: case JUNGFRAU:
lastPacketOffset = (((packetCount - 1) * onePacketSize) + HEADER_SIZE_NUM_TOT_PACKETS); lastPacketOffset = (((packetCount - 1) * onePacketSize) + fifoBufferHeaderSize);
#ifdef DEBUG4 #ifdef DEBUG4
header = (jfrau_packet_header_t*) (buffer[ithread]+HEADER_SIZE_NUM_TOT_PACKETS); header = (jfrau_packet_header_t*) (buffer[ithread]+fifoBufferHeaderSize);
cprintf(BLUE, "Listening_Thread: First Header:%d\t First Packet:%d\n", cprintf(BLUE, "Listening_Thread: First Header:%d\t First Packet:%d\n",
(*( (uint32_t*) header->frameNumber))&0xffffff, (*( (uint32_t*) header->frameNumber))&frameIndexMask,
(*( (uint8_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:%du\t Last Packet:%d\n", cprintf(BLUE, "Listening_Thread: Last Header:%du\t Last Packet:%d\n",
(*( (uint32_t*) header->frameNumber))&0xffffff, (*( (uint32_t*) header->frameNumber))&frameIndexMask,
(*( (uint8_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((*( (uint8_t*) header->packetNumber))){ if((*( (uint8_t*) header->packetNumber))){
//cprintf(RED,"entering missing packet zone\n"); //cprintf(RED,"entering missing packet zone\n");
lastFrameHeader64 = (*( (uint32_t*) header->frameNumber))&0xffffff; lastFrameHeader64 = (*( (uint32_t*) header->frameNumber))&frameIndexMask;
cSize += onePacketSize; cSize += onePacketSize;
lastPacketOffset -= onePacketSize; lastPacketOffset -= onePacketSize;
--packetCount; --packetCount;
while (lastFrameHeader64 == ((*( (uint32_t*) header->frameNumber))&0xffffff)){ while (lastFrameHeader64 == ((*( (uint32_t*) header->frameNumber))&frameIndexMask)){
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:%d new packet:%d\n", cprintf(RED,"new header:%d new packet:%d\n",
(*( (uint32_t*) header->frameNumber))&0xffffff, (*( (uint32_t*) header->frameNumber))&frameIndexMask,
(*( (uint8_t*) header->packetNumber))); (*( (uint8_t*) header->packetNumber)));
#endif #endif
--packetCount; --packetCount;
@ -2713,7 +2728,7 @@ void UDPStandardImplementation::handleWithoutDataCompression(int ithread, char*
uint64_t tempframenumber; uint64_t tempframenumber;
uint32_t pnum; uint32_t pnum;
uint32_t snum; uint32_t snum;
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS,tempframenumber,pnum,snum) == FAIL){ if(getFrameandPacketNumber(ithread, wbuffer + fifoBufferHeaderSize,tempframenumber,pnum,snum) == FAIL){
//error in frame number sent by fpga //error in frame number sent by fpga
while(!fifoFree[ithread]->push(wbuffer)); while(!fifoFree[ithread]->push(wbuffer));
@ -2732,7 +2747,7 @@ void UDPStandardImplementation::handleWithoutDataCompression(int ithread, char*
//callback to write data //callback to write data
if (cbAction < DO_EVERYTHING) if (cbAction < DO_EVERYTHING)
rawDataReadyCallBack((int)currentFrameNumber[ithread], wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, npackets * onePacketSize, rawDataReadyCallBack((int)currentFrameNumber[ithread], wbuffer + fifoBufferHeaderSize, npackets * onePacketSize,
sfilefd[ithread], latestData[ithread],pRawDataReady);//know which thread from sfilefd sfilefd[ithread], latestData[ithread],pRawDataReady);//know which thread from sfilefd
@ -2778,7 +2793,7 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
//if write enabled //if write enabled
if((fileWriteEnable) && (sfilefd[ithread])){ if((fileWriteEnable) && (sfilefd[ithread])){
if(numpackets){ if(numpackets){
int offset = HEADER_SIZE_NUM_TOT_PACKETS; int offset = fifoBufferHeaderSize;
uint64_t nextFileFrameNumber; uint64_t nextFileFrameNumber;
int packetsWritten = 0; int packetsWritten = 0;
//if(ithread) cout<<"numpackets:"<<numpackets<<"lastframenumberinfile:"<<lastFrameNumberInFile[ithread]<<endl; //if(ithread) cout<<"numpackets:"<<numpackets<<"lastframenumberinfile:"<<lastFrameNumberInFile[ithread]<<endl;
@ -2850,7 +2865,7 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
uint64_t finalLastFrameNumberToSave = 0; uint64_t finalLastFrameNumberToSave = 0;
uint32_t pnum; uint32_t pnum;
uint32_t snum; uint32_t snum;
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS + ((numpackets - 1) * onePacketSize), finalLastFrameNumberToSave,pnum,snum) == FAIL){ if(getFrameandPacketNumber(ithread, wbuffer + fifoBufferHeaderSize + ((numpackets - 1) * onePacketSize), finalLastFrameNumberToSave,pnum,snum) == FAIL){
//error in frame number sent by fpga //error in frame number sent by fpga
while(!fifoFree[ithread]->push(wbuffer)); while(!fifoFree[ithread]->push(wbuffer));
return; return;
@ -2942,7 +2957,7 @@ void UDPStandardImplementation::copyFrameToGui(int ithread, char* buffer, uint32
//copy date //copy date
guiNumPackets[ithread] = numpackets; guiNumPackets[ithread] = numpackets;
strcpy(guiFileName[ithread],completeFileName[ithread]); strcpy(guiFileName[ithread],completeFileName[ithread]);
memcpy(latestData[ithread],buffer+ HEADER_SIZE_NUM_TOT_PACKETS , numpackets*onePacketSize); memcpy(latestData[ithread],buffer+ fifoBufferHeaderSize , numpackets*onePacketSize);
//let it know its got data //let it know its got data
sem_post(&dataCallbackWriterSemaphore[ithread]); sem_post(&dataCallbackWriterSemaphore[ithread]);
@ -2970,7 +2985,7 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
uint64_t tempframenumber=-1; uint64_t tempframenumber=-1;
uint32_t pnum; uint32_t pnum;
uint32_t snum; uint32_t snum;
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, tempframenumber,pnum,snum) == FAIL){ if(getFrameandPacketNumber(ithread, wbuffer + fifoBufferHeaderSize, tempframenumber,pnum,snum) == FAIL){
//error in frame number sent by fpga //error in frame number sent by fpga
while(!fifoFree[ithread]->push(wbuffer)); while(!fifoFree[ithread]->push(wbuffer));
return; return;
@ -2988,7 +3003,7 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
//variable definitions //variable definitions
char* buff[2]={0,0}; //an array just to be compatible with copyframetogui char* buff[2]={0,0}; //an array just to be compatible with copyframetogui
char* data = wbuffer+ HEADER_SIZE_NUM_TOT_PACKETS; //data pointer to the next memory to be analysed char* data = wbuffer+ fifoBufferHeaderSize; //data pointer to the next memory to be analysed
int ndata; //size of data returned int ndata; //size of data returned
uint32_t np; //remaining number of packets returned uint32_t np; //remaining number of packets returned
uint32_t npackets = (uint32_t)(*((uint32_t*)wbuffer)); //number of total packets uint32_t npackets = (uint32_t)(*((uint32_t*)wbuffer)); //number of total packets
@ -3089,7 +3104,7 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
remainingsize -= ((buff[0] + ndata) - data); remainingsize -= ((buff[0] + ndata) - data);
data = buff[0] + ndata; data = buff[0] + ndata;
if(data > (wbuffer + HEADER_SIZE_NUM_TOT_PACKETS + npackets * onePacketSize) ) if(data > (wbuffer + fifoBufferHeaderSize + npackets * onePacketSize) )
cprintf(BG_RED,"Writing_Thread %d: Error: Compression data goes out of bounds!\n", ithread); cprintf(BG_RED,"Writing_Thread %d: Error: Compression data goes out of bounds!\n", ithread);
} }