Add messagequeue functions

This commit is contained in:
James Benton 2016-01-07 13:32:55 +00:00
parent 517c8a8389
commit 297a0d7068
2 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,82 @@
#pragma once
#include <wut.h>
WUT_LIB_HEADER_START
typedef uint32_t OSMessageFlags;
enum OSMessageFlags
{
OS_MESSAGE_QUEUE_BLOCKING = 1 << 0,
OS_MESSAGE_QUEUE_HIGH_PRIORITY = 1 << 1,
};
struct OSMessage
{
void *message;
uint32_t args[3];
};
CHECK_OFFSET(OSMessage, 0x00, message);
CHECK_OFFSET(OSMessage, 0x04, args);
CHECK_SIZE(OSMessage, 0x10);
#define OS_MESSAGE_QUEUE_TAG 0x6D536751u
struct OSMessageQueue
{
uint32_t tag;
const char *name;
UNKNOWN(4);
OSThreadQueue sendQueue;
OSThreadQueue recvQueue;
OSMessage *messages;
uint32_t size;
uint32_t first;
uint32_t used;
};
CHECK_OFFSET(OSMessageQueue, 0x00, tag);
CHECK_OFFSET(OSMessageQueue, 0x04, name);
CHECK_OFFSET(OSMessageQueue, 0x0c, sendQueue);
CHECK_OFFSET(OSMessageQueue, 0x1c, recvQueue);
CHECK_OFFSET(OSMessageQueue, 0x2c, messages);
CHECK_OFFSET(OSMessageQueue, 0x30, size);
CHECK_OFFSET(OSMessageQueue, 0x34, first);
CHECK_OFFSET(OSMessageQueue, 0x38, used);
CHECK_SIZE(OSMessageQueue, 0x3c);
#pragma pack(pop)
void
OSInitMessageQueue(OSMessageQueue *queue,
OSMessage *messages,
int32_t size);
void
OSInitMessageQueueEx(OSMessageQueue *queue,
OSMessage *messages,
int32_t size,
const char *name);
BOOL
OSSendMessage(OSMessageQueue *queue,
OSMessage *message,
OSMessageFlags flags);
BOOL
OSJamMessage(OSMessageQueue *queue,
OSMessage *message,
OSMessageFlags flags);
BOOL
OSReceiveMessage(OSMessageQueue *queue,
OSMessage *message,
OSMessageFlags flags);
BOOL
OSPeekMessage(OSMessageQueue *queue,
OSMessage *message);
OSMessageQueue *
OSGetSystemMessageQueue();
WUT_LIB_HEADER_END

View File

@ -137,6 +137,15 @@ EXPORT(MEMGetNextListObject);
EXPORT(MEMGetPrevListObject);
EXPORT(MEMGetNthListObject);
// coreinit/messagequeue.h
EXPORT(OSInitMessageQueue);
EXPORT(OSInitMessageQueueEx);
EXPORT(OSSendMessage);
EXPORT(OSJamMessage);
EXPORT(OSReceiveMessage);
EXPORT(OSPeekMessage);
EXPORT(OSGetSystemMessageQueue);
// coreinit/mutex.h
EXPORT(OSInitMutex);
EXPORT(OSInitMutexEx);