marioparty4/src/TRK_MINNOW_DOLPHIN/nubevent.c
dbalatoni13 cdb1d1fc37
Import gx, PadClamp, rest of mtx, TRK 2.6 and MSL (#525)
* Match mtx and Padclamp.c

* Match the rest of GX

* Import TRK 2.6

* Import MSL headers and files

* Merge some MSL headers into ours
2025-01-12 08:11:23 -06:00

72 lines
1.8 KiB
C

#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/nubevent.h"
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/mutex_TRK.h"
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/msgbuf.h"
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/mem_TRK.h"
TRKEventQueue gTRKEventQueue;
DSError TRKInitializeEventQueue()
{
TRKInitializeMutex(&gTRKEventQueue);
TRKAcquireMutex(&gTRKEventQueue);
gTRKEventQueue.count = 0;
gTRKEventQueue.next = 0;
gTRKEventQueue.eventID = 0x100;
TRKReleaseMutex(&gTRKEventQueue);
return DS_NoError;
}
void TRKCopyEvent(TRKEvent* dstEvent, const TRKEvent* srcEvent)
{
TRK_memcpy(dstEvent, srcEvent, sizeof(TRKEvent));
}
BOOL TRKGetNextEvent(TRKEvent* event)
{
BOOL status = 0;
TRKAcquireMutex(&gTRKEventQueue);
if (0 < gTRKEventQueue.count) {
TRKCopyEvent(event, &gTRKEventQueue.events[gTRKEventQueue.next]);
gTRKEventQueue.count--;
gTRKEventQueue.next++;
if (gTRKEventQueue.next == 2)
gTRKEventQueue.next = 0;
status = 1;
}
TRKReleaseMutex(&gTRKEventQueue);
return status;
}
DSError TRKPostEvent(TRKEvent* event)
{
DSError ret = DS_NoError;
int nextEventID;
TRKAcquireMutex(&gTRKEventQueue);
if (gTRKEventQueue.count == 2) {
ret = DS_EventQueueFull;
} else {
nextEventID = (gTRKEventQueue.next + gTRKEventQueue.count) % 2;
TRKCopyEvent(&gTRKEventQueue.events[nextEventID], event);
gTRKEventQueue.events[nextEventID].eventID = gTRKEventQueue.eventID;
gTRKEventQueue.eventID++;
if (gTRKEventQueue.eventID < 0x100)
gTRKEventQueue.eventID = 0x100;
gTRKEventQueue.count++;
}
TRKReleaseMutex(&gTRKEventQueue);
return ret;
}
void TRKConstructEvent(TRKEvent* event, NubEventType eventType)
{
event->eventType = eventType;
event->eventID = 0;
event->msgBufID = -1;
}
void TRKDestructEvent(TRKEvent* event) { TRKReleaseBuffer(event->msgBufID); }