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