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; }
//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); }
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; }
void Asteroide::cambiarDireccion(Vector2D vDir){ Vector2D direccion(dirX+vDir.getX(),dirY+vDir.getY()); dirX=velocidad*direccion.normaliza().getX(); dirY=velocidad*direccion.normaliza().getY(); }
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; }
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; }