initial commit
[pfinal.git] / Routix / src / event.c
blob39f5597058a322842cad74c377782b1d72435bee
1 /* event.c */
4 #include "routix/event.h"
6 // Puntero al inicio de la lista de eventos
7 event_t *event_inicio=NULL;
9 int insertar_evento(event_t *nuevo)
11 event_t *tmp;
13 if ( nuevo == NULL ) { return 0; }
15 // Nos paramos al ppio de la lista
16 tmp = event_inicio;
18 if ( event_inicio == NULL ) { event_inicio = nuevo; }
20 else {
22 // Buscamos la última tarea
23 for ( tmp = event_inicio; tmp->proximo != NULL ; tmp = tmp->proximo );
25 // Nos colgamos de ella
26 tmp->proximo = nuevo;
29 // La nueva tarea queda apuntando a NULL
30 nuevo->proximo = NULL;
32 return 1;
36 // Función crítica, tengo que agregarle la deshabilitación de
37 // interrupciones (bajo análisis)
38 int remover_evento(event_t *event)
40 event_t *tmp;
42 // Es el primer event ?
43 if ( event == event_inicio ) {
44 event_inicio = event->proximo;
45 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h
46 return 0;
49 // Buscamos nuestro event entonces
50 for ( tmp=event_inicio; (tmp->proximo != event) && (tmp != NULL) ; tmp = tmp->proximo ) ;
52 // Si no encontramos el event devolvemos error
53 if ( tmp == NULL ) {
54 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h
55 return -1;
57 else {
58 tmp->proximo = event->proximo;
61 // Lo tengo que reemplazar por la constante correcta según la definición de errno.h
62 return 0;
66 void actualizar_eventos(device_t dispositivo)
68 event_t *tmp;
70 // Chequeamos si hay events activos
71 if ( event_inicio == NULL ) {
72 return;
75 for ( tmp=event_inicio; tmp != NULL; tmp = tmp->proximo ) {
77 //kprintf("Evento: %x - Tipo: %d\n", tmp, tmp->dispositivo);
79 if ( tmp->dispositivo == dispositivo ) {
81 //kprintf("Despertando a la bella durmiente: 0x%x\n", tmp->proceso);
82 despertar_task(tmp->proceso);