diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp index 61991fe45..31a683cfe 100755 --- a/slsDetectorGui/src/qTabAdvanced.cpp +++ b/slsDetectorGui/src/qTabAdvanced.cpp @@ -361,7 +361,7 @@ void qTabAdvanced::SetDetectorUDPIP() { std::string s = dispDetectorUDPIP->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Detector UDP IP:" << s; try { - det->setSourceUDPIP(s, {comboDetector->currentIndex()}); + det->setSourceUDPIP(sls::IpAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Detector UDP IP.", "qTabAdvanced::SetDetectorUDPIP", this, &qTabAdvanced::GetDetectorUDPIP) @@ -371,7 +371,7 @@ void qTabAdvanced::SetDetectorUDPMAC() { std::string s = dispDetectorUDPMAC->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Detector UDP MAC:" << s; try { - det->setSourceUDPMAC(s, {comboDetector->currentIndex()}); + det->setSourceUDPMAC(sls::MacAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Detector UDP MAC.", "qTabAdvanced::SetDetectorUDPMAC", this, &qTabAdvanced::GetDetectorUDPMAC) @@ -390,7 +390,7 @@ void qTabAdvanced::SetCltZMQIP() { std::string s = dispZMQIP->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Client ZMQ IP:" << s; try { - det->setClientZmqIp(s, {comboDetector->currentIndex()}); + det->setClientZmqIp(sls::IpAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Client ZMQ IP.", "qTabAdvanced::SetCltZMQIP", this, &qTabAdvanced::GetCltZMQIP) @@ -431,7 +431,7 @@ void qTabAdvanced::SetRxrUDPIP() { std::string s = dispRxrUDPIP->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Receiver UDP IP:" << s; try { - det->setDestinationUDPIP(s, {comboDetector->currentIndex()}); + det->setDestinationUDPIP(sls::IpAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Receiver UDP IP.", "qTabAdvanced::SetRxrUDPIP", this, &qTabAdvanced::GetRxrUDPIP) @@ -441,7 +441,7 @@ void qTabAdvanced::SetRxrUDPMAC() { std::string s = dispRxrUDPMAC->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Receiver UDP MAC:" << s; try { - det->setDestinationUDPMAC(s, {comboDetector->currentIndex()}); + det->setDestinationUDPMAC(sls::MacAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Receiver UDP MAC.", "qTabAdvanced::SetRxrUDPMAC", this, &qTabAdvanced::GetRxrUDPMAC) @@ -460,7 +460,7 @@ void qTabAdvanced::SetRxrZMQIP() { std::string s = dispRxrZMQIP->text().toAscii().constData(); FILE_LOG(logINFO) << "Setting Receiver ZMQ IP:" << s; try { - det->setRxZmqIP(s, {comboDetector->currentIndex()}); + det->setRxZmqIP(sls::IpAddr{s}, {comboDetector->currentIndex()}); } CATCH_HANDLE ("Could not set Receiver ZMQ IP.", "qTabAdvanced::SetRxrZMQIP", this, &qTabAdvanced::GetRxrZMQIP) diff --git a/slsReceiverSoftware/include/BinaryFileStatic.h b/slsReceiverSoftware/include/BinaryFileStatic.h index 032aeed30..b1e60fd00 100755 --- a/slsReceiverSoftware/include/BinaryFileStatic.h +++ b/slsReceiverSoftware/include/BinaryFileStatic.h @@ -196,10 +196,9 @@ class BinaryFileStatic { * @param fd file pointer * @param owenable overwrite enable * @param fname complete file name - * @param filebuffersize file buffer size * @returns 0 for success and 1 for fail */ - static void CreateDataFile(FILE*& fd, bool owenable, std::string fname, size_t filebuffersize) + static void CreateDataFile(FILE*& fd, bool owenable, std::string fname) { if(!owenable){ if (NULL == (fd = fopen((const char *) fname.c_str(), "wx"))){ @@ -210,8 +209,8 @@ class BinaryFileStatic { fd = 0; throw sls::RuntimeError("Could not create file " + fname); } - //setting file buffer size to 16mb - setvbuf(fd,NULL,_IOFBF,filebuffersize); + //setting to no file buffering + setvbuf(fd, NULL, _IONBF, 0); } }; diff --git a/slsReceiverSoftware/src/BinaryFile.cpp b/slsReceiverSoftware/src/BinaryFile.cpp index bad78e8f2..a5119dec1 100755 --- a/slsReceiverSoftware/src/BinaryFile.cpp +++ b/slsReceiverSoftware/src/BinaryFile.cpp @@ -49,7 +49,7 @@ void BinaryFile::CreateFile() { currentFileName = BinaryFileStatic::CreateFileName(*filePath, *fileNamePrefix, *fileIndex, subFileIndex, *detIndex, *numUnitsPerDetector, index); - BinaryFileStatic::CreateDataFile(filefd, *overWriteEnable, currentFileName, FILE_BUFFER_SIZE); + BinaryFileStatic::CreateDataFile(filefd, *overWriteEnable, currentFileName); if(!(*silentMode)) { FILE_LOG(logINFO) << "[" << *udpPortNumber << "]: Binary File created: " << currentFileName; diff --git a/slsReceiverSoftware/src/Fifo.cpp b/slsReceiverSoftware/src/Fifo.cpp index 0271f8685..b100fdaec 100755 --- a/slsReceiverSoftware/src/Fifo.cpp +++ b/slsReceiverSoftware/src/Fifo.cpp @@ -45,13 +45,17 @@ void Fifo::CreateFifos(uint32_t fifoItemSize) { fifoFree = new CircularFifo(fifoDepth); fifoStream = new CircularFifo(fifoDepth); //allocate memory - size_t mem_len = fifoItemSize * fifoDepth * sizeof(char); + size_t mem_len = (size_t)fifoItemSize * (size_t)fifoDepth * sizeof(char); memory = (char*) malloc (mem_len); if (memory == nullptr){ throw sls::RuntimeError("Could not allocate memory for fifos"); } memset(memory, 0, mem_len); - FILE_LOG(logDEBUG) << "Memory Allocated " << index << ": " << mem_len << " bytes"; + int pagesize = getpagesize(); + for (size_t i = 0; i < mem_len; i += pagesize) { + strcpy(memory + i, "memory"); + } + FILE_LOG(logDEBUG) << "Memory Allocated " << index << ": " << (double)mem_len/(double)(1024 * 1024) << " MB"; { //push free addresses into fifoFree fifo char* buffer = memory; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 0025d1e80..c3136aeb9 100755 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -193,10 +193,10 @@ void Implementation::SetupFifoStructure() { } FILE_LOG(logINFO) << "Memory Allocated Per Fifo: " - << (((generalData->imageSize) + - (generalData->fifoBufferHeaderSize)) * - fifoDepth) - << " bytes"; + << (double)(((size_t)(generalData->imageSize) + + (size_t)(generalData->fifoBufferHeaderSize)) * + (size_t)fifoDepth) / (double)(1024 * 1024) + << " MB"; FILE_LOG(logINFO) << numThreads << " Fifo structure(s) reconstructed"; } diff --git a/slsReceiverSoftware/src/main.cpp b/slsReceiverSoftware/src/main.cpp index 6cb7b147e..ef99ab8a7 100755 --- a/slsReceiverSoftware/src/main.cpp +++ b/slsReceiverSoftware/src/main.cpp @@ -14,11 +14,12 @@ #include #include //usleep #include +#include -bool keeprunning; +sem_t semaphore; void sigInterruptHandler(int p){ - keeprunning = false; + sem_post(&semaphore); } /** Define Colors to print data call back in different colors for different recievers */ @@ -65,7 +66,8 @@ void GetData(char* metadata, char* datapointer, uint32_t datasize, void* p){ int main(int argc, char *argv[]) { - keeprunning = true; + sem_init(&semaphore,1,0); + FILE_LOG(logINFOBLUE) << "Created [ Tid: " << syscall(SYS_gettid) << " ]"; // Catch signal SIGINT to close files and call destructors properly @@ -136,8 +138,8 @@ int main(int argc, char *argv[]) { //receiver->registerCallBackRawDataReady(rawDataReadyCallBack,NULL); FILE_LOG(logINFO) << "[ Press \'Ctrl+c\' to exit ]"; - while(keeprunning) - pause(); + sem_wait(&semaphore); + sem_destroy(&semaphore); FILE_LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; FILE_LOG(logINFO) << "Exiting Receiver"; return 0; diff --git a/slsReceiverSoftware/src/multiReceiver.cpp b/slsReceiverSoftware/src/multiReceiver.cpp index ce9053113..87fd37b6e 100755 --- a/slsReceiverSoftware/src/multiReceiver.cpp +++ b/slsReceiverSoftware/src/multiReceiver.cpp @@ -29,6 +29,7 @@ It is linked in manual/manual-api from slsReceiverSoftware/include ] #include //wait #include //tid #include //usleep +#include using namespace std; @@ -36,15 +37,14 @@ using namespace std; #define PRINT_IN_COLOR(c,f, ...) printf ("\033[%dm" f RESET, 30 + c+1, ##__VA_ARGS__) -/** Variable is true to continue running, set to false upon interrupt */ -bool keeprunning; +sem_t semaphore; /** * Control+C Interrupt Handler - * Sets the variable keeprunning to false, to let all the processes know to exit properly + * to let all the processes know to exit properly */ void sigInterruptHandler(int p){ - keeprunning = false; + sem_post(&semaphore); } /** @@ -165,7 +165,7 @@ int main(int argc, char *argv[]) { int numReceivers = 1; int startTCPPort = 1954; int withCallback = 0; - keeprunning = true; + sem_init(&semaphore,1,0); /** - get number of receivers and start tcp port from command line arguments */ if ( (argc != 4) || (!sscanf(argv[1],"%d", &startTCPPort)) || (!sscanf(argv[2],"%d", &numReceivers)) || (!sscanf(argv[3],"%d", &withCallback)) ) @@ -238,9 +238,9 @@ int main(int argc, char *argv[]) { else if (withCallback == 2) receiver->registerCallBackRawDataModifyReady(GetData,nullptr); } - /** - as long as keeprunning is true (changes with Ctrl+C) */ - while(keeprunning) - pause(); + /** - as long as no Ctrl+C */ + sem_wait(&semaphore); + sem_destroy(&semaphore); cprintf(BLUE,"Exiting Child Process [ Tid: %ld ]\n", (long)syscall(SYS_gettid)); exit(EXIT_SUCCESS); break;