1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#ifndef RVL_SDK_SC_SCSYSTEM_H
#define RVL_SDK_SC_SCSYSTEM_H
#include "common.h"
#include "rvl/FS.h" // IWYU pragma: export
#include "rvl/NAND.h" // IWYU pragma: export
#include "rvl/OS.h" // IWYU pragma: export
#ifdef __cplusplus
extern "C" {
#endif
/**
* SC/SYSCONF documentation from:
* https://wiibrew.org/wiki//shared2/sys/SYSCONF
*/
typedef u32 SCStatus;
enum SCStatus_et
{
SC_STATUS_OK, /* name known from asserts */
SC_STATUS_BUSY,
SC_STATUS_FATAL,
SC_STATUS_PARSE,
};
typedef enum {
SC_CONF_FILE_SYSTEM, //!< SYSCONF
SC_CONF_FILE_PRODUCT, //!< setting.txt
SC_CONF_FILE_MAX
} SCConfFile;
typedef enum {
SC_ITEM_IPL_CB,
SC_ITEM_IPL_AR,
SC_ITEM_IPL_ARN,
SC_ITEM_IPL_CD,
SC_ITEM_IPL_CD2,
SC_ITEM_IPL_DH,
SC_ITEM_IPL_E60,
SC_ITEM_IPL_EULA,
SC_ITEM_IPL_FRC,
SC_ITEM_IPL_IDL,
SC_ITEM_IPL_INC,
SC_ITEM_IPL_LNG,
SC_ITEM_IPL_NIK,
SC_ITEM_IPL_PC,
SC_ITEM_IPL_PGS,
SC_ITEM_IPL_SSV,
SC_ITEM_IPL_SADR,
SC_ITEM_IPL_SND,
SC_ITEM_IPL_UPT,
SC_ITEM_NET_CNF,
SC_ITEM_NET_CTPC,
SC_ITEM_NET_PROF,
SC_ITEM_NET_WCPC,
SC_ITEM_NET_WCFG,
SC_ITEM_DEV_BTM,
SC_ITEM_DEV_VIM,
SC_ITEM_DEV_CTC,
SC_ITEM_DEV_DSM,
SC_ITEM_BT_DINF,
SC_ITEM_BT_SENS,
SC_ITEM_BT_SPKV,
SC_ITEM_BT_MOT,
SC_ITEM_BT_BAR,
SC_ITEM_DVD_CNF,
SC_ITEM_WWW_RST,
SC_ITEM_MAX
} SCItemID;
typedef enum {
SC_ITEM_BIGARRAY = (1 << 5),
SC_ITEM_SMALLARRAY = (2 << 5),
SC_ITEM_BYTE = (3 << 5),
SC_ITEM_SHORT = (4 << 5),
SC_ITEM_LONG = (5 << 5),
SC_ITEM_LONGLONG = (6 << 5),
SC_ITEM_BOOL = (7 << 5)
} SCItemType;
typedef void (*SCAsyncCallback)(NANDResult result);
typedef void (*SCFlushCallback)(SCStatus status);
typedef struct SCItem {
char UNK_0x0[0x8];
u8 primType; // at 0x8
u8 arrayType; // at 0x9
u32 nameLen; // at 0xC
u32 dataLen; // at 0x10
const char *name; // at 0x14
u8 *data; // at 0x18
u32 itemLen; // at 0x1C
} SCItem;
typedef struct SCControl {
OSThreadQueue threadQueue; // at 0x0
NANDFileInfo fileInfo; // at 0x8
NANDCommandBlock commandBlock; // at 0x94
NANDStatus fileAttr; // at 0x14C
u8 nandCbState; // at 0x154
u8 BYTE_0x155;
u8 openFile; // at 0x156
u8 BYTE_0x157;
SCAsyncCallback asyncCallback; // at 0x158
NANDResult asyncResult; // at 0x15C
const char *filePaths[SC_CONF_FILE_MAX]; // at 0x160
u8 *fileBuffers[SC_CONF_FILE_MAX]; // at 0x168
u32 bufferSizes[SC_CONF_FILE_MAX]; // at 0x170
u32 fileSizes[SC_CONF_FILE_MAX]; // at 0x178
SCFlushCallback flushCallback; // at 0x180
SCStatus flushStatus; // at 0x184
u32 flushSize; // at 0x188
} SCControl;
void SCInit(void);
SCStatus SCCheckStatus(void);
BOOL SCFindByteArrayItem(void *dst, u32 len, SCItemID id);
BOOL SCReplaceByteArrayItem(const void *src, u32 len, SCItemID id);
BOOL SCFindU8Item(u8 *dst, SCItemID id);
BOOL SCFindS8Item(s8 *dst, SCItemID id);
BOOL SCFindU32Item(u32 *dst, SCItemID id);
BOOL SCReplaceU8Item(u8 data, SCItemID id);
void SCFlushAsync(SCFlushCallback callback);
BOOL __SCIsDirty(void);
void __SCSetDirtyFlag(void);
void __SCClearDirtyFlag(void);
u8 *__SCGetConfBuf(void);
u32 __SCGetConfBufSize(void);
#ifdef __cplusplus
}
#endif
#endif
|