//#ifdef SLS_RECEIVER_UDP_FUNCTIONS /********************************************//** * @file UDPBaseImplementation.cpp * @short does all the functions for a receiver, set/get parameters, start/stop etc. ***********************************************/ #include "UDPBaseImplementation.h" #include "genericSocket.h" #include // stat #include #include using namespace std; /************************************************************************* * Constructor & Destructor ********************************************** * They access local cache of configuration or detector parameters ******* *************************************************************************/ UDPBaseImplementation::UDPBaseImplementation(){ FILE_LOG(logDEBUG) << __AT__ << " starting"; initializeMembers(); //***callback parameters*** startAcquisitionCallBack = NULL; pStartAcquisition = NULL; acquisitionFinishedCallBack = NULL; pAcquisitionFinished = NULL; rawDataReadyCallBack = NULL; pRawDataReady = NULL; } void UDPBaseImplementation::initializeMembers(){ FILE_LOG(logDEBUG) << __AT__ << " starting"; FILE_LOG(logDEBUG) << "Info: Initializing base members"; //**detector parameters*** myDetectorType = GENERIC; strcpy(detHostname,""); packetsPerFrame = 0; acquisitionPeriod = 0; numberOfFrames = 0; dynamicRange = 16; tengigaEnable = false; fifoDepth = 0; bottomEnable = false; //***receiver parameters*** status = IDLE; //***connection parameters*** strcpy(eth,""); for(int i=0;i config_map){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } void UDPBaseImplementation::setBottomEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; bottomEnable = b; FILE_LOG(logINFO) << "Bottom - " << stringEnable(bottomEnable); } /***file parameters***/ void UDPBaseImplementation::setFileName(const char c[]){ FILE_LOG(logDEBUG) << __AT__ << " starting"; if(strlen(c)) strcpy(fileName, c); FILE_LOG(logINFO) << "File name:" << fileName; } void UDPBaseImplementation::setFilePath(const char c[]){ FILE_LOG(logDEBUG) << __AT__ << " starting"; if(strlen(c)){ //check if filepath exists struct stat st; if(stat(c,&st) == 0) strcpy(filePath,c); else{ strcpy(filePath,""); FILE_LOG(logWARNING) << "FilePath does not exist:" << filePath; } strcpy(filePath, c); } FILE_LOG(logDEBUG) << "Info: File path:" << filePath; } void UDPBaseImplementation::setFileIndex(const uint64_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; fileIndex = i; FILE_LOG(logINFO) << "File Index:" << fileIndex; } //FIXME: needed? void UDPBaseImplementation::setScanTag(const int i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; scanTag = i; FILE_LOG(logINFO) << "Scan Tag:" << scanTag; } void UDPBaseImplementation::setFrameIndexEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; frameIndexEnable = b; FILE_LOG(logINFO) << "Frame Index Enable: " << stringEnable(frameIndexEnable); } void UDPBaseImplementation::setFileWriteEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; fileWriteEnable = b; FILE_LOG(logINFO) << "File Write Enable: " << stringEnable(fileWriteEnable); } void UDPBaseImplementation::setOverwriteEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; overwriteEnable = b; FILE_LOG(logINFO) << "Overwrite Enable: " << stringEnable(overwriteEnable); } int UDPBaseImplementation::setDataCompressionEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; dataCompressionEnable = b; FILE_LOG(logINFO) << "Data Compression : " << stringEnable(dataCompressionEnable); //overridden methods might return FAIL return OK; } /***connection parameters***/ void UDPBaseImplementation::setUDPPortNumber(const uint32_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; udpPortNum[0] = i; FILE_LOG(logINFO) << "UDP Port Number[0]:" << udpPortNum[0]; } void UDPBaseImplementation::setUDPPortNumber2(const uint32_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; udpPortNum[1] = i; FILE_LOG(logINFO) << "UDP Port Number[1]:" << udpPortNum[1]; } void UDPBaseImplementation::setEthernetInterface(const char* c){ FILE_LOG(logDEBUG) << __AT__ << " starting"; strcpy(eth, c); FILE_LOG(logINFO) << "Ethernet Interface: " << eth; } /***acquisition parameters***/ void UDPBaseImplementation::setShortFrameEnable(const int i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; shortFrameEnable = i; FILE_LOG(logINFO) << "Short Frame Enable: " << stringEnable(shortFrameEnable); } int UDPBaseImplementation::setFrameToGuiFrequency(const uint32_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; FrameToGuiFrequency = i; FILE_LOG(logINFO) << "Frame To Gui Frequency:" << FrameToGuiFrequency; //overrridden child classes might return FAIL return OK; } int UDPBaseImplementation::setAcquisitionPeriod(const uint64_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; acquisitionPeriod = i; FILE_LOG(logINFO) << "Acquisition Period:" << (double)acquisitionPeriod/(1E9) << "s"; //overrridden child classes might return FAIL return OK; } int UDPBaseImplementation::setNumberOfFrames(const uint64_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; numberOfFrames = i; FILE_LOG(logINFO) << "Number of Frames:" << numberOfFrames; //overrridden child classes might return FAIL return OK; } int UDPBaseImplementation::setDynamicRange(const uint32_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; dynamicRange = i; FILE_LOG(logINFO) << "Dynamic Range:" << dynamicRange; //overrridden child classes might return FAIL return OK; } int UDPBaseImplementation::setTenGigaEnable(const bool b){ FILE_LOG(logDEBUG) << __AT__ << " starting"; tengigaEnable = b; FILE_LOG(logINFO) << "Ten Giga Enable: " << stringEnable(tengigaEnable); //overridden functions might return FAIL return OK; } int UDPBaseImplementation::setFifoDepth(const uint32_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; fifoDepth = i; FILE_LOG(logINFO) << "Fifo Depth: " << i; //overridden functions might return FAIL return OK; } /************************************************************************* * Behavioral functions*************************************************** * They may modify the status of the receiver **************************** *************************************************************************/ /***initial functions***/ int UDPBaseImplementation::setDetectorType(const detectorType d){ FILE_LOG(logDEBUG) << __AT__ << " starting"; myDetectorType = d; //if eiger, set numberofListeningThreads = 2; FILE_LOG(logINFO) << "Detector Type:" << getDetectorType(d); return OK; } void UDPBaseImplementation::initialize(const char *c){ FILE_LOG(logDEBUG) << __AT__ << " starting"; if(strlen(c)) strcpy(detHostname, c); FILE_LOG(logINFO) << "Detector Hostname:" << detHostname; } /***acquisition functions***/ void UDPBaseImplementation::resetAcquisitionCount(){ FILE_LOG(logDEBUG) << __AT__ << " starting"; totalPacketsCaught = 0; FILE_LOG(logINFO) << "totalPacketsCaught:" << totalPacketsCaught; } int UDPBaseImplementation::startReceiver(char *c){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; return OK; } void UDPBaseImplementation::stopReceiver(){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } void UDPBaseImplementation::startReadout(){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } int UDPBaseImplementation::shutDownUDPSockets(){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; //overridden functions might return FAIL return OK; } void UDPBaseImplementation::readFrame(char* c,char** raw, uint64_t &startAcquisitionIndex, uint64_t &startFrameIndex){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } //FIXME: needed, isnt stopReceiver enough? void UDPBaseImplementation::abort(){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } void UDPBaseImplementation::closeFile(int i){ FILE_LOG(logWARNING) << __AT__ << " doing nothing..."; FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes"; } /***callback functions***/ void UDPBaseImplementation::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){ startAcquisitionCallBack=func; pStartAcquisition=arg; } void UDPBaseImplementation::registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){ acquisitionFinishedCallBack=func; pAcquisitionFinished=arg; } void UDPBaseImplementation::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){ rawDataReadyCallBack=func; pRawDataReady=arg; } //#endif