Exemplo n.º 1
0
int obtenerModoAceleracion(int *modoAceleracion){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_OBTENER_MODO_ACELERACION;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerModoAceleracion: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerModoAceleracion: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*modoAceleracion = sbuf[0];
			return (0);
		}
	}
}
Exemplo n.º 2
0
int obtenerDatosEnergia(double *voltajeBateria, double *corrienteMotor1, double *corrienteMotor2){
	static unsigned char sbuf[3];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_OBTENER_DATOS_ENERGIA;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerDatosEnergia: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,3, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerDatosEnergia: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*voltajeBateria = sbuf[0];
			*corrienteMotor1 = sbuf[1]/10;
			*corrienteMotor2 = sbuf[2]/10;
			return (0);
		}
	}
}
Exemplo n.º 3
0
int obtenerNumeroVersionSoftware(double *versionSoftware){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
   	sbuf[1] = COMANDO_OBTENER_VERSION_SOFTWARE;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerNumeroVersion: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerNumeroVersion: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*versionSoftware = sbuf[0];
			return (0);
		}
	}
}
Exemplo n.º 4
0
int obtenerMedidaSensorUS(int idSensorUS, int *distanciaUS){
	static unsigned char sbuf[4];
	unsigned long _distanciaUS;
	int escribir, leer;
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = OBTENER_MEDIDA_US;
	sbuf[2] = idSensorUS;
	sbuf[3] = BYTE_FIN_COMANDO;
	escribir = escribirDatos(fdPercepcion, 4, sbuf);
	if(escribir !=  0){
		#ifdef PERCEPCION_DEBUG
			perror("obtenerMedidaSensorUS: Error al intentar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(50000);
		leer = leerDatos(fdPercepcion,2, sbuf);
		if(leer != 0){
			#ifdef PERCEPCION_DEBUG
				perror("obtenerMedidaSensorUS: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			_distanciaUS = sbuf[0];
			_distanciaUS = (_distanciaUS<<8)+sbuf[1];
			*distanciaUS = (int)_distanciaUS;
			return (0);
		}
	}
}
Exemplo n.º 5
0
int obtenerVolajeBateria(double *voltajeBateria){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
   	sbuf[1] = COMANDO_OBTENER_VOLTAJE_BATERIA;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerVolajeBateria: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerVolajeBateria: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*voltajeBateria = sbuf[0];
			return (0);
		}
	}
}
Exemplo n.º 6
0
int obtenerBarridoFrontalIR(int *distanciasIR){
	static unsigned char sbuf[6];
	int escribir, leer, i;
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = OBTENER_BARRIDO_FRONTAL_IR;
	sbuf[3] = BYTE_FIN_COMANDO;
	escribir = escribirDatos(fdPercepcion, 3, sbuf);
	if(escribir !=  0){
		#ifdef PERCEPCION_DEBUG
			perror("obtenerBarridoFrontalIR: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(1200000);
		leer = leerDatos(fdPercepcion,6, sbuf);
		if(leer != 0){
			#ifdef PERCEPCION_DEBUG
				perror("obtenerBarridoFrontalIR: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			for( i = 0; i < 6; ++i ){
				distanciasIR[i] = (int)sbuf[i];
			}
			return (0);
		}
	}
}
Exemplo n.º 7
0
int obtenerBarridoTraseroUS(int *distanciasUST){
	static unsigned char sbuf[10];
	unsigned long _distanciasUST;
	int escribir, leer, i;
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = OBTENER_BARRIDO_TRASERO;
	sbuf[2] = BYTE_FIN_COMANDO;
	escribir = escribirDatos(fdPercepcion,3,sbuf);
	if(escribir !=  0){
		#ifdef PERCEPCION_DEBUG
			perror("obtenerBarridoTraseroUS: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(700000);
		leer = leerDatos(fdPercepcion,10, sbuf);
		if(leer != 0){
			#ifdef PERCEPCION_DEBUG
				perror("obtenerBarridoTraseroUS: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			for ( i = 0; i < 5; ++i ) {
				_distanciasUST = sbuf[i*2];
				_distanciasUST = (_distanciasUST<<8)+sbuf[(i*2)+1];
				distanciasUST[i] = (int)_distanciasUST;
			}
			return (0);
		}
	}
}
Exemplo n.º 8
0
int obtenerCodificadorMotor1(int *codificadorPosicion1){
	static unsigned char sbuf[4];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_OBTENER_CODIFICADOR_MOTOR_1;
	unsigned long _codificador;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerCodificadorMotor1: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,4, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerCodificadorMotor1: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			_codificador = sbuf[0];
			_codificador = (_codificador<<8)+sbuf[1];
			_codificador = (_codificador<<8)+sbuf[2];
			_codificador = (_codificador<<8)+sbuf[3];
			*codificadorPosicion1 = (int)_codificador;
			return (0);
		}
	}
}
void Cliente::run() {

    mutex.lock();
    socket = new QTcpSocket();
    qintptr descriptor = socket_descriptor;
    // Asignar descriptor al socket
    if(!socket->setSocketDescriptor(descriptor)) {
        emit error(socket->error());
        return;
    }
    mutex.unlock();

    qDebug() << "El cliente" << descriptor << "se ha conectado.";

    while (1) {

        leerDatos();

        // Salir del bucle
        QMutexLocker locker(&mutex); // Mis dudas con QMutexLocker AQUI
        if (finalizar || socket->state() == QAbstractSocket::UnconnectedState)
            break;
    }

    // Cerrar conexión y salir de run()
    mutex.lock();   // ¿Lock y Unlock, o sigue en pie Locker?
    socket->disconnectFromHost();
    if (socket->state() != QAbstractSocket::UnconnectedState)
        if (socket->waitForDisconnected(-1))
            qDebug() << "El cliente" << descriptor << "se ha desconectado.";
    socket->deleteLater();
    qRegisterMetaType<Cliente*>("Cliente");
    emit desconectado(this);
    mutex.unlock();
}
Exemplo n.º 10
0
int obtenerVelocidad2(double *velocidad){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_OBTENER_VELOCIDAD_2;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerVelocidad2: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerVelocidad2: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*velocidad = sbuf[0];
			return (0);
		}
	}
}
Exemplo n.º 11
0
int obtenerCorrienteMotor2(double *corrienteMotor2){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
   	sbuf[1] = COMANDO_OBTENER_CORRIENTE_MOTOR_2;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerCorrienteMotor2: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerCorrienteMotor2: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*corrienteMotor2 = sbuf[0]/10;
			return (0);
		}
	}
}
Exemplo n.º 12
0
int obtenerMedidaSensorIR(int idSensorIR, int *distanciaIR){
	static unsigned char sbuf[4];
	int escribir, leer;
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = OBTENER_MEDIDA_IR;
	sbuf[2] = idSensorIR;
	sbuf[3] = BYTE_FIN_COMANDO;
	escribir = escribirDatos(fdPercepcion, 4, sbuf);
	if(escribir !=  0){
		#ifdef PERCEPCION_DEBUG
			perror("obtenerMedidaSensorIR: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(50000);
		leer = leerDatos(fdPercepcion,1, sbuf);
		if(leer != 0){
			#ifdef PERCEPCION_DEBUG
				perror("obtenerMedidaSensorIR: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			*distanciaIR = (int)sbuf[0];
			return (0);
		}
	}
}
Exemplo n.º 13
0
int asignarModoVelocidad(int modoVelocidad){
	static unsigned char sbuf[3];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_ASIGNAR_MODO_VELOCIAD;
	sbuf[2] = modoVelocidad;
	int escribir, leer;
	escribir = escribirDatos(fd, 3, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("asignarModoVelocidad:Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("asignarModoAceleracion: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			return (0);
		}
	}
}
Exemplo n.º 14
0
int asignarVelocidad1(double velocidad1){
	static unsigned char sbuf[3];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_ASIGNAR_VELOCIDAD_1;
	sbuf[2] = velocidad1;
	int escribir,leer;
	escribir = escribirDatos(fd, 3, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("asignarVelocidad1: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("asignarVelocidad1: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			return (0);
		}
	}
}
Exemplo n.º 15
0
int obtenerError(int *error){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_OBTENER_ERROR;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
		#ifdef MD49_DEBUG
			perror("obtenerError: Error al intenetar escribir el comando.\n");
		#endif
		return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("obtenerError: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			if(sbuf[0] == 0){
				*error = 0; //no hay ningún error en la controladora MD49.
			}
			if(sbuf[0] & ERROR_BAJO_VOLTAJE){
				*error = -1; //error -1: se detecto bajo voltaje en la alimentación de la MD49.
			}
			if(sbuf[0] & ERROR_ALTO_VOLTAJE){
				*error = -2; //error -2: se detecto alto voltaje en la alimentación de la MD49.
			}
			if(sbuf[0] & ERROR_CORRIENTE_MOTOR_1){
				*error = -3; //error -3: se detecto alto consumo de corriente por parte del motor 1.
			}
			if(sbuf[0] & ERROR_CORRIENTE_MOTOR_2){
				*error = -4; //error -4: se detecto alto consumo de corriente por parte del motor 2.
			}
			if(sbuf[0] & ERROR_CORTO_MOTOR_1){
				*error = -5; //error -5: se detecto corto en el motor 1.
			}
			if(sbuf[0] & ERROR_CORTO_MOTOR_2){
				*error = -6; //error -6: se detecto corto en el motor 2.
			}
			return (0);
		}
	}
}
Exemplo n.º 16
0
int reinicializarCodificadores(){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_REINICIO_CONTADOR_CODIFICADOR;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
			#ifdef MD49_DEBUG
				perror("reinicializarCodificadores: Error al intenetar escribir el comando.\n");
			#endif
			return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("reinicializarCodificadores: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			return (0);
		}
	}
}
Exemplo n.º 17
0
int desactivarTiempoSeguridad(){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_DESACTIVAR_TIEMPO_SEGURIDAD;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
			#ifdef MD49_DEBUG
				perror("desactivarTiempoSeguridad: Error al intenetar escribir el comando.\n");
			#endif
			return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("desactivarTiempoSeguridad: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			return (0);
		}
	}
}
Exemplo n.º 18
0
int desactivarRetroalimentacionCodificadores(){
	static unsigned char sbuf[2];
	sbuf[0] = BYTE_SINCRONIZACION;
	sbuf[1] = COMANDO_DESACTIVAR_RETROALIMENTACION;
	int escribir, leer;
	escribir = escribirDatos(fd, 2, sbuf);
	if(escribir !=  0){
			#ifdef MD49_DEBUG
				perror("desactivarRetroalimentacionCodificadores: Error al intenetar escribir el comando.\n");
			#endif
			return (-1);
	}else{
		usleep(RETRASO);
		leer = leerDatos(fd,1, sbuf);
		if(leer != 0){
			#ifdef MD49_DEBUG
				perror("desactivarRetroalimentacionCodificadores: Error el comando no se ejecuto correctamente.\n");
			#endif
			return (-2);
		}else{
			return (0);
		}
	}
}
Exemplo n.º 19
0
/* Funcion Principal */
int main(int argc, char *argv[]){
	FILE *fp;												// Puntero a archivo que representa nuestro archivo
	char archivo[longitudFichero];							// Nombre del archivo
	int i, j, numProcesos, numPaginasProceso;				// Variable auxiliares
	
	/* Estructuras utilizadas en el ejercicio */
	registro t_registros[max_procesos];						// Registro Base/Limite
	paginacion t_paginacion;								// Paginacion
	segmentacion t_segmentacion;							// Segmentacion		
	
	
	/* Obtenemos el nombre del fichero de entrada de datos mediante parametros
	o pidiendolo por teclado en caso contrario */
	if (argc == 1){
		printf ("Fichero no introducido por parametros. Introduzca nombre del fichero: ");
		gets(archivo);
	}
	else{
		strcpy(archivo,argv[1]);
	}		
	
	system("cls");
		
	if((fp=fopen(archivo,"r"))==NULL){
		system("cls");
		printf ("Error. Archivo no encontrado\n");
		system("pause");
	}
	else if (!datosEntradaValidos(fp)){		
		printf ("--------------------------------------------------------------------------------\n");
		printf ("La informacion del fichero no es valida. Debe cumplir el siguiente formato: \n\n");
				
		printf ("Fichero de texto con los datos divididos mediante un salto de linea.\n");
		printf ("A su vez cada linea de datos divididos por espacios:\n\n");
	
		printf ("1ª linea -> Numero de procesos.\n");
		printf ("2ª linea -> RB y RL de cada proceso.\n");
		printf ("3ª linea -> RBTS y RLTS de cada proceso.\n");
		printf ("4ª linea -> RB y RL de cada segmento de cada proceso.\n");
		printf ("5ª linea -> Tamaño de pagina.\n");
		printf ("6ª linea -> Tipo de Paginacion: 0 -> PMT Global, 1 -> PMT por proceso.\n");
		printf ("7ª linea -> RBTP y RLTP de cada proceso.\n");
		printf ("8ª linea -> Marco de pagina asociado a cada pagina de cada proceso.\n\n");
		printf ("--------------------------------------------------------------------------------\n");
			
		system("pause");
	}else{	
	
		/* Rebobinamos el puntero a fichero despues de haber verificado sus datos */
		rewind (fp);
		
		/*******************************/
		/* Lectura de datos de fichero */
		/*******************************/
		
		leerDatos(fp, &numProcesos, t_registros, &t_paginacion, &t_segmentacion);    
				
		      
        /**********************************************************/
		/* Salida de la informacion por pantalla - Datos Procesos */
		/**********************************************************/       
	
        mostrarDatos(archivo, numProcesos, t_registros, t_paginacion, t_segmentacion);	
        
        fclose(fp);
        fp = NULL;
        
        
		/*********************************************************************/
		/* Salida de la informacion por pantalla - Traduccion de direcciones */
		/*********************************************************************/
		
		traducirDirecciones(archivo, numProcesos, t_registros, t_paginacion, t_segmentacion);
		
	}	
	         
	return 0;
}