#ifndef _CMEMORYCARDSYS #define _CMEMORYCARDSYS #include "string.h" #include "types.h" #include "rstl/string.hpp" // TODO: likely comes from dolphin sdk enum ECardResult { kCR_CRC_MISMATCH = -1003, /* Extension enum for Retro's CRC check */ kCR_FATAL_ERROR = -128, kCR_ENCODING = -13, kCR_NAMETOOLONG = -12, kCR_INSSPACE = -9, kCR_NOENT = -8, kCR_EXIST = -7, kCR_BROKEN = -6, kCR_IOERROR = -5, kCR_NOFILE = -4, kCR_NOCARD = -3, kCR_WRONGDEVICE = -2, kCR_BUSY = -1, kCR_READY = 0 }; enum EMemoryCardPort { kCS_SlotA, kCS_SlotB }; struct FileHandle { u8 x0_pad[0x10]; }; struct ProbeResults { ECardResult x0_error; int x4_cardSize; /* in megabits */ int x8_sectorSize; /* in bytes */ }; struct CardStat { u8 x0_pad[0x6c]; CardStat() { memset(this, 0, sizeof(CardStat)); } int GetTime() const; int GetCommentAddr() const; }; class CCardFileInfo { uchar pad[0x114]; public: CCardFileInfo(EMemoryCardPort port, const rstl::string& name); ~CCardFileInfo(); ECardResult PumpCardTransfer(); ECardResult CreateFile(); ECardResult WriteFile(); ECardResult CloseFile(); }; class CMemoryCardSys { public: struct CardFileHandle { EMemoryCardPort slot; FileHandle handle; CardFileHandle(EMemoryCardPort slot) : slot(slot) {} int GetFileNo() const; }; CMemoryCardSys(); ~CMemoryCardSys(); static ECardResult GetResultCode(int); static ECardResult MountCard(EMemoryCardPort port); static ECardResult CheckCard(EMemoryCardPort port); static ECardResult GetStatus(EMemoryCardPort port, int fileNo, CardStat& statOut); static ECardResult FastDeleteFile(EMemoryCardPort port, int fileNo); static ProbeResults IsMemoryCardInserted(EMemoryCardPort); static ECardResult GetSerialNo(EMemoryCardPort port, long long& serialOut); static void UnmountCard(EMemoryCardPort); static ECardResult Rename(EMemoryCardPort, const rstl::string&, const rstl::string&); void Initialize(); private: // TODO }; #endif // _CMEMORYCARDSYS