From 894cc1c9e01819a59415a10e38109d63221abfb6 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil <33750417+thattil@users.noreply.github.com> Date: Mon, 3 Jun 2019 10:16:54 +0200 Subject: [PATCH] Simulator (#28) * WIP * wip * wip * removed loop * sending 1 frame * send multiple frames * c11 for server * WIP * WIP * Add CMake for the simulators. Requires some refactoring to make slsDetectorServer a proper library. * Working cmake for jungfrau * Working cmake for eiger * WIP * WIP * Add preliminary working eiger simulator and breaks the jungfrau simulator * virtual servers connected * changes to make it work for rhel7 and install binaries in bin * removed some unnecessary prints * removed binaries and virtual makefiles --- CMakeLists.txt | 22 ++- cmk.sh | 16 +- examples/jungfrau.config | 12 +- integrationTests/test-integrationMulti.cpp | 2 +- slsDetectorServers/CMakeLists.txt | 2 + .../eigerDetectorServer/CMakeLists.txt | 57 +++++++ .../eigerDetectorServer/Makefile.virtual | 28 ---- .../bin/eigerDetectorServer_virtualMaster | Bin 81024 -> 0 bytes .../bin/eigerDetectorServer_virtualSlave | Bin 81024 -> 0 bytes .../communication_funcs_UDP.h | 1 + .../slsDetectorFunctionList.c | 153 ++++++++++++++---- .../jungfrauDetectorServer/CMakeLists.txt | 26 +++ .../jungfrauDetectorServer/Makefile.virtual | 27 ---- .../bin/jungfrauDetectorServer_virtual | Bin 75496 -> 0 bytes .../communication_funcs_UDP.h | 1 + .../slsDetectorFunctionList.c | 98 ++++++++--- .../slsDetectorServer/communication_funcs.c | 4 + .../communication_funcs_UDP.h | 80 ++++----- .../slsDetectorFunctionList.h | 2 +- .../slsDetectorServer/slsDetectorServer.c | 2 - slsReceiverSoftware/CMakeLists.txt | 2 +- slsSupportLib/include/versionAPI.h | 1 - 22 files changed, 378 insertions(+), 158 deletions(-) create mode 100644 slsDetectorServers/CMakeLists.txt create mode 100644 slsDetectorServers/eigerDetectorServer/CMakeLists.txt delete mode 100755 slsDetectorServers/eigerDetectorServer/Makefile.virtual delete mode 100755 slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_virtualMaster delete mode 100755 slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave create mode 120000 slsDetectorServers/eigerDetectorServer/communication_funcs_UDP.h create mode 100644 slsDetectorServers/jungfrauDetectorServer/CMakeLists.txt delete mode 100755 slsDetectorServers/jungfrauDetectorServer/Makefile.virtual delete mode 100755 slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_virtual create mode 120000 slsDetectorServers/jungfrauDetectorServer/communication_funcs_UDP.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 70c2019ba..c9c394baa 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,14 @@ cmake_minimum_required(VERSION 3.9) project(slsDetectorPackage) - set(PROJECT_VERSION 5.0.0) -include(cmake/project_version.cmake) + include(CheckIPOSupported) + + + +include(cmake/project_version.cmake) + # Include additional modules that are used unconditionally include(GNUInstallDirs) @@ -34,6 +38,7 @@ option (SLS_USE_HDF5 "HDF5 File format" OFF) option (SLS_USE_TEXTCLIENT "Text Client" ON) option (SLS_USE_RECEIVER "Receiver" ON) option (SLS_USE_GUI "GUI" OFF) +option (SLS_USE_SIMULATOR "Simulator" OFF) option (SLS_USE_TESTS "TESTS" OFF) option (SLS_USE_INTEGRATION_TESTS "Integration Tests" OFF) option(SLS_USE_SANITIZER "Sanitizers for debugging" OFF) @@ -87,10 +92,12 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") -Wno-misleading-indentation # mostly in rapidjson remove using clang format -Wduplicated-cond -Wnull-dereference ) + endif() if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0) target_compile_options(slsProjectWarnings INTERFACE -Wno-class-memaccess ) + endif() endif() @@ -115,6 +122,8 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_INSTALL_RPATH "$ORIGIN") set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + + find_package(Doxygen) find_package(ZeroMQ 4 REQUIRED) @@ -130,6 +139,7 @@ if (SLS_USE_TEXTCLIENT) add_subdirectory(slsDetectorSoftware) endif (SLS_USE_TEXTCLIENT) + if (SLS_USE_RECEIVER) if (SLS_USE_HDF5) find_package(HDF5 1.10 COMPONENTS CXX REQUIRED) @@ -146,6 +156,10 @@ if (SLS_USE_GUI) endif() endif (SLS_USE_GUI) +if (SLS_USE_SIMULATOR) + add_subdirectory(slsDetectorServers) +endif (SLS_USE_SIMULATOR) + if (SLS_USE_INTEGRATION_TESTS) add_subdirectory(integrationTests) endif (SLS_USE_INTEGRATION_TESTS) @@ -160,9 +174,13 @@ configure_file( .clang-tidy if (DOXYGEN_FOUND) + # set input and output files set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/Doxyfile.in) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) + + # request to configure the file configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) + message("Doxygen build started") # note the option ALL which allows to build the docs together with the application add_custom_target( docs diff --git a/cmk.sh b/cmk.sh index 661d6c526..803c0ed8d 100755 --- a/cmk.sh +++ b/cmk.sh @@ -8,6 +8,7 @@ RECEIVER=0 GUI=0 DEBUG=0 PYTHON=0 +SIMULATOR=0 CLEAN=0 @@ -16,7 +17,7 @@ CMAKE_PRE="" CMAKE_POST="" usage() { echo -e " -Usage: $0 [-c] [-b] [-p] [e] [t] [r] [g] [-h] [-d ] [-j] +Usage: $0 [-c] [-b] [-p] [e] [t] [r] [g] [s] [-h] [-d ] [-j] -[no option]: only make -c: Clean -b: Builds/Rebuilds CMake files normal mode @@ -26,6 +27,7 @@ Usage: $0 [-c] [-b] [-p] [e] [t] [r] [g] [-h] [-d ] [-j] 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 diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_virtualSlave deleted file mode 100755 index 30fdb33b1760e65bb33c3ab83145aafb6c4d0c49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81024 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

diff --git a/slsDetectorServers/eigerDetectorServer/communication_funcs_UDP.h b/slsDetectorServers/eigerDetectorServer/communication_funcs_UDP.h
new file mode 120000
index 000000000..0d434a97d
--- /dev/null
+++ b/slsDetectorServers/eigerDetectorServer/communication_funcs_UDP.h
@@ -0,0 +1 @@
+../slsDetectorServer/communication_funcs_UDP.h
\ No newline at end of file
diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
index 2395d6687..1b57928de 100755
--- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c
@@ -11,6 +11,7 @@
 #include  //to gethostname
 #include 
 #ifdef VIRTUAL
+#include "communication_funcs_UDP.h"
 #include 
 #include 
 #endif
@@ -182,11 +183,8 @@ void basictests() {
 /* Ids */
 
 int64_t getDetectorId(enum idMode arg) {
-#ifdef VIRTUAL
-	return 0;
-#else
-	int64_t retval = -1;
 
+	int64_t retval = -1;
 	switch(arg) {
 	case DETECTOR_SERIAL_NUMBER:
 		retval =  getDetectorNumber();/** to be implemented with mac? */
@@ -203,7 +201,7 @@ int64_t getDetectorId(enum idMode arg) {
 	}
 
 	return retval;
-#endif
+
 }
 
 u_int64_t getFirmwareVersion() {
@@ -1026,6 +1024,7 @@ void setDAC(enum DACINDEX ind, int val, int mV) {
     }
 
 #ifdef VIRTUAL
+    int dacval = 0;
     if (!mV) {
         (detectorModules)->dacs[ind] = val;
     }
@@ -1213,7 +1212,21 @@ enum externalCommunicationMode getTiming() {
 /* configure mac */
 
 int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport, uint32_t udpport2) {
-#ifndef VIRTUAL
+#ifdef VIRTUAL
+	char cDestIp[MAX_STR_LENGTH];
+	memset(cDestIp, 0, MAX_STR_LENGTH);
+	sprintf(cDestIp, "%d.%d.%d.%d", (destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff);
+	FILE_LOG(logINFO, ("1G UDP: Destination (IP: %s, port:%d, port2:%d)\n", cDestIp, udpport, udpport2));
+	if (setUDPDestinationDetails(0, cDestIp, udpport) == FAIL) {
+		FILE_LOG(logERROR, ("could not set udp destination IP and port\n"));
+		return FAIL;
+	}
+	if (setUDPDestinationDetails(1, cDestIp, udpport2) == FAIL) {
+		FILE_LOG(logERROR, ("could not set udp destination IP and port2\n"));
+		return FAIL;
+	}
+    return OK;
+#else
     FILE_LOG(logINFO, ("Configuring MAC\n"));
 	
 	int src_port = DEFAULT_UDP_SOURCE_PORT;
@@ -1606,6 +1619,14 @@ int prepareAcquisition() {
 
 int startStateMachine() {
 #ifdef VIRTUAL
+	// create udp socket
+	if(createUDPSocket(0) != OK) {
+		return FAIL;
+	}
+	if(createUDPSocket(1) != OK) {
+		return FAIL;
+	}
+	FILE_LOG(logINFOBLUE, ("starting state machine\n"));
 	eiger_virtual_status = 1;
 	eiger_virtual_stop = 0;
 	if (pthread_create(&eiger_virtual_tid, NULL, &start_timer, NULL)) {
@@ -1638,23 +1659,109 @@ int startStateMachine() {
 		FILE_LOG(logINFOGREEN, ("Acquisition started\n"));
 	}
 
-	/*while(getRunStatus() == IDLE) {FILE_LOG(logINFO, ("waiting for being not idle anymore\n"));}*/
-
 	return ret;
 #endif
 }
 
 #ifdef VIRTUAL
 void* start_timer(void* arg) {
-	eiger_virtual_status = 1;
-	int wait_in_s = nimages_per_request * eiger_virtual_period;
-	FILE_LOG(logINFO, ("going to wait for %d s\n", wait_in_s));
-	while(!eiger_virtual_stop && (wait_in_s >= 0)) {
-		usleep(1000 * 1000);
-		wait_in_s--;
-	}
-	FILE_LOG(logINFO, ("Virtual Timer Done***\n"));
+	int64_t periodns = eiger_virtual_period;
+	int numFrames = nimages_per_request;
+	int64_t exp_ns = eiger_virtual_exptime;
 
+	int dr = eiger_dynamicrange;
+	double bytesPerPixel  = (double)dr/8.00;
+	int tgEnable = send_to_ten_gig;
+	int datasize = (tgEnable ? 4096 : 1024);
+	int packetsize = datasize + sizeof(sls_detector_header);
+	int numPacketsPerFrame =  (tgEnable ? 4 : 16) * dr;
+	int npixelsx = 256 * 2 * bytesPerPixel; 
+	int databytes = 256 * 256 * 2 * bytesPerPixel;
+	FILE_LOG(logINFO, (" dr:%f\n bytesperpixel:%d\n tgenable:%d\n datasize:%d\n packetsize:%d\n numpackes:5d\n npixelsx:%d\n databytes:%d\n",
+	dr, bytesPerPixel, tgEnable, datasize, packetsize, numPacketsPerFrame, npixelsx, databytes));
+
+
+		//TODO: Generate data
+		char imageData[databytes * 2];
+		memset(imageData, 0, databytes * 2);
+		{
+			int i = 0;
+			for (i = 0; i < databytes * 2; i += sizeof(uint8_t)) {
+				*((uint8_t*)(imageData + i)) = i;
+			}
+		}
+		
+		
+		//TODO: Send data
+		{
+			int frameNr = 1;
+			for(frameNr=1; frameNr <= numFrames; ++frameNr ) {
+				int srcOffset = 0;
+				int srcOffset2 = npixelsx;
+			
+				struct timespec begin, end;
+				clock_gettime(CLOCK_REALTIME, &begin);
+
+				usleep(exp_ns / 1000);
+
+				char packetData[packetsize];
+				memset(packetData, 0, packetsize);
+				char packetData2[packetsize];
+				memset(packetData2, 0, packetsize);
+				
+				// loop packet
+				{
+					int i = 0;
+					for(i = 0; i != numPacketsPerFrame; ++i) {
+						int dstOffset = sizeof(sls_detector_header);
+						int dstOffset2 = sizeof(sls_detector_header);
+						// set header
+						sls_detector_header* header = (sls_detector_header*)(packetData);
+						header->frameNumber = frameNr;
+						header->packetNumber = i;
+						header = (sls_detector_header*)(packetData2);
+						header->frameNumber = frameNr;
+						header->packetNumber = i;
+						// fill data	
+						{		
+							int psize = 0;	
+							for (psize = 0; psize < datasize; psize += npixelsx) {
+								if (dr == 32 && tgEnable == 0) {
+									memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx/2);
+									memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx/2);
+									srcOffset += npixelsx;
+									srcOffset2 += npixelsx;
+									dstOffset += npixelsx/2;
+									dstOffset2 += npixelsx/2;
+								} else {
+									memcpy(packetData + dstOffset, imageData + srcOffset, npixelsx);
+									memcpy(packetData2 + dstOffset2, imageData + srcOffset2, npixelsx);
+									srcOffset += 2 * npixelsx;
+									srcOffset2 += 2 * npixelsx;
+									dstOffset += npixelsx;
+									dstOffset2 += npixelsx;
+								}
+							}
+						}
+						
+						sendUDPPacket(0, packetData, packetsize);
+						sendUDPPacket(1, packetData2, packetsize);
+					}
+				}
+				FILE_LOG(logINFO, ("Sent frame: %d\n", frameNr));
+				clock_gettime(CLOCK_REALTIME, &end);
+				int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
+						(end.tv_nsec - begin.tv_nsec));
+	  
+				if (periodns > time_ns) {
+					usleep((periodns - time_ns)/ 1000);
+				}
+			}
+		}
+	
+	closeUDPSocket(0);
+	closeUDPSocket(1);
+	
 	eiger_virtual_status = 0;
 	return NULL;
 }
@@ -1662,6 +1769,7 @@ void* start_timer(void* arg) {
 
 
 
+
 int stopStateMachine() {
 	FILE_LOG(logINFORED, ("Going to stop acquisition\n"));
 #ifdef VIRTUAL
@@ -1749,10 +1857,6 @@ enum runStatus getRunStatus() {
 
 void readFrame(int *ret, char *mess) {
 #ifdef VIRTUAL
-	while(eiger_virtual_status) {
-		//FILE_LOG(logERROR ,"Waiting for finished flag\n"));
-		usleep(5000);
-	}
 	FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n"));
 	return;
 #else
@@ -1857,12 +1961,3 @@ int getTotalNumberOfChannels() {return  ((int)getNumberOfChannelsPerChip() * (in
 int getNumberOfChips() {return  NCHIP;}
 int getNumberOfDACs() {return  NDAC;}
 int getNumberOfChannelsPerChip() {return  NCHAN;}
-
-
-
-
-
-
-
-
-
diff --git a/slsDetectorServers/jungfrauDetectorServer/CMakeLists.txt b/slsDetectorServers/jungfrauDetectorServer/CMakeLists.txt
new file mode 100644
index 000000000..50574aa34
--- /dev/null
+++ b/slsDetectorServers/jungfrauDetectorServer/CMakeLists.txt
@@ -0,0 +1,26 @@
+add_executable(jungfrauDetectorServer
+    slsDetectorFunctionList.c
+    slsDetectorServer.c
+    slsDetectorServer_funcs.c
+    communication_funcs.c
+)
+
+target_include_directories(jungfrauDetectorServer
+    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_compile_definitions(jungfrauDetectorServer
+    PUBLIC JUNGFRAUD VIRTUAL STOP_SERVER
+)
+
+target_link_libraries(jungfrauDetectorServer
+    PUBLIC pthread rt
+)
+
+set_target_properties(jungfrauDetectorServer PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
+)
+
+install(TARGETS jungfrauDetectorServer
+    RUNTIME  DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
diff --git a/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual b/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual
deleted file mode 100755
index e38c85ca0..000000000
--- a/slsDetectorServers/jungfrauDetectorServer/Makefile.virtual
+++ /dev/null
@@ -1,27 +0,0 @@
-CC    		= gcc
-CFLAGS		+=  -Wall -DJUNGFRAUD -DVIRTUAL -DSTOP_SERVER #-DVERBOSEI #-DVERBOSE
-LDLIBS		+= 	-lm  -lstdc++  -pthread
-
-PROGS		= 	jungfrauDetectorServer_virtual 
-DESTDIR		?= 	bin
-INSTMODE	= 	0777
-
-SRC_CLNT	=	communication_funcs.c slsDetectorServer.c slsDetectorServer_funcs.c  slsDetectorFunctionList.c 
-OBJS 		= 	$(SRC_CLNT:.c=.o) 
- 
-all: clean versioning $(PROGS)
-
-boot: $(OBJS) 
-
-versioning: 
-	@echo `tput setaf 6;	./updateGitVersion.sh; tput sgr0;`
-	
-$(PROGS): $(OBJS)
-#	echo $(OBJS) 
-	mkdir -p $(DESTDIR) 
-	$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS) 
-	mv $(PROGS) $(DESTDIR)
-
-clean:
-	rm -rf $(DESTDIR)/$(PROGS)  *.o
-	
diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_virtual b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_virtual
deleted file mode 100755
index 4c211698faaa1a0db04b99fbe0e05d9ea330a864..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 75496
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
GIrtxn#yS`P

diff --git a/slsDetectorServers/jungfrauDetectorServer/communication_funcs_UDP.h b/slsDetectorServers/jungfrauDetectorServer/communication_funcs_UDP.h
new file mode 120000
index 000000000..0d434a97d
--- /dev/null
+++ b/slsDetectorServers/jungfrauDetectorServer/communication_funcs_UDP.h
@@ -0,0 +1 @@
+../slsDetectorServer/communication_funcs_UDP.h
\ No newline at end of file
diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
index d667d1349..ffb270ad4 100755
--- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
+++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c
@@ -1,7 +1,7 @@
 #include "slsDetectorFunctionList.h"
 #include "versionAPI.h"
 #include "logger.h"
-
+#include 
 #include "AD9257.h"		// commonServerFunctions.h, blackfin.h, ansi.h
 #include "LTC2620.h"    // dacs
 #include "MAX1932.h"    // hv
@@ -9,6 +9,7 @@
 #ifndef VIRTUAL
 #include "programfpga.h"
 #else
+#include "communication_funcs_UDP.h"
 #include "blackfin.h"
 #include 
 #include      // usleep
@@ -1097,6 +1098,14 @@ int configureMAC(int numInterfaces, int selInterface,
 		uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport,
 		uint32_t destip2, uint64_t destmac2, uint64_t sourcemac2, uint32_t sourceip2, uint32_t udpport2) {
 #ifdef VIRTUAL
+	char cDestIp[MAX_STR_LENGTH];
+	memset(cDestIp, 0, MAX_STR_LENGTH);
+	sprintf(cDestIp, "%d.%d.%d.%d", (destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff);
+	FILE_LOG(logINFO, ("1G UDP: Destination (IP: %s, port:%d)\n", cDestIp, udpport));
+	if (setUDPDestinationDetails(0, cDestIp, udpport) == FAIL) {
+		FILE_LOG(logERROR, ("could not set udp destination IP and port\n"));
+		return FAIL;
+	}
     return OK;
 #endif
 	FILE_LOG(logINFOBLUE, ("Configuring MAC\n"));
@@ -1437,7 +1446,7 @@ void setAdcPhase(int val, int degrees){
 	alignDeserializer();
 }
 
-int getPhase(degrees) {
+int getPhase(int degrees) {
 	if (!degrees)
 		return adcPhase;
 	// convert back to degrees
@@ -1581,11 +1590,16 @@ int setNetworkParameter(enum NETWORKINDEX mode, int value) {
 
 int startStateMachine(){
 #ifdef VIRTUAL
+	// create udp socket
+	if(createUDPSocket(0) != OK) {
+		return FAIL;
+	}
+	FILE_LOG(logINFOBLUE, ("starting state machine\n"));
 	virtual_status = 1;
 	virtual_stop = 0;
 	if(pthread_create(&pthread_virtual_tid, NULL, &start_timer, NULL)) {
-		virtual_status = 0;
 		FILE_LOG(logERROR, ("Could not start Virtual acquisition thread\n"));
+		virtual_status = 0;
 		return FAIL;
 	}
 	FILE_LOG(logINFOGREEN, ("Virtual Acquisition started\n"));
@@ -1606,16 +1620,69 @@ int startStateMachine(){
 
 #ifdef VIRTUAL
 void* start_timer(void* arg) {
-	int wait_in_s = 	(setTimer(FRAME_NUMBER, -1) *
+	int64_t periodns = setTimer(FRAME_PERIOD, -1);
+	int numFrames = (setTimer(FRAME_NUMBER, -1) *
 						setTimer(CYCLES_NUMBER, -1) *
-						(setTimer(STORAGE_CELL_NUMBER, -1) + 1) *
-						(setTimer(FRAME_PERIOD, -1)/(1E9)));
-	FILE_LOG(logDEBUG1, ("going to wait for %d s\n", wait_in_s));
-	while(!virtual_stop && (wait_in_s >= 0)) {
-		usleep(1000 * 1000);
-		wait_in_s--;
-	}
-	FILE_LOG(logINFOGREEN, ("Virtual Timer Done\n"));
+						(setTimer(STORAGE_CELL_NUMBER, -1) + 1));
+	int64_t exp_ns = 	setTimer(ACQUISITION_TIME, -1);
+
+		//TODO: Generate data
+		char imageData[DATA_BYTES];
+		memset(imageData, 0, DATA_BYTES);
+		{
+			int i = 0;
+			for (i = 0; i < DATA_BYTES; i += sizeof(uint16_t)) {
+				*((uint16_t*)(imageData + i)) = i;
+			}
+		}
+		int datasize = 8192;
+		
+		
+		//TODO: Send data
+		{
+			int frameNr = 0;
+			for(frameNr=0; frameNr!= numFrames; ++frameNr ) {
+				int srcOffset = 0;
+			
+				struct timespec begin, end;
+				clock_gettime(CLOCK_REALTIME, &begin);
+
+				usleep(exp_ns / 1000);
+
+				const int size = datasize + 112;
+				char packetData[size];
+				memset(packetData, 0, sizeof(sls_detector_header));
+				
+				// loop packet
+				{
+					int i = 0;
+					for(i=0; i!=128; ++i) {
+						// set header
+						sls_detector_header* header = (sls_detector_header*)(packetData);
+						header->frameNumber = frameNr;
+						header->packetNumber = i;
+						// fill data
+						memcpy(packetData + sizeof(sls_detector_header), imageData + srcOffset, datasize);
+						srcOffset += datasize;
+						
+						sendUDPPacket(0, packetData, size);
+					}
+				}
+				FILE_LOG(logINFO, ("Sent frame: %d\n", frameNr));
+				clock_gettime(CLOCK_REALTIME, &end);
+				int64_t time_ns = ((end.tv_sec - begin.tv_sec) * 1E9 +
+						(end.tv_nsec - begin.tv_nsec));
+	  
+				if (periodns > time_ns) {
+					usleep((periodns - time_ns)/ 1000);
+				}
+			}
+		}
+		
+	// }
+
+	
+	closeUDPSocket(0);
 
 	virtual_status = 0;
 	return NULL;
@@ -1694,10 +1761,7 @@ enum runStatus getRunStatus(){
 
 void readFrame(int *ret, char *mess){
 #ifdef VIRTUAL
-	while(virtual_status) {
-		//FILE_LOG(logERROR, ("Waiting for finished flag\n");
-		usleep(5000);
-	}
+	FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n"));
 	return;
 #endif
 	// wait for status to be done
@@ -1745,5 +1809,3 @@ int getTotalNumberOfChannels(){return  ((int)getNumberOfChannelsPerChip() * (int
 int getNumberOfChips(){return  NCHIP;}
 int getNumberOfDACs(){return  NDAC;}
 int getNumberOfChannelsPerChip(){return  NCHAN;}
-
-
diff --git a/slsDetectorServers/slsDetectorServer/communication_funcs.c b/slsDetectorServers/slsDetectorServer/communication_funcs.c
index 153b4c719..3c4bae02e 100755
--- a/slsDetectorServers/slsDetectorServer/communication_funcs.c
+++ b/slsDetectorServers/slsDetectorServer/communication_funcs.c
@@ -4,8 +4,12 @@
 #include 
 #include 
 #include 
+
+#include 
 #include 
 
+
+
 #define SEND_REC_MAX_SIZE 4096
 #define DEFAULT_PORTNO    1952
 #define DEFAULT_BACKLOG 5
diff --git a/slsDetectorServers/slsDetectorServer/communication_funcs_UDP.h b/slsDetectorServers/slsDetectorServer/communication_funcs_UDP.h
index e42343351..622e92694 100755
--- a/slsDetectorServers/slsDetectorServer/communication_funcs_UDP.h
+++ b/slsDetectorServers/slsDetectorServer/communication_funcs_UDP.h
@@ -15,25 +15,25 @@
 #include 
 #include 
 
-int udpSockfd = -1;
-struct addrinfo* udpServerAddrInfo = 0;
-unsigned short int udpDestinationPort = 0;
-char udpDestinationIp[MAX_STR_LENGTH] = "";
+int udpSockfd[2] = {-1, -1};
+struct addrinfo* udpServerAddrInfo[2] = {0, 0};
+unsigned short int udpDestinationPort[2] = {0, 0};
+char udpDestinationIp[2][MAX_STR_LENGTH] = {"", ""};
 
 //DEFAULT_TX_UDP_PORT;// src port
-int getUdPSocketDescriptor() {
-	return udpSockfd;
+int getUdPSocketDescriptor(int index) {
+	return udpSockfd[index];
 }
 
-int setUDPDestinationDetails(const char* ip, unsigned short int port) {
-	udpDestinationPort = port;
+int setUDPDestinationDetails(int index, const char* ip, unsigned short int port) {
+	udpDestinationPort[index] = port;
 	size_t len = strlen(ip);
-	memset(udpDestinationIp, 0, MAX_STR_LENGTH);
-	strncpy(udpDestinationIp, ip, len > MAX_STR_LENGTH ? MAX_STR_LENGTH : len );
+	memset(udpDestinationIp[index], 0, MAX_STR_LENGTH);
+	strncpy(udpDestinationIp[index], ip, len > MAX_STR_LENGTH ? MAX_STR_LENGTH : len );
 
-	if (udpServerAddrInfo) {
-		freeaddrinfo(udpServerAddrInfo);
-		udpServerAddrInfo = 0;
+	if (udpServerAddrInfo[index]) {
+		freeaddrinfo(udpServerAddrInfo[index]);
+		udpServerAddrInfo[index] = 0;
 	}
 
 	// convert ip to internet address
@@ -45,73 +45,73 @@ int setUDPDestinationDetails(const char* ip, unsigned short int port) {
 	hints.ai_protocol = 0;
 	char sport[100];
 	memset(sport, 0, 100);
-	sprintf(sport, "%d", udpDestinationPort);
-	int err = getaddrinfo(udpDestinationIp, sport, &hints, &udpServerAddrInfo);
+	sprintf(sport, "%d", udpDestinationPort[index]);
+	int err = getaddrinfo(udpDestinationIp[index], sport, &hints, &udpServerAddrInfo[index]);
 	if (err != 0) {
 		FILE_LOG(logERROR, ("Failed to resolve remote socket address %s at port %d. "
-				"(Error code:%d, %s)\n", udpDestinationIp, udpDestinationPort, err, gai_strerror(err)));
+				"(Error code:%d, %s)\n", udpDestinationIp[index], udpDestinationPort[index], err, gai_strerror(err)));
 		return FAIL;
 	}
-	if (udpServerAddrInfo == NULL) {
+	if (udpServerAddrInfo[index] == NULL) {
 		FILE_LOG(logERROR, ("Failed to resolve remote socket address %s at port %d "
-				"(getaddrinfo returned NULL)\n", udpDestinationIp, udpDestinationPort));
-		udpServerAddrInfo = 0;
+				"(getaddrinfo returned NULL)\n", udpDestinationIp[index], udpDestinationPort[index]));
+		udpServerAddrInfo[index] = 0;
 		return FAIL;
 	}
 
 	return OK;
 }
 
-int createUDPSocket() {
-	FILE_LOG(logDEBUG2, ("Creating UDP Socket\n"));
-	if (!strlen(udpDestinationIp)) {
+int createUDPSocket(int index) {
+	FILE_LOG(logDEBUG2, ("Creating UDP Socket %d\n", index));
+	if (!strlen(udpDestinationIp[index])) {
 		FILE_LOG(logERROR, ("No destination UDP ip specified.\n"));
 		return FAIL;
 	}
 
-	if (udpSockfd != -1) {
+	if (udpSockfd[index] != -1) {
 		FILE_LOG(logERROR, ("Strange that Udp socket was still open. Closing it to create a new one\n"));
-		close(udpSockfd);
-		udpSockfd = -1;
+		close(udpSockfd[index]);
+		udpSockfd[index] = -1;
 	}
 
 	// Creating socket file descriptor
-	udpSockfd = socket(udpServerAddrInfo->ai_family, udpServerAddrInfo->ai_socktype, udpServerAddrInfo->ai_protocol);
-	if (udpSockfd  == -1 ) {
+	udpSockfd[index] = socket(udpServerAddrInfo[index]->ai_family, udpServerAddrInfo[index]->ai_socktype, udpServerAddrInfo[index]->ai_protocol);
+	if (udpSockfd[index]  == -1 ) {
 		FILE_LOG(logERROR, ("UDP socket at port %d failed. (Error code:%d, %s)\n",
-				udpDestinationPort, errno, gai_strerror(errno)));
+				udpDestinationPort[index], errno, gai_strerror(errno)));
 		return FAIL;
 	}
 	FILE_LOG(logINFO, ("Udp client socket created for server (port %d, ip:%s)\n",
-			udpDestinationPort, udpDestinationIp));
+			udpDestinationPort[index], udpDestinationIp[index]));
 
 	// connecting allows to use "send/write" instead of "sendto", avoiding checking for server address for each packet
 	// using write without a connect will end in segv
-	if (connect(udpSockfd,udpServerAddrInfo->ai_addr, udpServerAddrInfo->ai_addrlen)==-1) {
+	if (connect(udpSockfd[index],udpServerAddrInfo[index]->ai_addr, udpServerAddrInfo[index]->ai_addrlen)==-1) {
 		FILE_LOG(logERROR, ("Could not connect to UDP server at ip:%s, port:%d. (Error code:%d, %s)\n",
-				udpDestinationIp, udpDestinationPort,  errno, gai_strerror(errno)));
+				udpDestinationIp[index], udpDestinationPort[index],  errno, gai_strerror(errno)));
 	}
 	FILE_LOG(logINFO, ("Udp client socket connected\n",
-				udpDestinationPort, udpDestinationIp));
+				udpDestinationPort[index], udpDestinationIp[index]));
 	return OK;
 }
 
-int sendUDPPacket(const char* buf, int length) {
-	int n = write(udpSockfd, buf, length);
+int sendUDPPacket(int index, const char* buf, int length) {
+	int n = write(udpSockfd[index], buf, length);
 	// udp sends atomically, no need to handle partial data
 	if (n == -1) {
-		FILE_LOG(logERROR, ("Could not send udp packet. (Error code:%d, %s)\n",
-				n, errno, gai_strerror(errno)));
+		FILE_LOG(logERROR, ("Could not send udp packet for socket %d. (Error code:%d, %s)\n",
+				index, n, errno, gai_strerror(errno)));
 	} else {
 		FILE_LOG(logDEBUG2, ("%d bytes sent\n", n));
 	}
 	return n;
 }
 
-void closeUDPSocket() {
-	if (udpSockfd != -1) {
+void closeUDPSocket(int index) {
+	if (udpSockfd[index] != -1) {
 		FILE_LOG(logINFO, ("Udp client socket closed\n"));
-		close(udpSockfd);
-		udpSockfd = -1;
+		close(udpSockfd[index]);
+		udpSockfd[index] = -1;
 	}
 }
diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h
index 85eef8e34..ba3bff0fb 100755
--- a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h
+++ b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h
@@ -5,7 +5,7 @@
 #endif
 #include 
 #include 					// FILE
-
+#include 
 
 /****************************************************
 This functions are used by the slsDetectroServer_funcs interface.
diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer.c
index 6c8413ed5..669009059 100755
--- a/slsDetectorServers/slsDetectorServer/slsDetectorServer.c
+++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer.c
@@ -30,7 +30,6 @@ void error(char *msg){
 }
 
 int main(int argc, char *argv[]){
-	
 	// print version
 	if (argc > 1 && !strcasecmp(argv[1], "-version")) {
         int version = 0;
@@ -142,4 +141,3 @@ int main(int argc, char *argv[]){
 	FILE_LOG(logINFO,("Goodbye!\n"));
 	return 0;
 }
-
diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt
index 4d483adc7..a27633663 100755
--- a/slsReceiverSoftware/CMakeLists.txt
+++ b/slsReceiverSoftware/CMakeLists.txt
@@ -92,7 +92,7 @@ if (SLS_USE_TESTS)
     add_subdirectory(tests)
 endif(SLS_USE_TESTS)
 
-install(TARGETS slsReceiverShared
+install(TARGETS slsReceiverShared slsReceiver
         EXPORT "${TARGETS_EXPORT_NAME}"
         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h
index 08ceab081..c223fb436 100644
--- a/slsSupportLib/include/versionAPI.h
+++ b/slsSupportLib/include/versionAPI.h
@@ -6,6 +6,5 @@
 #define APIRECEIVER 0x190405
 #define APIGUI 0x190405
 #define APIEIGER 0x190516
-
 #define APICTB 0x190528
 #define APIJUNGFRAU 0x190528