diff --git a/libctru/include/3ds/services/fspxi.h b/libctru/include/3ds/services/fspxi.h index b233eaf..2db2c38 100644 --- a/libctru/include/3ds/services/fspxi.h +++ b/libctru/include/3ds/services/fspxi.h @@ -161,14 +161,20 @@ Result FSPXI_CloseDirectory(Handle serviceHandle, FSPXI_Directory directory); Result FSPXI_OpenArchive(Handle serviceHandle, FSPXI_Archive* archive, FS_ArchiveID archiveID, FS_Path path); /** - * @brief Unknown 0x13 + * @brief Checks if the archive contains a file at path. + * @param archive Archive to check. + * @param out Pointer to output existence to. + * @param path Path to check for file */ -Result FSPXI_Unknown0x13(Handle serviceHandle, FSPXI_Archive archive, u8* out, FS_Path path); +Result FSPXI_HasFile(Handle serviceHandle, FSPXI_Archive archive, bool* out, FS_Path path); /** - * @brief Unknown 0x14 + * @brief Checks if the archive contains a directory at path. + * @param archive Archive to check. + * @param out Pointer to output existence to. + * @param path Path to check for directory */ -Result FSPXI_Unknown0x14(Handle serviceHandle, FSPXI_Archive archive, u32* out, FS_Path path); +Result FSPXI_HasDirectory(Handle serviceHandle, FSPXI_Archive archive, bool* out, FS_Path path); /** * @brief Commits an archive's save data. @@ -443,10 +449,10 @@ Result FSPXI_GetLegacyRomHeader(Handle serviceHandle, FS_MediaType mediaType, u6 Result FSPXI_GetLegacyBannerData(Handle serviceHandle, FS_MediaType mediaType, u64 programId, void* banner, u8 unk); /** - * Unknown command 3D + * @brief Formats the CARDNOR device. * @param unk Unknown. Transaction? */ -Result FSPXI_Unknown0x3D(Handle serviceHandle, u32 unk); +Result FSPXI_FormatCardNorDevice(Handle serviceHandle, u32 unk); /// Deletes the 3DS SDMC root. Result FSPXI_DeleteSdmcRoot(Handle serviceHandle); @@ -495,8 +501,12 @@ Result FSPXI_ImportIntegrityVerificationSeed(Handle serviceHandle, const FS_Inte */ Result FSPXI_GetLegacySubBannerData(Handle serviceHandle, u32 bannerSize, FS_MediaType mediaType, u64 programId, void* banner); -/// Unknown command 47 -Result FSPXI_Unknown0x47(Handle serviceHandle, void* buf, u32 size); +/** + * @brief Generates random bytes. Uses same code as PSPXI_GenerateRandomBytes + * @param buf Buffer to output random bytes to. + * @param size Size of buffer. + */ +Result FSPXI_GenerateRandomBytes(Handle serviceHandle, void* buffer, u32 size); /** * @brief Gets the last modified time of a file in an archive. @@ -562,8 +572,11 @@ Result FSPXI_ReadFileSHA256(Handle serviceHandle, FSPXI_File file, u32* bytesRea */ Result FSPXI_WriteFileSHA256(Handle serviceHandle, FSPXI_File file, u32* bytesWritten, u64 offset, const void* writeBuffer, u32 writeBufferSize, void* hashtable, u32 hashtableSize, u32 unk1, u32 unk2); -/// Unknown command 4F -Result FSPXI_Unknown0x4F(Handle serviceHandle, u64 unk); +/** + * @brief Configures CTRCARD latency emulation. + * @param latency Latency to apply. + */ +Result FSPXI_SetCtrCardLatencyParameter(Handle serviceHandle, u64 latency); /** * @brief Sets the file system priority. diff --git a/libctru/source/services/fspxi.c b/libctru/source/services/fspxi.c index e16c032..5cdf003 100644 --- a/libctru/source/services/fspxi.c +++ b/libctru/source/services/fspxi.c @@ -361,7 +361,7 @@ Result FSPXI_OpenArchive(Handle serviceHandle, FSPXI_Archive* archive, FS_Archiv return (Result) cmdbuf[1]; } -Result FSPXI_Unknown0x13(Handle serviceHandle, FSPXI_Archive archive, u8* out, FS_Path path) +Result FSPXI_HasFile(Handle serviceHandle, FSPXI_Archive archive, bool* out, FS_Path path) { Result ret = 0; u32* cmdbuf = getThreadCommandBuffer(); @@ -376,12 +376,12 @@ Result FSPXI_Unknown0x13(Handle serviceHandle, FSPXI_Archive archive, u8* out, F if(R_FAILED(ret = svcSendSyncRequest(serviceHandle))) return ret; - if (out) *out = (u8)cmdbuf[2]; + if (out) *out = (bool)cmdbuf[2]; return (Result) cmdbuf[1]; } -Result FSPXI_Unknown0x14(Handle serviceHandle, FSPXI_Archive archive, u32* out, FS_Path path) +Result FSPXI_HasDirectory(Handle serviceHandle, FSPXI_Archive archive, bool* out, FS_Path path) { Result ret = 0; u32* cmdbuf = getThreadCommandBuffer(); @@ -396,7 +396,7 @@ Result FSPXI_Unknown0x14(Handle serviceHandle, FSPXI_Archive archive, u32* out, if(R_FAILED(ret = svcSendSyncRequest(serviceHandle))) return ret; - if (out) *out = (u8)cmdbuf[2]; + if (out) *out = (bool)cmdbuf[2]; return (Result) cmdbuf[1]; } @@ -1003,7 +1003,7 @@ Result FSPXI_GetLegacyBannerData(Handle serviceHandle, FS_MediaType mediaType, u return (Result) cmdbuf[1]; } -Result FSPXI_Unknown0x3D(Handle serviceHandle, u32 unk) +Result FSPXI_FormatCardNorDevice(Handle serviceHandle, u32 unk) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -1141,7 +1141,7 @@ Result FSPXI_GetLegacySubBannerData(Handle serviceHandle, u32 bannerSize, FS_Med return (Result) cmdbuf[1]; } -Result FSPXI_Unknown0x47(Handle serviceHandle, void* buf, u32 size) +Result FSPXI_GenerateRandomBytes(Handle serviceHandle, void* buf, u32 size) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -1289,14 +1289,14 @@ Result FSPXI_WriteFileSHA256(Handle serviceHandle, FSPXI_File file, u32* bytesWr return (Result) cmdbuf[1]; } -Result FSPXI_Unknown0x4F(Handle serviceHandle, u64 unk) +Result FSPXI_SetCtrCardLatencyParameter(Handle serviceHandle, u64 latency) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x4F, 2, 0); // 0x004F0080 - cmdbuf[1] = (u32) unk; - cmdbuf[2] = (u32) (unk >> 32); + cmdbuf[1] = (u32) latency; + cmdbuf[2] = (u32) (latency >> 32); if(R_FAILED(ret = svcSendSyncRequest(serviceHandle))) return ret;