mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 05:17:13 +02:00
only missing data left to be handled in zmqthread in receiver
This commit is contained in:
@ -515,9 +515,10 @@ private:
|
|||||||
* @param wbuffer writer buffer
|
* @param wbuffer writer buffer
|
||||||
* @param framenumber reference to the frame number
|
* @param framenumber reference to the frame number
|
||||||
* @param packetnumber reference to the packet number
|
* @param packetnumber reference to the packet number
|
||||||
|
* @param subframenumber reference to the subframe number
|
||||||
* @return OK or FAIL
|
* @return OK or FAIL
|
||||||
*/
|
*/
|
||||||
int getFrameandPacketNumber(int ithread, char* wbuffer, uint64_t &framenumber, uint32_t &packetnumber);
|
int getFrameandPacketNumber(int ithread, char* wbuffer, uint64_t &framenumber, uint32_t &packetnumber, uint32_t &subframenumber);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find offset upto this frame number and write it to file
|
* Find offset upto this frame number and write it to file
|
||||||
|
@ -568,23 +568,18 @@ uint32_t UDPStandardImplementation::setDataStreamEnable(const uint32_t enable){
|
|||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
|
|
||||||
cout<<"************datasend:"<<enable<<endl;
|
|
||||||
|
|
||||||
int olddatasend = dataStreamEnable;
|
int olddatasend = dataStreamEnable;
|
||||||
dataStreamEnable = enable;
|
dataStreamEnable = enable;
|
||||||
//if there is a change
|
//if there is a change
|
||||||
if(olddatasend != dataStreamEnable){
|
if(olddatasend != dataStreamEnable){
|
||||||
cout<<"***Going to destroy data callback threads and create!!!"<<endl;
|
|
||||||
if(zmqThreadStarted)
|
if(zmqThreadStarted)
|
||||||
createDataCallbackThreads(true);
|
createDataCallbackThreads(true);
|
||||||
cout<<"***datacallback threads destroyed"<<endl;
|
|
||||||
|
|
||||||
if(dataStreamEnable){
|
if(dataStreamEnable){
|
||||||
numberofDataCallbackThreads = MAX_NUMBER_OF_LISTENING_THREADS;
|
numberofDataCallbackThreads = MAX_NUMBER_OF_LISTENING_THREADS;
|
||||||
if(createDataCallbackThreads() == FAIL){
|
if(createDataCallbackThreads() == FAIL){
|
||||||
cprintf(BG_RED,"Error: Could not create data callback threads\n");
|
cprintf(BG_RED,"Error: Could not create data callback threads\n");
|
||||||
}
|
}
|
||||||
cout<<"data call back threads created"<<endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1245,12 +1240,12 @@ int UDPStandardImplementation::createDataCallbackThreads(bool destroy){
|
|||||||
}
|
}
|
||||||
killAllDataCallbackThreads = false;
|
killAllDataCallbackThreads = false;
|
||||||
zmqThreadStarted = false;
|
zmqThreadStarted = false;
|
||||||
FILE_LOG(logDEBUG) << "Info: Data Callback thread(s) destroyed";
|
FILE_LOG(logINFO) << "Data Callback thread(s) destroyed";
|
||||||
}
|
}
|
||||||
|
|
||||||
//create
|
//create
|
||||||
else{
|
else{
|
||||||
FILE_LOG(logDEBUG) << "Info: Creating Data Callback Thread(s)";
|
FILE_LOG(logINFO) << "Creating Data Callback Thread(s)";
|
||||||
|
|
||||||
//reset current index
|
//reset current index
|
||||||
currentThreadIndex = -1;
|
currentThreadIndex = -1;
|
||||||
@ -1296,12 +1291,12 @@ int UDPStandardImplementation::createListeningThreads(bool destroy){
|
|||||||
}
|
}
|
||||||
killAllListeningThreads = false;
|
killAllListeningThreads = false;
|
||||||
threadStarted = false;
|
threadStarted = false;
|
||||||
FILE_LOG(logDEBUG) << "Info: Listening thread(s) destroyed";
|
FILE_LOG(logINFO) << "Listening thread(s) destroyed";
|
||||||
}
|
}
|
||||||
|
|
||||||
//create
|
//create
|
||||||
else{
|
else{
|
||||||
FILE_LOG(logDEBUG) << "Info: Creating Listening Thread(s)";
|
FILE_LOG(logINFO) << "Creating Listening Thread(s)";
|
||||||
|
|
||||||
//reset current index
|
//reset current index
|
||||||
currentThreadIndex = -1;
|
currentThreadIndex = -1;
|
||||||
@ -1348,12 +1343,12 @@ int UDPStandardImplementation::createWriterThreads(bool destroy){
|
|||||||
}
|
}
|
||||||
killAllWritingThreads = false;
|
killAllWritingThreads = false;
|
||||||
threadStarted = false;
|
threadStarted = false;
|
||||||
FILE_LOG(logDEBUG) << "Info: Writer thread(s) destroyed";
|
FILE_LOG(logINFO) << "Writer thread(s) destroyed";
|
||||||
}
|
}
|
||||||
|
|
||||||
//create threads
|
//create threads
|
||||||
else{
|
else{
|
||||||
FILE_LOG(logDEBUG) << "Info: Creating Writer Thread(s)";
|
FILE_LOG(logINFO) << "Creating Writer Thread(s)";
|
||||||
|
|
||||||
//reset current index
|
//reset current index
|
||||||
currentThreadIndex = -1;
|
currentThreadIndex = -1;
|
||||||
@ -1667,7 +1662,6 @@ void* UDPStandardImplementation::startWritingThread(void* this_pointer){
|
|||||||
|
|
||||||
|
|
||||||
void UDPStandardImplementation::startDataCallback(){
|
void UDPStandardImplementation::startDataCallback(){
|
||||||
cprintf(MAGENTA,"start data call back thread started %d\n",currentThreadIndex);
|
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
//set current thread value index
|
//set current thread value index
|
||||||
@ -1693,12 +1687,15 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
int currentfnum = -1;
|
int currentfnum = -1;
|
||||||
uint64_t fnum = 0;
|
uint64_t fnum = 0;
|
||||||
uint32_t pnum = 0;
|
uint32_t pnum = 0;
|
||||||
|
uint32_t snum = 0;
|
||||||
|
|
||||||
bool randomSendNow = true;
|
bool randomSendNow = true;
|
||||||
|
|
||||||
|
|
||||||
void *context = zmq_ctx_new();
|
void *context = zmq_ctx_new();
|
||||||
void *zmqsocket = zmq_socket(context, ZMQ_PUSH); // create a publisher
|
void *zmqsocket = zmq_socket(context, ZMQ_PUSH); // create a publisher
|
||||||
|
int val = -1;
|
||||||
|
//zmq_setsockopt(zmq_socket, ZMQ_LINGER, &val,sizeof(val)); // wait for the unsent packets before closing socket
|
||||||
zmq_bind(zmqsocket,hostName); // bind
|
zmq_bind(zmqsocket,hostName); // bind
|
||||||
//let calling function know thread started and obtained current (after sockets created)
|
//let calling function know thread started and obtained current (after sockets created)
|
||||||
if(!zmqThreadStarted)
|
if(!zmqThreadStarted)
|
||||||
@ -1706,6 +1703,11 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
|
|
||||||
const char *type = "float64";
|
const char *type = "float64";
|
||||||
const char *shape= "[1024, 512]";
|
const char *shape= "[1024, 512]";
|
||||||
|
const char *jsonFmt ="{\"htype\":[\"chunk-1.0\"], \"type\":\"%s\", \"shape\":%s, \"acqIndex\":%d, \"fIndex\":%d, \"subfnum\":%d, \"fname\":\"%s\"}";
|
||||||
|
char buf[1000];
|
||||||
|
int acquisitionIndex = -1;
|
||||||
|
int frameIndex = -1;
|
||||||
|
int subframeIndex = -1;
|
||||||
|
|
||||||
/* inner loop - loop for each buffer */
|
/* inner loop - loop for each buffer */
|
||||||
//until mask reset (dummy pcaket got by writer)
|
//until mask reset (dummy pcaket got by writer)
|
||||||
@ -1713,28 +1715,22 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
|
|
||||||
//let the writer thread continue, while we process carry over if any
|
//let the writer thread continue, while we process carry over if any
|
||||||
sem_post(&writerGuiSemaphore[ithread]);
|
sem_post(&writerGuiSemaphore[ithread]);
|
||||||
if(!ithread) cout<<"*** posted writerguisemiphore (callback)"<<endl;
|
|
||||||
//wait for receiver to send more data
|
//wait for receiver to send more data
|
||||||
sem_wait(&dataCallbackWriterSemaphore[ithread]);
|
sem_wait(&dataCallbackWriterSemaphore[ithread]);
|
||||||
|
|
||||||
//everything is done
|
//everything is done
|
||||||
if(guiNumPackets[ithread] == dummyPacketValue){
|
if(guiNumPackets[ithread] == dummyPacketValue){
|
||||||
|
|
||||||
|
|
||||||
/**suing this in clientzmq_msg_more,
|
/**suing this in clientzmq_msg_more,
|
||||||
* in serve use zmq_msg_send (&message, sender, ZMQ_SNDMORE); and 0 for last packet, but better to check lengt*/
|
* in serve use zmq_msg_send (&message, sender, ZMQ_SNDMORE); and 0 for last packet, but better to check lengt*/
|
||||||
/*if (checkJoinThread()){for different scans
|
/*if (checkJoinThread()){for different scans
|
||||||
break;
|
break;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
ostringstream header;
|
/*send half frames from before if any */
|
||||||
header << "{\"htype\":[\"chunk-1.0\"], "
|
|
||||||
<< "\"type\":" << "\"" << type << "\", "
|
|
||||||
<< "\"shape\":" << shape
|
|
||||||
<< "}";
|
|
||||||
//cout<<ithread << "header:"<< header.str()<<endl;
|
|
||||||
//send header
|
//send header
|
||||||
zmq_send(zmqsocket, header.str().c_str(), header.str().length(), ZMQ_SNDMORE);
|
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
|
||||||
|
zmq_send(zmqsocket, buf,len, ZMQ_SNDMORE);
|
||||||
//send data
|
//send data
|
||||||
zmq_send (zmqsocket, "end", 3, 0);
|
zmq_send (zmqsocket, "end", 3, 0);
|
||||||
|
|
||||||
@ -1742,8 +1738,6 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
dataCallbackThreadsMask^=(1<<ithread);
|
dataCallbackThreadsMask^=(1<<ithread);
|
||||||
pthread_mutex_unlock(&statusMutex);
|
pthread_mutex_unlock(&statusMutex);
|
||||||
|
|
||||||
sem_post(&writerGuiSemaphore[ithread]);
|
|
||||||
if(!ithread) cout<<"*** posted writerguisemiphore (callback dummy)"<<endl;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1769,7 +1763,7 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
while(offset < size){
|
while(offset < size){
|
||||||
|
|
||||||
//until getting frame number is not error
|
//until getting frame number is not error
|
||||||
while((size>0) && (getFrameandPacketNumber(ithread, latestData[ithread]+offset, fnum, pnum)==FAIL)){
|
while((size>0) && (getFrameandPacketNumber(ithread, latestData[ithread]+offset, fnum, pnum,snum)==FAIL)){
|
||||||
offset+= onePacketSize;
|
offset+= onePacketSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1780,24 +1774,23 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
//new frame
|
//new frame
|
||||||
if(currentfnum==-1){
|
if(currentfnum==-1){
|
||||||
currentfnum = fnum;
|
currentfnum = fnum;
|
||||||
|
//update frame details
|
||||||
|
frameIndex = fnum;
|
||||||
|
acquisitionIndex = fnum - startAcquisitionIndex;
|
||||||
|
if(dynamicRange == 32) subframeIndex = snum;
|
||||||
}
|
}
|
||||||
|
|
||||||
//last packet
|
//last packet
|
||||||
if(pnum == packetsPerFrame){
|
if(pnum == packetsPerFrame){
|
||||||
memcpy(buffer+((pnum-1)*oneDataSize), latestData[ithread]+offset+8,oneDataSize);
|
memcpy(buffer+((pnum-1)*oneDataSize), latestData[ithread]+offset+8,oneDataSize);
|
||||||
offset+= onePacketSize;
|
offset+= onePacketSize;
|
||||||
ostringstream header;
|
|
||||||
header << "{\"htype\":[\"chunk-1.0\"], "
|
|
||||||
<< "\"type\":" << "\"" << type << "\", "
|
|
||||||
<< "\"shape\":" << shape
|
|
||||||
<< "}";
|
|
||||||
//cout<<ithread << "header:"<< header.str()<<endl;
|
|
||||||
//send header
|
//send header
|
||||||
zmq_send(zmqsocket, header.str().c_str(), header.str().length(), ZMQ_SNDMORE);
|
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
|
||||||
|
zmq_send(zmqsocket, buf,len, ZMQ_SNDMORE);
|
||||||
//send data
|
//send data
|
||||||
zmq_send(zmqsocket, buffer, oneframesize, 0);
|
zmq_send(zmqsocket, buffer, oneframesize, 0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cprintf(BLUE,"%d sent (last packet)\n",ithread);
|
if(!ithread)cprintf(BLUE,"%d sent (last packet)\n",ithread);
|
||||||
#endif
|
#endif
|
||||||
//start clock after sending
|
//start clock after sending
|
||||||
if(!frameToGuiFrequency){
|
if(!frameToGuiFrequency){
|
||||||
@ -1811,18 +1804,13 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
else {
|
else {
|
||||||
//next frame
|
//next frame
|
||||||
if(fnum > currentfnum){
|
if(fnum > currentfnum){
|
||||||
ostringstream header;
|
|
||||||
header << "{\"htype\":[\"chunk-1.0\"], "
|
|
||||||
<< "\"type\":" << "\"" << type << "\", "
|
|
||||||
<< "\"shape\":" << shape
|
|
||||||
<< "}";
|
|
||||||
//cout<<ithread << "header:"<< header.str()<<endl;
|
|
||||||
//send header
|
//send header
|
||||||
zmq_send(zmqsocket, header.str().c_str(), header.str().length(), ZMQ_SNDMORE);
|
int len = sprintf(buf,jsonFmt,type,shape, acquisitionIndex, frameIndex, subframeIndex,completeFileName[ithread]);
|
||||||
|
zmq_send(zmqsocket, buf,len, ZMQ_SNDMORE);
|
||||||
//send data
|
//send data
|
||||||
zmq_send(zmqsocket, buffer, oneframesize, 0);
|
zmq_send(zmqsocket, buffer, oneframesize, 0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
cprintf(BLUE,"%d sent (last packet)\n",ithread);
|
cprintf(BLUE,"%d sent (last packet of previous frame)\n",ithread);
|
||||||
#endif
|
#endif
|
||||||
//start clock after sending
|
//start clock after sending
|
||||||
if(!frameToGuiFrequency){
|
if(!frameToGuiFrequency){
|
||||||
@ -1843,16 +1831,16 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
|
|
||||||
}/*--end of loop for each buffer (inner loop)*/
|
}/*--end of loop for each buffer (inner loop)*/
|
||||||
|
|
||||||
|
//free resources
|
||||||
|
delete[] buffer;
|
||||||
|
zmq_unbind(zmqsocket, hostName); /* will this be too soon and cut the sending*/
|
||||||
|
zmq_close(zmqsocket);
|
||||||
|
zmq_ctx_destroy(context);
|
||||||
|
|
||||||
//end of acquisition, wait for next acquisition/change of parameters
|
//end of acquisition, wait for next acquisition/change of parameters
|
||||||
sem_wait(&dataCallbackSemaphore[ithread]);
|
sem_wait(&dataCallbackSemaphore[ithread]);
|
||||||
|
|
||||||
//free resources (only at the next start so that socket not closed before client gets end of packet)
|
|
||||||
delete[] buffer;
|
|
||||||
zmq_unbind(zmqsocket, hostName);
|
|
||||||
zmq_close(zmqsocket);
|
|
||||||
zmq_ctx_destroy(context);
|
|
||||||
|
|
||||||
|
|
||||||
//check to exit thread (for change of parameters) - only EXIT possibility
|
//check to exit thread (for change of parameters) - only EXIT possibility
|
||||||
@ -1868,7 +1856,7 @@ void UDPStandardImplementation::startDataCallback(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void UDPStandardImplementation::startListening(){cprintf(BLUE,"startlistening thread started %d\n",currentThreadIndex);
|
void UDPStandardImplementation::startListening(){
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
//set current thread value index
|
//set current thread value index
|
||||||
@ -2303,7 +2291,7 @@ uint32_t UDPStandardImplementation::processListeningBuffer(int ithread, int &cSi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void UDPStandardImplementation::startWriting(){cprintf(GREEN,"start writing thread started %d\n",currentThreadIndex);
|
void UDPStandardImplementation::startWriting(){
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
//set current thread value index
|
//set current thread value index
|
||||||
@ -2504,9 +2492,7 @@ void UDPStandardImplementation::stopWriting(int ithread, char* wbuffer){
|
|||||||
|
|
||||||
if(dataStreamEnable){
|
if(dataStreamEnable){
|
||||||
//ensure previous frame was processed
|
//ensure previous frame was processed
|
||||||
if(!ithread) cout<<"*** waiting for writerguisemiphore (stopwriting)"<<endl;
|
|
||||||
sem_wait(&writerGuiSemaphore[ithread]);
|
sem_wait(&writerGuiSemaphore[ithread]);
|
||||||
if(!ithread) cout<<"*** got post for writerguisemiphore (stopwriting)"<<endl;
|
|
||||||
guiNumPackets[ithread] = dummyPacketValue;
|
guiNumPackets[ithread] = dummyPacketValue;
|
||||||
//let it know its got data
|
//let it know its got data
|
||||||
sem_post(&dataCallbackWriterSemaphore[ithread]);
|
sem_post(&dataCallbackWriterSemaphore[ithread]);
|
||||||
@ -2584,7 +2570,8 @@ void UDPStandardImplementation::handleWithoutDataCompression(int ithread, char*
|
|||||||
//get current frame number
|
//get current frame number
|
||||||
uint64_t tempframenumber;
|
uint64_t tempframenumber;
|
||||||
uint32_t pnum;
|
uint32_t pnum;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS,tempframenumber,pnum) == FAIL){
|
uint32_t snum;
|
||||||
|
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS,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));
|
||||||
|
|
||||||
@ -2660,8 +2647,9 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
|
|||||||
//get start frame (required to create new file at the right juncture)
|
//get start frame (required to create new file at the right juncture)
|
||||||
uint64_t startframe =-1;
|
uint64_t startframe =-1;
|
||||||
uint32_t pnum;
|
uint32_t pnum;
|
||||||
|
uint32_t snum;
|
||||||
//if(ithread) cout<<"getting start frame number"<<endl;
|
//if(ithread) cout<<"getting start frame number"<<endl;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + offset, startframe,pnum) == FAIL){
|
if(getFrameandPacketNumber(ithread, wbuffer + offset, startframe,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;
|
||||||
@ -2719,7 +2707,8 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
|
|||||||
//get last frame number
|
//get last frame number
|
||||||
uint64_t finalLastFrameNumberToSave = 0;
|
uint64_t finalLastFrameNumberToSave = 0;
|
||||||
uint32_t pnum;
|
uint32_t pnum;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS + ((numpackets - 1) * onePacketSize), finalLastFrameNumberToSave,pnum) == FAIL){
|
uint32_t snum;
|
||||||
|
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS + ((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;
|
||||||
@ -2809,9 +2798,8 @@ void UDPStandardImplementation::copyFrameToGui(int ithread, char* buffer, uint32
|
|||||||
cprintf(GREEN,"Writing_Thread: CopyingFrame: Going to copy data\n");
|
cprintf(GREEN,"Writing_Thread: CopyingFrame: Going to copy data\n");
|
||||||
#endif
|
#endif
|
||||||
//ensure previous frame was processed
|
//ensure previous frame was processed
|
||||||
if(!ithread) cout<<"*** waiting for writerguisemiphore (copyfrmae)"<<endl;
|
|
||||||
sem_wait(&writerGuiSemaphore[ithread]);
|
sem_wait(&writerGuiSemaphore[ithread]);
|
||||||
if(!ithread) cout<<"*** got post for writerguisemiphore (copyframe)"<<endl;
|
|
||||||
//copy date
|
//copy date
|
||||||
guiNumPackets[ithread] = numpackets;
|
guiNumPackets[ithread] = numpackets;
|
||||||
strcpy(guiFileName[ithread],completeFileName[ithread]);
|
strcpy(guiFileName[ithread],completeFileName[ithread]);
|
||||||
@ -2842,7 +2830,8 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
|
|||||||
//get frame number
|
//get frame number
|
||||||
uint64_t tempframenumber=-1;
|
uint64_t tempframenumber=-1;
|
||||||
uint32_t pnum;
|
uint32_t pnum;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, tempframenumber,pnum) == FAIL){
|
uint32_t snum;
|
||||||
|
if(getFrameandPacketNumber(ithread, wbuffer + HEADER_SIZE_NUM_TOT_PACKETS, 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;
|
||||||
@ -2978,11 +2967,15 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int UDPStandardImplementation::getFrameandPacketNumber(int ithread, char* wbuffer, uint64_t &framenumber, uint32_t &packetnumber){
|
int UDPStandardImplementation::getFrameandPacketNumber(int ithread, char* wbuffer, uint64_t &framenumber, uint32_t &packetnumber,uint32_t &subframenumber){
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
eiger_packet_footer_t* footer=0;
|
eiger_packet_footer_t* footer=0;
|
||||||
|
eiger_packet_header_t* e_header=0;
|
||||||
jfrau_packet_header_t* header=0;
|
jfrau_packet_header_t* header=0;
|
||||||
|
framenumber = 0;
|
||||||
|
packetnumber = 0;
|
||||||
|
subframenumber = 0;
|
||||||
|
|
||||||
switch(myDetectorType){
|
switch(myDetectorType){
|
||||||
|
|
||||||
@ -2996,12 +2989,15 @@ int UDPStandardImplementation::getFrameandPacketNumber(int ithread, char* wbuffe
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
packetnumber = (*( (uint16_t*) footer->packetNumber));
|
packetnumber = (*( (uint16_t*) footer->packetNumber));
|
||||||
|
e_header = (eiger_packet_header_t*) (wbuffer);
|
||||||
|
subframenumber = *( (uint32_t*) e_header->subFrameNumber);
|
||||||
#ifdef DEBUG4
|
#ifdef DEBUG4
|
||||||
if(!ithread) cprintf(GREEN,"Writing_Thread %d: fnum:%lld pnum:%d FPGA_fnum:%d footeroffset:%d\n",
|
if(!ithread) cprintf(GREEN,"Writing_Thread %d: fnum:%lld pnum:%d FPGA_fnum:%d subfnum:%d footeroffset:%d\n",
|
||||||
ithread,
|
ithread,
|
||||||
(long long int)framenumber,
|
(long long int)framenumber,
|
||||||
packetnumber,
|
packetnumber,
|
||||||
framenumber,
|
framenumber,
|
||||||
|
subframenumber,
|
||||||
footerOffset);
|
footerOffset);
|
||||||
#endif
|
#endif
|
||||||
framenumber += (startFrameIndex - 1);
|
framenumber += (startFrameIndex - 1);
|
||||||
@ -3051,9 +3047,9 @@ int UDPStandardImplementation::writeUptoFrameNumber(int ithread, char* wbuffer,
|
|||||||
uint64_t tempframenumber=-1;
|
uint64_t tempframenumber=-1;
|
||||||
offset = endoffset;
|
offset = endoffset;
|
||||||
uint32_t pnum;
|
uint32_t pnum;
|
||||||
|
uint32_t snum;
|
||||||
//get last frame number
|
//get last frame number
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + (endoffset-onePacketSize), tempframenumber,pnum) == FAIL){
|
if(getFrameandPacketNumber(ithread, wbuffer + (endoffset-onePacketSize), 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 FAIL;
|
return FAIL;
|
||||||
@ -3079,7 +3075,7 @@ int UDPStandardImplementation::writeUptoFrameNumber(int ithread, char* wbuffer,
|
|||||||
offset -= bigIncrements;
|
offset -= bigIncrements;
|
||||||
if(offset<startoffset)
|
if(offset<startoffset)
|
||||||
break;//if(ithread) cout<<"frame number at going backwards fast f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
break;//if(ithread) cout<<"frame number at going backwards fast f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + offset, tempframenumber,pnum) == FAIL){
|
if(getFrameandPacketNumber(ithread, wbuffer + offset, 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 FAIL;
|
return FAIL;
|
||||||
@ -3087,7 +3083,7 @@ int UDPStandardImplementation::writeUptoFrameNumber(int ithread, char* wbuffer,
|
|||||||
}
|
}
|
||||||
if(offset<startoffset){
|
if(offset<startoffset){
|
||||||
offset = startoffset;//if(ithread) cout<<"offset < start offset f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
offset = startoffset;//if(ithread) cout<<"offset < start offset f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + offset, tempframenumber,pnum) == FAIL){
|
if(getFrameandPacketNumber(ithread, wbuffer + offset, 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 FAIL;
|
return FAIL;
|
||||||
@ -3095,7 +3091,7 @@ int UDPStandardImplementation::writeUptoFrameNumber(int ithread, char* wbuffer,
|
|||||||
}
|
}
|
||||||
while(tempframenumber<nextFrameNumber){
|
while(tempframenumber<nextFrameNumber){
|
||||||
offset += onePacketSize;//if(ithread) cout<<"frame number at going forwards slow f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
offset += onePacketSize;//if(ithread) cout<<"frame number at going forwards slow f#:"<<tempframenumber<< " offset:"<<offset<<endl;
|
||||||
if(getFrameandPacketNumber(ithread, wbuffer + offset, tempframenumber,pnum) == FAIL){
|
if(getFrameandPacketNumber(ithread, wbuffer + offset, 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 FAIL;
|
return FAIL;
|
||||||
|
Reference in New Issue
Block a user