/* Biblioteca basica del susbsistema de Disco */ /* Subsistema de disco */ /* version 2.0 marzo 1997 */ #include #include #include #include "Tipos_DISCO.h" #include "Error_DISCO.h" int alarma; extern int error_disco; /* Seccion de funciones para simular tiempos caracteristicos */ void retorno() { alarma = 1; } /* Funcion de inicializacion de la alarma de recepcion de datos */ /* tiempo es el intervalo a inicializar la alarma del proceso */ /* tiempo se especifica en segundos y microsegundos */ /* reloj es una FUNCION INTERNA de este modulo */ int reloj( tiempo t ) { struct itimerval it_control; struct timeval time_control; void retorno() ; 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); if ( setitimer ( ITIMER_REAL, &it_control, 0 ) ) return(-1); return(0); } /* Funcion de simulacion del tiempo de posicionamiento (seek) de una unidad */ /* tiempo es el intervalo de tiempo asociado al posicionamiento del brazo */ /* tiempo se especifica en segundos y microsegundos */ /* Tiempo_Seek es una FUNCION EXTERNA */ int Tiempo_Seek( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); while ( !alarma ); return(0); } /* Funcion de simulacion del tiempo de latencia de la unidad */ /* Tiempo_Late es una FUNCION EXTERNA */ int Tiempo_Late( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); while ( !alarma ); return(0); } /* Funcion de simulacion del tiempo de transferencia de la unidad */ /* tiempo es el intervalo de tiempo asociado a la transferencia */ /* Tiempo_Transf es una FUNCION EXTERNA */ int Tiempo_Transf( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0 ) return(-1); while( !alarma ); return(0); } /* Funcion de simulacion del tiempo de recalibrado de la unidad */ /* tiempo es el intervalo de tiempo asociado al recalibrado */ /* Tiempo_Recal es una FUNCION EXTERNA */ int Tiempo_Recal( tiempo t ) { int ret; alarma = 0; if ( reloj(t) < 0) return(-1); while( !alarma ); return(0); }