00001 /* event.c */ 00002 00003 00004 #include "routix/event.h" 00005 00006 // Puntero al inicio de la lista de eventos 00007 event_t *event_inicio=NULL; 00008 00009 int insertar_evento(event_t *nuevo) 00010 { 00011 event_t *tmp; 00012 00013 if ( nuevo == NULL ) { return 0; } 00014 00015 // Nos paramos al ppio de la lista 00016 tmp = event_inicio; 00017 00018 if ( event_inicio == NULL ) { event_inicio = nuevo; } 00019 00020 else { 00021 00022 // Buscamos la última tarea 00023 for ( tmp = event_inicio; tmp->proximo != NULL ; tmp = tmp->proximo ); 00024 00025 // Nos colgamos de ella 00026 tmp->proximo = nuevo; 00027 } 00028 00029 // La nueva tarea queda apuntando a NULL 00030 nuevo->proximo = NULL; 00031 00032 return 1; 00033 } 00034 00035 00036 // Función crítica, tengo que agregarle la deshabilitación de 00037 // interrupciones (bajo análisis) 00038 int remover_evento(event_t *event) 00039 { 00040 event_t *tmp; 00041 00042 // Es el primer event ? 00043 if ( event == event_inicio ) { 00044 event_inicio = event->proximo; 00045 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h 00046 return 0; 00047 } 00048 00049 // Buscamos nuestro event entonces 00050 for ( tmp=event_inicio; (tmp->proximo != event) && (tmp != NULL) ; tmp = tmp->proximo ) ; 00051 00052 // Si no encontramos el event devolvemos error 00053 if ( tmp == NULL ) { 00054 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h 00055 return -1; 00056 } 00057 else { 00058 tmp->proximo = event->proximo; 00059 } 00060 00061 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h 00062 return 0; 00063 } 00064 00065 00066 void actualizar_eventos(device_t dispositivo) 00067 { 00068 event_t *tmp; 00069 00070 // Chequeamos si hay events activos 00071 if ( event_inicio == NULL ) { 00072 return; 00073 } 00074 00075 for ( tmp=event_inicio; tmp != NULL; tmp = tmp->proximo ) { 00076 00077 //kprintf("Evento: %x - Tipo: %d\n", tmp, tmp->dispositivo); 00078 00079 if ( tmp->dispositivo == dispositivo ) { 00080 00081 //kprintf("Despertando a la bella durmiente: 0x%x\n", tmp->proceso); 00082 despertar_task(tmp->proceso); 00083 } 00084 00085 } 00086 00087 }