diff --git a/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h b/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h index 872f931c3..51f889b67 100644 --- a/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/mythen3DetectorServer/RegisterDefs.h @@ -96,15 +96,13 @@ #define CONFIG_DYNAMIC_RANGE_16_VAL ((0x2 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK) #define CONFIG_DYNAMIC_RANGE_24_VAL ((0x3 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK) -/* Control RW register */ // assumed for MY3 +/* Control RW register */ #define CONTROL_REG (0x21 * REG_OFFSET + BASE_CONTROL) #define CONTROL_STRT_ACQSTN_OFST (0) #define CONTROL_STRT_ACQSTN_MSK (0x00000001 << CONTROL_STRT_ACQSTN_OFST) #define CONTROL_STP_ACQSTN_OFST (1) #define CONTROL_STP_ACQSTN_MSK (0x00000001 << CONTROL_STP_ACQSTN_OFST) -//#define CONTROL_RN_BSY_OFST (2) // assumed for MY3 TODO -//#define CONTROL_RN_BSY_MSK (0x00000001 << CONTROL_RN_BSY_OFST) #define CONTROL_CRE_RST_OFST (10) #define CONTROL_CRE_RST_MSK (0x00000001 << CONTROL_CRE_RST_OFST) #define CONTROL_PRPHRL_RST_OFST (11) // Only GBE10? @@ -125,6 +123,18 @@ /* Pattern status Register*/ #define PAT_STATUS_REG (0x00 * REG_OFFSET + BASE_PATTERN_CONTROL) +#define PAT_STATUS_RUN_BUSY_OFST (0) +#define PAT_STATUS_RUN_BUSY_MSK (0x00000001 << PAT_STATUS_RUN_BUSY_OFST) +#define PAT_STATUS_WAIT_FOR_TRGGR_OFST (0) +#define PAT_STATUS_WAIT_FOR_TRGGR_MSK (0x00000001 << PAT_STATUS_WAIT_FOR_TRGGR_OFST) +#define PAT_STATUS_DLY_BFRE_TRGGR_OFST (0) +#define PAT_STATUS_DLY_BFRE_TRGGR_MSK (0x00000001 << PAT_STATUS_DLY_BFRE_TRGGR_OFST) +#define PAT_STATUS_FIFO_FULL_OFST (0) +#define PAT_STATUS_FIFO_FULL_MSK (0x00000001 << PAT_STATUS_FIFO_FULL_OFST) +#define PAT_STATUS_DLY_AFTR_TRGGR_OFST (0) +#define PAT_STATUS_DLY_AFTR_TRGGR_MSK (0x00000001 << PAT_STATUS_DLY_AFTR_TRGGR_OFST) +#define PAT_STATUS_CSM_BUSY_OFST (0) +#define PAT_STATUS_CSM_BUSY_MSK (0x00000001 << PAT_STATUS_CSM_BUSY_OFST) /* Delay left 64bit Register */ #define GET_DELAY_LSB_REG (0x02 * REG_OFFSET + BASE_PATTERN_CONTROL) diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer index ac5b75476..aa2ed623f 100755 Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer differ diff --git a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c index 5c0d8ea46..62189ca14 100644 --- a/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/mythen3DetectorServer/slsDetectorFunctionList.c @@ -17,10 +17,6 @@ #include #include #endif -// ------------------------------------------ -#include -// ------------------------------------------ - // Global variable from slsDetectorServer_funcs extern int debugflag; @@ -35,9 +31,6 @@ pthread_t pthread_virtual_tid; int virtual_status = 0; int virtual_stop = 0; #endif -// ------------------------------------------ -int temp_status = 0; -// ------------------------------------------ int32_t clkPhase[NUM_CLOCKS] = {0, 0, 0, 0, 0}; uint32_t clkFrequency[NUM_CLOCKS] = {0, 0, 0, 0, 0}; @@ -69,7 +62,7 @@ void basictests() { } return; #else - FILE_LOG(logINFOBLUE, ("******** Mythen3 Server: do the checks *****************\n")); + FILE_LOG(logINFOBLUE, ("************ Mythen3 Server *********************\n")); if (mapCSP0() == FAIL) { strcpy(initErrorMessage, "Could not map to memory. Dangerous to continue.\n"); @@ -97,7 +90,7 @@ void basictests() { if (fwversion >= MIN_REQRD_VRSN_T_RD_API) sw_fw_apiversion = getFirmwareAPIVersion(); - FILE_LOG(logINFOBLUE, ("************ Mythen3 Server *********************\n" + FILE_LOG(logINFOBLUE, ("*************************************************\n" "Hardware Version:\t\t 0x%x\n" "Detector IP Addr:\t\t 0x%x\n" @@ -1230,9 +1223,6 @@ int startStateMachine(){ FILE_LOG(logINFOBLUE, ("Starting State Machine\n")); cleanFifos(); - // ------------------------------------------ - temp_status = 1; - // ------------------------------------------ //start state machine bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_STRT_ACQSTN_MSK); @@ -1311,45 +1301,53 @@ enum runStatus getRunStatus(){ } #endif FILE_LOG(logDEBUG1, ("Getting status\n")); + uint32_t retval = bus_r(PAT_STATUS_REG); + FILE_LOG(logINFO, ("Status Register: %08x\n",retval)); - // ------------------------------------------ - //uint32_t retval = bus_r(STATUS_REG); - //FILE_LOG(logINFO, ("Status Register: %08x\n",retval)); - - // running - if (temp_status) { - //if(retval & CONTROL_RN_BSY_MSK) { - // ------------------------------------------ - FILE_LOG(logINFOBLUE, ("Status: Running\n")); - return RUNNING; + enum runStatus s; + //running + if (retval & PAT_STATUS_RUN_BUSY_MSK) { + if (retval & PAT_STATUS_WAIT_FOR_TRGGR_MSK) { + FILE_LOG(logINFOBLUE, ("Status: WAITING\n")); + s = WAITING; + } else { + if (retval & PAT_STATUS_DLY_BFRE_TRGGR_MSK) { + FILE_LOG(logINFO, ("Status: Delay before Trigger\n")); + } else if (retval & PAT_STATUS_DLY_AFTR_TRGGR_MSK) { + FILE_LOG(logINFO, ("Status: Delay after Trigger\n")); + } + FILE_LOG(logINFOBLUE, ("Status: RUNNING\n")); + s = RUNNING; + } } - return IDLE; + + //not running + else { + // stopped or error + if (retval & PAT_STATUS_FIFO_FULL_MSK) { + FILE_LOG(logINFOBLUE, ("Status: STOPPED\n")); //FIFO FULL?? + s = STOPPED; + } else if (retval & PAT_STATUS_CSM_BUSY_MSK) { + FILE_LOG(logINFOBLUE, ("Status: READ MACHINE BUSY\n")); + s = TRANSMITTING; + } else if (!retval) { + FILE_LOG(logINFOBLUE, ("Status: IDLE\n")); + s = IDLE; + } else { + FILE_LOG(logERROR, ("Status: Unknown status %08x\n", retval)); + s = ERROR; + } + } + + return s; } void readFrame(int *ret, char *mess){ // wait for status to be done - - // ------------------------------------------ - //while(runBusy()){ - // usleep(500); - //} - - int64_t periodns = getPeriod(); - int numFrames = getNumFrames(); - int frameNr = 0; - // loop over number of frames - for(frameNr=0; frameNr!= numFrames; ++frameNr ) { - // sleep for exposure time - struct timespec begin, end; - clock_gettime(CLOCK_REALTIME, &begin); - usleep(periodns / 1000); - clock_gettime(CLOCK_REALTIME, &end); - } - usleep(1 * 1000 * 1000); - temp_status = 0; - // ------------------------------------------ - + while(runBusy()){ + usleep(500); + } #ifdef VIRTUAL FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n")); @@ -1372,13 +1370,9 @@ u_int32_t runBusy() { #ifdef VIRTUAL return virtual_status; #endif - - // ------------------------------------------ - return temp_status; - //u_int32_t s = (bus_r(CONTROL_REG) & CONTROL_RN_BSY_OFST); - //FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s)); - //return s; - // ------------------------------------------ + u_int32_t s = (bus_r(PAT_STATUS_REG) & PAT_STATUS_RUN_BUSY_MSK); + FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s)); + return s; } /* common */ diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index e95d14eb5..721e946fe 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -5,8 +5,8 @@ #define APIGUI 0x190723 #define APIMOENCH 0x190820 #define APIGOTTHARD2 0x191127 -#define APIMYTHEN3 0x191127 #define APIGOTTHARD 0x191127 #define APIJUNGFRAU 0x191127 #define APICTB 0x191210 #define APIEIGER 0x191210 +#define APIMYTHEN3 0x191210