/*---------------------------------------------------------------------------* Project: CtrBrom - OS - include File: message.h Copyright 2009 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Date:: $ $Rev$ $Author$ *---------------------------------------------------------------------------*/ #ifndef BROM_OS_MESSAGE_H_ #define BROM_OS_MESSAGE_H_ #ifdef __cplusplus extern "C" { #endif #include //-------------------------------------------------------------------------------- //---- type definition about message typedef struct OSMessageQueue OSMessageQueue; typedef void *OSMessage; //---- structure of message queue //#pragma warn_padding off struct OSMessageQueue { OSThreadQueue queueSend; OSThreadQueue queueReceive; OSMessage *msgArray; s32 msgCount; s32 firstIndex; s32 usedCount; }; //#pragma warn_padding reset //---- Flags to turn blocking on/off when sending/receiving message #define OS_MESSAGE_NOBLOCK 0 #define OS_MESSAGE_BLOCK 1 /*---------------------------------------------------------------------------* Name: osInitMessageQueue Description: initialize message queue Arguments: mq message queue msgArray buffer for message queue msgCount max massage size for buffer Returns: None *---------------------------------------------------------------------------*/ void osInitMessageQueue(OSMessageQueue *mq, OSMessage *msgArray, s32 msgCount); /*---------------------------------------------------------------------------* Name: osSendMessage Description: send message to message queue Arguments: mq message queue msg massage which is sent flags whether wait or not when queue is full Returns: TRUE if send *---------------------------------------------------------------------------*/ BOOL osSendMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); /*---------------------------------------------------------------------------* Name: osReceiveMessage Description: receive message from message queue Arguments: mq message queue msg massage which is received flags whether wait or not when queue is empty Returns: TRUE if reveice *---------------------------------------------------------------------------*/ BOOL osReceiveMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); /*---------------------------------------------------------------------------* Name: osJamMessage Description: send message to message queue, cutting in the top of the queue Arguments: mq message queue msg massage which is sent flags whether wait or not when queue is empty Returns: TRUE if send *---------------------------------------------------------------------------*/ BOOL osJamMessage(OSMessageQueue *mq, OSMessage msg, s32 flags); /*---------------------------------------------------------------------------* Name: osReadMessageMessage Description: read message at message queue. no change to queue not occur to switch threads. Arguments: mq message queue msg massage which is received flags whether wait or not when queue is empty Returns: TRUE if read *---------------------------------------------------------------------------*/ BOOL osReadMessage(OSMessageQueue *mq, OSMessage *msg, s32 flags); /*---------------------------------------------------------------------------* Name: osGetMessageCount Description: get message count of message queue. Arguments: mq message queue Returns: message count *---------------------------------------------------------------------------*/ static inline s32 osGetMessageCount(OSMessageQueue *mq) { SDK_ASSERT(mq); return mq->msgCount; } /*---------------------------------------------------------------------------* Name: osIsMessageQueueFull Description: get whether message queue is full or not Arguments: mq message queue Returns: TRUE if full *---------------------------------------------------------------------------*/ static inline BOOL osIsMessageQueueFull(OSMessageQueue *mq) { SDK_ASSERT(mq); return (mq->usedCount >= mq->msgCount); } //-------------------------------------------------------------------------------- #ifdef __cplusplus } /* extern "C" */ #endif /* BROM_OS_MESSAGE_H_ */ #endif