event.h

Go to the documentation of this file.
00001 
00049 #ifndef _RTAI_EVENT_H
00050 #define _RTAI_EVENT_H
00051 
00052 #include <nucleus/synch.h>
00053 #include <rtai/types.h>
00054 
00055 /* Creation flags. */
00056 #define EV_PRIO  XNSYNCH_PRIO   /* Pend by task priority order. */
00057 #define EV_FIFO  XNSYNCH_FIFO   /* Pend by FIFO order. */
00058 
00059 /* Operation flags. */
00060 #define EV_ANY  0x1     /* Disjunctive wait. */
00061 #define EV_ALL  0x0     /* Conjunctive wait. */
00062 
00063 typedef struct rt_event_info {
00064 
00065     unsigned long value; /* !< Current event group value. */
00066 
00067     int nwaiters;       /* !< Number of pending tasks. */
00068 
00069     char name[XNOBJECT_NAME_LEN]; /* !< Symbolic name. */
00070 
00071 } RT_EVENT_INFO;
00072 
00073 typedef struct rt_event_placeholder {
00074     rt_handle_t opaque;
00075 } RT_EVENT_PLACEHOLDER;
00076 
00077 #if defined(__KERNEL__) || defined(__RTAI_SIM__)
00078 
00079 #define RTAI_EVENT_MAGIC 0x55550404
00080 
00081 typedef struct rt_event {
00082 
00083     unsigned magic;   /* !< Magic code - must be first */
00084 
00085     xnsynch_t synch_base; /* !< Base synchronization object. */
00086 
00087     unsigned long value; /* !< Event group value. */
00088 
00089     rt_handle_t handle; /* !< Handle in registry -- zero if unregistered. */
00090 
00091     char name[XNOBJECT_NAME_LEN]; /* !< Symbolic name. */
00092 
00093 #if defined(__KERNEL__) && defined(CONFIG_RTAI_OPT_FUSION)
00094     int source;         /* !< Creator's space. */
00095 #endif /* __KERNEL__ && CONFIG_RTAI_OPT_FUSION */
00096 
00097 } RT_EVENT;
00098 
00099 #ifdef __cplusplus
00100 extern "C" {
00101 #endif
00102 
00103 int __event_pkg_init(void);
00104 
00105 void __event_pkg_cleanup(void);
00106 
00107 #ifdef __cplusplus
00108 }
00109 #endif
00110 
00111 #else /* !(__KERNEL__ || __RTAI_SIM__) */
00112 
00113 typedef RT_EVENT_PLACEHOLDER RT_EVENT;
00114 
00115 int rt_event_bind(RT_EVENT *event,
00116                   const char *name);
00117 
00118 static inline int rt_event_unbind (RT_EVENT *event)
00119 
00120 {
00121     event->opaque = RT_HANDLE_INVALID;
00122     return 0;
00123 }
00124 
00125 #endif /* __KERNEL__ || __RTAI_SIM__ */
00126 
00127 #ifdef __cplusplus
00128 extern "C" {
00129 #endif
00130 
00131 /* Public interface. */
00132 
00133 int rt_event_create(RT_EVENT *event,
00134                     const char *name,
00135                     unsigned long ivalue,
00136                     int mode);
00137 
00138 int rt_event_delete(RT_EVENT *event);
00139 
00140 int rt_event_signal(RT_EVENT *event,
00141                     unsigned long mask);
00142 
00143 int rt_event_wait(RT_EVENT *event,
00144                   unsigned long mask,
00145                   unsigned long *mask_r,
00146                   int mode,
00147                   RTIME timeout);
00148 
00149 int rt_event_clear(RT_EVENT *event,
00150                    unsigned long mask,
00151                    unsigned long *mask_r);
00152 
00153 int rt_event_inquire(RT_EVENT *event,
00154                      RT_EVENT_INFO *info);
00155 
00156 #ifdef __cplusplus
00157 }
00158 #endif
00159 
00160 #endif /* !_RTAI_EVENT_H */

Generated on Mon Dec 13 09:49:49 2004 for RTAI API by  doxygen 1.3.9.1