unsigned int ad_adquirir(ad_t ad){
    unsigned int result = 0;
    unsigned int b = 0;

    //printf("ENTRA\n");

    //RERET Y MODO AD:
    ad_resetear_contador(ad);
    ad_set_modo_ad(ad);
    
    if(!result)          
        result = direccion(0x0b);
    if (!result)
        result = startLeer();    
    if (!result){
        do{
            printf("ENTRA\n");
            b=leer();
        }while(!(b&0x01));
        result = endLeer();
       // printf("leyo b = %u\n",b);
     }
    ad->adq_count++;    
          
    ad_leer_buffers(ad);
                      
    return result;
}
Beispiel #2
0
//RECIBE DIRECCION IRRLICHT
void Infectado::mueveInfectado(b2Vec2 p_direccionMovimiento, float p_velocidadMovimiento)
{
	if (!c_movimientoRestringido)
	{
		b2Vec2 direccion(p_direccionMovimiento.y * p_velocidadMovimiento, p_direccionMovimiento.x * p_velocidadMovimiento);
		dameCuerpoFisicoEntidad()->SetLinearVelocity(direccion);
		giraInfectado(p_direccionMovimiento);
	}
}
void ad_set_modo_ad(ad_t ad){

    assert(ad!= NULL);

    ad->conf = ad->conf | 0x01;
    direccion(0x0b);
    escritura(ad->conf);

}
void ad_set_modo_pc(ad_t ad){

    assert(ad!= NULL);

    ad->conf = ad->conf & 0xFE;
    direccion(0x0b);
    escritura(ad->conf);

}
void ad_resetear_contador(ad_t ad){

    assert(ad != NULL);
    direccion(0x0b);
    escritura(ad->conf | 0x80);
    ad->conf = ad->conf&0x7F;
    escritura(ad->conf);

}
Beispiel #6
0
Asteroide::Asteroide(int n):numVertices(n){
	oX=400,oY=0;
	Vector2D direccion(1+rand()%10,1+rand()%10);
	double anguloCentral=(360/numVertices);
	double angulo=0;
	radio=20+rand()%80;
	velocidad=((100-radio)/3)+1;
	arg=0;
	switch(rand()%4){
		case 0:
			oX=-105;
			oY=-105+rand()%755;
			break;
		case 1:
			oX=950;
			oY=-105+rand()%755;
			break;
		case 2:
			oX=-105+rand()%955;
			oY=-105;
			break;
		case 3:
			oX=-105+rand()%955;
			oY=755;
			break;
	}

	for(int i=0 ; i<numVertices ; i++){
		int argumento=angulo+(rand()%(int)(anguloCentral));
		switch(rand()%4){
			case 0:
				vectores.push_back(Vector2D(3+rand()%3+radio*cos(argumento*PI/180),radio*sin(argumento*PI/180)));
				break;
			case 1:
				vectores.push_back(Vector2D(-3-rand()%3+radio*cos(argumento*PI/180),radio*sin(argumento*PI/180)));
				break;
			case 2:
				vectores.push_back(Vector2D(radio*cos(argumento*PI/180),3+rand()%3+radio*sin(argumento*PI/180)));
				break;
			case 3:
				vectores.push_back(Vector2D(radio*cos(argumento*PI/180),-3-rand()%3+radio*sin(argumento*PI/180)));
				break;
		}
		//vectores.push_back(Vector2D(radio*cos(angulo*PI/180)+oX,radio*sin(angulo*PI/180)+oY));
		angulo+=anguloCentral;
	}
	
	switch(rand()%4){
		case 0:
			dirX=-(velocidad*direccion.normaliza().getX());
			dirY=-(velocidad*direccion.normaliza().getY());
			break;
		case 1:
			dirX=-(velocidad*direccion.normaliza().getX());
			dirY=velocidad*direccion.normaliza().getY();
			break;
		case 2:
			dirX=velocidad*direccion.normaliza().getX();
			dirY=-(velocidad*direccion.normaliza().getY());
			break;
		case 3:
			dirX=velocidad*direccion.normaliza().getX();
			dirY=velocidad*direccion.normaliza().getY();
			break;
	}
	movLineal = radio*velocidad;
	resistencia = radio*6;
}
Beispiel #7
0
void Asteroide::cambiarDireccion(Vector2D vDir){
	Vector2D direccion(dirX+vDir.getX(),dirY+vDir.getY());
	dirX=velocidad*direccion.normaliza().getX();
	dirY=velocidad*direccion.normaliza().getY();
}
Beispiel #8
0
Vector2D Asteroide::obtenerDireccion(){
	Vector2D direccion(dirX,dirY);
	return 	direccion;
}
ad_t ad_config (unsigned int mps, unsigned int kpc, unsigned int adqm){

    bool result = false;  
    unsigned char N = 0;
    ad_t ad = NULL;

    ad = ad_create();
    assert(ad!=NULL);

    /* Modo PC para configurarlo */
    ad_set_modo_pc(ad);
    
    /* Configuracion de la cantidad de muestras por segundo. */

    if(mps < 10000000 && mps > 39215){
        N = 10000000/mps;

        result = direccion(0x0c);
        if(!result)
            result = escritura(255-N);
        if(!result)
            result = direccion(0x0d);
        if(!result)
            result = escritura(0x00);
    }else {
        printf("Error en la cantidad de muestras por segundo\n");        
        return NULL;
    }
        
    assert(kpc==1 || kpc==2 || kpc==4 || kpc==8 || kpc==16 || kpc==32 || kpc==64);
        
    /* modo continuo -> b1 = 1. Modo modulado -> b1 = 0 */
    if(adqm == AD_MODO_CONTINUO){
        ad->conf = ad->conf | 0x02;
        ad->modo = AD_MODO_CONTINUO;
    }        
        
    /* Kpc = tamano del buffer de adquisicion en Kb: */    
    if(kpc==64){
            ad->conf = ad->conf|0x70;
    }else if(kpc==32){
            ad->conf = ad->conf|0x60;
    }else if(kpc==16){
            ad->conf = ad->conf|0x50;
    }else if(kpc==8){
            ad->conf = ad->conf|0x40;
    }else if(kpc==4){
            ad->conf = ad->conf|0x30;
    }else if(kpc==2){
            ad->conf = ad->conf|0x20;
    }else if(kpc==1){
            ad->conf = ad->conf|0x10;
    }else if(kpc != 0){
        result = 1;
    }
    
    ad->canala = calloc(kpc*1024, sizeof(int));
    ad->canalb = calloc(kpc*1024, sizeof(int));    
    ad->kpc = kpc;

    if(!result)
        result = direccion(0x0b);   
    if(!result){
        result = escritura(ad->conf);
    } 

    ad_resetear_contador(ad);
    ad_set_modo_ad(ad);
    
    return ad;
}
Beispiel #10
0
bool ad_leer_buffers(ad_t ad){
    
    unsigned int i = 0, result = 0, punto = 0, h = 0;
    unsigned char *canal_a = NULL, *canal_b = NULL, *canal_ab = NULL,  aux = 0;
    
    canal_a = malloc(sizeof(unsigned char)*ad->kpc*1024);
    canal_b = malloc(sizeof(unsigned char)*ad->kpc*1024);
    canal_ab = malloc(sizeof(unsigned char)*ad->kpc*1024);
  
    ad_resetear_contador(ad);
    ad_set_modo_pc(ad);

    direccion(0x08);                            /* direccion registro de datos */
    startLeer();                                /* bus de datos entrada */
    for(i=0; i<(ad->kpc*1024); i++)
        canal_b[i]=leer();                       /* leeyendo los datos */
    endLeer();                                  /* bus de datos salida */
    
    ad_resetear_contador(ad);
    ad_set_modo_pc(ad);

    direccion(0x09);                            /* direccion registro de datos */
    startLeer();                                /* bus de datos entrada */
    for(i=0; i<(ad->kpc*1024); i++)
        canal_ab[i]=leer();                       /* leeyendo los datos */
    endLeer();                                  /* bus de datos salida */
        
    ad_resetear_contador(ad);
    ad_set_modo_pc(ad);
    
    direccion(0x0a);                            /* direccion registro de datos */
    startLeer();                                /* bus de datos entrada */
    for(i=0; i<(ad->kpc*1024); i++)
        canal_a[i] = leer();  /* leeyendo los datos */

    endLeer();                                  /* bus de datos salida */
   
    ad_resetear_contador(ad);
    ad_set_modo_ad(ad);

    /* Construyo el resultado final A ab B -> Aa bB*/

    for(i = 0; i<(ad->kpc*1024);i++){
        punto = 0;
        punto = (canal_ab[i]/16)&0x0f;
        punto= punto+canal_a[i]*16;
        ad->canala[i]= punto;
        /*ad->canala[i] = 0;
        ad->canala[i] = (canal_ab[i]/16)&0x0f;
        ad->canala[i] += canal_a[i]*16;*/
    }

    for(i = 0; i<(ad->kpc*1024);i++){
        punto= canal_ab[i]&0x0f;
        punto= punto+canal_b[i]*16;
        ad->canalb[i]=punto;
        /*ad->canalb[i] = 0;
        ad->canalb[i] = canal_b[i];
        ad->canalb[i] = ad->canalb[i]<<4;
        aux = canal_ab[i]&0x0f;
        ad->canalb[i] = ad->canalb[i] | aux;*/
    }

    free(canal_a);
    free(canal_b);
    free(canal_ab);

    return result;
}