SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
NANDManager.cpp
1#include "Game/System/NANDManager.hpp"
2#include "Game/Util.hpp"
3#include "Game/SingletonHolder.hpp"
4#include <JSystem/JKernel/JKRExpHeap.hpp>
5#include <cstdio>
6
7NANDRequestInfo::NANDRequestInfo() {
8 init();
9}
10
11void NANDRequestInfo::init() {
12 _40 = 0;
13 mRequestStatus = 4;
14 mRequestResult = 0;
15 mReqStr[0] = 0;
16 mFSBlock = 0;
17 _4C = nullptr;
18 _50 = nullptr;
19 _54 = 0;
20}
21
22bool NANDRequestInfo::isDone() const {
23 return mRequestStatus == 0;
24}
25
26const char* NANDRequestInfo::setMove(const char *pDest, const char *pSrc) {
27 init();
28 mRequestStatus = 0;
29 snprintf(mReqStr, sizeof(mReqStr), "%s", pDest);
30 _50 = (void*)pSrc;
31 return mReqStr;
32}
33
34const char* NANDRequestInfo::setWriteSeq(const char *pName, const void *a2, u32 block, u8 permission, u8 attr) {
35 init();
36 _4C = a2;
37 mRequestStatus = 2;
38 mFSBlock = block;
39 mPermission = permission;
40 mAttribute = attr;
41 snprintf(mReqStr, sizeof(mReqStr), "%s", pName);
42 return mReqStr;
43}
44
45const char* NANDRequestInfo::setReadSeq(const char *pName, void *a2, u32 block, u32 *a4) {
46 init();
47 _4C = a2;
48 mRequestStatus = 3;
49 mFSBlock = block;
50 _50 = a4;
51 snprintf(mReqStr, sizeof(mReqStr), "%s", pName);
52 return mReqStr;
53}
54
55const char* NANDRequestInfo::setCheck(u32 block, u32 node, u32 *a3) {
56 init();
57 mFSBlock = block;
58 mRequestStatus = 4;
59 mINode = node;
60 _50 = a3;
61 return mReqStr;
62}
63
64NANDManager::NANDManager() {
65 mManager = nullptr;
66 mManager = new NANDManagerThread(0xD, 0x100, MR::getStationedHeapNapa());
67 OSResumeThread(mManager->mThread);
68 OSInitMutex(&mMutex);
69}
70
71bool NANDManager::addRequest(NANDRequestInfo *pReq) {
72 OSLockMutex(&mMutex);
73 pReq->_40 = 1;
74 bool ret = OSSendMessage(&mManager->mQueue, pReq, 0);
75 OSUnlockMutex(&mMutex);
76 return ret;
77}
78
79s32 NANDResultCode::getCode() const {
80 return mCode;
81}
82
83bool NANDResultCode::isSuccess() const {
84 return mCode == 0;
85}
86
87bool NANDResultCode::isSaveDataCorrupted() const {
88 return (mCode == -5 || mCode == -15);
89}
90
91bool NANDResultCode::isNANDCorrupted() const {
92 return mCode == -4;
93}
94
95bool NANDResultCode::isMaxBlocks() const {
96 return mCode == -9;
97}
98
99bool NANDResultCode::isMaxFiles() const {
100 return mCode == -11;
101}
102
103bool NANDResultCode::isNoExistFile() const {
104 return mCode == -12;
105}
106
107bool NANDResultCode::isBusyOrAllocFailed() const {
108 return (mCode == -3 || mCode == -2);
109}
110
111bool NANDResultCode::isUnknown() const {
112 return mCode == -64;
113}
114
115namespace MR {
116 void addRequestToNANDManager(NANDRequestInfo *pInfo) {
118 }
119};
120
121const char* NANDRequestInfo::setDelete(const char *pName) {
122 init();
123 mRequestStatus = 1;
124 snprintf(mReqStr, sizeof(mReqStr), "%s", pName);
125 return mReqStr;
126}