diff options
| author | Luke Street <luke@street.dev> | 2026-03-01 15:35:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-01 14:35:36 -0800 |
| commit | 9649319ec4926457ef85e6094f8207474c977c2d (patch) | |
| tree | 1c5cd4c7cc4c1aee03f28921213da47f2775444d /libs/JSystem/src/JAudio2/JASTaskThread.cpp | |
| parent | 6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (diff) | |
Reorganize library code into `libs/` (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}
* Update configure.py and project.py for new libs structure
* Refactor `#include <dolphin/x.h>` -> `<x.h>`
* Remove `__REVOLUTION_SDK__` forwards from dolphin
* Fix dolphin/ references in revolution
* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`
* Always build TRK against dolphin headers
* Resolve revolution SDK header resolution issues
Diffstat (limited to 'libs/JSystem/src/JAudio2/JASTaskThread.cpp')
| -rw-r--r-- | libs/JSystem/src/JAudio2/JASTaskThread.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/libs/JSystem/src/JAudio2/JASTaskThread.cpp b/libs/JSystem/src/JAudio2/JASTaskThread.cpp new file mode 100644 index 0000000000..30a6d07a98 --- /dev/null +++ b/libs/JSystem/src/JAudio2/JASTaskThread.cpp @@ -0,0 +1,113 @@ +#include "JSystem/JSystem.h" // IWYU pragma: keep + +#include "JSystem/JAudio2/JASTaskThread.h" +#include "JSystem/JAudio2/JASCalc.h" +#include "JSystem/JAudio2/JASCriticalSection.h" +#include "JSystem/JKernel/JKRSolidHeap.h" + +JASTaskThread::JASTaskThread(int priority, int msgCount, u32 stackSize) : + JKRThread(JASDram, stackSize, msgCount, priority) +{ + field_0x84 = false; + OSInitThreadQueue(&threadQueue_); +} + +JASTaskThread::~JASTaskThread() { + OSMessage msg; + BOOL received; + while (true) { + msg = waitMessage(&received); + if (!received) { + return; + } + JASKernel::getCommandHeap()->free(msg); + } +} + +void* JASTaskThread::allocCallStack(JASThreadCallback callback, const void* msg, u32 msgSize) { + ThreadMemPool* heap; + u32 size = msgSize + 8; + JASThreadCallStack *callStack = (JASThreadCallStack*) JASKernel::getCommandHeap()->alloc(size); + if (callStack == NULL) { + return NULL; + } + + callStack->msgType_ = 1; + JASCalc::bcopy(msg, callStack->msg.buffer, msgSize); + callStack->callback_ = callback; + return callStack; +} + +void* JASTaskThread::allocCallStack(JASThreadCallback callback, void* msg) { + JASThreadCallStack *callStack; + callStack = (JASThreadCallStack*)JASKernel::getCommandHeap()->alloc(12); + if (callStack == NULL) { + return NULL; + } + + callStack->msgType_ = 0; + callStack->msg.bufferPtr = msg; + callStack->callback_ = callback; + return callStack; +} + +int JASTaskThread::sendCmdMsg(JASThreadCallback callback, const void* msg, u32 msgSize) { + void* callstack; + + callstack = allocCallStack(callback, msg, msgSize); + if (callstack == NULL) { + return 0; + } + + BOOL iVar2 = sendMessage(callstack); + if (!iVar2) { + JASKernel::getCommandHeap()->free(callstack); + } + return iVar2; +} + +int JASTaskThread::sendCmdMsg(JASThreadCallback callback, void* msg) { + void* callstack; + + callstack = allocCallStack(callback, msg); + if (callstack == NULL) { + return 0; + } + + BOOL iVar2 = sendMessage(callstack); + if (!iVar2) { + JASKernel::getCommandHeap()->free(callstack); + } + return iVar2; +} + +void* JASTaskThread::run() { + JASThreadCallStack* callstack; + OSInitFastCast(); + do { + callstack = static_cast<JASThreadCallStack*>(waitMessageBlock()); + if (field_0x84) { + OSSleepThread(&threadQueue_); + } + + if (callstack->msgType_) { + callstack->callback_(callstack->msg.buffer); + } else { + callstack->callback_(callstack->msg.bufferPtr); + } + + JASKernel::getCommandHeap()->free(callstack); + } while (true); +} + +void JASTaskThread::pause(bool param_0) { + JASCriticalSection aJStack_14; + if (param_0) { + field_0x84 = 1; + } else { + if (field_0x84) { + OSWakeupThread(&threadQueue_); + } + field_0x84 = 0; + } +} |
