1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - OS - include
3 File: event.h
4
5 Copyright 2003-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: 2008-09-18#$
14 $Rev: 8573 $
15 $Author: okubata_ryoma $
16 *---------------------------------------------------------------------------*/
17
18 #ifndef NITRO_OS_EVENT_H_
19 #define NITRO_OS_EVENT_H_
20
21 #include <nitro/os/common/thread.h>
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 //---------------- event mode
28 typedef enum
29 {
30 OS_EVENT_MODE_AND = 0,
31 OS_EVENT_MODE_OR = 1
32 }
33 OSEventMode;
34
35
36 //---------------- event parameter
37 typedef struct
38 {
39 vu32 flag;
40 OSThreadQueue queue;
41 }
42 OSEvent;
43
44
45 /*---------------------------------------------------------------------------*
46 Name: OS_InitEvent
47
48 Description: initialize event struct
49
50 Arguments: event : pointer to event struct
51
52 Returns: none
53 *---------------------------------------------------------------------------*/
54 void OS_InitEvent( OSEvent *event );
55
56 /*---------------------------------------------------------------------------*
57 Name: OS_WaitEvent
58
59 Description: sleep thread and wait event
60 if event is NULL, just sleep.
61
62 Arguments: event : pointer to event struct
63 pattern : event pattern
64 mode : event mode
65 OS_EVENT_MODE_AND ... wait for all event bit
66 OS_EVENT_MODE_OR ... wait for any event bit
67
68 Returns: none
69 *---------------------------------------------------------------------------*/
70 u32 OS_WaitEvent(OSEvent* event, u32 pattern, OSEventMode mode );
71
72 /*---------------------------------------------------------------------------*
73 Name: OS_WaitEventEx
74
75 Description: sleep thread and wait event
76 if event is NULL, just sleep.
77
78 Arguments: event : pointer to event struct
79 pattern : event pattern
80 mode : event mode
81 OS_EVENT_MODE_AND ... wait for all event bit
82 OS_EVENT_MODE_OR ... wait for any event bit
83 clearBit : clear bits (in case of the end of waiting)
84
85 Returns: none
86 *---------------------------------------------------------------------------*/
87 u32 OS_WaitEventEx(OSEvent* event, u32 pattern, OSEventMode mode, u32 clearBit );
88
89
90 //---- inline access
OS_WaitEvent_And(OSEvent * event,u32 pattern)91 static inline u32 OS_WaitEvent_And( OSEvent* event, u32 pattern )
92 {
93 return OS_WaitEventEx( event, pattern, OS_EVENT_MODE_AND, 0 );
94 }
OS_WaitEvent_Or(OSEvent * event,u32 pattern)95 static inline u32 OS_WaitEvent_Or(OSEvent* event, u32 pattern )
96 {
97 return OS_WaitEventEx( event, pattern, OS_EVENT_MODE_OR, 0 );
98 }
OS_WaitEventEx_And(OSEvent * event,u32 pattern,u32 clearBit)99 static inline u32 OS_WaitEventEx_And( OSEvent* event, u32 pattern, u32 clearBit )
100 {
101 return OS_WaitEventEx( event, pattern, OS_EVENT_MODE_AND, clearBit );
102 }
OS_WaitEventEx_Or(OSEvent * event,u32 pattern,u32 clearBit)103 static inline u32 OS_WaitEventEx_Or(OSEvent* event, u32 pattern, u32 clearBit )
104 {
105 return OS_WaitEventEx( event, pattern, OS_EVENT_MODE_OR, clearBit );
106 }
107
108 /*---------------------------------------------------------------------------*
109 Name: OS_SignalEvent
110
111 Description: set event bit and wakeup thread.
112 if setPattern == 0, do nothing
113
114 Arguments: event : pointer to event struct
115 setPattern : bit pattern to set
116
117 Returns: none
118 *---------------------------------------------------------------------------*/
119 void OS_SignalEvent(OSEvent* event, u32 setPattern);
120
121 /*---------------------------------------------------------------------------*
122 Name: OS_ClearEvent
123
124 Description: clear specified event bits
125
126 Arguments: event : pointer to event struct
127 clearBit : clear bits
128
129 Returns: none
130 *---------------------------------------------------------------------------*/
131 void OS_ClearEvent(OSEvent* event, u32 clearBit);
132
133 /*---------------------------------------------------------------------------*
134 Name: OS_ClearAllEvent
135
136 Description: clear all event bits
137
138 Arguments: event : pointer to event struct
139
140 Returns: none
141 *---------------------------------------------------------------------------*/
142 void OS_ClearAllEvent(OSEvent* event);
143
144 /*---------------------------------------------------------------------------*
145 Name: OS_PollEvent
146
147 Description: poll event struct if condition matches
148
149 Arguments: event : waiting condition
150 pattern : event pattern
151 mode : event mode
152 OS_EVENT_MODE_AND ... wait for all event bit
153 OS_EVENT_MODE_OR ... wait for any event bit
154
155 Returns: not 0 ... matched. returnd the event flag.
156 0 ... not match.
157 *---------------------------------------------------------------------------*/
158 u32 OS_PollEvent(OSEvent* event, u32 pattern, OSEventMode mode );
159
160 /*---------------------------------------------------------------------------*
161 Name: OS_PollEventEx
162
163 Description: poll event struct if condition matches
164
165 Arguments: event : pointer to event struct
166 pattern : event pattern
167 mode : event mode
168 OS_EVENT_MODE_AND ... wait for all event bit
169 OS_EVENT_MODE_OR ... wait for any event bit
170 clearBit : clear bits (in case of matching)
171
172 Returns: not 0 ... matched. returnd the event flag.
173 0 ... not match.
174 *---------------------------------------------------------------------------*/
175 u32 OS_PollEventEx(OSEvent* event, u32 pattern, OSEventMode mode, u32 clearBit );
176
177 //---- inline access
OS_PollEvent_And(OSEvent * event,u32 pattern)178 static inline u32 OS_PollEvent_And( OSEvent* event, u32 pattern )
179 {
180 return OS_PollEventEx( event, pattern, OS_EVENT_MODE_AND, 0 );
181 }
OS_PollEvent_Or(OSEvent * event,u32 pattern)182 static inline u32 OS_PollEvent_Or(OSEvent* event, u32 pattern )
183 {
184 return OS_PollEventEx( event, pattern, OS_EVENT_MODE_OR, 0 );
185 }
OS_PollEventEx_And(OSEvent * event,u32 pattern,u32 clearBit)186 static inline u32 OS_PollEventEx_And( OSEvent* event, u32 pattern, u32 clearBit )
187 {
188 return OS_PollEventEx( event, pattern, OS_EVENT_MODE_AND, clearBit );
189 }
OS_PollEventEx_Or(OSEvent * event,u32 pattern,u32 clearBit)190 static inline u32 OS_PollEventEx_Or(OSEvent* event, u32 pattern, u32 clearBit )
191 {
192 return OS_PollEventEx( event, pattern, OS_EVENT_MODE_OR, clearBit );
193 }
194
195 #ifdef __cplusplus
196 } /* extern "C" */
197 #endif
198
199 /* NITRO_OS_EVENT_H_ */
200 #endif
201