Files
tww/src/JSystem/JAudio/JASResArcLoader.cpp
T
2023-11-19 20:43:24 -08:00

86 lines
2.8 KiB
C++

//
// Generated by dtk
// Translation Unit: JASResArcLoader.cpp
//
#include "JSystem/JAudio/JASResArcLoader.h"
#include "JSystem/JAudio/JASDvdThread.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "dolphin/os/OSMessage.h"
struct LoadResourceMsg {
/* 0x00 */ JKRArchive* mArchive;
/* 0x04 */ u16 mId;
/* 0x08 */ u8* mBuffer;
/* 0x0C */ u32 mSize;
/* 0x10 */ void (*mCallback)(u32, u32);
/* 0x14 */ u32 mCallbackParam;
/* 0x18 */ OSMessageQueue* mMessageQueue;
};
/* 8027D4C8-8027D4FC .text getResSize__Q28JASystem12ResArcLoaderFP10JKRArchiveUs */
u32 JASystem::ResArcLoader::getResSize(JKRArchive* archive, u16 param_2) {
JKRArchive::SDIFileEntry* entry = archive->findIdResource(param_2);
if (entry == NULL) {
return 0;
}
return entry->data_size;
}
/* 8027D4FC-8027D5A0 .text loadResourceCallback__Q28JASystem12ResArcLoaderFPv */
s32 JASystem::ResArcLoader::loadResourceCallback(void* param_1) {
LoadResourceMsg* msg = (LoadResourceMsg*)param_1;
u32 var1 = msg->mArchive->readResource(msg->mBuffer, msg->mSize, msg->mId);
if (msg->mCallback) {
msg->mCallback(var1, msg->mCallbackParam);
}
if (var1 == 0) {
if (msg->mMessageQueue) {
OSSendMessage(msg->mMessageQueue, OSMessage(-1), OS_MESSAGE_BLOCK);
}
return -1;
} else {
if (msg->mMessageQueue) {
OSSendMessage(msg->mMessageQueue, OSMessage(0), OS_MESSAGE_BLOCK);
}
return 0;
}
}
/* 8027D5A0-8027D658 .text loadResource__Q28JASystem12ResArcLoaderFP10JKRArchiveUsPUcUl */
u32 JASystem::ResArcLoader::loadResource(JKRArchive* archive, u16 id, u8* buffer, u32 size) {
OSMessageQueue queue;
LoadResourceMsg msg;
OSMessage queueMsg;
OSMessage receiveMsg;
OSInitMessageQueue(&queue, &queueMsg, 1);
msg.mArchive = archive;
msg.mId = id;
msg.mBuffer = buffer;
msg.mSize = size;
msg.mCallback = NULL;
msg.mCallbackParam = 0;
msg.mMessageQueue = NULL;
msg.mMessageQueue = &queue;
if (!Dvd::sendCmdMsg(loadResourceCallback, &msg, sizeof(LoadResourceMsg))) {
return 0;
}
OSReceiveMessage(&queue, &receiveMsg, OS_MESSAGE_BLOCK);
return size & ~-(u32(receiveMsg) != 0);
}
/* 8027D658-8027D6B0 .text loadResourceAsync__Q28JASystem12ResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl */
void JASystem::ResArcLoader::loadResourceAsync(JKRArchive* archive, u16 id, u8* buffer, u32 size, void (*cb)(u32, u32), u32 cbParam) {
LoadResourceMsg msg;
msg.mArchive = archive;
msg.mId = id;
msg.mBuffer = buffer;
msg.mSize = size;
msg.mCallback = NULL;
msg.mCallbackParam = 0;
msg.mMessageQueue = NULL;
msg.mCallback = cb;
msg.mCallbackParam = cbParam;
Dvd::sendCmdMsg(loadResourceCallback, &msg, sizeof(LoadResourceMsg));
}