diff --git a/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h b/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h index 94cdbf86a..4fb2b568a 100644 --- a/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h @@ -8,6 +8,9 @@ /* Status register */ #define STATUS_REG (0x01 << MEM_MAP_SHIFT) +#define RUN_BUSY_OFST (0) +#define RUN_BUSY_MSK (0x00000001 << RUN_BUSY_OFST) + /* Set Cycles 64 bit register */ #define SET_CYCLES_LSB_REG (0x02 << MEM_MAP_SHIFT) #define SET_CYCLES_MSB_REG (0x03 << MEM_MAP_SHIFT) diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c index 70bea8e5e..2d8ed5847 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c @@ -168,6 +168,12 @@ void initStopServer() { void setupDetector() { FILE_LOG(logINFO, ("This Server is for 1 Mythen3 module \n")); + + //Initialization of acquistion parameters + setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES); + setTimer(CYCLES_NUMBER, DEFAULT_NUM_CYCLES); + setTimer(ACQUISITION_TIME, DEFAULT_EXPTIME); + } @@ -280,6 +286,23 @@ int64_t getTimeLeft(enum timerIndex ind){ return -1; } + +int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport) { +#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 + return OK; +} + + int startStateMachine(){ #ifdef VIRTUAL // create udp socket @@ -314,8 +337,10 @@ void* start_timer(void* arg) { // loop over number of frames for(frameNr=0; frameNr!= numFrames; ++frameNr ) { - //check if virtual_stop is high, then break - + //check if virtual_stop is high + if(virtual_stop == 1){ + break; + } // sleep for exposure time struct timespec begin, end; clock_gettime(CLOCK_REALTIME, &begin); @@ -334,6 +359,7 @@ void* start_timer(void* arg) { // set register frames left } + closeUDPSocket(0); // set status to idle virtual_status = 0; return NULL; @@ -364,12 +390,25 @@ enum runStatus getRunStatus(){ } void readFrame(int *ret, char *mess){ + // wait for status to be done + while(runBusy()){ + usleep(500); + } #ifdef VIRTUAL FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n")); return; #endif } +u_int32_t runBusy() { +#ifdef VIRTUAL + return virtual_status; +#endif + u_int32_t s = (bus_r(STATUS_REG) & RUN_BUSY_MSK); + FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s)); + return s; +} + /* common */ int calculateDataBytes(){ diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h index 1746553a2..b6ccb2b3a 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorServer_defs.h @@ -9,4 +9,12 @@ #define NCHAN (128) #define NCHIP (10) #define NDAC (16) -#define TEMP_CLK (20) /* MHz */ \ No newline at end of file +#define TEMP_CLK (20) /* MHz */ + + +/** Default Parameters */ +#define DEFAULT_NUM_FRAMES (1) +#define DEFAULT_NUM_CYCLES (1) +#define DEFAULT_EXPTIME (100*1000*1000) //ns + + diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h index d92aa99f9..1b1e5521b 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h @@ -255,10 +255,8 @@ 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); #else -#if !defined(MYTHEN3D) && !defined(GOTTHARD2D) int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport); #endif -#endif #if defined(JUNGFRAUD) || defined(EIGERD) int setDetectorPosition(int pos[]); @@ -388,7 +386,7 @@ int checkFifoForEndOfAcquisition(); int readFrameFromFifo(); #endif -#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) +#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(MYTHEN3D) u_int32_t runBusy(); #endif diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 4c70ff225..6b275bf33 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -2321,9 +2321,6 @@ int configure_mac(int file_des) { if (receiveData(file_des, args, sizeof(args), OTHER) < 0) return printSocketReadError(); -#if defined(MYTHEN3D) || defined(GOTTHARD2D) - functionNotImplemented(); -#else FILE_LOG(logDEBUG1, ("\n Configuring MAC\n")); // dest port uint32_t dstPort = 0; @@ -2442,7 +2439,7 @@ int configure_mac(int file_des) { if (status != IDLE && status != RUN_FINISHED && status != STOPPED) { if (status == RUNNING) stopStateMachine(); -#ifndef EIGERD +#if !defined(EIGERD) && !defined(MYTHEN3D) cleanFifos(); #endif status = getRunStatus(); @@ -2516,7 +2513,6 @@ int configure_mac(int file_des) { } } } -#endif return Server_SendResult(file_des, OTHER, UPDATE, retvals, sizeof(retvals)); }