Skip to content

Commit

Permalink
capsc: account for new command sizes
Browse files Browse the repository at this point in the history
  • Loading branch information
SciresM authored and fincs committed Nov 24, 2024
1 parent 73d79d4 commit 65c643f
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 15 deletions.
15 changes: 11 additions & 4 deletions nx/include/switch/services/capsc.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
#include "../sf/service.h"
#include "../services/caps.h"

typedef struct {
u64 application_id;
u8 unknown_08;
u8 unknown_09;
u8 reserved[6];
} CapsApplicationId;

/// Initialize caps:c
Result capscInitialize(void);

Expand Down Expand Up @@ -40,7 +47,7 @@ Result capscNotifyAlbumStorageIsUnAvailable(CapsAlbumStorage storage);
* @param[in] appletResourceUserId AppletResourceUserId.
* @param[in] application_id ApplicationId.
*/
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id);
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id);

/**
* @brief Unregister an applet.
Expand All @@ -49,7 +56,7 @@ Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 applicati
* @param[in] appletResourceUserId AppletResourceUserId.
* @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.
Expand All @@ -58,7 +65,7 @@ Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 applica
* @param[out] application_id ApplicationId.
* @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.
Expand All @@ -74,7 +81,7 @@ Result capscCheckApplicationIdRegistered(u64 application_id);
* @param[in] contents \ref CapsAlbumFileContents
* @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.
Expand Down
30 changes: 19 additions & 11 deletions nx/source/services/capsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,30 +54,38 @@ Result capscNotifyAlbumStorageIsUnAvailable(CapsAlbumStorage 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))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct {
u64 appletResourceUserId;
u64 applicationId;
} in = { appletResourceUserId, application_id };
CapsApplicationId applicationId;
} in = { appletResourceUserId, *application_id };
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))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct {
u64 appletResourceUserId;
u64 applicationId;
} in = { appletResourceUserId, application_id };
CapsApplicationId applicationId;
} in = { appletResourceUserId, *application_id };
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))
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) {
Expand All @@ -86,13 +94,13 @@ Result capscCheckApplicationIdRegistered(u64 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))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
const struct {
u8 type;
u64 applicationId;
} in = { contents, application_id };
CapsApplicationId applicationId;
} in = { contents, *application_id };
return serviceDispatchInOut(&g_capscSrv, 2101, in, *file_id);
}

Expand Down

0 comments on commit 65c643f

Please sign in to comment.