1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - OS - include
3 File: message.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-17#$
14 $Rev: 8556 $
15 $Author: okubata_ryoma $
16
17 *---------------------------------------------------------------------------*/
18
19 #ifndef NITRO_OS_MESSAGE_H_
20 #define NITRO_OS_MESSAGE_H_
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 #include <nitro/os/common/thread.h>
27
28 //--------------------------------------------------------------------------------
29 //---- type definition about message
30 typedef struct OSMessageQueue OSMessageQueue;
31 typedef void *OSMessage;
32
33 //---- structure of message queue
34 #pragma warn_padding off
35 struct OSMessageQueue
36 {
37 OSThreadQueue queueSend;
38 OSThreadQueue queueReceive;
39 OSMessage *msgArray;
40 s32 msgCount;
41 s32 firstIndex;
42 s32 usedCount;
43 };
44 #pragma warn_padding reset
45
46 //---- Flags to turn blocking on/off when sending/receiving message
47 #define OS_MESSAGE_NOBLOCK 0
48 #define OS_MESSAGE_BLOCK 1
49
50
51
52 /*---------------------------------------------------------------------------*
53 Name: OS_InitMessageQueue
54
55 Description: initialize message queue
56
57 Arguments: mq message queue
58 msgArray buffer for message queue
59 msgCount max massage size for buffer
60
61 Returns: None
62 *---------------------------------------------------------------------------*/
63 void OS_InitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount);
64
65
66 /*---------------------------------------------------------------------------*
67 Name: OS_SendMessage
68
69 Description: send message to message queue
70
71 Arguments: mq message queue
72 msg massage which is sent
73 flags whether wait or not when queue is full
74
75 Returns: TRUE if send
76
77 *---------------------------------------------------------------------------*/
78 BOOL OS_SendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags);
79
80
81 /*---------------------------------------------------------------------------*
82 Name: OS_ReceiveMessage
83
84 Description: receive message from message queue
85
86 Arguments: mq message queue
87 msg massage which is received
88 flags whether wait or not when queue is empty
89
90 Returns: TRUE if reveice
91
92 *---------------------------------------------------------------------------*/
93 BOOL OS_ReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags);
94
95
96 /*---------------------------------------------------------------------------*
97 Name: OS_JamMessage
98
99 Description: send message to message queue, cutting in the top of the queue
100
101 Arguments: mq message queue
102 msg massage which is sent
103 flags whether wait or not when queue is empty
104
105 Returns: TRUE if send
106
107 *---------------------------------------------------------------------------*/
108 BOOL OS_JamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags);
109
110
111 /*---------------------------------------------------------------------------*
112 Name: OS_ReadMessageMessage
113
114 Description: read message at message queue. no change to queue
115 not occur to switch threads.
116
117 Arguments: mq message queue
118 msg massage which is received
119 flags whether wait or not when queue is empty
120
121 Returns: TRUE if read
122
123 *---------------------------------------------------------------------------*/
124 BOOL OS_ReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags);
125
126
127 /*---------------------------------------------------------------------------*
128 Name: OS_GetMessageCount
129
130 Description: get message count of message queue.
131
132 Arguments: mq message queue
133
134 Returns: message count
135
136 *---------------------------------------------------------------------------*/
OS_GetMessageCount(OSMessageQueue * mq)137 static inline s32 OS_GetMessageCount(OSMessageQueue *mq)
138 {
139 SDK_ASSERT(mq);
140 return mq->msgCount;
141 }
142
143
144 /*---------------------------------------------------------------------------*
145 Name: OS_IsMessageQueueFull
146
147 Description: get whether message queue is full or not
148
149 Arguments: mq message queue
150
151 Returns: TRUE if full
152
153 *---------------------------------------------------------------------------*/
OS_IsMessageQueueFull(OSMessageQueue * mq)154 static inline BOOL OS_IsMessageQueueFull(OSMessageQueue *mq)
155 {
156 SDK_ASSERT(mq);
157 return (mq->usedCount >= mq->msgCount);
158 }
159
160
161 //--------------------------------------------------------------------------------
162 #ifdef __cplusplus
163 } /* extern "C" */
164 #endif
165
166 /* NITRO_OS_MESSAGE_H_ */
167 #endif
168