mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 00:00:02 +02:00
df
This commit is contained in:
parent
837d0dce03
commit
5f3de2057c
@ -62,14 +62,14 @@ class slsReceiver : private virtual slsReceiverDefs {
|
||||
@param func callback to be called when starting the acquisition. Its arguments are filepath filename fileindex data size
|
||||
\returns 0 callback takes care of open,close,write file; 1 callback writes file, we have to open, close it; 2 we open, close, write file, callback does not do anything
|
||||
*/
|
||||
void registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg);
|
||||
void registerCallBackStartAcquisition(int (*func)(char*, char*,uint64_t, uint32_t, void*),void *arg);
|
||||
|
||||
|
||||
/**
|
||||
callback argument is
|
||||
toatal farmes caught
|
||||
*/
|
||||
void registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg);
|
||||
void registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg);
|
||||
|
||||
/**
|
||||
args to raw data ready callback are
|
||||
@ -79,7 +79,7 @@ class slsReceiver : private virtual slsReceiverDefs {
|
||||
file descriptor
|
||||
guidatapointer (NULL, no data required)
|
||||
*/
|
||||
void registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg);
|
||||
void registerCallBackRawDataReady(void (*func)(uint64_t, char*, uint32_t, FILE*, char*, void*),void *arg);
|
||||
|
||||
|
||||
private:
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
|
||||
*/
|
||||
|
||||
void registerCallBackStartAcquisition(int (*func)(char* filepath, char* filename,int fileindex, int datasize, void*),void *arg);
|
||||
void registerCallBackStartAcquisition(int (*func)(char* filepath, char* filename,uint64_t fileindex, uint32_t datasize, void*),void *arg);
|
||||
|
||||
|
||||
/**
|
||||
@ -71,7 +71,7 @@ public:
|
||||
*/
|
||||
|
||||
|
||||
void registerCallBackAcquisitionFinished(void (*func)(int nf, void*),void *arg);
|
||||
void registerCallBackAcquisitionFinished(void (*func)(uint64_t nf, void*),void *arg);
|
||||
|
||||
|
||||
|
||||
@ -81,7 +81,7 @@ public:
|
||||
\returns nothing
|
||||
*/
|
||||
|
||||
void registerCallBackRawDataReady(void (*func)(int framenumber, char* datapointer, int datasize, FILE* filedescriptor, char* guidatapointer, void*),void *arg);
|
||||
void registerCallBackRawDataReady(void (*func)(uint64_t framenumber, char* datapointer, uint32_t datasize, FILE* filedescriptor, char* guidatapointer, void*),void *arg);
|
||||
|
||||
// made static to close thread files with ctrl+c
|
||||
static slsReceiver* receiver;
|
||||
|
@ -1921,7 +1921,7 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){
|
||||
//pop fifo and if end of acquisition
|
||||
if(popAndCheckEndofAcquisition(ithread, packetBuffer, popReady, numPackets,toFreePointers,toFreePointersOffset)){
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN,"All dummy-end buffers popped\n", ithread);
|
||||
cprintf(GREEN,"Writing_Thread All dummy-end buffers popped\n", ithread);
|
||||
#endif
|
||||
//finish missing packets
|
||||
if(((frameBufferoffset[0]!=0) || (frameBufferoffset[1]!=(packetsPerFrame/numberofListeningThreads))));
|
||||
@ -1932,22 +1932,25 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){
|
||||
}
|
||||
|
||||
|
||||
|
||||
//get a full frame-------------------------------------------------------------------------------------------------------
|
||||
for(int i=0;i<numberofListeningThreads;++i){
|
||||
|
||||
numberofMissingPackets[i] = 0;
|
||||
|
||||
/**Check if this required*/
|
||||
//dummy done-------------------------------------------------------------------------
|
||||
if(numPackets[i] == dummyPacketValue && frameBufferoffset[i]== (((i+1)*packetsPerFrame/numberofListeningThreads)));
|
||||
|
||||
//dummy done-----------------------------------------------------------------------------------------------------------
|
||||
if(numPackets[i] == dummyPacketValue && frameBufferoffset[i] == (((i+1)*packetsPerFrame/numberofListeningThreads)))
|
||||
continue;
|
||||
|
||||
|
||||
|
||||
//NOT FULL FRAME
|
||||
//not full frame
|
||||
else if(!fullframe[i]){
|
||||
eiger_packet_footer_t* packetBuffer_footer = (eiger_packet_footer_t*)(packetBuffer[i] + footerOffset + HEADER_SIZE_NUM_TOT_PACKETS);
|
||||
|
||||
//update frame number
|
||||
|
||||
|
||||
//update frame number and packet number
|
||||
if(numPackets[i] != dummyPacketValue){
|
||||
if(!((uint32_t)(*( (uint64_t*) packetBuffer_footer)))){
|
||||
cprintf(BG_RED,"Fifo %d: Error: Frame Number is zero from firmware. popready[%d]:%d\n",
|
||||
@ -1955,119 +1958,182 @@ void UDPStandardImplementation::processWritingBufferPacketByPacket(int ithread){
|
||||
popReady[i]=true;
|
||||
continue;
|
||||
}
|
||||
//frame number
|
||||
threadFrameNumber[i] = (uint32_t)(*( (uint64_t*) packetBuffer_footer));
|
||||
threadFrameNumber[i] += (startFrameIndex - 1);
|
||||
|
||||
//update current packet
|
||||
eiger_packet_footer_t* packetBuffer_footer = (eiger_packet_footer_t*)(packetBuffer[i] + footerOffset + HEADER_SIZE_NUM_TOT_PACKETS);
|
||||
//packet number
|
||||
currentPacketNumber[i] = *( (uint16_t*) packetBuffer_footer->packetNumber);
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN,"Fifo %d: Packet has fnum %d, pnum %d, last_packet %d, pnum_offset\n",
|
||||
i,threadFrameNumber[i],currentPacketNumber[i],lastPacketNumber[i],frameBufferoffset[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//dummy not done -----------------------------
|
||||
if(numPackets[i] == dummyPacketValue){
|
||||
//calculate number of missing packets-----------------------------------------------------
|
||||
numberofMissingPackets[i] = 0;
|
||||
#ifdef DEBUG4
|
||||
cprintf(RED, "Fifo %d: Dummy packet: Adding missing packets to the last frame\n", i);
|
||||
#endif
|
||||
numberofMissingPackets[i] = (LAST_PACKET_VALUE - lastPacketNumber[i]);
|
||||
threadFrameNumber[i] = dummyPacketValue;
|
||||
}
|
||||
|
||||
/**check if next frame lastpacket number is actually +1*/
|
||||
//wrong packet & correct (dummy (not full) or from future packet))--------------------------------
|
||||
else{// if ((threadFrameNumber[i] != presentFrameNumber) ||(currentPacketNumber[i] != lastPacketNumber[i] + 1)){
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN,"Fifo %d: Wrong Packet has fnum %d, (firmware fnum %d), pnum %d, last_packet %d, pnum_offset %d\n",
|
||||
if(numPackets[i] == dummyPacketValue)
|
||||
cprintf(GREEN, "Fifo %d: Dummy packet: Adding missing packets to the last frame\n", i);
|
||||
else{
|
||||
cprintf(GREEN,"Fifo %d: fnum %d, (FW_fnum %d), pnum %d, last_pnum %d, pnum_offset %d\n"
|
||||
"Fifo %d: Add missing packets to the right fnum %d\n",
|
||||
i,presentFrameNumber[i],(uint32_t)(*( (uint64_t*) packetBuffer_footer)),
|
||||
*( (uint16_t*) packetBuffer_footer->packetNumber),lastPacketNumber[i],frameBufferoffset[i] );
|
||||
cprintf(RED,"Fifo %d: Add missing packets to the right fnum %d\n",
|
||||
*( (uint16_t*) packetBuffer_footer->packetNumber),lastPacketNumber[i],frameBufferoffset[i],
|
||||
i,presentFrameNumber);
|
||||
#endif
|
||||
if(threadFrameNumber[i] != presentFrameNumber)
|
||||
numberofMissingPackets[i] = (LAST_PACKET_VALUE - lastPacketNumber[i]);
|
||||
else
|
||||
numberofMissingPackets[i] = (currentPacketNumber[i] - lastPacketNumber[i] - 1);
|
||||
}
|
||||
#endif
|
||||
if((numPackets[i] == dummyPacketValue) || (threadFrameNumber[i] != presentFrameNumber))
|
||||
numberofMissingPackets[i] = (LAST_PACKET_VALUE - lastPacketNumber[i]);
|
||||
else
|
||||
numberofMissingPackets[i] = (currentPacketNumber[i] - lastPacketNumber[i] - 1);
|
||||
|
||||
|
||||
|
||||
//add missing packets
|
||||
//add missing packets---------------------------------------------------------------------
|
||||
for(int j=0;j<numberofMissingPackets[i];++j){
|
||||
frameBuffer[frameBufferoffset[i]] = blankframe[blankoffset];
|
||||
eiger_packet_header_t* frameBuffer_header = (eiger_packet_header_t*) frameBuffer[frameBufferoffset[i]];
|
||||
if (*( (uint16_t*) frameBuffer_header->missingPacket)!= missingPacketValue){
|
||||
blankframe_header = (eiger_packet_header_t*) blankframe[blankoffset];
|
||||
cprintf(BG_RED, "Fifo %d: Missing Packet Error: Adding blank packets mismatch "
|
||||
"pnum_offset %d, fnum_thread %d, missingpacket_buffer 0x%x, missingpacket_blank 0x%x\n",
|
||||
i,frameBufferoffset[i],threadFrameNumber[i],
|
||||
"pnum_offset %d, pnum %d, fnum_thread %d, missingpacket_buffer 0x%x, missingpacket_blank 0x%x\n",
|
||||
i,frameBufferoffset[i],currentPacketNumber[i],threadFrameNumber[i],
|
||||
*( (uint16_t*) frameBuffer_header->missingPacket),
|
||||
*( (uint16_t*) blankframe_header->missingPacket));
|
||||
exit(-1);
|
||||
}else{
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN, "Fifo %d: Missing Packet Adding blank packets success "
|
||||
"pnum_offset %d, fnum_thread %d, missingpacket_buffer 0x%x\n",
|
||||
i,frameBufferoffset[i],threadFrameNumber[i],
|
||||
cprintf(RED, "Fifo %d: Missing Packet: Adding blank packets success "
|
||||
"pnum_offset %d, pnum %d, fnum_thread %d, missingpacket_buffer 0x%x\n",
|
||||
i,frameBufferoffset[i],currentPacketNumber[i],threadFrameNumber[i],
|
||||
*( (uint16_t*) frameBuffer_header->missingPacket));
|
||||
#endif
|
||||
frameBufferoffset[i]++;
|
||||
blankoffset++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if((numPackets[i] == dummyPacketValue) ||(threadFrameNumber[i] != presentFrameNumber)){
|
||||
//set fullframe and dont let fifo pop over it
|
||||
fullframe[i] = true;
|
||||
//missed packets/future packet: do not pop over and determine fullframe--------------------
|
||||
if(numberofMissingPackets[i]){
|
||||
popReady[i] = false;
|
||||
if((numPackets[i] == dummyPacketValue) ||(threadFrameNumber[i] != presentFrameNumber))
|
||||
fullframe[i] = true;
|
||||
else{
|
||||
fullframe[i] = false;
|
||||
//update last packet
|
||||
lastPacketNumber[i] = currentPacketNumber[i] - 1;
|
||||
}
|
||||
if(threadFrameNumber[i] != presentFrameNumber)
|
||||
threadFrameNumber[i] = presentFrameNumber;
|
||||
numMissingPackets += numberofMissingPackets[i];
|
||||
}
|
||||
//add current packet
|
||||
if(threadFrameNumber[i] == presentFrameNumber){
|
||||
|
||||
//no missed packet: add current packet--------------------------------------------------------------
|
||||
else{
|
||||
if(currentPacketNumber[i] != (uint32_t)(frameBufferoffset[i]-(i*packetsPerFrame/numberofListeningThreads))+1){
|
||||
cprintf(BG_RED, "Fifo %d: Correct Packet Error:Adding current packet mismatch "
|
||||
"pnum_offset %d,pnum %d fnum %d, (firmware fnum %d)\n",
|
||||
cprintf(BG_RED, "Fifo %d: Correct Packet Offset Error:Adding current packet mismatch "
|
||||
"pnum_offset %d,pnum %d fnum_thread %d, (FW_fnum %d)\n",
|
||||
i,frameBufferoffset[i],currentPacketNumber[i],
|
||||
threadFrameNumber[i],(uint32_t)(*( (uint64_t*) packetBuffer_footer)));
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
frameBuffer[frameBufferoffset[i]] = packetBuffer[i] + HEADER_SIZE_NUM_TOT_PACKETS;
|
||||
tempframe_header = (eiger_packet_header_t*) tempbuffer[tempoffset[i]];
|
||||
tempframe_footer = (eiger_packet_footer_t*) (tempbuffer[tempoffset[i]] + footer_offset);
|
||||
#ifdef DEBUG4
|
||||
eiger_packet_header_t* frameBuffer_header = (eiger_packet_header_t*) frameBuffer[frameBufferoffset[i]];
|
||||
eiger_packet_footer_t* frameBuffer_footer = (eiger_packet_footer_t*) (frameBuffer[frameBufferoffset[i]] + footer_offset);
|
||||
cprintf(GREEN, "Fifo %d: Current Packet added success:"
|
||||
"pnum_offset %d, pnum %d, fnum_thread %d, missingpacket_buffer 0x%x\n",
|
||||
i,frameBufferoffset[i],currentPacketNumber[i],threadFrameNumber[i],
|
||||
*( (uint16_t*) frameBuffer_header->missingPacket));
|
||||
#endif
|
||||
frameBufferoffset[i]++;
|
||||
//update last packet
|
||||
lastPacketNumber[i] = currentPacketNumber[i];
|
||||
popReady[i] = true;
|
||||
fullframe[i] = false;
|
||||
if(currentPacketNumber[i] == LAST_PACKET_VALUE){
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN, "Fifo %d: Got last packet\n",i);
|
||||
#endif
|
||||
popReady[i] = false;
|
||||
fullframe[i] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//full frame
|
||||
if(fullframe[0] && fullframe[1]){
|
||||
currentPacketNumber = presentFrameNumber;
|
||||
numTotMissingPacketsInFile += numMissingPackets;
|
||||
numTotMissingPackets += numMissingPackets;
|
||||
#ifdef FNUM_DEBUG
|
||||
cprintf(GREEN,"**fnum:%d**\n",currframenum);
|
||||
#endif
|
||||
#ifdef MISSINGP_DEBUG
|
||||
if(numberofMissingPackets[0])
|
||||
cprintf(RED, "Fifo 0 missing packets %d for fnum %d\n",numberofMissingPackets[0],currentPacketNumber);
|
||||
if(numberofMissingPackets[1])
|
||||
cprintf(RED, "Fifo 1 missing packets%d for fnum %d\n",numberofMissingPackets[1],currentPacketNumber);
|
||||
if(numMissingPackets){
|
||||
cprintf(RED, "Total missing packets %d for fnum %d\n",numMissingPackets,currentPacketNumber);
|
||||
for (int j=0;j<packetsPerFrame;++j){
|
||||
eiger_packet_header_t* frameBuffer_header = (eiger_packet_header_t*) frameBuffer[j];
|
||||
if (*( (uint16_t*) frameBuffer_header->missingPacket)==missingPacketValue)
|
||||
cprintf(RED,"Found missing packet at pnum %d\n",j);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(threadFrameNumber[i] != presentFrameNumber)
|
||||
threadFrameNumber[i] = presentFrameNumber;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//write and copy to gui
|
||||
handleWithoutDataCompression(ithread,frameBuffer,packetsPerFrame);
|
||||
|
||||
//freeing
|
||||
for(int j=0;j<toFreePointersOffset[0];++j){
|
||||
while(!fifoFree[0]->push(toFreePointers[j]));
|
||||
#ifdef FIFODEBUG
|
||||
cprintf(GREEN,"Fifo 0: Writing_Thread freed: pushed into fifofree %p\n",ithread, (void*)(toFreePointers[j]));
|
||||
#endif
|
||||
}
|
||||
for(int j=(packetsPerFrame/numberofListeningThreads);j<toFreePointersOffset[1];++j){
|
||||
while(!fifoFree[1]->push(toFreePointers[j]));
|
||||
#ifdef FIFODEBUG
|
||||
cprintf(GREEN,"Fifo 1: Writing_Thread freed: pushed into fifofree %p\n",ithread, (void*)(toFreePointers[j]));
|
||||
#endif
|
||||
}
|
||||
#ifdef DEBUG4
|
||||
cprintf(GREEN,"Writing_Thread: finished freeing\n");
|
||||
#endif
|
||||
|
||||
|
||||
//reset a few stuff
|
||||
presentFrameNumber++;
|
||||
for(int i=0; i<numberofListeningThreads; ++i){
|
||||
fullframe[i] = false;
|
||||
//to reset to get new frame: not dummy and the last packet
|
||||
if((numPackets[i] != dummyPacketValue) && (currentPacketNumber[i] == LAST_PACKET_VALUE))
|
||||
popReady[i] = true;
|
||||
frameBufferoffset[i] = (i*packetsPerFrame/numberofListeningThreads);
|
||||
toFreePointersOffset[i] = (i*packetsPerFrame/numberofListeningThreads);
|
||||
blankoffset = 0;
|
||||
lastPacketNumber[i] = 0;
|
||||
currentPacketNumber[i] = 0;
|
||||
numberofMissingPackets[i] = 0;
|
||||
}
|
||||
|
||||
numMissingPackets += numberofMissingPackets[i];
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG4
|
||||
for(int i=0;i<numberofListeningThreads;i++){
|
||||
eiger_packet_footer_t* packetBuffer_footer = (eiger_packet_footer_t*)(packetBuffer[i] + footerOffset + HEADER_SIZE_NUM_TOT_PACKETS);
|
||||
cprintf(GREEN,"Fifo %d:End of loop popready %d, fnum %d, pnum %d, add0x%p\n",
|
||||
i,popReady[i],(uint32_t)(*( (uint64_t*) packetBuffer_footer)),
|
||||
*( (uint16_t*) packetBuffer_footer->packetNumber), (void*)(packetBuffer[i]));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -2646,244 +2712,3 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int UDPStandardImplementation::startWriting(){
|
||||
FILE_LOG(logDEBUG1) << __AT__ << " called";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
eiger_packet_footer_t* wbuf_footer=0;
|
||||
eiger_packet_header_t* tempframe_header=0;
|
||||
eiger_packet_footer_t* tempframe_footer=0;
|
||||
|
||||
|
||||
|
||||
|
||||
while(1){
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
while((1<<ithread)&writerthreads_mask){
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(myDetectorType == EIGER){
|
||||
|
||||
|
||||
|
||||
//NOT FULL FRAME
|
||||
if(!fullframe[0] || !fullframe[1]){
|
||||
for(i=0;i<numListeningThreads;++i){
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//not a full frame
|
||||
if(!fullframe[i]){
|
||||
|
||||
|
||||
|
||||
|
||||
//CORRECT FRAME - continue building frame
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
tempbuffer[tempoffset[i]] = wbuf[i] + HEADER_SIZE_NUM_TOT_PACKETS;
|
||||
tempframe_header = (eiger_packet_header_t*) tempbuffer[tempoffset[i]];
|
||||
tempframe_footer = (eiger_packet_footer_t*) (tempbuffer[tempoffset[i]] + footer_offset);
|
||||
#ifdef EIGER_DEBUG3
|
||||
cprintf(GREEN,"**fifo:%d currentpacketheader: %d tempoffset:%d\n",
|
||||
i,*( (uint16_t*) tempframe_footer->packetnum),tempoffset[i]);
|
||||
#endif
|
||||
if(*( (uint16_t*) tempframe_footer->packetnum)!= (tempoffset[i]-(i*packetsPerFrame/numListeningThreads))+1){
|
||||
cprintf(BG_RED, "pnum mismatch num4 earlier! i:%d pnum:%d pnum orig:%d fnum:%d add:0x%p\n",
|
||||
i,*( (uint16_t*) tempframe_footer->packetnum),*( (uint16_t*) wbuf_footer->packetnum),
|
||||
tempframenum[i],(void*)(tempbuffer[tempoffset[i]]));
|
||||
exit(-1);
|
||||
}
|
||||
#ifdef PADDING
|
||||
cprintf(GREEN, "normal packet i:%d pnum:%d fnum:%d missingpacket:0x%x add:0x%x\n",
|
||||
i,tempoffset[i],tempframenum[i],
|
||||
*( (uint16_t*) tempframe_header->missingpacket),
|
||||
(void*)(tempbuffer[tempoffset[i]]));
|
||||
#endif
|
||||
tempoffset[i] ++;
|
||||
//update last packet
|
||||
lastpacketheader[i] = currentpacketheader[i];
|
||||
popready[i] = true;
|
||||
//last frame got, this will save time and also for last frames, it doesnt wait for stop receiver
|
||||
if(currentpacketheader[i] == LAST_PACKET_VALUE){
|
||||
#ifdef EIGER_DEBUG3
|
||||
cprintf(GREEN, "Got last packet\n");
|
||||
#endif
|
||||
fullframe[i] = true;
|
||||
popready[i] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//FULL FRAME
|
||||
if(fullframe[0] && fullframe[1]){
|
||||
|
||||
//determine frame number
|
||||
if(tempframenum[0] != tempframenum[1])
|
||||
cprintf(RED,"Frame numbers mismatch!!! %d %d\n",tempframenum[0],tempframenum[1]);
|
||||
currframenum = tempframenum[0];
|
||||
numMissingPackets += (numberofmissingpackets[0]+numberofmissingpackets[1]);
|
||||
numTotMissingPacketsInFile += numMissingPackets;
|
||||
numTotMissingPackets += numMissingPackets;
|
||||
#ifdef EIGER_DEBUG2
|
||||
cprintf(GREEN,"**fnum:%d**\n",currframenum);
|
||||
#endif
|
||||
#ifdef EIGER_DEBUG3
|
||||
if(numberofmissingpackets[0])
|
||||
cprintf(RED, "fifo 0 missing packets:%d fnum:%d\n",numberofmissingpackets[0],currframenum);
|
||||
if(numberofmissingpackets[1])
|
||||
cprintf(RED, "fifo 1 missing packets:%d fnum:%d\n",numberofmissingpackets[1],currframenum);
|
||||
if(numMissingPackets){
|
||||
cprintf(RED, "numMissingPackets:%d fnum:%d\n",numMissingPackets,currframenum);
|
||||
|
||||
for (j=0;j<packetsPerFrame;++j){
|
||||
tempframe_header = (eiger_packet_header_t*) tempbuffer[j];
|
||||
if (*( (uint16_t*) tempframe_header->missingpacket)==missingPacketValue)
|
||||
cprintf(RED,"found the missing packet at pnum:%d\n",j);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//write and copy to gui
|
||||
handleWithoutDataCompression(ithread,tempbuffer,packetsPerFrame);
|
||||
|
||||
|
||||
//freeing
|
||||
for(j=0;j<tofreeoffset[0];++j){
|
||||
while(!fifoFree[0]->push(tofree[j]));
|
||||
#ifdef FIFO_DEBUG
|
||||
cprintf(GREEN,"%d writer freed pushed into fifofree %x for listener %d\n",ithread, (void*)(tofree[j]),0);
|
||||
#endif
|
||||
}
|
||||
for(j=(packetsPerFrame/numListeningThreads);j<tofreeoffset[1];++j){
|
||||
while(!fifoFree[1]->push(tofree[j]));
|
||||
#ifdef FIFO_DEBUG
|
||||
cprintf(GREEN,"%d writer freed pushed into fifofree %x for listener %d\n",ithread, (void*)(tofree[j]),1);
|
||||
#endif
|
||||
}
|
||||
#ifdef VERYDEBUG
|
||||
cprintf(GREEN,"finished freeing\n");
|
||||
#endif
|
||||
|
||||
|
||||
//reset a few stuff
|
||||
presentframenum = tempframenum[0]+1;
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
fullframe[i] = false;
|
||||
//no dummy packet and is the last packet (if not last packet, next frame, dont pop over it)
|
||||
if((numpackets[i]) && (currentpacketheader[i] == LAST_PACKET_VALUE))
|
||||
popready[i] = true;
|
||||
/*cprintf(GREEN,"popready[%d]:%d\n",i,popready[i]);*/
|
||||
tempoffset[i] = (i*packetsPerFrame/numListeningThreads);
|
||||
tofreeoffset[i] = (i*packetsPerFrame/numListeningThreads);
|
||||
blankoffset = 0;
|
||||
lastpacketheader[i] = 0;
|
||||
currentpacketheader[i] = 0;
|
||||
numberofmissingpackets[i] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
#ifdef EIGER_DEBUG3
|
||||
for(int i=0;i<numListeningThreads;i++){
|
||||
wbuf_footer = (eiger_packet_footer_t*)(wbuf[i] + footer_offset + HEADER_SIZE_NUM_TOT_PACKETS);
|
||||
cprintf(GREEN," end of loop popready[%d]:%d add:0x%x\n",i,popready[i],(void*)(wbuf[i]));
|
||||
cprintf(GREEN,"tempframenum[%d]:%d\n",i,(uint32_t)(*( (uint64_t*) wbuf_footer)));
|
||||
cprintf(GREEN,"packetnum[%d]:%d\n",i,*( (uint16_t*) wbuf_footer->packetnum));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -166,20 +166,20 @@ int64_t slsReceiver::getReceiverVersion(){
|
||||
}
|
||||
|
||||
|
||||
void slsReceiver::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){
|
||||
void slsReceiver::registerCallBackStartAcquisition(int (*func)(char*, char*,uint64_t, uint32_t, void*),void *arg){
|
||||
//tcpipInterface
|
||||
udp_interface->registerCallBackStartAcquisition(func,arg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void slsReceiver::registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){
|
||||
void slsReceiver::registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg){
|
||||
//tcpipInterface
|
||||
udp_interface->registerCallBackAcquisitionFinished(func,arg);
|
||||
}
|
||||
|
||||
|
||||
void slsReceiver::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){
|
||||
void slsReceiver::registerCallBackRawDataReady(void (*func)(uint64_t, char*, uint32_t, FILE*, char*, void*),void *arg){
|
||||
//tcpipInterface
|
||||
udp_interface->registerCallBackRawDataReady(func,arg);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "slsReceiverUsers.h"
|
||||
#include "slsReceiver.h"
|
||||
|
||||
|
||||
#include <signal.h> //SIGINT
|
||||
#include <stdlib.h> //EXIT
|
||||
|
||||
@ -401,6 +402,7 @@ int slsReceiverTCPIPInterface::set_detector_type(){
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//#ifdef VERBOSE
|
||||
if(ret!=FAIL)
|
||||
cout << "detector type" << dr << endl;
|
||||
@ -432,7 +434,7 @@ int slsReceiverTCPIPInterface::set_detector_type(){
|
||||
|
||||
int slsReceiverTCPIPInterface::set_file_name() {
|
||||
ret=OK;
|
||||
char* retval[MAX_STR_LENGTH] = NULL;
|
||||
char* retval = NULL;
|
||||
char defaultVal[MAX_STR_LENGTH] = "";
|
||||
char fName[MAX_STR_LENGTH];
|
||||
strcpy(mess,"Could not set file name");
|
||||
@ -457,7 +459,7 @@ int slsReceiverTCPIPInterface::set_file_name() {
|
||||
}
|
||||
else{
|
||||
receiverBase->setFileName(fName);
|
||||
retval = receiveBase->getFileName();
|
||||
retval = receiverBase->getFileName();
|
||||
if(retval == NULL)
|
||||
ret = FAIL;
|
||||
}
|
||||
@ -526,8 +528,8 @@ int slsReceiverTCPIPInterface::set_file_dir() {
|
||||
}
|
||||
else{
|
||||
receiverBase->setFilePath(fPath);
|
||||
retval = receiveBase->getFilePath();
|
||||
if(reval == NULL){
|
||||
retval = receiverBase->getFilePath();
|
||||
if(retval == NULL){
|
||||
ret = FAIL;
|
||||
strcpy(mess,"receiver file path does not exist\n");
|
||||
}
|
||||
@ -741,8 +743,8 @@ int slsReceiverTCPIPInterface::setup_udp(){
|
||||
//set up udp port
|
||||
sscanf(args[1],"%d",&udpport);
|
||||
sscanf(args[2],"%d",&udpport2);
|
||||
receiverBase->setUDPPortNo(udpport);
|
||||
receiverBase->setUDPPortNo2(udpport2);
|
||||
receiverBase->setUDPPortNumber(udpport);
|
||||
receiverBase->setUDPPortNumber2(udpport2);
|
||||
//setup udpip
|
||||
//get ethernet interface or IP to listen to
|
||||
cout << "Ethernet interface is " << args[0] << endl;
|
||||
|
@ -29,18 +29,18 @@ int64_t slsReceiverUsers::getReceiverVersion(){
|
||||
}
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){
|
||||
void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(char*, char*,uint64_t, uint32_t, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackStartAcquisition(func,arg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){
|
||||
void slsReceiverUsers::registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackAcquisitionFinished(func,arg);
|
||||
}
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){
|
||||
void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(uint64_t, char*, uint32_t, FILE*, char*, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackRawDataReady(func,arg);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user