mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 08:42:57 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
181 lines
6.0 KiB
C
181 lines
6.0 KiB
C
#ifndef RVL_SDK_NAND_H
|
|
#define RVL_SDK_NAND_H
|
|
#include "common.h"
|
|
#include "rvl/FS.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define NAND_BANNER_TITLE_MAX 32
|
|
#define NAND_BANNER_ICON_MAX_FRAME 8
|
|
|
|
// Forward declarations
|
|
typedef struct NANDCommandBlock;
|
|
|
|
typedef enum {
|
|
NAND_RESULT_FATAL_ERROR = -128,
|
|
NAND_RESULT_UNKNOWN = -64,
|
|
|
|
NAND_RESULT_MAXDEPTH = -16,
|
|
NAND_RESULT_AUTHENTICATION,
|
|
NAND_RESULT_OPENFD,
|
|
NAND_RESULT_NOTEMPTY,
|
|
NAND_RESULT_NOEXISTS,
|
|
NAND_RESULT_MAXFILES,
|
|
NAND_RESULT_MAXFD,
|
|
NAND_RESULT_MAXBLOCKS,
|
|
NAND_RESULT_INVALID,
|
|
|
|
NAND_RESULT_EXISTS = -6,
|
|
NAND_RESULT_ECC_CRIT,
|
|
NAND_RESULT_CORRUPT,
|
|
NAND_RESULT_BUSY,
|
|
NAND_RESULT_ALLOC_FAILED,
|
|
NAND_RESULT_ACCESS,
|
|
|
|
NAND_RESULT_OK,
|
|
} NANDResult;
|
|
|
|
typedef enum {
|
|
NAND_SEEK_BEG,
|
|
NAND_SEEK_CUR,
|
|
NAND_SEEK_END,
|
|
} NANDSeekMode;
|
|
|
|
typedef enum {
|
|
NAND_ACCESS_NONE,
|
|
NAND_ACCESS_READ,
|
|
NAND_ACCESS_WRITE,
|
|
NAND_ACCESS_RW
|
|
} NANDAccessType;
|
|
|
|
typedef enum {
|
|
NAND_FILE_TYPE_NONE,
|
|
NAND_FILE_TYPE_FILE,
|
|
NAND_FILE_TYPE_DIR,
|
|
} NANDFileType;
|
|
|
|
typedef enum {
|
|
// Read/write by owner
|
|
NAND_PERM_RUSR = (NAND_ACCESS_READ << 4),
|
|
NAND_PERM_WUSR = (NAND_ACCESS_WRITE << 4),
|
|
// Read/write by group
|
|
NAND_PERM_RGRP = (NAND_ACCESS_READ << 2),
|
|
NAND_PERM_WGRP = (NAND_ACCESS_WRITE << 2),
|
|
// Read/write by other
|
|
NAND_PERM_ROTH = (NAND_ACCESS_READ << 0),
|
|
NAND_PERM_WOTH = (NAND_ACCESS_WRITE << 0),
|
|
// Read/write by all
|
|
NAND_PERM_RALL = NAND_PERM_RUSR | NAND_PERM_RGRP | NAND_PERM_ROTH,
|
|
NAND_PERM_WALL = NAND_PERM_WUSR | NAND_PERM_WGRP | NAND_PERM_WOTH,
|
|
NAND_PERM_RWALL = NAND_PERM_RALL | NAND_PERM_WALL
|
|
} NANDPermission;
|
|
|
|
typedef void (*NANDAsyncCallback)(s32 result, struct NANDCommandBlock *block);
|
|
|
|
typedef struct NANDStatus {
|
|
u32 ownerId; // at 0x0
|
|
u16 groupId; // at 0x4
|
|
u8 attr; // at 0x6
|
|
u8 perm; // at 0x7
|
|
} NANDStatus;
|
|
|
|
typedef struct NANDFileInfo {
|
|
s32 fd; // at 0x0
|
|
s32 tempFd; // at 0x4
|
|
char openPath[FS_MAX_PATH]; // at 0x8
|
|
char tempPath[FS_MAX_PATH]; // at 0x48
|
|
u8 access; // at 0x88
|
|
u8 stage; // at 0x89
|
|
u8 mark; // at 0x8A
|
|
} NANDFileInfo;
|
|
|
|
typedef struct NANDCommandBlock {
|
|
void *userData; // at 0x0
|
|
NANDAsyncCallback callback; // at 0x4
|
|
NANDFileInfo *info; // at 0x8
|
|
void *bytes; // at 0xC
|
|
void *inodes; // at 0x10
|
|
NANDStatus *status; // at 0x14
|
|
u32 ownerId; // at 0x18
|
|
u16 groupId; // at 0x1C
|
|
u8 nextStage; // at 0x1E
|
|
u32 attr; // at 0x20
|
|
u32 ownerPerm; // at 0x24
|
|
u32 groupPerm; // at 0x28
|
|
u32 otherPerm; // at 0x2C
|
|
u32 dirFileCount; // at 0x30
|
|
char path[FS_MAX_PATH]; // at 0x34
|
|
u32 *length; // at 0x74
|
|
u32 *position; // at 0x78
|
|
s32 state; // at 0x7C
|
|
void *buffer; // at 0x80
|
|
u32 bufferSize; // at 0x84
|
|
u8 *type; // at 0x88
|
|
u32 uniqueNo; // at 0x8C
|
|
u32 reqBlocks; // at 0x90
|
|
u32 reqInodes; // at 0x94
|
|
u32 *answer; // at 0x98
|
|
u32 homeBlocks; // at 0x9C
|
|
u32 homeInodes; // at 0xA0
|
|
u32 userBlocks; // at 0xA4
|
|
u32 userInodes; // at 0xA8
|
|
u32 workBlocks; // at 0xAC
|
|
u32 workInodes; // at 0xB0
|
|
const char **dir; // at 0xB4
|
|
int simpleFlag; //
|
|
} NANDCommandBlock;
|
|
|
|
typedef struct NANDBanner {
|
|
u32 magic; // at 0x0
|
|
u32 flags; // at 0x4
|
|
u16 iconSpeed; // at 0x8
|
|
u8 reserved[0x20 - 0xA]; // at 0xA
|
|
wchar_t title[NAND_BANNER_TITLE_MAX]; // at 0x20
|
|
wchar_t subtitle[NAND_BANNER_TITLE_MAX]; // at 0x60
|
|
u8 bannerTexture[0x6000]; // at 0xA0
|
|
u8 iconTexture[0x1200][NAND_BANNER_ICON_MAX_FRAME]; // at 0x60A0
|
|
} NANDBanner;
|
|
|
|
NANDResult NANDCreate(const char *path, u8 perm, u8 attr);
|
|
NANDResult NANDPrivateCreate(const char *path, u8 perm, u8 attr);
|
|
NANDResult
|
|
NANDPrivateCreateAsync(const char *path, u8 perm, u8 attr, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDDelete(const char *path);
|
|
NANDResult NANDPrivateDelete(const char *path);
|
|
NANDResult NANDPrivateDeleteAsync(const char *path, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDRead(NANDFileInfo *info, void *buf, u32 len);
|
|
NANDResult NANDReadAsync(NANDFileInfo *info, void *buf, u32 len, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDWrite(NANDFileInfo *info, const void *buf, u32 len);
|
|
NANDResult
|
|
NANDWriteAsync(NANDFileInfo *info, const void *buf, u32 len, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDSeek(NANDFileInfo *info, s32 offset, NANDSeekMode whence);
|
|
NANDResult
|
|
NANDSeekAsync(NANDFileInfo *info, s32 offset, NANDSeekMode whence, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDPrivateCreateDir(const char *path, u8 perm, u8 attr);
|
|
NANDResult
|
|
NANDPrivateCreateDirAsync(const char *path, u8 perm, u8 attr, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDMove(const char *from, const char *to);
|
|
|
|
NANDResult NANDGetLength(NANDFileInfo *info, u32 *length);
|
|
NANDResult NANDGetLengthAsync(NANDFileInfo *info, u32 *lengthOut, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
NANDResult NANDGetStatus(const char *path, NANDStatus *status);
|
|
NANDResult
|
|
NANDPrivateGetStatusAsync(const char *path, NANDStatus *status, NANDAsyncCallback callback, NANDCommandBlock *block);
|
|
|
|
void NANDSetUserData(NANDCommandBlock *block, void *data);
|
|
void *NANDGetUserData(NANDCommandBlock *block);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|