예제 #1
0
파일: condvar.c 프로젝트: jpeach/zfsd
// 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);
    }
}
예제 #2
0
파일: STIMP.cpp 프로젝트: Splinter83/ndimp
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;
}
예제 #3
0
/**
 * 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;
}
예제 #4
0
파일: pi_stress.c 프로젝트: 1023xp/training
/* 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;
예제 #5
0
파일: SIMP.cpp 프로젝트: Splinter83/ndimp
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;
}