Files
2023-03-13 07:15:03 +00:00

52 lines
1.4 KiB
C

#ifndef _DOLPHIN_OS_OSMESSAGE_H
#define _DOLPHIN_OS_OSMESSAGE_H
#include "types.h"
#include "dolphin/os/OSUtil.h"
#include "dolphin/os/OSThread.h"
#ifdef __cplusplus
extern "C" {
#endif // ifdef __cplusplus
///////// MESSAGE TYPES //////////
typedef struct OSMessageQueue OSMessageQueue;
// Useful typedef for messages.
typedef void* OSMessage;
// Struct for managing the message queue.
struct OSMessageQueue {
OSThreadQueue queueSend; // _00
OSThreadQueue queueReceive; // _08
OSMessage* msgArray; // _10, array of messages.
int msgCount; // _14, array limit size.
int firstIndex; // _18, first message index in array.
int usedCount; // _1C, actual number of used messages.
};
// Defines for message flags for sending/receiving.
#define OS_MESSAGE_NOBLOCK (0)
#define OS_MESSAGE_BLOCK (1)
typedef enum {
OS_MSG_PERSISTENT = (1 << 0),
} OSMessageFlags;
//////////////////////////////////
/////// MESSAGE FUNCTIONS ////////
// Functions for handling messages.
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* msgArray, int msgCount);
BOOL OSSendMessage(OSMessageQueue* queue, OSMessage msg, int flags);
BOOL OSJamMessage(OSMessageQueue* queue, OSMessage msg, int flags);
BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage* msgPtr, int flags);
//////////////////////////////////
#ifdef __cplusplus
};
#endif // ifdef __cplusplus
#endif