event.c

Go to the documentation of this file.
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 }

Generated on Sun May 30 18:38:34 2004 for Routix OS by doxygen 1.3.6