#include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/SC_FUNC.h" // TODO: Is this really a module? Or is everything part of cellSysutil? void cellSaveData_init(); Module cellSaveData("cellSaveData", cellSaveData_init); // Error codes enum { CELL_SAVEDATA_RET_OK = 0, CELL_SAVEDATA_RET_CANCEL = 1, CELL_SAVEDATA_ERROR_CBRESULT, CELL_SAVEDATA_ERROR_ACCESS_ERROR, CELL_SAVEDATA_ERROR_INTERNAL, CELL_SAVEDATA_ERROR_PARAM, CELL_SAVEDATA_ERROR_NOSPACE, CELL_SAVEDATA_ERROR_BROKEN, CELL_SAVEDATA_ERROR_FAILURE, CELL_SAVEDATA_ERROR_BUSY, CELL_SAVEDATA_ERROR_NOUSER, }; // Constants enum { // CellSaveDataParamSize CELL_SAVEDATA_DIRNAME_SIZE = 32, CELL_SAVEDATA_FILENAME_SIZE = 13, CELL_SAVEDATA_SECUREFILEID_SIZE = 16, CELL_SAVEDATA_PREFIX_SIZE = 256, CELL_SAVEDATA_LISTITEM_MAX = 2048, CELL_SAVEDATA_SECUREFILE_MAX = 113, CELL_SAVEDATA_DIRLIST_MAX = 2048, CELL_SAVEDATA_INVALIDMSG_MAX = 256, CELL_SAVEDATA_INDICATORMSG_MAX = 64, // CellSaveDataSystemParamSize CELL_SAVEDATA_SYSP_TITLE_SIZE = 128, CELL_SAVEDATA_SYSP_SUBTITLE_SIZE = 128, CELL_SAVEDATA_SYSP_DETAIL_SIZE = 1024, CELL_SAVEDATA_SYSP_LPARAM_SIZE = 8, }; // Datatypes struct CellSaveDataSetList { be_t sortType; be_t sortOrder; be_t dirNamePrefix_addr; // char* }; struct CellSaveDataSetBuf { be_t dirListMax; be_t fileListMax; be_t reserved[6]; be_t bufSize; be_t buf_addr; // void* }; struct CellSaveDataNewDataIcon { be_t title_addr; // char* be_t iconBufSize; be_t iconBuf_addr; // void* }; struct CellSaveDataListNewData { be_t iconPosition; be_t dirName_addr; // char* be_t icon_addr; // CellSaveDataNewDataIcon* }; struct CellSaveDataDirList { s8 dirName[CELL_SAVEDATA_DIRNAME_SIZE]; s8 listParam[CELL_SAVEDATA_SYSP_LPARAM_SIZE]; }; struct CellSaveDataListGet { be_t dirNum; be_t dirListNum; be_t dirList_addr; // CellSaveDataDirList* }; struct CellSaveDataListSet { be_t focusPosition; be_t focusDirName_addr; // char* be_t fixedListNum; be_t fixedList_addr; // CellSaveDataDirList* be_t newData_addr; // CellSaveDataListNewData* }; struct CellSaveDataFixedSet { be_t dirName_addr; // char* be_t newIcon_addr; // CellSaveDataNewDataIcon* be_t option; }; struct CellSaveDataSystemFileParam { s8 title[CELL_SAVEDATA_SYSP_TITLE_SIZE]; s8 subTitle[CELL_SAVEDATA_SYSP_SUBTITLE_SIZE]; s8 detail[CELL_SAVEDATA_SYSP_DETAIL_SIZE]; be_t attribute; s8 reserved2[4]; s8 listParam[CELL_SAVEDATA_SYSP_LPARAM_SIZE]; s8 reserved[256]; }; struct CellSaveDataDirStat { be_t st_atime_; be_t st_mtime_; be_t st_ctime_; s8 dirName[CELL_SAVEDATA_DIRNAME_SIZE]; }; struct CellSaveDataFileStat { be_t fileType; u8 reserved1[4]; be_t st_size; be_t st_atime_; be_t st_mtime_; be_t st_ctime_; u8 fileName[CELL_SAVEDATA_FILENAME_SIZE]; u8 reserved2[3]; }; struct CellSaveDataStatGet { be_t hddFreeSizeKB; be_t isNewData; CellSaveDataDirStat dir; CellSaveDataSystemFileParam getParam; be_t bind; be_t sizeKB; be_t sysSizeKB; be_t fileNum; be_t fileListNum; be_t fileList_addr; // CellSaveDataFileStat* }; struct CellSaveDataAutoIndicator { be_t dispPosition; be_t dispMode; be_t dispMsg_addr; // char* be_t picBufSize; be_t picBuf_addr; // void* }; struct CellSaveDataStatSet { be_t setParam_addr; // CellSaveDataSystemFileParam* be_t reCreateMode; be_t indicator_addr; // CellSaveDataAutoIndicator* }; struct CellSaveDataFileGet { be_t excSize; }; struct CellSaveDataFileSet { be_t fileOperation; be_t reserved_addr; // void* be_t fileType; u8 secureFileId[CELL_SAVEDATA_SECUREFILEID_SIZE]; be_t fileName_addr; // char* be_t fileOffset; be_t fileSize; be_t fileBufSize; be_t fileBuf_addr; // void* }; struct CellSaveDataCBResult { be_t result; be_t progressBarInc; be_t errNeedSizeKB; be_t invalidMsg_addr; // char* be_t userdata_addr; // void* }; struct CellSaveDataDoneGet { be_t excResult; s8 dirName[CELL_SAVEDATA_DIRNAME_SIZE]; be_t sizeKB; be_t hddFreeSizeKB; }; // Functions int cellSaveDataListSave2() //u32 version, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataListLoad2() //u32 version, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataFixedSave2() //u32 version, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile,sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataFixedLoad2() //u32 version, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataAutoSave2() //u32 version, const char *dirName, u32 errDialog, CellSaveDataSetBuf *setBuf, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataAutoLoad2() //u32 version, const char *dirName, u32 errDialog, CellSaveDataSetBuf *setBuf, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataListAutoSave() //u32 version, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile,sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataListAutoLoad() //u32 version, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataDelete2() //sys_memory_container_t container { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_CANCEL; } int cellSaveDataFixedDelete() //CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListSave() //u32 version, CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListLoad() //u32 version, CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserFixedSave() //u32 version, CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserFixedLoad() //u32 version, CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserAutoSave() //u32 version, CellSysutilUserId userId, const char *dirName, u32 errDialog, CellSaveDataSetBuf *setBuf, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserAutoLoad() //u32 version, CellSysutilUserId userId, const char *dirName, u32 errDialog, CellSaveDataSetBuf *setBuf, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListAutoSave() //u32 version, CellSysutilUserId userId, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListAutoLoad() //u32 version, CellSysutilUserId userId, u32 errDialog, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataStatCallback funcStat, CellSaveDataFileCallback funcFile, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserFixedDelete() //CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataFixedCallback funcFixed, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } //void cellSaveDataEnableOverlay(); //int enable // Functions (Extensions) int cellSaveDataListDelete() //CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataListImport() //CellSaveDataSetList *setList, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataListExport() //CellSaveDataSetList *setList, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataFixedImport() //const char *dirName, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataFixedExport() //const char *dirName, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataGetListItem() //const char *dirName, CellSaveDataDirStat *dir, CellSaveDataSystemFileParam *sysFileParam, mem32_t bind, mem32_t sizeKB { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListDelete() //CellSysutilUserId userId, CellSaveDataSetList *setList, CellSaveDataSetBuf *setBuf, CellSaveDataListCallback funcList, CellSaveDataDoneCallback funcDone,sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListImport() //CellSysutilUserId userId, CellSaveDataSetList *setList, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserListExport() //CellSysutilUserId userId, CellSaveDataSetList *setList, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserFixedImport() //CellSysutilUserId userId, const char *dirName, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserFixedExport() //CellSysutilUserId userId, const char *dirName, u32 maxSizeKB, CellSaveDataDoneCallback funcDone, sys_memory_container_t container, void *userdata { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } int cellSaveDataUserGetListItem() //CellSysutilUserId userId, const char *dirName, CellSaveDataDirStat *dir, CellSaveDataSystemFileParam *sysFileParam, mem32_t bind, mem32_t sizeKB { UNIMPLEMENTED_FUNC(cellSaveData); return CELL_SAVEDATA_RET_OK; } // Callback Functions void (*CellSaveDataFixedCallback)(); //CellSaveDataCBResult *cbResult, CellSaveDataListGet *get, CellSaveDataFixedSet *set void (*CellSaveDataListCallback)(); //CellSaveDataCBResult *cbResult, CellSaveDataListGet *get, CellSaveDataListSet *set void (*CellSaveDataStatCallback)(); //CellSaveDataCBResult *cbResult, CellSaveDataStatGet *get, CellSaveDataStatSet *set void (*CellSaveDataFileCallback)(); //CellSaveDataCBResult *cbResult, CellSaveDataFileGet *get, CellSaveDataFileSet *set void (*CellSaveDataDoneCallback)(); //CellSaveDataCBResult *cbResult, CellSaveDataDoneGet *get void cellSaveData_init() { cellSaveData.AddFunc(0x04c06fc2, cellSaveDataGetListItem); cellSaveData.AddFunc(0x273d116a, cellSaveDataUserListExport); cellSaveData.AddFunc(0x27cb8bc2, cellSaveDataListDelete); cellSaveData.AddFunc(0x39d6ee43, cellSaveDataUserListImport); cellSaveData.AddFunc(0x46a2d878, cellSaveDataFixedExport); cellSaveData.AddFunc(0x491cc554, cellSaveDataListExport); cellSaveData.AddFunc(0x52541151, cellSaveDataFixedImport); cellSaveData.AddFunc(0x529231b0, cellSaveDataUserFixedImport); cellSaveData.AddFunc(0x6b4e0de6, cellSaveDataListImport); cellSaveData.AddFunc(0x7048a9ba, cellSaveDataUserListDelete); cellSaveData.AddFunc(0x95ae2cde, cellSaveDataUserFixedExport); cellSaveData.AddFunc(0xf6482036, cellSaveDataUserGetListItem); cellSaveData.AddFunc(0x2de0d663, cellSaveDataListSave2); cellSaveData.AddFunc(0x1dfbfdd6, cellSaveDataListLoad2); cellSaveData.AddFunc(0x2aae9ef5, cellSaveDataFixedSave2); cellSaveData.AddFunc(0x2a8eada2, cellSaveDataFixedLoad2); cellSaveData.AddFunc(0x8b7ed64b, cellSaveDataAutoSave2); cellSaveData.AddFunc(0xfbd5c856, cellSaveDataAutoLoad2); cellSaveData.AddFunc(0x4dd03a4e, cellSaveDataListAutoSave); cellSaveData.AddFunc(0x21425307, cellSaveDataListAutoLoad); cellSaveData.AddFunc(0xedadd797, cellSaveDataDelete2); cellSaveData.AddFunc(0x0f03cfb0, cellSaveDataUserListSave); cellSaveData.AddFunc(0x39dd8425, cellSaveDataUserListLoad); cellSaveData.AddFunc(0x40b34847, cellSaveDataUserFixedSave); cellSaveData.AddFunc(0x6e7264ed, cellSaveDataUserFixedLoad); cellSaveData.AddFunc(0x52aac4fa, cellSaveDataUserAutoSave); cellSaveData.AddFunc(0xcdc6aefd, cellSaveDataUserAutoLoad); cellSaveData.AddFunc(0x0e091c36, cellSaveDataUserListAutoSave); //cellSaveData.AddFunc(0xe7fa820b, cellSaveDataEnableOverlay); }