summaryrefslogtreecommitdiff
path: root/libs/JSystem/src/JAudio2/JASTaskThread.cpp
diff options
context:
space:
mode:
authorLuke Street <luke@street.dev>2026-03-01 15:35:36 -0700
committerGitHub <noreply@github.com>2026-03-01 14:35:36 -0800
commit9649319ec4926457ef85e6094f8207474c977c2d (patch)
tree1c5cd4c7cc4c1aee03f28921213da47f2775444d /libs/JSystem/src/JAudio2/JASTaskThread.cpp
parent6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (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.cpp113
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;
+ }
+}