00001 #ifndef _SIGNAL_H_
00002 #define _SIGNAL_H_
00003
00004 #include <gnu_defs.h>
00005 #include <stdio.h>
00006 #include <realtime.h>
00007
00008 typedef volatile struct event{
00009 u32 signalmask;
00010 ptask action;
00011 taskdata arg;
00012 volatile struct event *previous;
00013 volatile struct event *next;
00014 }event;
00015
00016 static inline void fire(event *e){if(e!=NULL)e->action(e->arg);}
00017
00020 typedef struct eventlist{
00021 u32 signals;
00022 u32 signals_needed;
00023 event *head;
00024 event *tail;
00025 int size;
00026 }eventlist;
00030 #define SCI0_DATA_RECEIVED 0x00000001
00031 #define SCI1_DATA_RECEIVED 0x00000002
00032 #define CAN0_DATA_RECEIVED 0x00000004
00033 #define CAN1_DATA_RECEIVED 0x00000008
00034 #define CAN2_DATA_RECEIVED 0x00000010
00035 #define CAN3_DATA_RECEIVED 0x00000020
00036 #define CAN4_DATA_RECEIVED 0x00000040
00037
00038 #define SCI0_DATA_SENT 0x00001000
00039 #define SCI1_DATA_SENT 0x00002000
00040 #define CAN0_DATA_SENT 0x00004000
00041 #define CAN1_DATA_SENT 0x00008000
00042 #define CAN2_DATA_SENT 0x00010000
00043 #define CAN3_DATA_SENT 0x00020000
00044 #define CAN4_DATA_SENT 0x00040000
00045
00046
00047
00048 event *__attribute__((far))register_event(event *e);
00049 void __attribute__((far))unregister_event(event *e);
00050 void __attribute__((far))throw(int signal);
00051 void __attribute__((far))fire_events(void);
00052
00053 #endif //_EVENTS_H_