capsc: account for new command sizes

This commit is contained in:
Michael Scire 2024-10-29 17:20:00 -07:00
parent 42c5d2b113
commit e004a3ffa8
2 changed files with 30 additions and 15 deletions

View File

@ -9,6 +9,13 @@
#include "../sf/service.h" #include "../sf/service.h"
#include "../services/caps.h" #include "../services/caps.h"
typedef struct {
u64 application_id;
u8 unknown_08;
u8 unknown_09;
u8 reserved[6];
} CapsApplicationId;
/// Initialize caps:c /// Initialize caps:c
Result capscInitialize(void); Result capscInitialize(void);
@ -40,7 +47,7 @@ Result capscNotifyAlbumStorageIsUnAvailable(CapsAlbumStorage storage);
* @param[in] appletResourceUserId AppletResourceUserId. * @param[in] appletResourceUserId AppletResourceUserId.
* @param[in] application_id ApplicationId. * @param[in] application_id ApplicationId.
*/ */
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id); Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id);
/** /**
* @brief Unregister an applet. * @brief Unregister an applet.
@ -49,7 +56,7 @@ Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 applicati
* @param[in] appletResourceUserId AppletResourceUserId. * @param[in] appletResourceUserId AppletResourceUserId.
* @param[in] application_id ApplicationId. * @param[in] application_id ApplicationId.
*/ */
Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id); Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id);
/** /**
* @brief Get an ApplicationId that corresponds to an AppletResourceUserId. * @brief Get an ApplicationId that corresponds to an AppletResourceUserId.
@ -58,7 +65,7 @@ Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 applica
* @param[out] application_id ApplicationId. * @param[out] application_id ApplicationId.
* @param[in] appletResourceUserId AppletResourceUserId. * @param[in] appletResourceUserId AppletResourceUserId.
*/ */
Result capscGetApplicationIdFromAruid(u64 *application_id, u64 aruid); Result capscGetApplicationIdFromAruid(CapsApplicationId *application_id, u64 aruid);
/** /**
* @brief Checks whether an ApplicationId is registered. * @brief Checks whether an ApplicationId is registered.
@ -74,7 +81,7 @@ Result capscCheckApplicationIdRegistered(u64 application_id);
* @param[in] contents \ref CapsAlbumFileContents * @param[in] contents \ref CapsAlbumFileContents
* @param[out] file_id \ref CapsAlbumFileId * @param[out] file_id \ref CapsAlbumFileId
*/ */
Result capscGenerateCurrentAlbumFileId(u64 application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id); Result capscGenerateCurrentAlbumFileId(const CapsApplicationId *application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id);
/** /**
* @brief Generate an ApplicationAlbumEntry based on parameters. * @brief Generate an ApplicationAlbumEntry based on parameters.

View File

@ -54,30 +54,38 @@ Result capscNotifyAlbumStorageIsUnAvailable(CapsAlbumStorage storage) {
return _capscCmdInU8NoOut(&g_capscSrv, 2002, storage); return _capscCmdInU8NoOut(&g_capscSrv, 2002, storage);
} }
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id) { Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u64 appletResourceUserId; u64 appletResourceUserId;
u64 applicationId; CapsApplicationId applicationId;
} in = { appletResourceUserId, application_id }; } in = { appletResourceUserId, *application_id };
return serviceDispatchIn(&g_capscSrv, 2011, in); return serviceDispatchIn(&g_capscSrv, 2011, in);
} }
Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id) { Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u64 appletResourceUserId; u64 appletResourceUserId;
u64 applicationId; CapsApplicationId applicationId;
} in = { appletResourceUserId, application_id }; } in = { appletResourceUserId, *application_id };
return serviceDispatchIn(&g_capscSrv, 2012, in); return serviceDispatchIn(&g_capscSrv, 2012, in);
} }
Result capscGetApplicationIdFromAruid(u64 *application_id, u64 aruid) { Result capscGetApplicationIdFromAruid(CapsApplicationId *application_id, u64 aruid) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatchInOut(&g_capscSrv, 2013, aruid, *application_id);
if (hosversionAtLeast(19,0,0))
return serviceDispatchInOut(&g_capscSrv, 2013, aruid, *application_id);
u64 old_application_id=0;
Result rc = serviceDispatchInOut(&g_capscSrv, 2013, aruid, old_application_id);
if (R_SUCCEEDED(rc))
*application_id = (CapsApplicationId){ old_application_id, 0, 0 };
return rc;
} }
Result capscCheckApplicationIdRegistered(u64 application_id) { Result capscCheckApplicationIdRegistered(u64 application_id) {
@ -86,13 +94,13 @@ Result capscCheckApplicationIdRegistered(u64 application_id) {
return serviceDispatchIn(&g_capscSrv, 2014, application_id); return serviceDispatchIn(&g_capscSrv, 2014, application_id);
} }
Result capscGenerateCurrentAlbumFileId(u64 application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id) { Result capscGenerateCurrentAlbumFileId(const CapsApplicationId *application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id) {
if (hosversionBefore(2,0,0)) if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct { const struct {
u8 type; u8 type;
u64 applicationId; CapsApplicationId applicationId;
} in = { contents, application_id }; } in = { contents, *application_id };
return serviceDispatchInOut(&g_capscSrv, 2101, in, *file_id); return serviceDispatchInOut(&g_capscSrv, 2101, in, *file_id);
} }