mirror of
https://github.com/DaedalusX64/daedalus.git
synced 2025-04-02 10:21:48 -04:00
98 lines
2 KiB
C++
98 lines
2 KiB
C++
#ifndef OSHLE_OSMESGQUEUE_H_
|
|
#define OSHLE_OSMESGQUEUE_H_
|
|
|
|
|
|
|
|
#include "Core/Memory.h"
|
|
#include "Ultra/ultra_os.h"
|
|
|
|
#include <stddef.h> // ofsetof
|
|
|
|
/*
|
|
typedef struct OSMesgQueue_s {
|
|
OSThread *mtqueue; // Queue to store threads blocked on empty mailboxes (receive)
|
|
OSThread *fullqueue; // Queue to store threads blocked on full mailboxes (send)
|
|
s32 validCount; // Contains number of valid message
|
|
s32 first; // Points to first valid message
|
|
s32 msgCount; // Contains total # of messages
|
|
OSMesg *msg; // Points to message buffer array
|
|
} OSMesgQueue;
|
|
*/
|
|
|
|
class COSMesgQueue
|
|
{
|
|
public:
|
|
|
|
inline COSMesgQueue(u32 addr)
|
|
{
|
|
p_base = (u8 *)ReadAddress(addr);
|
|
}
|
|
|
|
// OSThread
|
|
inline u32 GetEmptyQueue()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, mtqueue));
|
|
}
|
|
|
|
inline u32 GetFullQueue()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, fullqueue));
|
|
}
|
|
|
|
inline s32 GetValidCount()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, validCount));
|
|
}
|
|
|
|
inline s32 GetFirst()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, first));
|
|
}
|
|
|
|
inline s32 GetMsgCount()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, msgCount));
|
|
}
|
|
|
|
inline u32 GetMesgArray()
|
|
{
|
|
return QuickRead32Bits(p_base, offsetof(OSMesgQueue, msg));
|
|
}
|
|
|
|
inline void SetEmptyQueue(u32 queue)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, mtqueue), queue);
|
|
}
|
|
|
|
inline void SetFullQueue(u32 queue)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, fullqueue), queue);
|
|
}
|
|
|
|
inline void SetValidCount(s32 nCount)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, validCount), nCount);
|
|
}
|
|
|
|
inline void SetFirst(s32 nFirst)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, first), nFirst);
|
|
}
|
|
|
|
inline void SetMsgCount(s32 nMsgCount)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, msgCount), nMsgCount);
|
|
}
|
|
|
|
inline void SetMesgArray(u32 dwMsgBuffer)
|
|
{
|
|
QuickWrite32Bits(p_base, offsetof(OSMesgQueue, msg), dwMsgBuffer);
|
|
}
|
|
|
|
|
|
protected:
|
|
u8* p_base;
|
|
|
|
};
|
|
|
|
#endif // OSHLE_OSMESGQUEUE_H_
|