Added struct LibAppletInfo. Added appletHolderGetLibraryAppletInfo and appletGetLibraryAppletInfo.

This commit is contained in:
yellows8 2019-07-30 20:03:24 -04:00
parent 64783b7cc2
commit f49e8cb217
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
2 changed files with 66 additions and 0 deletions

View File

@ -196,6 +196,12 @@ typedef struct {
LibAppletExitReason exitreason; ///< Set by \ref appletHolderJoin using the output from cmd GetResult, see \ref LibAppletExitReason. LibAppletExitReason exitreason; ///< Set by \ref appletHolderJoin using the output from cmd GetResult, see \ref LibAppletExitReason.
} AppletHolder; } AppletHolder;
/// LibraryAppletInfo
typedef struct {
AppletId appletId; ///< \ref AppletId
LibAppletMode mode; ///< \ref LibAppletMode
} LibAppletInfo;
/// IdentityInfo /// IdentityInfo
typedef struct { typedef struct {
AppletId appletId; ///< \ref AppletId AppletId appletId; ///< \ref AppletId
@ -759,6 +765,13 @@ Result appletHolderPushInteractiveInData(AppletHolder *h, AppletStorage *s);
*/ */
Result appletHolderPopInteractiveOutData(AppletHolder *h, AppletStorage *s); Result appletHolderPopInteractiveOutData(AppletHolder *h, AppletStorage *s);
/**
* @brief Gets the \ref LibAppletInfo for the specified LibraryApplet.
* @param h AppletHolder object.
* @param[out] info \ref LibAppletInfo
*/
Result appletHolderGetLibraryAppletInfo(AppletHolder *h, LibAppletInfo *info);
// (ILibraryAppletCreator ->) IStorage // (ILibraryAppletCreator ->) IStorage
/** /**
@ -1014,6 +1027,13 @@ Result appletGetGpuErrorDetectedSystemEvent(Event *out_event);
// ILibraryAppletSelfAccessor // ILibraryAppletSelfAccessor
/**
* @brief Gets the \ref LibAppletInfo for the current LibraryApplet.
* @note Only available with AppletType_LibraryApplet.
* @param[out] info \ref LibAppletInfo
*/
Result appletGetLibraryAppletInfo(LibAppletInfo *info);
/** /**
* @brief Gets the \ref AppletIdentityInfo for the MainApplet. * @brief Gets the \ref AppletIdentityInfo for the MainApplet.
* @note Only available with AppletType_LibraryApplet. * @note Only available with AppletType_LibraryApplet.

View File

@ -990,6 +990,41 @@ static Result _appletCmdNoInOutStorage(Service* srv, AppletStorage* s, u64 cmd_i
return _appletGetSession(srv, &s->s, cmd_id); return _appletGetSession(srv, &s->s, cmd_id);
} }
static Result _appletGetLibraryAppletInfo(Service* srv, LibAppletInfo *info, u64 cmd_id) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
} *raw;
raw = serviceIpcPrepareHeader(srv, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = cmd_id;
Result rc = serviceIpcDispatch(srv);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
LibAppletInfo info;
} *resp;
serviceIpcParse(srv, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc) && info) memcpy(info, &resp->info, sizeof(LibAppletInfo));
}
return rc;
}
static Result _appletGetIdentityInfo(Service* srv, AppletIdentityInfo *info, u64 cmd_id) { static Result _appletGetIdentityInfo(Service* srv, AppletIdentityInfo *info, u64 cmd_id) {
IpcCommand c; IpcCommand c;
ipcInitialize(&c); ipcInitialize(&c);
@ -2289,6 +2324,10 @@ Result appletHolderPopInteractiveOutData(AppletHolder *h, AppletStorage *s) {
return _appletCmdNoInOutStorage(&h->s, s, 104); return _appletCmdNoInOutStorage(&h->s, s, 104);
} }
Result appletHolderGetLibraryAppletInfo(AppletHolder *h, LibAppletInfo *info) {
return _appletGetLibraryAppletInfo(&h->s, info, 120);
}
// (ILibraryAppletCreator ->) IStorage // (ILibraryAppletCreator ->) IStorage
Result appletCreateStorage(AppletStorage *s, s64 size) { Result appletCreateStorage(AppletStorage *s, s64 size) {
@ -3399,6 +3438,13 @@ static Result _appletExitProcessAndReturn(void) {
return _appletCmdNoIO(&g_appletILibraryAppletSelfAccessor, 10); return _appletCmdNoIO(&g_appletILibraryAppletSelfAccessor, 10);
} }
Result appletGetLibraryAppletInfo(LibAppletInfo *info) {
if (__nx_applet_type != AppletType_LibraryApplet)
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
return _appletGetLibraryAppletInfo(&g_appletILibraryAppletSelfAccessor, info, 11);
}
Result appletGetMainAppletIdentityInfo(AppletIdentityInfo *info) { Result appletGetMainAppletIdentityInfo(AppletIdentityInfo *info) {
if (__nx_applet_type != AppletType_LibraryApplet) if (__nx_applet_type != AppletType_LibraryApplet)
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);