/* Libreria basica del susbsistema de Disco */ #include #include #include #include "Consta_DISCO.h" #include "Tipos_DISCO.h" #include "Error_DISCO.h" int alarma; extern int error_disco; /* #define ESPERA() {while(!alarma);} */ #define ESPERA() { if (alarma!=1) pause(); } /* Seccion de funciones para simular tiempos caracteristicos */ void retorno() { alarma = 1; } /* Funcion de inicializacion de la alarma de recepcion de datos */ int reloj( tiempo t ) { struct itimerval it_control; struct timeval time_control; void retorno() ; int resul=0; if ( (t.seg == 0) && (t.mseg == 0) ) { alarma = 1; return(0); } time_control.tv_sec = t.seg; time_control.tv_usec = t.mseg; it_control.it_value = time_control; time_control.tv_sec = 0; time_control.tv_usec = 0; it_control.it_interval = time_control; signal(SIGALRM, retorno); /*resul=*/ if ( setitimer ( ITIMER_REAL, &it_control, 0 )) return -1; /*return resul;*/ return(0); } int dime_alarma() { return alarma; } /* Funcion de simulacion del tiempo de seek de una unidad */ int Tiempo_Seek( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); ESPERA(); return(0); } /* Funcion de simulacion del tiempo de latencia de la unidad */ int Tiempo_Late( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); ESPERA(); return(0); } /* Funcion de simulacion del tiempo de transferencia de la unidad */ int Tiempo_Transf( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); ESPERA(); return(0); } /* Funcion de simulacion del tiempo de recalibrado de la unidad */ int Tiempo_Recal( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0) return(-1); ESPERA(); return(0); }