Line 349: |
Line 349: |
| | | |
| == ListApplicationRecord == | | == ListApplicationRecord == |
− | Takes a type-0x6 output buffer containing an array of the below record and an s32 entry_offset, returns an output s32 out_entrycount. | + | Takes a type-0x6 output buffer containing an array of [[#ApplicationRecord]] and an s32 entry_offset, returns an output s32 out_entrycount. |
| | | |
| Returns an array of entries with the below format using the specified offset and count. | | Returns an array of entries with the below format using the specified offset and count. |
− |
| |
− | === Application Record Format ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | [[NCM_services#ApplicationId|ApplicationId]]
| |
− | |-
| |
− | | 0x8
| |
− | | 0x1
| |
− | | Type? (Known values: 0x2=Installing?, 0x3=Installed / Gamecard inserted, 0x5=Gamecard not inserted, 0xB=Archived)
| |
− | |-
| |
− | | 0x9
| |
− | | 0x1
| |
− | | Unknown, usually 0x02
| |
− | |-
| |
− | | 0xA
| |
− | | 0x6
| |
− | | Unknown, usually zeros?
| |
− | |-
| |
− | | 0x10
| |
− | | 0x1
| |
− | | Unknown, seems to change between reboots and removing/reinserting gamecards
| |
− | |-
| |
− | | 0x11
| |
− | | 0x7
| |
− | | Unknown, usually zeros?
| |
− | |}
| |
| | | |
| == LaunchApplication == | | == LaunchApplication == |
Line 429: |
Line 397: |
| | | |
| Loads cached [[control.nacp]] to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small. | | Loads cached [[control.nacp]] to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small. |
− |
| |
− | === ApplicationControlSource ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Value
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | CacheOnly (Returns data from cache)
| |
− | |-
| |
− | | 0x1
| |
− | | Storage (Returns data from storage if not present in cache)
| |
− | |-
| |
− | | 0x2
| |
− | | StorageOnly (Returns data from storage without using cache)
| |
− | |}
| |
| | | |
| == ListApplicationContentMetaStatus == | | == ListApplicationContentMetaStatus == |
− | Takes a type-0x6 output buffer containing an array of the below entries, an input s32 index and [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 out_entrycount. | + | Takes a type-0x6 output buffer containing an array of [[#ApplicationContentMetaStatus]], an input s32 index and [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 out_entrycount. |
| | | |
| Returns 0x10-byte entries using the specified [[NCM_services#ApplicationId|ApplicationId]] starting at the specified index. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is >= totalentries, this will return 0 with out_entrycount=0. | | Returns 0x10-byte entries using the specified [[NCM_services#ApplicationId|ApplicationId]] starting at the specified index. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is >= totalentries, this will return 0 with out_entrycount=0. |
| | | |
− | Entry structure:
| + | = ns:am2, ns:ec, ns:rid, ns:rt, ns:web, ns:ro, ns:sweb = |
− | {| class="wikitable" border="1"
| + | These are "nn::ns::detail::IServiceGetterInterface". |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x1
| |
− | | [[NCM_services#ContentMetaType|ContentMetaType]] ("type")
| |
− | |-
| |
− | | 0x1
| |
− | | 0x1
| |
− | | [[NCM_services#StorageId|StorageId]] ("installedStorage")
| |
− | |-
| |
− | | 0x2
| |
− | | 0x1
| |
− | | Unknown. Non-zero with output from cmd 605, differs for app/update titles.
| |
− | |-
| |
− | | 0x3
| |
− | | 0x1
| |
− | | Padding
| |
− | |-
| |
− | | 0x4
| |
− | | 0x4
| |
− | | Version
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | [[NCM_services#ApplicationId|ApplicationId]]
| |
− | |}
| |
− | | |
− | = ns:am2, ns:ec, ns:rid, ns:rt, ns:web, ns:ro, ns:sweb = | |
− | These are "nn::ns::detail::IServiceGetterInterface". | |
| | | |
| These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command. | | These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command. |
Line 3,960: |
Line 3,880: |
| |} | | |} |
| | | |
− | = VersionListData = | + | = ApplicationRecord = |
− | This is "nn::ns::VersionListData". | + | This is "nn::ns::ApplicationRecord". |
− | | |
− | = ApplicationUpdateInfo =
| |
− | This is "nn::ns::ApplicationUpdateInfo". This is an u8.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Value | + | ! Offset |
| + | ! Size |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || UpToDate | + | | 0x0 |
| + | | 0x8 |
| + | | [[NCM_services#ApplicationId|Id]] |
| |- | | |- |
− | | 1 || Updatable | + | | 0x8 |
| + | | 0x1 |
| + | | [[#ApplicationEvent|LastEvent]] |
| + | |- |
| + | | 0x9 |
| + | | 0x1 |
| + | | Attributes |
| + | |- |
| + | | 0xA |
| + | | 0x6 |
| + | | Reserved |
| + | |- |
| + | | 0x10 |
| + | | 0x8 |
| + | | LastUpdated |
| |} | | |} |
| | | |
− | [[qlaunch]] just checks whether this is 0. | + | = ApplicationEvent = |
| + | This is "nn::ns::ApplicationEvent". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Launched |
| + | |- |
| + | | 1 || LocalInstalled |
| + | |- |
| + | | 2 || DownloadStarted |
| + | |- |
| + | | 3 || GameCardInserted |
| + | |- |
| + | | 4 || Touched |
| + | |- |
| + | | 5 || |
| + | |- |
| + | | 6 || |
| + | |- |
| + | | 7 || |
| + | |- |
| + | | 8 || |
| + | |- |
| + | | 9 || |
| + | |- |
| + | | 10 || |
| + | |- |
| + | | 11 || |
| + | |- |
| + | | 12 || |
| + | |- |
| + | | 13 || |
| + | |- |
| + | | 14 || |
| + | |- |
| + | | 15 || |
| + | |- |
| + | | 16 || |
| + | |} |
| + | |
| + | = ApplicationControlSource = |
| + | This is "nn::ns::ApplicationControlSource". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | CacheOnly |
| + | |- |
| + | | 1 |
| + | | Storage |
| + | |- |
| + | | 2 |
| + | | StorageOnly |
| + | |} |
| + | |
| + | = ApplicationContentMetaStatus = |
| + | This is "nn::ns::ApplicationContentMetaStatus". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x1 |
| + | | [[NCM_services#ContentMetaType|Type]] |
| + | |- |
| + | | 0x1 |
| + | | 0x1 |
| + | | [[NCM_services#StorageId|InstalledStorage]] |
| + | |- |
| + | | 0x2 |
| + | | 0x1 |
| + | | [[#ContentMetaRightsCheck|RightsCheck]] |
| + | |- |
| + | | 0x3 |
| + | | 0x1 |
| + | | Reserved |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Version |
| + | |- |
| + | | 0x8 |
| + | | 0x8 |
| + | | [[NCM_services#ApplicationId|Id]] |
| + | |} |
| + | |
| + | = ContentMetaRightsCheck = |
| + | This is "nn::ns::ContentMetaRightsCheck". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | NotChecked |
| + | |- |
| + | | 1 |
| + | | NotNeeded |
| + | |- |
| + | | 2 |
| + | | CommonRights |
| + | |- |
| + | | 3 |
| + | | PersonalizedRights |
| + | |- |
| + | | 4 |
| + | | NoRights |
| + | |} |
| + | |
| + | = VersionListData = |
| + | This is "nn::ns::VersionListData". |
| + | |
| + | = ApplicationUpdateInfo = |
| + | This is "nn::ns::ApplicationUpdateInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || UpToDate |
| + | |- |
| + | | 1 || Updatable |
| + | |} |
| | | |
| = ApplicationOccupiedSize = | | = ApplicationOccupiedSize = |