mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-09 11:30:43 +02:00
separated
This commit is contained in:
parent
fbf6e2bff1
commit
a3369a7d21
@ -398,12 +398,13 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the buffer-current frame read by receiver
|
* Get the buffer-current frame read by receiver
|
||||||
|
* @param ithread port thread index
|
||||||
* @param c pointer to current file name
|
* @param c pointer to current file name
|
||||||
* @param raw address of pointer, pointing to current frame to send to gui
|
* @param raw address of pointer, pointing to current frame to send to gui
|
||||||
* @param startAcq start index of the acquisition
|
* @param startAcq start index of the acquisition
|
||||||
* @param startFrame start index of the scan
|
* @param startFrame start index of the scan
|
||||||
*/
|
*/
|
||||||
void readFrame(char* c,char** raw, uint64_t &startAcq, uint64_t &startFrame);
|
void readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* abort acquisition with minimum damage: close open files, cleanup.
|
* abort acquisition with minimum damage: close open files, cleanup.
|
||||||
|
@ -455,12 +455,13 @@ class UDPInterface {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the buffer-current frame read by receiver
|
* Get the buffer-current frame read by receiver
|
||||||
|
* @param ithread port thread index
|
||||||
* @param c pointer to current file name
|
* @param c pointer to current file name
|
||||||
* @param raw address of pointer, pointing to current frame to send to gui
|
* @param raw address of pointer, pointing to current frame to send to gui
|
||||||
* @param startAcq start index of the acquisition
|
* @param startAcq start index of the acquisition
|
||||||
* @param startFrame start index of the scan
|
* @param startFrame start index of the scan
|
||||||
*/
|
*/
|
||||||
virtual void readFrame(char* c,char** raw, uint64_t &startAcq, uint64_t &startFrame)=0;
|
virtual void readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame)=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* abort acquisition with minimum damage: close open files, cleanup.
|
* abort acquisition with minimum damage: close open files, cleanup.
|
||||||
|
@ -218,7 +218,7 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase
|
|||||||
* @param startAcq start index of the acquisition
|
* @param startAcq start index of the acquisition
|
||||||
* @param startFrame start index of the scan
|
* @param startFrame start index of the scan
|
||||||
*/
|
*/
|
||||||
void readFrame(int ithread, char* c,char** raw, uint64_t &startAcq, uint64_t &startFrame);
|
void readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overridden method
|
* Overridden method
|
||||||
@ -571,8 +571,6 @@ private:
|
|||||||
/** Previous Frame number from buffer to calculate loss */
|
/** Previous Frame number from buffer to calculate loss */
|
||||||
int64_t frameNumberInPreviousFile[MAX_NUMBER_OF_WRITER_THREADS];
|
int64_t frameNumberInPreviousFile[MAX_NUMBER_OF_WRITER_THREADS];
|
||||||
|
|
||||||
/** Last Frame Index Listened To */
|
|
||||||
int64_t lastFrameIndex[MAX_NUMBER_OF_WRITER_THREADS];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -586,7 +584,7 @@ private:
|
|||||||
int totalListeningPacketCount[MAX_NUMBER_OF_LISTENING_THREADS];
|
int totalListeningPacketCount[MAX_NUMBER_OF_LISTENING_THREADS];
|
||||||
|
|
||||||
/** Pckets currently in current file, starts new file when it reaches max */
|
/** Pckets currently in current file, starts new file when it reaches max */
|
||||||
uint64_t lastFrameNumberInFile[MAX_NUMBER_OF_WRITER_THREADS];
|
int64_t lastFrameNumberInFile[MAX_NUMBER_OF_WRITER_THREADS];
|
||||||
|
|
||||||
/** packets in current file */
|
/** packets in current file */
|
||||||
uint64_t totalPacketsInFile[MAX_NUMBER_OF_WRITER_THREADS];
|
uint64_t totalPacketsInFile[MAX_NUMBER_OF_WRITER_THREADS];
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#define GENERIC_SOCKET_H
|
#define GENERIC_SOCKET_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "ansi.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,7 +105,8 @@ enum communicationProtocol{
|
|||||||
packet_size(ps),
|
packet_size(ps),
|
||||||
nsending(0),
|
nsending(0),
|
||||||
nsent(0),
|
nsent(0),
|
||||||
total_sent(0)// sender (client): where to? ip
|
total_sent(0),// sender (client): where to? ip
|
||||||
|
header_packet_size(0)
|
||||||
{
|
{
|
||||||
//memset(&serverAddress, 0, sizeof(sockaddr_in));
|
//memset(&serverAddress, 0, sizeof(sockaddr_in));
|
||||||
//memset(&clientAddress, 0, sizeof(sockaddr_in));
|
//memset(&clientAddress, 0, sizeof(sockaddr_in));
|
||||||
@ -161,7 +162,7 @@ enum communicationProtocol{
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
genericSocket(unsigned short int const port_number, communicationProtocol p, int ps = DEFAULT_PACKET_SIZE, const char *eth=NULL):
|
genericSocket(unsigned short int const port_number, communicationProtocol p, int ps = DEFAULT_PACKET_SIZE, const char *eth=NULL, int hsize=0):
|
||||||
//portno(port_number),
|
//portno(port_number),
|
||||||
protocol(p),
|
protocol(p),
|
||||||
is_a_server(1),
|
is_a_server(1),
|
||||||
@ -170,7 +171,8 @@ enum communicationProtocol{
|
|||||||
packet_size(ps),
|
packet_size(ps),
|
||||||
nsending(0),
|
nsending(0),
|
||||||
nsent(0),
|
nsent(0),
|
||||||
total_sent(0)
|
total_sent(0),
|
||||||
|
header_packet_size(hsize)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* // you can specify an IP address: */
|
/* // you can specify an IP address: */
|
||||||
@ -616,7 +618,8 @@ enum communicationProtocol{
|
|||||||
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 < packet_size) {
|
||||||
if(nsent){
|
if(nsent){
|
||||||
cout << "Incomplete Packet size " << nsent << endl;
|
if(nsent != header_packet_size)
|
||||||
|
cprintf(RED,"Incomplete Packet size %d\n",nsent);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -690,6 +693,11 @@ enum communicationProtocol{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int getCurrentTotalReceived(){
|
||||||
|
return total_sent;
|
||||||
|
}
|
||||||
|
|
||||||
char lastClientIP[INET_ADDRSTRLEN];
|
char lastClientIP[INET_ADDRSTRLEN];
|
||||||
char thisClientIP[INET_ADDRSTRLEN];
|
char thisClientIP[INET_ADDRSTRLEN];
|
||||||
int differentClients;
|
int differentClients;
|
||||||
@ -712,7 +720,7 @@ enum communicationProtocol{
|
|||||||
int nsending;
|
int nsending;
|
||||||
int nsent;
|
int nsent;
|
||||||
int total_sent;
|
int total_sent;
|
||||||
|
int header_packet_size;
|
||||||
|
|
||||||
|
|
||||||
// pthread_mutex_t mp;
|
// pthread_mutex_t mp;
|
||||||
|
@ -431,7 +431,7 @@ int UDPBaseImplementation::shutDownUDPSockets(){
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPBaseImplementation::readFrame(char* c,char** raw, uint64_t &startAcquisitionIndex, uint64_t &startFrameIndex){
|
void UDPBaseImplementation::readFrame(int ithread, char* c,char** raw, int64_t &startAcquisitionIndex, int64_t &startFrameIndex){
|
||||||
FILE_LOG(logWARNING) << __AT__ << " doing nothing...";
|
FILE_LOG(logWARNING) << __AT__ << " doing nothing...";
|
||||||
FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes";
|
FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes";
|
||||||
}
|
}
|
||||||
|
@ -159,8 +159,7 @@ void UDPStandardImplementation::initializeMembers(){
|
|||||||
frameIndex[i] = 0;
|
frameIndex[i] = 0;
|
||||||
currentFrameNumber[i] = 0;
|
currentFrameNumber[i] = 0;
|
||||||
frameNumberInPreviousFile[i] = -1;
|
frameNumberInPreviousFile[i] = -1;
|
||||||
lastFrameIndex[i] = 0;
|
lastFrameNumberInFile[i] = -1;
|
||||||
lastFrameNumberInFile[i] = 0;
|
|
||||||
totalPacketsInFile[i] = 0;
|
totalPacketsInFile[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,7 +550,6 @@ int UDPStandardImplementation::setDynamicRange(const uint32_t i){
|
|||||||
//set parameters depending on new dynamic range.
|
//set parameters depending on new dynamic range.
|
||||||
packetsPerFrame = (tengigaEnable ? EIGER_TEN_GIGA_CONSTANT : EIGER_ONE_GIGA_CONSTANT) * dynamicRange;
|
packetsPerFrame = (tengigaEnable ? EIGER_TEN_GIGA_CONSTANT : EIGER_ONE_GIGA_CONSTANT) * dynamicRange;
|
||||||
bufferSize = onePacketSize * packetsPerFrame;
|
bufferSize = onePacketSize * packetsPerFrame;
|
||||||
cout<<"packetsPerFrame:"<<packetsPerFrame<<" bufferSize:"<<bufferSize<<endl;
|
|
||||||
|
|
||||||
for(int i=0; i<MAX_NUMBER_OF_WRITER_THREADS; i++)
|
for(int i=0; i<MAX_NUMBER_OF_WRITER_THREADS; i++)
|
||||||
updateFileHeader(i);
|
updateFileHeader(i);
|
||||||
@ -729,7 +727,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d){
|
|||||||
frameIndexMask = EIGER_FRAME_INDEX_MASK;
|
frameIndexMask = EIGER_FRAME_INDEX_MASK;
|
||||||
frameIndexOffset = EIGER_FRAME_INDEX_OFFSET;
|
frameIndexOffset = EIGER_FRAME_INDEX_OFFSET;
|
||||||
packetIndexMask = EIGER_PACKET_INDEX_MASK;
|
packetIndexMask = EIGER_PACKET_INDEX_MASK;
|
||||||
maxFramesPerFile = EIGER_MAX_FRAMES_PER_FILE;
|
maxFramesPerFile = 5;//EIGER_MAX_FRAMES_PER_FILE;
|
||||||
fifoSize = EIGER_FIFO_SIZE;
|
fifoSize = EIGER_FIFO_SIZE;
|
||||||
fifoDepth = EIGER_FIFO_SIZE;
|
fifoDepth = EIGER_FIFO_SIZE;
|
||||||
footerOffset = EIGER_PACKET_HEADER_SIZE + oneDataSize;
|
footerOffset = EIGER_PACKET_HEADER_SIZE + oneDataSize;
|
||||||
@ -848,9 +846,8 @@ int UDPStandardImplementation::startReceiver(char *c){
|
|||||||
|
|
||||||
for(int i=0;i<numberofWriterThreads;i++){
|
for(int i=0;i<numberofWriterThreads;i++){
|
||||||
frameIndex[i] = 0;
|
frameIndex[i] = 0;
|
||||||
lastFrameIndex[i]=-1;
|
|
||||||
//reset file parameters
|
//reset file parameters
|
||||||
lastFrameNumberInFile[i] = 0;
|
lastFrameNumberInFile[i] = -1;
|
||||||
totalPacketsInFile[i] = 0;
|
totalPacketsInFile[i] = 0;
|
||||||
if(sfilefd[i]){
|
if(sfilefd[i]){
|
||||||
fclose(sfilefd[i]);
|
fclose(sfilefd[i]);
|
||||||
@ -1003,26 +1000,37 @@ void UDPStandardImplementation::startReadout(){
|
|||||||
if(status == RUNNING){
|
if(status == RUNNING){
|
||||||
|
|
||||||
//check if all packets got
|
//check if all packets got
|
||||||
int totalP = 0,prev,i;
|
int totalP = 0,prev=-1,i;
|
||||||
for(i=0; i<numberofListeningThreads; ++i){
|
for(i=0; i<numberofListeningThreads; ++i)
|
||||||
totalP += totalListeningPacketCount[i];
|
totalP += totalListeningPacketCount[i];
|
||||||
}
|
|
||||||
|
//check if current buffer still receiving something
|
||||||
|
int currentReceivedInBuffer=0,prevReceivedInBuffer=-1;
|
||||||
|
for(i=0; i<numberofListeningThreads; ++i)
|
||||||
|
currentReceivedInBuffer += udpSocket[i]->getCurrentTotalReceived();
|
||||||
|
|
||||||
//wait for all packets
|
//wait for all packets
|
||||||
if(totalP!=numberOfFrames*packetsPerFrame*numberofListeningThreads){
|
if(totalP!=numberOfFrames*packetsPerFrame*numberofListeningThreads){
|
||||||
|
|
||||||
prev = -1;
|
//wait as long as there is change from prev totalP,
|
||||||
//wait as long as there is change from prev totalP
|
//and also change from received in buffer to previous value
|
||||||
while(prev != totalP){
|
//(as one listens to many at a time, shouldnt cut off in between)
|
||||||
|
while((prev != totalP) && (prevReceivedInBuffer!= currentReceivedInBuffer)){
|
||||||
#ifdef DEBUG5
|
#ifdef DEBUG5
|
||||||
cprintf(MAGENTA,"waiting for all packets totalP:%d\n",totalP);
|
cprintf(MAGENTA,"waiting for all packets totalP:%d currently in buffer:%d\n",totalP,currentReceivedInBuffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
usleep(5000);/* Need to find optimal time (exposure time and acquisition period) **/
|
usleep(5000);/* Need to find optimal time (exposure time and acquisition period) **/
|
||||||
prev = totalP;
|
prev = totalP;
|
||||||
totalP=0;
|
totalP = 0;
|
||||||
for(i=0; i<numberofListeningThreads; ++i){
|
for(i=0; i<numberofListeningThreads; ++i)
|
||||||
totalP += totalListeningPacketCount[i];
|
totalP += totalListeningPacketCount[i];
|
||||||
}
|
|
||||||
|
prevReceivedInBuffer = currentReceivedInBuffer;
|
||||||
|
currentReceivedInBuffer = 0;
|
||||||
|
for(i=0; i<numberofListeningThreads; ++i)
|
||||||
|
currentReceivedInBuffer += udpSocket[i]->getCurrentTotalReceived();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1041,7 +1049,7 @@ void UDPStandardImplementation::startReadout(){
|
|||||||
|
|
||||||
|
|
||||||
/**make this better by asking all of it at once*/
|
/**make this better by asking all of it at once*/
|
||||||
void UDPStandardImplementation::readFrame(int ithread, char* c,char** raw, uint64_t &startAcq, uint64_t &startFrame){
|
void UDPStandardImplementation::readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame){
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
//point to gui data, to let writer thread know that gui is back for data
|
//point to gui data, to let writer thread know that gui is back for data
|
||||||
@ -1311,20 +1319,23 @@ int UDPStandardImplementation::createUDPSockets(){
|
|||||||
strcpy(eth,"");
|
strcpy(eth,"");
|
||||||
|
|
||||||
shutDownUDPSockets();
|
shutDownUDPSockets();
|
||||||
|
int headerpacketsize = 0;
|
||||||
|
if(myDetectorType == EIGER)
|
||||||
|
headerpacketsize = EIGER_HEADER_LENGTH;
|
||||||
|
|
||||||
//if no eth, listen to all
|
//if no eth, listen to all
|
||||||
if(!strlen(eth)){
|
if(!strlen(eth)){
|
||||||
FILE_LOG(logWARNING) << "eth is empty. Listening to all";
|
FILE_LOG(logWARNING) << "eth is empty. Listening to all";
|
||||||
|
|
||||||
for(int i=0;i<numberofListeningThreads;i++)
|
for(int i=0;i<numberofListeningThreads;i++)
|
||||||
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,onePacketSize);
|
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,onePacketSize,NULL,headerpacketsize);
|
||||||
}
|
}
|
||||||
//normal socket
|
//normal socket
|
||||||
else{
|
else{
|
||||||
FILE_LOG(logINFO) << "Ethernet Interface:" << eth;
|
FILE_LOG(logINFO) << "Ethernet Interface:" << eth;
|
||||||
|
|
||||||
for(int i=0;i<numberofListeningThreads;i++)
|
for(int i=0;i<numberofListeningThreads;i++)
|
||||||
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,onePacketSize,eth);
|
udpSocket[i] = new genericSocket(port[i],genericSocket::UDP,onePacketSize,eth,headerpacketsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
//error
|
//error
|
||||||
@ -1395,7 +1406,6 @@ int UDPStandardImplementation::setupWriter(){
|
|||||||
|
|
||||||
int UDPStandardImplementation::createNewFile(int ithread){
|
int UDPStandardImplementation::createNewFile(int ithread){
|
||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
if(!ithread) cout<<ithread <<" ****Creating new file" << endl;
|
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
if(packetsCaught)
|
if(packetsCaught)
|
||||||
@ -1405,7 +1415,7 @@ int UDPStandardImplementation::createNewFile(int ithread){
|
|||||||
if(!frameIndexEnable)
|
if(!frameIndexEnable)
|
||||||
sprintf(completeFileName[ithread], "%s/%s_%lld.raw", filePath,fileNamePerThread[ithread],(long long int)fileIndex);
|
sprintf(completeFileName[ithread], "%s/%s_%lld.raw", filePath,fileNamePerThread[ithread],(long long int)fileIndex);
|
||||||
else
|
else
|
||||||
sprintf(completeFileName[ithread], "%s/%s_f%012lld_%lld.raw", filePath,fileNamePerThread[ithread],(long long int)lastFrameNumberInFile[ithread],(long long int)fileIndex);
|
sprintf(completeFileName[ithread], "%s/%s_f%012lld_%lld.raw", filePath,fileNamePerThread[ithread],(long long int)lastFrameNumberInFile[ithread]+1,(long long int)fileIndex);
|
||||||
|
|
||||||
#ifdef DEBUG4
|
#ifdef DEBUG4
|
||||||
FILE_LOG(logINFO) << completefileName;
|
FILE_LOG(logINFO) << completefileName;
|
||||||
@ -1437,21 +1447,23 @@ int UDPStandardImplementation::createNewFile(int ithread){
|
|||||||
//Print packet loss and filenames
|
//Print packet loss and filenames
|
||||||
if(!packetsCaught){
|
if(!packetsCaught){
|
||||||
frameNumberInPreviousFile[ithread] = -1;
|
frameNumberInPreviousFile[ithread] = -1;
|
||||||
cout << "File: " << completeFileName[ithread] << endl;
|
cout << "Thread " << ithread << " File:" << completeFileName[ithread] << endl;
|
||||||
}else{
|
}else{
|
||||||
//Assumption for startFrameindex usign ithread: datacompression never enters here and therefore is always same number of listening and writing threads to use ithread
|
//Assumption for startFrameindex usign ithread: datacompression never enters here and therefore is always same number of listening and writing threads to use ithread
|
||||||
if (frameNumberInPreviousFile[ithread] == -1)
|
if (frameNumberInPreviousFile[ithread] == -1)
|
||||||
frameNumberInPreviousFile[ithread] = startFrameIndex-1;
|
frameNumberInPreviousFile[ithread] = startFrameIndex-1;
|
||||||
|
|
||||||
cout << completeFileName[ithread]
|
|
||||||
|
cout << "Thread " << ithread << " File:" << completeFileName[ithread]
|
||||||
<< "\tPacket Loss: " << setw(4)<<fixed << setprecision(4) << dec <<
|
<< "\tPacket Loss: " << setw(4)<<fixed << setprecision(4) << dec <<
|
||||||
(int)((( (currentFrameNumber[ithread]-frameNumberInPreviousFile[ithread]) - ((totalPacketsInFile[ithread])/packetsPerFrame))/
|
(int)((( ((currentFrameNumber[ithread]-1)-frameNumberInPreviousFile[ithread]) - ((totalPacketsInFile[ithread])/packetsPerFrame))/
|
||||||
(double)(currentFrameNumber[ithread]-frameNumberInPreviousFile[ithread]))*100.000)
|
(double)((currentFrameNumber[ithread]-1)-frameNumberInPreviousFile[ithread]))*100.000)
|
||||||
<< "%\tFramenumber: " << currentFrameNumber[ithread]
|
<< "%\tFrame Number: " << currentFrameNumber[ithread]
|
||||||
<< "\t\t frameNumberInPreviousFile: " << frameNumberInPreviousFile[ithread]
|
// << "\t\t frameNumberInPreviousFile: " << frameNumberInPreviousFile[ithread]
|
||||||
<< "\tIndex " << dec << index
|
// << "\tIndex " << dec << index
|
||||||
<< "\tLost " << dec << ( ((int)(currentFrameNumber[ithread]-frameNumberInPreviousFile[ithread])) -
|
<< "\tPackets Lost " << dec << ( ((int)((currentFrameNumber[ithread]-1)-frameNumberInPreviousFile[ithread])) -
|
||||||
((totalPacketsInFile[ithread])/packetsPerFrame)) << endl;
|
((totalPacketsInFile[ithread])/packetsPerFrame))
|
||||||
|
<< endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1463,7 +1475,6 @@ int UDPStandardImplementation::createNewFile(int ithread){
|
|||||||
//reset counters for each new file
|
//reset counters for each new file
|
||||||
if(packetsCaught){
|
if(packetsCaught){
|
||||||
frameNumberInPreviousFile[ithread] = currentFrameNumber[ithread];
|
frameNumberInPreviousFile[ithread] = currentFrameNumber[ithread];
|
||||||
lastFrameNumberInFile[ithread] = 0;
|
|
||||||
totalPacketsInFile[ithread] = 0;
|
totalPacketsInFile[ithread] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1643,7 +1654,10 @@ int UDPStandardImplementation::prepareAndListenBuffer(int ithread, int cSize, ch
|
|||||||
|
|
||||||
if(status != TRANSMITTING)
|
if(status != TRANSMITTING)
|
||||||
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, (bufferSize * numberofJobsPerBuffer) - cSize);
|
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, (bufferSize * numberofJobsPerBuffer) - cSize);
|
||||||
cout<<ithread<<" receivedSize:"<<receivedSize<<endl;
|
//eiger returns 0 when header packet caught
|
||||||
|
if(!receivedSize && status != TRANSMITTING)
|
||||||
|
receivedSize = udpSocket[ithread]->ReceiveDataOnly(buffer[ithread] + HEADER_SIZE_NUM_TOT_PACKETS + cSize, (bufferSize * numberofJobsPerBuffer) - cSize);
|
||||||
|
|
||||||
totalListeningPacketCount[ithread] += (receivedSize/onePacketSize);
|
totalListeningPacketCount[ithread] += (receivedSize/onePacketSize);
|
||||||
|
|
||||||
#ifdef MANUALDEBUG
|
#ifdef MANUALDEBUG
|
||||||
@ -1774,7 +1788,6 @@ void UDPStandardImplementation::stopListening(int ithread, int numbytes){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//push dummy-end buffer into fifo for all writer threads
|
//push dummy-end buffer into fifo for all writer threads
|
||||||
for(int i=0; i<numberofWriterThreads; ++i){
|
|
||||||
fifoFree[ithread]->pop(buffer[ithread]);
|
fifoFree[ithread]->pop(buffer[ithread]);
|
||||||
#ifdef EVERYFIFODEBUG
|
#ifdef EVERYFIFODEBUG
|
||||||
if(fifoFree[ithread]->getSemValue()<100)
|
if(fifoFree[ithread]->getSemValue()<100)
|
||||||
@ -1799,7 +1812,7 @@ void UDPStandardImplementation::stopListening(int ithread, int numbytes){
|
|||||||
else
|
else
|
||||||
cprintf(YELLOW,"Listening_Thread %d: Listener pushed dummy-end buffer into fifo %p\n", ithread,(void*)(buffer[ithread]));
|
cprintf(YELLOW,"Listening_Thread %d: Listener pushed dummy-end buffer into fifo %p\n", ithread,(void*)(buffer[ithread]));
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//reset mask and exit loop
|
//reset mask and exit loop
|
||||||
@ -2061,8 +2074,9 @@ void UDPStandardImplementation::waitWritingBufferForNextAcquisition(int ithread)
|
|||||||
//pop fifo so that its empty
|
//pop fifo so that its empty
|
||||||
char* temp;
|
char* temp;
|
||||||
while(!fifo[ithread]->isEmpty()){
|
while(!fifo[ithread]->isEmpty()){
|
||||||
cprintf(RED,"%d:emptied buffer in fifo\n", ithread);
|
cprintf(RED,"%d:fifo emptied\n", ithread);
|
||||||
fifo[ithread]->pop(temp);
|
fifo[ithread]->pop(temp);
|
||||||
|
fifoFree[ithread]->push(temp);
|
||||||
#ifdef EVERYFIFODEBUG
|
#ifdef EVERYFIFODEBUG
|
||||||
if(fifo[ithread]->getSemValue()>(fifoSize-100))
|
if(fifo[ithread]->getSemValue()>(fifoSize-100))
|
||||||
cprintf(CYAN,"Fifo[%d]: value:%d, pop 0x%x\n",ithread,fifo[ithread]->getSemValue(),(void*)(temp));
|
cprintf(CYAN,"Fifo[%d]: value:%d, pop 0x%x\n",ithread,fifo[ithread]->getSemValue(),(void*)(temp));
|
||||||
@ -2087,7 +2101,6 @@ void UDPStandardImplementation::waitWritingBufferForNextAcquisition(int ithread)
|
|||||||
if(detindex == -1)
|
if(detindex == -1)
|
||||||
sprintf(fileNamePerThread[ithread],"%s_d%d",fileName,ithread);
|
sprintf(fileNamePerThread[ithread],"%s_d%d",fileName,ithread);
|
||||||
|
|
||||||
cout << "file name changed to include det Id:" << fileNamePerThread[ithread] << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dataCompressionEnable){
|
if(dataCompressionEnable){
|
||||||
@ -2189,15 +2202,34 @@ void UDPStandardImplementation::stopWriting(int ithread, char* wbuffer){
|
|||||||
|
|
||||||
//statistics
|
//statistics
|
||||||
FILE_LOG(logINFO) << "Status: Run Finished";
|
FILE_LOG(logINFO) << "Status: Run Finished";
|
||||||
FILE_LOG(logINFO) << "Last Frame Number Caught:" << lastFrameIndex[ithread];
|
|
||||||
if(totalPacketsCaught < ((uint64_t)numberOfFrames*packetsPerFrame*numberofListeningThreads)){
|
if(totalPacketsCaught < ((uint64_t)numberOfFrames*packetsPerFrame*numberofListeningThreads)){
|
||||||
cprintf(RED, "Total Missing Packets: %lld\n",(long long int)numberOfFrames*packetsPerFrame*numberofListeningThreads-totalPacketsCaught);
|
cprintf(RED, "Total Missing Packets: %lld\n",(long long int)numberOfFrames*packetsPerFrame*numberofListeningThreads-totalPacketsCaught);
|
||||||
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*numberofListeningThreads)));
|
cprintf(RED, "Total Frames Caught: %lld\n",(long long int)(totalPacketsCaught/(packetsPerFrame*numberofListeningThreads)));
|
||||||
|
cprintf(RED, "Last Frame Number Caught: ");
|
||||||
|
int64_t lastFrameNumber = 0;
|
||||||
|
for(int i=0;i<numberofListeningThreads;i++){
|
||||||
|
if(i) cprintf(RED, ", ");
|
||||||
|
lastFrameNumber = lastFrameNumberInFile[i] - startFrameIndex;//lastFrameNumberInFile updated even if not written
|
||||||
|
if(myDetectorType == EIGER)
|
||||||
|
lastFrameNumber+= 1;
|
||||||
|
cprintf(RED, "%lld",(long long int)lastFrameNumber);
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
}else{
|
}else{
|
||||||
cprintf(GREEN, "Total Missing Packets: %lld\n",(long long int)numberOfFrames*packetsPerFrame*numberofListeningThreads-totalPacketsCaught);
|
cprintf(GREEN, "Total Missing Packets: %lld\n",(long long int)numberOfFrames*packetsPerFrame*numberofListeningThreads-totalPacketsCaught);
|
||||||
cprintf(GREEN, "Total Packets Caught: %lld\n",(long long int)totalPacketsCaught);
|
cprintf(GREEN, "Total Packets Caught: %lld\n",(long long int)totalPacketsCaught);
|
||||||
cprintf(GREEN, "Total Frames Caught: %lld\n",(long long int)(totalPacketsCaught/(packetsPerFrame*numberofListeningThreads)));
|
cprintf(GREEN, "Total Frames Caught: %lld\n",(long long int)(totalPacketsCaught/(packetsPerFrame*numberofListeningThreads)));
|
||||||
|
cprintf(GREEN, "Last Frame Number Caught: ");
|
||||||
|
int64_t lastFrameNumber = 0;
|
||||||
|
for(int i=0;i<numberofListeningThreads;i++){
|
||||||
|
if(i) cprintf(GREEN, ", ");
|
||||||
|
lastFrameNumber = lastFrameNumberInFile[i] - startFrameIndex;//lastFrameNumberInFile updated even if not written
|
||||||
|
if(myDetectorType == EIGER)
|
||||||
|
lastFrameNumber+= 1;
|
||||||
|
cprintf(GREEN, "%lld",(long long int)lastFrameNumber);
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
}
|
}
|
||||||
//acquisition end
|
//acquisition end
|
||||||
if (acquisitionFinishedCallBack)
|
if (acquisitionFinishedCallBack)
|
||||||
@ -2221,12 +2253,7 @@ void UDPStandardImplementation::handleWithoutDataCompression(int ithread, char*
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//update current frame number
|
//update current frame number
|
||||||
lastFrameIndex[ithread] = tempframenumber;
|
currentFrameNumber[ithread] = tempframenumber;
|
||||||
if(myDetectorType == EIGER)
|
|
||||||
currentFrameNumber[ithread] = tempframenumber + (startFrameIndex - 1);
|
|
||||||
else
|
|
||||||
currentFrameNumber[ithread] = tempframenumber-startFrameIndex;
|
|
||||||
|
|
||||||
|
|
||||||
//set indices
|
//set indices
|
||||||
pthread_mutex_lock(&progressMutex);
|
pthread_mutex_lock(&progressMutex);
|
||||||
@ -2282,7 +2309,6 @@ void UDPStandardImplementation::writeFileWithoutCompression(int ithread, char* w
|
|||||||
|
|
||||||
//if write enabled
|
//if write enabled
|
||||||
if((fileWriteEnable) && (sfilefd[ithread])){
|
if((fileWriteEnable) && (sfilefd[ithread])){
|
||||||
cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<lastFrameNumberInFile[ithread]<<endl;
|
|
||||||
if(numpackets){
|
if(numpackets){
|
||||||
int offset = HEADER_SIZE_NUM_TOT_PACKETS;
|
int offset = HEADER_SIZE_NUM_TOT_PACKETS;
|
||||||
uint64_t nextFileFrameNumber;
|
uint64_t nextFileFrameNumber;
|
||||||
@ -2291,7 +2317,7 @@ cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<l
|
|||||||
|
|
||||||
//handle half frames from previous buffer
|
//handle half frames from previous buffer
|
||||||
//second part to not check when there has been something written previously
|
//second part to not check when there has been something written previously
|
||||||
if(numpackets &&(lastFrameNumberInFile[ithread])){
|
if(numpackets &&(lastFrameNumberInFile[ithread]>=0)){
|
||||||
//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;
|
||||||
if(getFrameNumber(ithread, wbuffer + offset, startframe) == FAIL){
|
if(getFrameNumber(ithread, wbuffer + offset, startframe) == FAIL){
|
||||||
@ -2299,8 +2325,8 @@ cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<l
|
|||||||
while(!fifoFree[ithread]->push(wbuffer));
|
while(!fifoFree[ithread]->push(wbuffer));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cout<<"222"<<endl;
|
|
||||||
if(startframe == lastFrameNumberInFile[ithread]-1){
|
if(startframe == lastFrameNumberInFile[ithread]){
|
||||||
if(writeUptoFrameNumber(ithread, wbuffer, offset, startframe+1, numpackets, packetsWritten) == FAIL)
|
if(writeUptoFrameNumber(ithread, wbuffer, offset, startframe+1, numpackets, packetsWritten) == FAIL)
|
||||||
//weird frame number of zero from fpga
|
//weird frame number of zero from fpga
|
||||||
return;
|
return;
|
||||||
@ -2311,26 +2337,21 @@ cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<l
|
|||||||
pthread_mutex_lock(&writeMutex);
|
pthread_mutex_lock(&writeMutex);
|
||||||
packetsCaught += packetsWritten;
|
packetsCaught += packetsWritten;
|
||||||
totalPacketsCaught += packetsWritten;
|
totalPacketsCaught += packetsWritten;
|
||||||
cout<<"totalpacketscaught:"<<totalPacketsCaught<<" packetscaught:" <<packetsCaught <<endl;
|
|
||||||
pthread_mutex_unlock(&writeMutex);
|
pthread_mutex_unlock(&writeMutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
while(numpackets){
|
while(numpackets){
|
||||||
if(!ithread) cout<<ithread<<" loop: lastFrameNumberInFile[ithread]:"<<lastFrameNumberInFile[ithread]<<endl;
|
|
||||||
//new file
|
//new file
|
||||||
//create new file only if something has been written and modulus works
|
//create new file only if something has been written and modulus works
|
||||||
if((lastFrameNumberInFile[ithread]) &&(!(lastFrameNumberInFile[ithread] % maxFramesPerFile))){
|
if((lastFrameNumberInFile[ithread]>=0) &&(!((lastFrameNumberInFile[ithread]+1) % maxFramesPerFile))){
|
||||||
if(!ithread) cout<<ithread <<" *** gonna create a new file!!"<<endl;
|
|
||||||
createNewFile(ithread);
|
createNewFile(ithread);
|
||||||
}
|
}
|
||||||
|
|
||||||
//frames to save in one file
|
//frames to save in one file
|
||||||
nextFileFrameNumber = lastFrameNumberInFile[ithread] +
|
nextFileFrameNumber = (lastFrameNumberInFile[ithread]+1) +
|
||||||
(maxFramesPerFile - (lastFrameNumberInFile[ithread]%maxFramesPerFile));
|
(maxFramesPerFile - ((lastFrameNumberInFile[ithread]+1)%maxFramesPerFile));
|
||||||
if(!ithread) cout<<ithread<<" nextFileFrameNumber:"<<nextFileFrameNumber<<endl;
|
|
||||||
if(!ithread) cout<<ithread<<" offset:"<<offset<<endl;
|
|
||||||
|
|
||||||
if(writeUptoFrameNumber(ithread, wbuffer, offset, nextFileFrameNumber, numpackets, packetsWritten) == FAIL)
|
if(writeUptoFrameNumber(ithread, wbuffer, offset, nextFileFrameNumber, numpackets, packetsWritten) == FAIL)
|
||||||
//weird frame number of zero from fpga
|
//weird frame number of zero from fpga
|
||||||
@ -2342,9 +2363,8 @@ cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<l
|
|||||||
pthread_mutex_lock(&writeMutex);
|
pthread_mutex_lock(&writeMutex);
|
||||||
packetsCaught += packetsWritten;
|
packetsCaught += packetsWritten;
|
||||||
totalPacketsCaught += packetsWritten;
|
totalPacketsCaught += packetsWritten;
|
||||||
|
|
||||||
pthread_mutex_unlock(&writeMutex);
|
pthread_mutex_unlock(&writeMutex);
|
||||||
currentFrameNumber[ithread] += lastFrameNumberInFile[ithread]-1;
|
currentFrameNumber[ithread] += lastFrameNumberInFile[ithread];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2361,7 +2381,7 @@ cout<<ithread<<" numpackets:"<<numpackets<<" lastFrameNumberInFile[ithread]:"<<l
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
totalPacketsInFile[ithread] += numpackets;
|
totalPacketsInFile[ithread] += numpackets;
|
||||||
lastFrameNumberInFile[ithread] = finalLastFrameNumberToSave+1;
|
lastFrameNumberInFile[ithread] = finalLastFrameNumberToSave;
|
||||||
currentFrameNumber[ithread] = finalLastFrameNumberToSave;
|
currentFrameNumber[ithread] = finalLastFrameNumberToSave;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2504,6 +2524,7 @@ void UDPStandardImplementation::handleDataCompression(int ithread, char* wbuffer
|
|||||||
}
|
}
|
||||||
currentFrameNumber[ithread] = tempframenumber;
|
currentFrameNumber[ithread] = tempframenumber;
|
||||||
|
|
||||||
|
|
||||||
//set indices
|
//set indices
|
||||||
pthread_mutex_lock(&progressMutex);
|
pthread_mutex_lock(&progressMutex);
|
||||||
if((currentFrameNumber[ithread] - startAcquisitionIndex) > acquisitionIndex)
|
if((currentFrameNumber[ithread] - startAcquisitionIndex) > acquisitionIndex)
|
||||||
@ -2648,14 +2669,15 @@ int UDPStandardImplementation::getFrameNumber(int ithread, char* wbuffer, uint64
|
|||||||
FILE_LOG(logERROR) << "Fifo "<< ithread << ": Frame Number is zero from firmware.";
|
FILE_LOG(logERROR) << "Fifo "<< ithread << ": Frame Number is zero from firmware.";
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
//#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 footeroffset:%d\n",
|
||||||
ithread,
|
ithread,
|
||||||
(long long int)tempframenumber,
|
(long long int)tempframenumber,
|
||||||
(*( (uint16_t*) footer->packetNumber)),
|
(*( (uint16_t*) footer->packetNumber)),
|
||||||
(uint32_t)(*( (uint64_t*) footer)),
|
(uint32_t)(*( (uint64_t*) footer)),
|
||||||
footerOffset);
|
footerOffset);
|
||||||
//#endif
|
#endif
|
||||||
|
tempframenumber += (startFrameIndex - 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
@ -2666,6 +2688,7 @@ int UDPStandardImplementation::getFrameNumber(int ithread, char* wbuffer, uint64
|
|||||||
(long long int)tempframenumber,
|
(long long int)tempframenumber,
|
||||||
(*( (uint8_t*) header->packetNumber)));
|
(*( (uint8_t*) header->packetNumber)));
|
||||||
#endif
|
#endif
|
||||||
|
tempframenumber += startFrameIndex;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2680,7 +2703,7 @@ int UDPStandardImplementation::getFrameNumber(int ithread, char* wbuffer, uint64
|
|||||||
(long long int)tempframenumber,
|
(long long int)tempframenumber,
|
||||||
pnum);
|
pnum);
|
||||||
#endif
|
#endif
|
||||||
|
tempframenumber += startFrameIndex;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@ -2694,119 +2717,103 @@ int UDPStandardImplementation::writeUptoFrameNumber(int ithread, char* wbuffer,
|
|||||||
FILE_LOG(logDEBUG) << __AT__ << " called";
|
FILE_LOG(logDEBUG) << __AT__ << " called";
|
||||||
|
|
||||||
|
|
||||||
bool expectedoffsetATlastpacket = false;
|
int bigIncrements = onePacketSize * packetsPerFrame; //a frame at a time
|
||||||
|
if(numberofJobsPerBuffer == 1) bigIncrements = onePacketSize; //a packet at a time as we listen to only one frame in a buffer
|
||||||
|
|
||||||
int startoffset = offset;
|
int startoffset = offset;
|
||||||
if(!ithread) cout<<ithread<<" startoffset:"<<startoffset<<endl;
|
|
||||||
int endoffset = startoffset + numpackets * onePacketSize;
|
int endoffset = startoffset + numpackets * onePacketSize;
|
||||||
if(!ithread) cout<<ithread<<" endoffset:"<<endoffset<<endl;
|
|
||||||
|
|
||||||
if(!ithread) cout<<ithread<<" nextFrameNumber:"<<nextFrameNumber<<endl;
|
|
||||||
if(!ithread) cout<<ithread<<" lastFrameNumberInFile[ithread]:"<<lastFrameNumberInFile[ithread]<<endl;
|
|
||||||
|
|
||||||
int expectedoffset = startoffset + ((nextFrameNumber - lastFrameNumberInFile[ithread]) * onePacketSize);
|
|
||||||
if(!ithread) cout<<ithread<<" expected offset before:"<<expectedoffset<<endl;
|
|
||||||
|
|
||||||
|
int expectedoffset = startoffset + ((nextFrameNumber - (lastFrameNumberInFile[ithread]+1)) * onePacketSize * packetsPerFrame);
|
||||||
|
bool expectedoffsetATlastpacket = false;
|
||||||
if(expectedoffset >= endoffset){
|
if(expectedoffset >= endoffset){
|
||||||
expectedoffset = startoffset + ((numpackets -1) * onePacketSize);
|
expectedoffset = startoffset + ((numpackets -1) * onePacketSize);
|
||||||
expectedoffsetATlastpacket = true;
|
expectedoffsetATlastpacket = true;
|
||||||
}
|
}
|
||||||
offset = expectedoffset;
|
offset = expectedoffset;
|
||||||
if(!ithread) cout<<ithread<<" expected offset:"<<expectedoffset<<endl;
|
|
||||||
|
|
||||||
|
|
||||||
//get frame number at expected offset
|
//get frame number at expected offset
|
||||||
uint64_t tempframenumber=-1;
|
uint64_t tempframenumber=-1;
|
||||||
|
uint64_t frameNumberWritten=-1;
|
||||||
if(getFrameNumber(ithread, wbuffer + expectedoffset, tempframenumber) == FAIL){
|
if(getFrameNumber(ithread, wbuffer + expectedoffset, tempframenumber) == 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;
|
||||||
}
|
}
|
||||||
if(!ithread) cout<<ithread<<" tempframenumber:"<<tempframenumber<<endl;
|
|
||||||
|
|
||||||
//last packet in buffer does not reach the nextframenumber, write all
|
//last packet in buffer does not reach the nextframenumber, write all
|
||||||
if(expectedoffsetATlastpacket && tempframenumber < nextFrameNumber){
|
if(expectedoffsetATlastpacket && tempframenumber < nextFrameNumber){
|
||||||
|
frameNumberWritten = tempframenumber;
|
||||||
offset += onePacketSize;
|
offset += onePacketSize;
|
||||||
if(!ithread) cout<<ithread<<" final offset:"<<offset<<endl;
|
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
//if tempframenumber is too high, go backwards fast (by frame) and then slowly (by each packet) frontwards
|
//if tempframenumber is too high, go backwards fast (by frame) and then slowly (by each packet) frontwards
|
||||||
if(tempframenumber>=nextFrameNumber){
|
if(tempframenumber>=nextFrameNumber){
|
||||||
if(!ithread) cout<<ithread<<" too high, so going backwards fast:"<<endl;
|
|
||||||
while(tempframenumber>=nextFrameNumber){
|
while(tempframenumber>=nextFrameNumber){
|
||||||
offset -= (onePacketSize*packetsPerFrame);/** its ok..if jonbsperthread is 1, go packet by packet*/
|
offset -= bigIncrements;
|
||||||
if(!ithread) cout<<ithread<<" offset:"<<offset<<endl;
|
if(offset<startoffset)
|
||||||
if(offset<startoffset){
|
|
||||||
if(!ithread) cout<<ithread<<" offset less than endoffset, breaking out"<<endl;
|
|
||||||
break;
|
break;
|
||||||
}if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
|
||||||
//error in frame number sent by fpga
|
|
||||||
while(!fifoFree[ithread]->push(wbuffer));
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
if(!ithread) cout<<ithread<<" tempframenumber:"<<tempframenumber<<endl;
|
|
||||||
}
|
|
||||||
if(offset<startoffset){
|
|
||||||
offset = startoffset;
|
|
||||||
if(!ithread) cout<<ithread<<" offset < start offset so offset now:"<<offset<<endl;
|
|
||||||
}
|
|
||||||
if(!ithread) cout<<ithread<<" lower, so going forwards slow"<<endl;
|
|
||||||
while(tempframenumber<nextFrameNumber){
|
|
||||||
offset += onePacketSize;
|
|
||||||
if(!ithread) cout<<ithread<<" offset:"<<offset<<endl;
|
|
||||||
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == 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;
|
||||||
}
|
}
|
||||||
if(!ithread) cout<<ithread<<" tempframenumber:"<<tempframenumber<<endl;
|
|
||||||
}
|
}
|
||||||
if(!ithread) cout<<ithread<<" final offset:"<<offset<<endl;
|
if(offset<startoffset){
|
||||||
/** here*/
|
offset = startoffset;
|
||||||
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
||||||
|
//error in frame number sent by fpga
|
||||||
|
while(!fifoFree[ithread]->push(wbuffer));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(tempframenumber<nextFrameNumber){
|
||||||
|
offset += onePacketSize;
|
||||||
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
||||||
|
//error in frame number sent by fpga
|
||||||
|
while(!fifoFree[ithread]->push(wbuffer));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if tempframenumber is too low, go forwards fast (by frame) and then slowly (by each packet) backwards
|
//if tempframenumber is too low, go forwards fast (by frame) and then slowly (by each packet) backwards
|
||||||
else{
|
else{
|
||||||
if(!ithread) cout<<ithread<<" too low, so going forwards fast:"<<endl;
|
|
||||||
while(tempframenumber<nextFrameNumber){
|
while(tempframenumber<nextFrameNumber){
|
||||||
offset += (onePacketSize*packetsPerFrame);
|
offset += bigIncrements;
|
||||||
if(!ithread) cout<<ithread<<" offset:"<<offset<<endl;
|
if(offset>endoffset)
|
||||||
if(offset>endoffset){if(!ithread) cout<<ithread<<" offset greater than endoffset, breaking out"<<endl;
|
break;
|
||||||
break;}
|
|
||||||
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == 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;
|
||||||
}
|
}
|
||||||
if(!ithread) cout<<ithread<<" tempframenumber:"<<tempframenumber<<endl;
|
|
||||||
}
|
}
|
||||||
if(offset>endoffset){
|
if(offset>endoffset){
|
||||||
offset = endoffset;
|
offset = endoffset;
|
||||||
if(!ithread) cout<<ithread<<" offset > end offset so offset now:"<<offset<<endl;
|
|
||||||
}
|
|
||||||
if(!ithread) cout<<ithread<<" higher, so going backewards slow"<<endl;
|
|
||||||
while(tempframenumber>nextFrameNumber){
|
|
||||||
offset -= onePacketSize;
|
|
||||||
if(!ithread) cout<<ithread<<" offset:"<<offset<<endl;
|
|
||||||
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == 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;
|
||||||
}
|
}
|
||||||
if(!ithread) cout<<ithread<<" tempframenumber:"<<tempframenumber<<endl;
|
}
|
||||||
|
while(tempframenumber>nextFrameNumber){
|
||||||
|
offset -= onePacketSize;
|
||||||
|
if(getFrameNumber(ithread, wbuffer + offset, tempframenumber) == FAIL){
|
||||||
|
//error in frame number sent by fpga
|
||||||
|
while(!fifoFree[ithread]->push(wbuffer));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
offset += onePacketSize;
|
offset += onePacketSize;
|
||||||
if(!ithread) cout<<ithread<<" final offset:"<<offset<<endl;
|
|
||||||
/** here*/
|
|
||||||
}
|
}
|
||||||
|
frameNumberWritten = nextFrameNumber-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fwrite(wbuffer + startoffset, 1, offset-startoffset, sfilefd[ithread]);
|
fwrite(wbuffer + startoffset, 1, offset-startoffset, sfilefd[ithread]);
|
||||||
if(!ithread) cout<<" written "<<offset-startoffset<<" bytes"<<endl;
|
|
||||||
numPacketsWritten += ((offset-startoffset)/onePacketSize);
|
numPacketsWritten += ((offset-startoffset)/onePacketSize);
|
||||||
if(!ithread) cout<<" numPacketsWritten:"<<numPacketsWritten<<endl;
|
lastFrameNumberInFile[ithread] = frameNumberWritten;
|
||||||
lastFrameNumberInFile[ithread] += tempframenumber;
|
|
||||||
if(!ithread) cout<<" lastFrameNumberInFile[ithread]:"<<lastFrameNumberInFile[ithread]<<endl;
|
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
@ -930,7 +930,6 @@ int slsReceiverTCPIPInterface::get_frames_caught(){
|
|||||||
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
|
strcpy(mess,SET_RECEIVER_ERR_MESSAGE);
|
||||||
ret=FAIL;
|
ret=FAIL;
|
||||||
}else retval=receiverBase->getTotalFramesCaught();
|
}else retval=receiverBase->getTotalFramesCaught();
|
||||||
cout<<"frames caught sent:"<<retval<<endl;
|
|
||||||
#endif
|
#endif
|
||||||
if(ret==OK && socket->differentClients){
|
if(ret==OK && socket->differentClients){
|
||||||
FILE_LOG(logDEBUG) << "Force update";
|
FILE_LOG(logDEBUG) << "Force update";
|
||||||
@ -1132,8 +1131,8 @@ int slsReceiverTCPIPInterface::moench_read_frame(){
|
|||||||
|
|
||||||
char* raw;
|
char* raw;
|
||||||
|
|
||||||
uint64_t startAcquisitionIndex=0;
|
int64_t startAcquisitionIndex=0;
|
||||||
uint64_t startFrameIndex=0;
|
int64_t startFrameIndex=0;
|
||||||
uint32_t index = -1,bindex = 0, offset=0;
|
uint32_t index = -1,bindex = 0, offset=0;
|
||||||
|
|
||||||
strcpy(mess,"Could not read frame\n");
|
strcpy(mess,"Could not read frame\n");
|
||||||
@ -1153,7 +1152,7 @@ int slsReceiverTCPIPInterface::moench_read_frame(){
|
|||||||
|
|
||||||
else{
|
else{
|
||||||
ret = OK;
|
ret = OK;
|
||||||
receiverBase->readFrame(fName,&raw,startAcquisitionIndex,startFrameIndex);
|
receiverBase->readFrame(0,fName,&raw,startAcquisitionIndex,startFrameIndex);
|
||||||
|
|
||||||
/**send garbage with -1 index to try again*/
|
/**send garbage with -1 index to try again*/
|
||||||
if (raw == NULL){
|
if (raw == NULL){
|
||||||
@ -1321,8 +1320,8 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){
|
|||||||
uint32_t index=-1,index2=0;
|
uint32_t index=-1,index2=0;
|
||||||
uint32_t pindex=0,pindex2=0;
|
uint32_t pindex=0,pindex2=0;
|
||||||
uint32_t bindex=0,bindex2=0;
|
uint32_t bindex=0,bindex2=0;
|
||||||
uint64_t startAcquisitionIndex=0;
|
int64_t startAcquisitionIndex=0;
|
||||||
uint64_t startFrameIndex=0;
|
int64_t startFrameIndex=0;
|
||||||
|
|
||||||
strcpy(mess,"Could not read frame\n");
|
strcpy(mess,"Could not read frame\n");
|
||||||
|
|
||||||
@ -1341,7 +1340,7 @@ int slsReceiverTCPIPInterface::gotthard_read_frame(){
|
|||||||
cout<<"haven't caught any frame yet"<<endl;
|
cout<<"haven't caught any frame yet"<<endl;
|
||||||
}else{
|
}else{
|
||||||
ret = OK;
|
ret = OK;
|
||||||
receiverBase->readFrame(fName,&raw,startAcquisitionIndex,startFrameIndex);
|
receiverBase->readFrame(0,fName,&raw,startAcquisitionIndex,startFrameIndex);
|
||||||
|
|
||||||
/**send garbage with -1 index to try again*/
|
/**send garbage with -1 index to try again*/
|
||||||
if (raw == NULL){
|
if (raw == NULL){
|
||||||
@ -1496,8 +1495,8 @@ int slsReceiverTCPIPInterface::propix_read_frame(){
|
|||||||
uint32_t index=-1,index2=0;
|
uint32_t index=-1,index2=0;
|
||||||
uint32_t pindex=0,pindex2=0;
|
uint32_t pindex=0,pindex2=0;
|
||||||
uint32_t bindex=0,bindex2=0;
|
uint32_t bindex=0,bindex2=0;
|
||||||
uint64_t startAcquisitionIndex=0;
|
int64_t startAcquisitionIndex=0;
|
||||||
uint64_t startFrameIndex=0;
|
int64_t startFrameIndex=0;
|
||||||
|
|
||||||
strcpy(mess,"Could not read frame\n");
|
strcpy(mess,"Could not read frame\n");
|
||||||
|
|
||||||
@ -1516,7 +1515,7 @@ int slsReceiverTCPIPInterface::propix_read_frame(){
|
|||||||
cout<<"haven't caught any frame yet"<<endl;
|
cout<<"haven't caught any frame yet"<<endl;
|
||||||
}else{
|
}else{
|
||||||
ret = OK;
|
ret = OK;
|
||||||
receiverBase->readFrame(fName,&raw,startAcquisitionIndex,startFrameIndex);
|
receiverBase->readFrame(0,fName,&raw,startAcquisitionIndex,startFrameIndex);
|
||||||
|
|
||||||
/**send garbage with -1 index to try again*/
|
/**send garbage with -1 index to try again*/
|
||||||
if (raw == NULL){
|
if (raw == NULL){
|
||||||
@ -1634,22 +1633,27 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
|||||||
char fName[MAX_STR_LENGTH]="";
|
char fName[MAX_STR_LENGTH]="";
|
||||||
int acquisitionIndex = -1;
|
int acquisitionIndex = -1;
|
||||||
int frameIndex= -1;
|
int frameIndex= -1;
|
||||||
uint32_t index=0;
|
int index=0;
|
||||||
uint32_t subframenumber=-1;
|
int subframenumber=-1;
|
||||||
|
|
||||||
int frameSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE * packetsPerFrame;
|
int frameSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE * packetsPerFrame * EIGER_MAX_PORTS;
|
||||||
int dataSize = EIGER_ONE_GIGA_ONE_DATA_SIZE * packetsPerFrame;
|
int dataSize = EIGER_ONE_GIGA_ONE_DATA_SIZE * packetsPerFrame * EIGER_MAX_PORTS;
|
||||||
int oneDataSize = EIGER_ONE_GIGA_ONE_DATA_SIZE;
|
int oneDataSize = EIGER_ONE_GIGA_ONE_DATA_SIZE;
|
||||||
|
int onePacketSize = EIGER_ONE_GIGA_ONE_PACKET_SIZE;
|
||||||
if(tenGigaEnable){
|
if(tenGigaEnable){
|
||||||
frameSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE * packetsPerFrame;
|
frameSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE * packetsPerFrame * EIGER_MAX_PORTS;
|
||||||
dataSize = EIGER_TEN_GIGA_ONE_DATA_SIZE * packetsPerFrame;
|
dataSize = EIGER_TEN_GIGA_ONE_DATA_SIZE * packetsPerFrame * EIGER_MAX_PORTS;
|
||||||
oneDataSize = EIGER_TEN_GIGA_ONE_DATA_SIZE;
|
oneDataSize = EIGER_TEN_GIGA_ONE_DATA_SIZE;
|
||||||
|
onePacketSize = EIGER_TEN_GIGA_ONE_PACKET_SIZE;
|
||||||
}
|
}
|
||||||
char* raw;
|
char* raw;
|
||||||
char* origVal = new char[frameSize];
|
char* origVal = new char[frameSize];
|
||||||
char* retval = new char[dataSize];
|
char* retval = new char[dataSize];
|
||||||
uint64_t startAcquisitionIndex=0;
|
memset(origVal,0xF,frameSize);
|
||||||
uint64_t startFrameIndex=0;
|
memset(retval,0xF,dataSize);
|
||||||
|
|
||||||
|
int64_t startAcquisitionIndex=0;
|
||||||
|
int64_t startFrameIndex=0;
|
||||||
strcpy(mess,"Could not read frame\n");
|
strcpy(mess,"Could not read frame\n");
|
||||||
|
|
||||||
|
|
||||||
@ -1674,7 +1678,8 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
|||||||
else{
|
else{
|
||||||
ret = OK;
|
ret = OK;
|
||||||
//read a frame
|
//read a frame
|
||||||
receiverBase->readFrame(fName,&raw,startAcquisitionIndex,startFrameIndex);
|
for(int i=0;i<EIGER_MAX_PORTS;i++){
|
||||||
|
receiverBase->readFrame(i,fName,&raw,startAcquisitionIndex,startFrameIndex);
|
||||||
//send garbage with -1 index to try again
|
//send garbage with -1 index to try again
|
||||||
if (raw == NULL){
|
if (raw == NULL){
|
||||||
startAcquisitionIndex = -1;
|
startAcquisitionIndex = -1;
|
||||||
@ -1682,27 +1687,31 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
|||||||
cout<<"data not ready for gui yet"<<endl;
|
cout<<"data not ready for gui yet"<<endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
memcpy(((char*)origVal)+(i*onePacketSize*packetsPerFrame),raw,(frameSize/EIGER_MAX_PORTS));
|
||||||
|
raw=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
//proper frame
|
//proper frame
|
||||||
else{//cout<<"**** got proper frame ******"<<endl;
|
if(startAcquisitionIndex != -1){
|
||||||
|
//cout<<"**** got proper frame ******"<<endl;
|
||||||
|
|
||||||
eiger_packet_footer_t* wbuf_footer;
|
eiger_packet_footer_t* wbuf_footer;
|
||||||
wbuf_footer = (eiger_packet_footer_t*)(raw + oneDataSize + sizeof(eiger_packet_header_t));
|
wbuf_footer = (eiger_packet_footer_t*)(((char*)origVal) + oneDataSize + sizeof(eiger_packet_header_t));
|
||||||
index =(uint32_t)(*( (uint64_t*) wbuf_footer));
|
index =(uint32_t)(*( (uint64_t*) wbuf_footer));
|
||||||
index += (startFrameIndex-1);
|
index += (startFrameIndex-1);
|
||||||
if(dynamicrange == 32){
|
if(dynamicrange == 32){
|
||||||
eiger_packet_header_t* wbuf_header;
|
eiger_packet_header_t* wbuf_header;
|
||||||
wbuf_header = (eiger_packet_header_t*) raw;
|
wbuf_header = (eiger_packet_header_t*) ((char*)origVal);
|
||||||
subframenumber = *( (uint32_t*) wbuf_header->subFrameNumber);
|
subframenumber = *( (uint32_t*) wbuf_header->subFrameNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VERYVERBOSE
|
//#ifdef VERYVERBOSE
|
||||||
cout << "index:" << dec << index << endl;
|
cout << "index:" << dec << index << endl;
|
||||||
cout << "subframenumber:" << dec << subframenumber << endl;
|
cout << "subframenumber:" << dec << subframenumber << endl;
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
|
|
||||||
memcpy(origVal,raw,frameSize);
|
|
||||||
raw=NULL;
|
|
||||||
|
|
||||||
int c1=8;//first port
|
int c1=8;//first port
|
||||||
int c2=(frameSize/2) + 8; //second port
|
int c2=(frameSize/2) + 8; //second port
|
||||||
@ -1815,18 +1824,18 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
|||||||
startFrameIndex = -1;
|
startFrameIndex = -1;
|
||||||
else
|
else
|
||||||
frameIndex = index-startFrameIndex;
|
frameIndex = index-startFrameIndex;
|
||||||
#ifdef VERY_VERY_DEBUG
|
//#ifdef VERY_VERY_DEBUG
|
||||||
cout << "acquisitionIndex calculated is:" << acquisitionIndex << endl;
|
cout << "acquisitionIndex calculated is:" << acquisitionIndex << endl;
|
||||||
cout << "frameIndex calculated is:" << frameIndex << endl;
|
cout << "frameIndex calculated is:" << frameIndex << endl;
|
||||||
cout << "index:" << index << endl;
|
cout << "index:" << index << endl;
|
||||||
cout << "startAcquisitionIndex:" << startAcquisitionIndex << endl;
|
cout << "startAcquisitionIndex:" << startAcquisitionIndex << endl;
|
||||||
cout << "startFrameIndex:" << startFrameIndex << endl;
|
cout << "startFrameIndex:" << startFrameIndex << endl;
|
||||||
cout << "subframenumber:" << subframenumber << endl;
|
cout << "subframenumber:" << subframenumber << endl;
|
||||||
#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VERYVERBOSE
|
//#ifdef VERYVERBOSE
|
||||||
if(frameIndex!=-1){
|
if(frameIndex!=-1){
|
||||||
cout << "fName:" << fName << endl;
|
cout << "fName:" << fName << endl;
|
||||||
cout << "acquisitionIndex:" << acquisitionIndex << endl;
|
cout << "acquisitionIndex:" << acquisitionIndex << endl;
|
||||||
@ -1835,7 +1844,7 @@ int slsReceiverTCPIPInterface::eiger_read_frame(){
|
|||||||
cout << "startFrameIndex:" << startFrameIndex << endl;
|
cout << "startFrameIndex:" << startFrameIndex << endl;
|
||||||
cout << "subframenumber:" << subframenumber << endl;
|
cout << "subframenumber:" << subframenumber << endl;
|
||||||
}
|
}
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1880,8 +1889,8 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
|
|||||||
int acquisitionIndex = -1;
|
int acquisitionIndex = -1;
|
||||||
int frameIndex= -1;
|
int frameIndex= -1;
|
||||||
int64_t currentIndex=0;
|
int64_t currentIndex=0;
|
||||||
uint64_t startAcquisitionIndex=0;
|
int64_t startAcquisitionIndex=0;
|
||||||
uint64_t startFrameIndex=0;
|
int64_t startFrameIndex=0;
|
||||||
strcpy(mess,"Could not read frame\n");
|
strcpy(mess,"Could not read frame\n");
|
||||||
|
|
||||||
|
|
||||||
@ -1919,7 +1928,7 @@ int slsReceiverTCPIPInterface::jungfrau_read_frame(){
|
|||||||
else{
|
else{
|
||||||
ret = OK;
|
ret = OK;
|
||||||
//read a frame
|
//read a frame
|
||||||
receiverBase->readFrame(fName,&raw,startAcquisitionIndex,startFrameIndex);
|
receiverBase->readFrame(0,fName,&raw,startAcquisitionIndex,startFrameIndex);
|
||||||
//send garbage with -1 index to try again
|
//send garbage with -1 index to try again
|
||||||
if (raw == NULL){
|
if (raw == NULL){
|
||||||
startAcquisitionIndex = -1;
|
startAcquisitionIndex = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user