// Similar to cv_wait(), except that it returns -1 without the condition // being signaled after the timeout time has been reached. // // timeout A time, in absolute ticks since boot, when cv_timedwait() // should return. clock_t cv_timedwait(kcondvar_t * cv, kmutex_t * m, clock_t timeout) { struct timespec abstime; // All the callers of cv_timedwait calculate the timeout by adding // ticks to ddi_get_lbolt(), which is in usec. abstime.tv_sec = USEC_TO_SEC(timeout); abstime.tv_nsec = USEC_TO_NSEC(timeout - SEC_TO_USEC(abstime.tv_sec)); int error = pthread_cond_timedwait(&cv->cond, &m->mutex, &abstime); switch (error) { case 0: // Update the mutex holder since we now own the lock. m->holder = pthread_to_kthread(pthread_self()); // Return >0 on signalled wakeup. return 1; case ETIMEDOUT: // Update the mutex holder since we now own the lock. m->holder = pthread_to_kthread(pthread_self()); // Return -1 on timeout. return -1; default: // And this only happens on a programmer error. panic("pthread_cond_timedwait() failed: %s (%d)", strerror(error), error); } }
UINT32 STIMPboard::execTest(const TestStruct& test) { I_TEST* iTest; UINT32 res = TEST_NOK; UINT32 currentConfig; GeneralConfigReg config; vmeAdapter->readConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),currentConfig); config.raw32 = currentConfig; config.reg.ENWDEXT = 0; config.reg.ENWDLS = 0; vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_HANDOVER_REG", hexadecimal),0x0); //usleep(SEC_TO_USEC(2)); if(test._testNumber < CUSTOM_TEST || test._testNumber == EN_STIMP_WATCH_DOG){ if((test._testNumber == EN_LOOPBACK_A) || (test._testNumber == EN_LOOPBACK_LS_A)){ if(test._configId == STIMP_ATTACK_3910) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEA_CHA_RELE_CONF); else vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEB_CHA_RELE_CONF | (EXT_1553_SIDE_B << 27)); } else if (test._testNumber == EN_LOOPBACK_B || (test._testNumber == EN_LOOPBACK_LS_B)){ if(test._configId == STIMP_ATTACK_3910) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEA_CHB_RELE_CONF); else vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEB_CHB_RELE_CONF | (EXT_1553_SIDE_B << 27)); } else if(test._testNumber == EN_LS_RXTX || test._testNumber == EN_STIMP_WATCH_DOG || test._testNumber == EN_SKELETON_BUS || test._testNumber == EN_INTERRUPT){ if(test._configId == STIMP_ATTACK_3910) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_A << 27); else vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_B << 27); } else{ vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),FOFE); } if(test._testNumber != EN_STIMP_WATCH_DOG){ res = execCommonTest(test); return res; } //vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),currentConfig); } else if(test._testNumber == EN_STIMP_BC || test._testNumber == EN_STMIP_BC_BUSY_U44 || test._testNumber == EN_STMIP_BC_BUSY_U22){ if(test._configId == STIMP_ATTACK_3910) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),(EXT_1553_SIDE_A << 27) | FOFE); else vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),(EXT_1553_SIDE_B << 27) | FOFE); } if(test._testNumber < CUSTOM_TEST){ return execCommonTest(test); } switch(test._testNumber){ case EN_STIMP_WATCH_DOG: iTest = new Watch_Dog_Test(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_STIMP_WATCH_DOG_3910: iTest = new Watch_Dog(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_STMIP_BC_BUSY_U44: case EN_STMIP_BC_BUSY_U22: if(test._step == 1){ vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); } iTest = new Busy_Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_STIMP_BC: if(test._step == 1){ vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); } iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_STMIP_DISCRETE_INPUT_CRTITICAL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Discrete_Input(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,1); break; case EN_STMIP_DISCRETE_OUTPUT_CRTITICAL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Discrete_Output(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,1); break; case EN_STMIP_DISCRETE_INPUT_NOT_CRTITICAL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Discrete_Input(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,0); break; case EN_STMIP_DISCRETE_OUTPUT_NOT_CRTITICAL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Discrete_Output(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,0); break; case EN_STIMP_HIACT_LODEM: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); if(res != TEST_OK){ strcpy(this->errorMessage,iTest->getError()); delete iTest; return res; } delete iTest; iTest = new HIACT_LODEM(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; case EN_STIMP_ACT_DEM: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); if(res != TEST_OK){ strcpy(this->errorMessage,iTest->getError()); delete iTest; return res; } delete iTest; iTest = new ACT_DEM(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; case EN_STIMP_ISNOGO: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); if(res != TEST_OK){ strcpy(this->errorMessage,iTest->getError()); delete iTest; return res; } delete iTest; iTest = new En_IsNoGo(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; case EN_STIMP_MOD_NOGO: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); if(res != TEST_OK){ strcpy(this->errorMessage,iTest->getError()); delete iTest; return res; } delete iTest; iTest = new Mod_Nogo(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; case EN_STIMP_NMI: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Program_BC(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); if(res != TEST_OK){ strcpy(this->errorMessage,iTest->getError()); delete iTest; return res; } delete iTest; iTest = new Nmi_3909(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; } if(res > NEXT_STEP){ strcpy(this->errorMessage,iTest->getError()); } delete iTest; return res; }
/** * Thread entry point */ void key_thread_func() { int ret; fcgienc_crypt fc; int timeout; int authtimeout, mktimeout, dktimeout; int shortest_timeout; unsigned long usec_elapsed = 0; struct timeval start_tv, end_tv; // check parameters if (!fcgienc_username || !fcgienc_password || !fcgienc_authserver || \ !fcgienc_masterkeyserver || !fcgienc_datakeyserver) { return; } memset(&fc, 0, sizeof(fcgienc_crypt)); // init timeout values authtimeout = mktimeout = dktimeout = 0; while (1) { shortest_timeout = KEY_THREAD_DEFAULT_TIMEOUT; timeout = 0; gettimeofday(&start_tv, NULL); // Authentication Token authtimeout -= 30; if (authtimeout <= 30) { fc.token[0] = 0; timeout = get_auth_token(fc.token); if (timeout > 0) { memcache_set(CACHE_KEYNAME_AUTHTOKEN, fc.token, timeout); authtimeout = timeout; shortest_timeout = MIN(shortest_timeout, authtimeout); mktimeout = dktimeout = -1; } else { log_keythread("KEY-THREAD - error fetching auth token from key server"); goto KEY_ERROR; } } ret = memcache_get(CACHE_KEYNAME_AUTHTOKEN, fc.token); if (ret < 0) { log_keythread("KEY-THREAD - error fetching auth token from memcached"); goto KEY_ERROR; } // Data Key dktimeout -= 30; if (dktimeout <= 30) { fc.dataKeyId[0] = 0; fc.encryptedDataKey[0] = 0; timeout = get_data_key(fc.token, fc.masterKeyId, fc.dataKeyId, fc.encryptedDataKey); if (timeout > 0) { memcache_set(CACHE_KEYNAME_MAKSTERKEYID, fc.masterKeyId, timeout); memcache_set(CACHE_KEYNAME_DATAKEYID, fc.dataKeyId, timeout); memcache_set(CACHE_KEYNAME_ENCRYPTEDDATAKEY, fc.encryptedDataKey, timeout); dktimeout = timeout; shortest_timeout = MIN(shortest_timeout, timeout); } else { log_keythread("KEY-THREAD - error fetching data key from key server"); goto KEY_ERROR; } } ret = memcache_get(CACHE_KEYNAME_MAKSTERKEYID, fc.masterKeyId); ret += memcache_get(CACHE_KEYNAME_DATAKEYID, fc.dataKeyId); ret += memcache_get(CACHE_KEYNAME_ENCRYPTEDDATAKEY, fc.encryptedDataKey); if (ret < 0) { log_keythread("KEY-THREAD - error fetching data key from memcache"); goto KEY_ERROR; } // Master Key mktimeout -= 30; if (mktimeout <= 30) { fc.masterKey[0] = 0; fc.initializationVector[0] = 0; timeout = get_master_key(fc.token, fc.masterKeyId, fc.masterKey, fc.initializationVector); if (timeout > 0) { memcache_set(CACHE_KEYNAME_MAKSTERKEY, fc.masterKey, timeout); memcache_set(CACHE_KEYNAME_IV, fc.initializationVector, timeout); shortest_timeout = MIN(shortest_timeout, timeout); mktimeout = timeout; } else { log_keythread("KEY-THREAD - error fetching master key from key server"); goto KEY_ERROR; } } ret = memcache_get(CACHE_KEYNAME_MAKSTERKEY, fc.masterKey); ret += memcache_get(CACHE_KEYNAME_IV, fc.initializationVector); if (ret < 0) { log_keythread("KEY-THREAD - error fetching master key from memcache"); goto KEY_ERROR; } // calculate the real key ret = key_calculate_real(&fc); if (ret == 0) { char dataKeyCacheName[KEY_SIZE]; memset(dataKeyCacheName, 0, KEY_SIZE); sprintf(dataKeyCacheName, "fastcgienc-%s-%s-%s", fc.masterKeyId, fc.dataKeyId, fcgienc_username); memcache_set(dataKeyCacheName, fc.dataKey, KEY_STORE_PERIOD); if (timeout <= 0) timeout = KEY_STORE_PERIOD; memcache_set(CACHE_KEYNAME_DATAKEY, fc.dataKey, 60); } else { log_keythread("KEY-THREAD - error decrypting data key"); goto KEY_ERROR; } gettimeofday(&end_tv, NULL); usec_elapsed = (end_tv.tv_sec * 1000 * 1000 + end_tv.tv_usec) - (start_tv.tv_sec * 1000 * 1000 + start_tv.tv_usec); // only sleep if no key has already expired if (SEC_TO_USEC(shortest_timeout) > usec_elapsed) { #ifdef WIN32 Sleep(1000 * shortest_timeout); #else usleep(SEC_TO_USEC(shortest_timeout) - usec_elapsed); #endif } continue; KEY_ERROR: log_keythread("KEY-THREAD - key error"); authtimeout = mktimeout = dktimeout = -1; #ifdef WIN32 Sleep(1000 * shortest_timeout); #else usleep(SEC_TO_USEC(shortest_timeout)); #endif } return; }
/* default to infinite */ int inversions = -1; /* turn on lots of prints */ int verbose = 0; /* turn on debugging prints */ int debugging = 0; int quiet = 0; /* turn off all prints, default = 0 (off) */ /* prompt to start test */ int prompt = 0; /* report interval */ unsigned long report_interval = (unsigned long)SEC_TO_USEC(0.75); int shutdown = 0; /* global indicating we should shut down */ pthread_mutex_t shutdown_mtx; /* associated mutex */ /* indicate if errors have occured */ int have_errors = 0; /* indicated that keyboard interrupt has happened */ int interrupted = 0; /* force running on one cpu */ int uniprocessor = 0; /* lock all memory */ int lockall = 0;
UINT32 SIMP::execTest(const TestStruct& test) { I_TEST* iTest; UINT32 res = TEST_NOK; UINT32 currentConfig; GeneralConfigReg config; vmeAdapter->readConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),currentConfig); config.raw32 = currentConfig; config.reg.ENWDEXT = 0; config.reg.ENWDLS = 0; /* if(test._testNumber != EN_SIMP_WATCH_DOG ){ if((test._testNumber != EN_INTERRUPT) || (test._step != 2)){ vmeAdapter->readConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),currentConfig); config.raw32 = currentConfig; config.reg.ENWDEXT = 0; Deve essere 0 config.reg.ENWDLS = 0; Deve essere 0 vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear } }*/ usleep(SEC_TO_USEC(2)); if(test._testNumber < CUSTOM_TEST || test._testNumber == EN_SIMP_WATCH_DOG){ if((test._testNumber == EN_LOOPBACK_A) || (test._testNumber == EN_LOOPBACK_LS_A)){ if((test._configId == SIMP1_AVIONIC_3910) || (test._configId == SIMP2_ATTACK_3910)) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEA_CHA_RELE_CONF); else vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEB_CHA_RELE_CONF); } else if (test._testNumber == EN_LOOPBACK_B || (test._testNumber == EN_LOOPBACK_LS_B)){ if((test._configId == SIMP1_AVIONIC_3910) || (test._configId == SIMP2_ATTACK_3910)) vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEA_CHB_RELE_CONF); } else if(test._testNumber == EN_LS_RXTX || test._testNumber == EN_SIMP_WATCH_DOG || test._testNumber == EN_SKELETON_BUS || test._testNumber == EN_INTERRUPT){ switch(test._configId){ case SIMP1_AVIONIC_3910: // SIMP1 SIDE A vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_A << 27); break; case SIMP1_BSD_EDDL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_A_EDDL << 27); break; case SIMP1_MDP_EDDL: // SIMP1 SIDE B vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_B_SIMP1 << 27); break; case SIMP1_CSMU_EDDL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_B_EDDL << 27); break; case SIMP2_ATTACK_3910: //SIMP2 SIDE A vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_A << 27); break; case SIMP2_EMU1_EDDL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_A_EDDL << 27); break; case SIMP2_UCS_3838: //SIMP2 SIDE B vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_B_SIMP2 << 27); break; case SIMP2_EMU2_EDDL: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),EXT_1553_SIDE_B_EDDL << 27); break; } } else{ vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),FOFE); } if(test._testNumber != EN_SIMP_WATCH_DOG){ res = execCommonTest(test); return res; } } else if (test._testNumber == EN_SIMP_LOOPBACK_CHAN_A_SIDE_B){ vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_FOFE_ADDRESS", hexadecimal),LOOPBACK_SIDEB_CHA_RELE_CONF); } switch(test._testNumber){ case EN_SIMP_WATCH_DOG: iTest = new Watch_Dog_Test(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_SIMP_WATCH_DOG_3910: iTest = new Watch_Dog(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,test._step); break; case EN_SIMP_DISCRETE_IF: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new Discrete_IF(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; case EN_SIMP_LOOPBACK_CHAN_A_SIDE_B: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new SIMP_Loopback_CH_A_Side_B(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId,1,1); if(res == NEXT_STEP) res = iTest->execTest(test._configId,1,2); break; case EN_SIMP_DDL_ADDRESS_TEST: vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),config.raw32); vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_MCL_REG", hexadecimal),0); // Master Clear usleep(SEC_TO_USEC(2)); iTest = new DDL_Address_Test(); iTest->setDevice(vmeAdapter); res = iTest->execTest(test._configId); break; } if(res > NEXT_STEP){ strcpy(this->errorMessage,iTest->getError()); } //vmeAdapter->writeConf(Singleton<ConfigFile,CreateThreadSafe>::instance()->getParameter<UINT8>("VME_GENERAL_CONF_ADDRESS", hexadecimal),currentConfig); delete iTest; return res; }