from private to protected

This commit is contained in:
sala 2014-09-15 16:33:57 +02:00
parent e0ee1fb386
commit 7986746194
5 changed files with 49 additions and 327 deletions

View File

@ -32,7 +32,7 @@ $(info )
.PHONY: all intdoc package eigerReceiver clean .PHONY: all intdoc package eigerReceiver clean
all: lib receiver all: builddir lib receiver
intdoc: $(SRC_H) $(SRC_CLNT) intdoc: $(SRC_H) $(SRC_CLNT)
doxygen doxy.config doxygen doxy.config
@ -76,6 +76,8 @@ clean: buildclean
rm $(DESTDIR)/libSlsReceiver.a $(DESTDIR)/libSlsReceiver.so rm $(DESTDIR)/libSlsReceiver.a $(DESTDIR)/libSlsReceiver.so
rm $(PROGS) rm $(PROGS)
builddir:
if [ ! -d $(BUILDDIR) ]; then mkdir $(BUILDDIR); fi
buildclean: buildclean:
rm -rf $(OBJS) rm -rf $(OBJS)

View File

@ -319,7 +319,7 @@ class UDPBaseImplementation : private virtual slsReceiverDefs, public UDPInterfa
*/ */
int shutDownUDPSockets(); int shutDownUDPSockets();
private: protected:
/* /*
void not_implemented(string method_name){ void not_implemented(string method_name){
@ -466,6 +466,10 @@ private:
void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf); void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf);
//// Could be done more fine-grained... TODO
// private:
protected:
/** structure of an eiger image header*/ /** structure of an eiger image header*/
typedef struct typedef struct
{ {
@ -683,6 +687,9 @@ private:
/** 10Gbe enable*/ /** 10Gbe enable*/
int tengigaEnable; int tengigaEnable;
// TODO: not properly sure where to put these...
/** structure of an eiger image header*/

View File

@ -466,308 +466,6 @@ private:
void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf); void handleDataCompression(int ithread, char* wbuffer[], int &npackets, char* data, int xmax, int ymax, int &nf);
/** structure of an eiger image header*/
typedef struct
{
unsigned char header_before[20];
unsigned char fnum[4];
unsigned char header_after[24];
} eiger_image_header;
/** structure of an eiger image header*/
typedef struct
{
unsigned char num1[4];
unsigned char num2[4];
} eiger_packet_header;
/** max number of listening threads */
const static int MAX_NUM_LISTENING_THREADS = EIGER_MAX_PORTS;
/** max number of writer threads */
const static int MAX_NUM_WRITER_THREADS = 15;
/** detector type */
detectorType myDetectorType;
/** detector hostname */
char detHostname[MAX_STR_LENGTH];
/** status of receiver */
runStatus status;
/** UDP Socket between Receiver and Detector */
genericSocket* udpSocket[MAX_NUM_LISTENING_THREADS];
/** Server UDP Port*/
int server_port[MAX_NUM_LISTENING_THREADS];
/** ethernet interface or IP to listen to */
char *eth;
/** max packets per file **/
int maxPacketsPerFile;
/** File write enable */
int enableFileWrite;
/** File over write enable */
int overwrite;
/** Complete File name */
char savefilename[MAX_STR_LENGTH];
/** File Name without frame index, file index and extension*/
char fileName[MAX_STR_LENGTH];
/** File Path */
char filePath[MAX_STR_LENGTH];
/** File Index */
int fileIndex;
/** scan tag */
int scanTag;
/** if frame index required in file name */
int frameIndexNeeded;
/* Acquisition started */
bool acqStarted;
/* Measurement started */
bool measurementStarted;
/** Frame index at start of each real time acquisition (eg. for each scan) */
uint32_t startFrameIndex;
/** Actual current frame index of each time acquisition (eg. for each scan) */
uint32_t frameIndex;
/** Frames Caught for each real time acquisition (eg. for each scan) */
int packetsCaught;
/** Total packets caught for an entire acquisition (including all scans) */
int totalPacketsCaught;
/** Pckets currently in current file, starts new file when it reaches max */
int packetsInFile;
/** Frame index at start of an entire acquisition (including all scans) */
uint32_t startAcquisitionIndex;
/** Actual current frame index of an entire acquisition (including all scans) */
uint32_t acquisitionIndex;
/** number of packets per frame*/
int packetsPerFrame;
/** frame index mask */
uint32_t frameIndexMask;
/** packet index mask */
uint32_t packetIndexMask;
/** frame index offset */
int frameIndexOffset;
/** acquisition period */
int64_t acquisitionPeriod;
/** frame number */
int32_t numberOfFrames;
/** dynamic range */
int dynamicRange;
/** short frames */
int shortFrame;
/** current frame number */
uint32_t currframenum;
/** Previous Frame number from buffer */
uint32_t prevframenum;
/** size of one frame */
int frameSize;
/** buffer size. different from framesize as we wait for one packet instead of frame for eiger */
int bufferSize;
/** oen buffer size */
int onePacketSize;
/** latest data */
char* latestData;
/** gui data ready */
int guiDataReady;
/** points to the data to send to gui */
char* guiData;
/** points to the filename to send to gui */
char* guiFileName;
/** temporary number for eiger frame number as its not included in the packet */
uint32_t guiFrameNumber;
/** send every nth frame to gui or only upon gui request*/
int nFrameToGui;
/** fifo size */
unsigned int fifosize;
/** number of jobs per thread for data compression */
int numJobsPerThread;
/** datacompression - save only hits */
bool dataCompression;
/** memory allocated for the buffer */
char *mem0[MAX_NUM_LISTENING_THREADS];
/** circular fifo to store addresses of data read */
CircularFifo<char>* fifo[MAX_NUM_LISTENING_THREADS];
/** circular fifo to store addresses of data already written and ready to be resued*/
CircularFifo<char>* fifoFree[MAX_NUM_LISTENING_THREADS];
/** Receiver buffer */
char *buffer[MAX_NUM_LISTENING_THREADS];
/** number of writer threads */
int numListeningThreads;
/** number of writer threads */
int numWriterThreads;
/** to know if listening and writer threads created properly */
int thread_started;
/** current listening thread index*/
int currentListeningThreadIndex;
/** current writer thread index*/
int currentWriterThreadIndex;
/** thread listening to packets */
pthread_t listening_thread[MAX_NUM_LISTENING_THREADS];
/** thread writing packets */
pthread_t writing_thread[MAX_NUM_WRITER_THREADS];
/** total frame count the listening thread has listened to */
int totalListeningFrameCount[MAX_NUM_LISTENING_THREADS];
/** mask showing which listening threads are running */
volatile uint32_t listeningthreads_mask;
/** mask showing which writer threads are running */
volatile uint32_t writerthreads_mask;
/** mask showing which threads have created files*/
volatile uint32_t createfile_mask;
/** OK if file created was successful */
int ret_createfile;
/** variable used to self terminate threads waiting for semaphores */
int killAllListeningThreads;
/** variable used to self terminate threads waiting for semaphores */
int killAllWritingThreads;
/** 10Gbe enable*/
int tengigaEnable;
//semaphores
/** semaphore to synchronize writer and guireader threads */
sem_t smp;
/** semaphore to synchronize listener threads */
sem_t listensmp[MAX_NUM_LISTENING_THREADS];
/** semaphore to synchronize writer threads */
sem_t writersmp[MAX_NUM_WRITER_THREADS];
//mutex
/** guiDataReady mutex */
pthread_mutex_t dataReadyMutex;
/** mutex for status */
pthread_mutex_t status_mutex;
/** mutex for progress variable currframenum */
pthread_mutex_t progress_mutex;
/** mutex for writing data to file */
pthread_mutex_t write_mutex;
/** File Descriptor */
FILE *sfilefd;
//filter
singlePhotonDetector<uint16_t> *singlePhotonDet[MAX_NUM_WRITER_THREADS];
slsReceiverData<uint16_t> *receiverdata[MAX_NUM_WRITER_THREADS];
moenchCommonMode *cmSub;
bool commonModeSubtractionEnable;
#ifdef MYROOT1
/** Tree where the hits are stored */
TTree *myTree[MAX_NUM_WRITER_THREADS];
/** File where the tree is saved */
TFile *myFile[MAX_NUM_WRITER_THREADS];
#endif
/**
callback arguments are
filepath
filename
fileindex
data size
return value is
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
*/
int (*startAcquisitionCallBack)(char*, char*,int, int, void*);
void *pStartAcquisition;
/**
args to acquisition finished callback
total frames caught
*/
void (*acquisitionFinishedCallBack)(int, void*);
void *pAcquisitionFinished;
/**
args to raw data ready callback are
framenum
datapointer
datasize in bytes
file descriptor
guidatapointer (NULL, no data required)
*/
void (*rawDataReadyCallBack)(int, char*, int, FILE*, char*, void*);
void *pRawDataReady;
/** The action which decides what the user and default responsibilites to save data are
* 0 raw data ready 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 */
int cbAction;
public: public:

View File

@ -94,11 +94,12 @@ void UDPBaseImplementation::resetTotalFramesCaught(){
/*file parameters*/ /*file parameters*/
char* UDPBaseImplementation::getFilePath() const{ char* UDPBaseImplementation::getFilePath() const{
FILE_LOG(logWARNING) << "[WARNING] This is a base implementation, " << __func__ << " could have no effects."; //FILE_LOG(logWARNING) << "[WARNING] This is a base implementation, " << __func__ << " could have no effects.";
return (char*)filePath; return (char*)filePath;
} }
char* UDPBaseImplementation::setFilePath(const char c[]){ inline char* UDPBaseImplementation::setFilePath(const char c[]){
cout << "SET FILE PATH " << c << endl;
if(strlen(c)){ if(strlen(c)){
//check if filepath exists //check if filepath exists
struct stat st; struct stat st;
@ -109,6 +110,7 @@ char* UDPBaseImplementation::setFilePath(const char c[]){
FILE_LOG(logWARNING) << "FilePath does not exist:" << filePath; FILE_LOG(logWARNING) << "FilePath does not exist:" << filePath;
} }
} }
cout << getFilePath() << " " << filePath << endl;
return getFilePath(); return getFilePath();
} }
@ -117,7 +119,7 @@ char* UDPBaseImplementation::getFileName() const{
return (char*)fileName; return (char*)fileName;
} }
char* UDPBaseImplementation::setFileName(const char c[]){ inline char* UDPBaseImplementation::setFileName(const char c[]){
//cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl; //cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl;
if(strlen(c)) if(strlen(c))
@ -132,17 +134,15 @@ int UDPBaseImplementation::getFileIndex(){
} }
int UDPBaseImplementation::setFileIndex(int i){ int UDPBaseImplementation::setFileIndex(int i){
cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl; //cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl;
/*
if(i>=0) if(i>=0)
fileIndex = i; fileIndex = i;
*/
return getFileIndex(); return getFileIndex();
} }
int UDPBaseImplementation::setFrameIndexNeeded(int i){ int UDPBaseImplementation::setFrameIndexNeeded(int i){
cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl; //cout << "[WARNING] This is a base implementation, " << __func__ << " could have no effects." << endl;
frameIndexNeeded = i; frameIndexNeeded = i;
return frameIndexNeeded; return frameIndexNeeded;
} }
@ -871,8 +871,10 @@ int UDPBaseImplementation::setupWriter(){
//acquisition start call back returns enable write //acquisition start call back returns enable write
if (startAcquisitionCallBack) if (startAcquisitionCallBack){
cout << filePath << " - " << fileName << endl;
cbAction=startAcquisitionCallBack(filePath,fileName,fileIndex,bufferSize,pStartAcquisition); cbAction=startAcquisitionCallBack(filePath,fileName,fileIndex,bufferSize,pStartAcquisition);
}
if(cbAction < DO_EVERYTHING) if(cbAction < DO_EVERYTHING)
cout << endl << "Note: Call back activated. Data saving must be taken care of by user in call back." << endl; cout << endl << "Note: Call back activated. Data saving must be taken care of by user in call back." << endl;
@ -952,6 +954,11 @@ int UDPBaseImplementation::createCompressionFile(int ithr, int iframe){
int UDPBaseImplementation::createNewFile(){ int UDPBaseImplementation::createNewFile(){
cout << "[WARNING] This is a base implementation, " << __func__ << " not correctly implemented" << endl;
/*
int gt = getFrameIndex(); int gt = getFrameIndex();
if(gt==-1) gt=0; if(gt==-1) gt=0;
//create file name //create file name
@ -960,6 +967,8 @@ int UDPBaseImplementation::createNewFile(){
else else
sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,(packetsCaught/packetsPerFrame),fileIndex); sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,(packetsCaught/packetsPerFrame),fileIndex);
cout << filePath << " + " << fileName << endl;
//if filewrite and we are allowed to write //if filewrite and we are allowed to write
if(enableFileWrite && cbAction > DO_NOTHING){ if(enableFileWrite && cbAction > DO_NOTHING){
//close //close
@ -974,7 +983,7 @@ int UDPBaseImplementation::createNewFile(){
return FAIL; return FAIL;
} }
}else if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){ }else if (NULL == (sfilefd = fopen((const char *) (savefilename), "w"))){
cout << "Error: Could not create file " << savefilename << endl; cout << "Error: Could not creat dsdasdserwe file " << savefilename << endl;
return FAIL; return FAIL;
} }
//setting buffer //setting buffer
@ -1001,7 +1010,7 @@ int UDPBaseImplementation::createNewFile(){
prevframenum = currframenum; prevframenum = currframenum;
packetsInFile = 0; packetsInFile = 0;
} }
*/
return OK; return OK;
} }

View File

@ -110,8 +110,11 @@ void UDPStandardImplementation::initializeMembers(){
strcpy(detHostname,""); strcpy(detHostname,"");
strcpy(guiFileName,""); strcpy(guiFileName,"");
strcpy(savefilename,""); strcpy(savefilename,"");
strcpy(filePath,"");
strcpy(fileName,"run"); setFileName("run");
setFilePath("");
//strcpy(filePath,"");
//strcpy(fileName,"run");
//status //status
@ -122,16 +125,17 @@ void UDPStandardImplementation::initializeMembers(){
} }
UDPStandardImplementation::UDPStandardImplementation(): UDPStandardImplementation::UDPStandardImplementation(){
thread_started(0),
eth(NULL),
latestData(NULL),
guiFileName(NULL),
guiFrameNumber(0),
tengigaEnable(0){
cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa" << endl; cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa" << endl;
thread_started = 0;
eth = NULL;
latestData = NULL;
guiFileName = NULL;
guiFrameNumber = 0;
tengigaEnable = 0;
for(int i=0;i<MAX_NUM_LISTENING_THREADS;i++){ for(int i=0;i<MAX_NUM_LISTENING_THREADS;i++){
udpSocket[i] = NULL; udpSocket[i] = NULL;
server_port[i] = DEFAULT_UDP_PORTNO+i; server_port[i] = DEFAULT_UDP_PORTNO+i;
@ -364,7 +368,6 @@ char* UDPStandardImplementation::getFilePath() const{
return (char*)filePath; return (char*)filePath;
} }
*/ */
/* /*
char* UDPStandardImplementation::setFilePath(const char c[]){ char* UDPStandardImplementation::setFilePath(const char c[]){
if(strlen(c)){ if(strlen(c)){
@ -1234,6 +1237,9 @@ int UDPStandardImplementation::createNewFile(){
else else
sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,(packetsCaught/packetsPerFrame),fileIndex); sprintf(savefilename, "%s/%s_f%012d_%d.raw", filePath,fileName,(packetsCaught/packetsPerFrame),fileIndex);
cout << filePath << " + " << fileName << endl;
//if filewrite and we are allowed to write //if filewrite and we are allowed to write
if(enableFileWrite && cbAction > DO_NOTHING){ if(enableFileWrite && cbAction > DO_NOTHING){
//close //close