libnx v4.9.0
Loading...
Searching...
No Matches
ncm_types.h
Go to the documentation of this file.
1/**
2 * @file ncm_types.h
3 * @brief Content Manager (ncm) service types (see ncm.h for the rest).
4 * @author Adubbz, zhuowei, and yellows8
5 * @copyright libnx Authors
6 */
7#pragma once
8#include "../types.h"
9#include "../crypto/sha256.h"
10
11/// StorageId
12typedef enum {
13 NcmStorageId_None = 0, ///< None
14 NcmStorageId_Host = 1, ///< Host
15 NcmStorageId_GameCard = 2, ///< GameCard
16 NcmStorageId_BuiltInSystem = 3, ///< BuiltInSystem
17 NcmStorageId_BuiltInUser = 4, ///< BuiltInUser
18 NcmStorageId_SdCard = 5, ///< SdCard
19 NcmStorageId_Any = 6, ///< Any
21
22/// ContentType
23typedef enum {
24 NcmContentType_Meta = 0, ///< Meta
25 NcmContentType_Program = 1, ///< Program
26 NcmContentType_Data = 2, ///< Data
27 NcmContentType_Control = 3, ///< Control
28 NcmContentType_HtmlDocument = 4, ///< HtmlDocument
29 NcmContentType_LegalInformation = 5, ///< LegalInformation
30 NcmContentType_DeltaFragment = 6, ///< DeltaFragment
32
33/// ContentMetaType
34typedef enum {
35 NcmContentMetaType_Unknown = 0x0, ///< Unknown
36 NcmContentMetaType_SystemProgram = 0x1, ///< SystemProgram
37 NcmContentMetaType_SystemData = 0x2, ///< SystemData
38 NcmContentMetaType_SystemUpdate = 0x3, ///< SystemUpdate
39 NcmContentMetaType_BootImagePackage = 0x4, ///< BootImagePackage
40 NcmContentMetaType_BootImagePackageSafe = 0x5, ///< BootImagePackageSafe
41 NcmContentMetaType_Application = 0x80, ///< Application
42 NcmContentMetaType_Patch = 0x81, ///< Patch
43 NcmContentMetaType_AddOnContent = 0x82, ///< AddOnContent
44 NcmContentMetaType_Delta = 0x83, ///< Delta
45 NcmContentMetaType_DataPatch = 0x84, ///< DataPatch
47
48/// ContentMetaAttribute
55
56/// ContentInstallType
62
63/// ContentMetaPlatform
67
68/// ContentId
69typedef struct {
70 u8 c[0x10]; ///< Id
72
73/// PlaceHolderId
74typedef struct {
75 Uuid uuid; ///< UUID
77
78/// ContentMetaKey
79typedef struct {
80 u64 id; ///< Id.
81 u32 version; ///< Version.
82 u8 type; ///< \ref NcmContentMetaType
83 u8 install_type; ///< \ref NcmContentInstallType
84 u8 padding[2]; ///< Padding.
86
87/// ApplicationContentMetaKey
88typedef struct {
89 NcmContentMetaKey key; ///< \ref NcmContentMetaKey
90 u64 application_id; ///< ApplicationId.
92
93/// ContentInfo
94typedef struct {
95 NcmContentId content_id; ///< \ref NcmContentId
96 u32 size_low; ///< Content size (low).
97 u8 size_high; ///< Content size (high).
98 u8 attr; ///< Content attributes.
99 u8 content_type; ///< \ref NcmContentType.
100 u8 id_offset; ///< Offset of this content. Unused by most applications.
102
103/// PackagedContentInfo
104typedef struct {
105 u8 hash[SHA256_HASH_SIZE];
106 NcmContentInfo info;
108
109/// ContentMetaInfo
110typedef struct {
111 u64 id; ///< Id.
112 u32 version; ///< Version.
113 u8 type; ///< \ref NcmContentMetaType
114 u8 attr; ///< \ref NcmContentMetaAttribute
115 u8 padding[2]; ///< Padding.
117
118/// ContentMetaHeader
119typedef struct {
120 u16 extended_header_size; ///< Size of optional struct that comes after this one.
121 u16 content_count; ///< Number of NcmContentInfos after the extra bytes.
122 u16 content_meta_count; ///< Number of NcmContentMetaInfos that come after the NcmContentInfos.
123 u8 attributes; ///< Usually None (0).
124 u8 storage_id; ///< Usually None (0).
126
127/// ApplicationMetaExtendedHeader
128typedef struct {
129 u64 patch_id; ///< PatchId of this application's patch.
130 u32 required_system_version; ///< Firmware version required by this application.
131 u32 required_application_version; ///< [9.0.0+] Owner application version required by this application. Previously padding.
133
134/// PatchMetaExtendedHeader
135typedef struct {
136 u64 application_id; ///< ApplicationId of this patch's corresponding application.
137 u32 required_system_version; ///< Firmware version required by this patch.
138 u32 extended_data_size; ///< Size of the extended data following the NcmContentInfos.
139 u8 reserved[0x8]; ///< Unused.
141
142/// AddOnContentMetaExtendedHeader [15.0.0+]
143typedef struct {
144 u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
145 u32 required_application_version; ///< Version of the application required by this add-on-content.
146 u8 content_accessibilities; ///< Content accessibilities.
147 u8 padding[3]; ///< Padding.
148 u64 data_patch_id; ///< DataPatchId of this add-on-content's corresponding data patch.
150
151/// LegacyAddOnContentMetaExtendedHeader [1.0.0-14.1.2]
152typedef struct {
153 u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
154 u32 required_application_version; ///< Version of the application required by this add-on-content.
155 u32 padding; ///< Padding.
157
158/// DataPatchMetaExtendedHeader
159typedef struct {
160 u64 data_id; ///< DataId of this data patch's corresponding add-on-content.
161 u64 application_id; ///< ApplicationId of this data patch's add-on-content's corresponding application.
162 u32 required_application_version; ///< Version of the application required by this data patch.
163 u32 extended_data_size; ///< Size of the extended data following the NcmContentInfos.
164 u64 padding; ///< Padding.
166
167/// SystemUpdateMetaExtendedHeader
168typedef struct {
169 u32 extended_data_size; ///< Size of the extended data after NcmContentInfos and NcmContentMetaInfos.
171
172/// ProgramLocation
173typedef struct {
174 u64 program_id; ///< ProgramId
175 u8 storageID; ///< \ref NcmStorageId
176 u8 pad[7]; ///< Padding
178
179/**
180 * @brief Retrieves the content size from a \ref NcmContentInfo struct.
181 * @param[in] info Pointer to \ref NcmContentInfo struct.
182 * @param[out] out Output size.
183 */
185 *out = ((u64)info->size_high << 32) | info->size_low;
186}
187
188/**
189 * @brief Updates the content size from a \ref NcmContentInfo struct.
190 * @param[in] size Input size.
191 * @param[out] out Pointer to \ref NcmContentInfo struct.
192 */
194 info->size_low = size & 0xFFFFFFFF;
195 info->size_high = (u8)(size >> 32);
196}
static void ncmContentInfoSizeToU64(const NcmContentInfo *info, u64 *out)
Retrieves the content size from a NcmContentInfo struct.
Definition ncm_types.h:184
static void ncmU64ToContentInfoSize(const u64 size, NcmContentInfo *info)
Updates the content size from a NcmContentInfo struct.
Definition ncm_types.h:193
NcmStorageId
StorageId.
Definition ncm_types.h:12
@ NcmStorageId_None
None.
Definition ncm_types.h:13
@ NcmStorageId_Any
Any.
Definition ncm_types.h:19
@ NcmStorageId_BuiltInUser
BuiltInUser.
Definition ncm_types.h:17
@ NcmStorageId_Host
Host.
Definition ncm_types.h:14
@ NcmStorageId_SdCard
SdCard.
Definition ncm_types.h:18
@ NcmStorageId_BuiltInSystem
BuiltInSystem.
Definition ncm_types.h:16
@ NcmStorageId_GameCard
GameCard.
Definition ncm_types.h:15
NcmContentInstallType
ContentInstallType.
Definition ncm_types.h:57
@ NcmContentInstallType_Unknown
Unknown.
Definition ncm_types.h:60
@ NcmContentInstallType_Full
Full.
Definition ncm_types.h:58
@ NcmContentInstallType_FragmentOnly
FragmentOnly.
Definition ncm_types.h:59
NcmContentMetaAttribute
ContentMetaAttribute.
Definition ncm_types.h:49
@ NcmContentMetaAttribute_Compacted
Compacted.
Definition ncm_types.h:53
@ NcmContentMetaAttribute_Rebootless
Rebootless.
Definition ncm_types.h:52
@ NcmContentMetaAttribute_None
None.
Definition ncm_types.h:50
@ NcmContentMetaAttribute_IncludesExFatDriver
IncludesExFatDriver.
Definition ncm_types.h:51
NcmContentMetaType
ContentMetaType.
Definition ncm_types.h:34
@ NcmContentMetaType_AddOnContent
AddOnContent.
Definition ncm_types.h:43
@ NcmContentMetaType_BootImagePackageSafe
BootImagePackageSafe.
Definition ncm_types.h:40
@ NcmContentMetaType_SystemData
SystemData.
Definition ncm_types.h:37
@ NcmContentMetaType_Application
Application.
Definition ncm_types.h:41
@ NcmContentMetaType_Delta
Delta.
Definition ncm_types.h:44
@ NcmContentMetaType_SystemProgram
SystemProgram.
Definition ncm_types.h:36
@ NcmContentMetaType_SystemUpdate
SystemUpdate.
Definition ncm_types.h:38
@ NcmContentMetaType_Patch
Patch.
Definition ncm_types.h:42
@ NcmContentMetaType_BootImagePackage
BootImagePackage.
Definition ncm_types.h:39
@ NcmContentMetaType_Unknown
Unknown.
Definition ncm_types.h:35
@ NcmContentMetaType_DataPatch
DataPatch.
Definition ncm_types.h:45
NcmContentMetaPlatform
ContentMetaPlatform.
Definition ncm_types.h:64
@ NcmContentMetaPlatform_Nx
Nx.
Definition ncm_types.h:65
NcmContentType
ContentType.
Definition ncm_types.h:23
@ NcmContentType_Program
Program.
Definition ncm_types.h:25
@ NcmContentType_LegalInformation
LegalInformation.
Definition ncm_types.h:29
@ NcmContentType_Control
Control.
Definition ncm_types.h:27
@ NcmContentType_Meta
Meta.
Definition ncm_types.h:24
@ NcmContentType_Data
Data.
Definition ncm_types.h:26
@ NcmContentType_HtmlDocument
HtmlDocument.
Definition ncm_types.h:28
@ NcmContentType_DeltaFragment
DeltaFragment.
Definition ncm_types.h:30
AddOnContentMetaExtendedHeader [15.0.0+].
Definition ncm_types.h:143
u64 application_id
ApplicationId of this add-on-content's corresponding application.
Definition ncm_types.h:144
u32 required_application_version
Version of the application required by this add-on-content.
Definition ncm_types.h:145
u64 data_patch_id
DataPatchId of this add-on-content's corresponding data patch.
Definition ncm_types.h:148
u8 content_accessibilities
Content accessibilities.
Definition ncm_types.h:146
ApplicationContentMetaKey.
Definition ncm_types.h:88
u64 application_id
ApplicationId.
Definition ncm_types.h:90
NcmContentMetaKey key
NcmContentMetaKey
Definition ncm_types.h:89
ApplicationMetaExtendedHeader.
Definition ncm_types.h:128
u32 required_application_version
[9.0.0+] Owner application version required by this application. Previously padding.
Definition ncm_types.h:131
u32 required_system_version
Firmware version required by this application.
Definition ncm_types.h:130
u64 patch_id
PatchId of this application's patch.
Definition ncm_types.h:129
ContentId.
Definition ncm_types.h:69
ContentInfo.
Definition ncm_types.h:94
u8 content_type
NcmContentType.
Definition ncm_types.h:99
u8 attr
Content attributes.
Definition ncm_types.h:98
u8 size_high
Content size (high).
Definition ncm_types.h:97
u32 size_low
Content size (low).
Definition ncm_types.h:96
u8 id_offset
Offset of this content. Unused by most applications.
Definition ncm_types.h:100
NcmContentId content_id
NcmContentId
Definition ncm_types.h:95
ContentMetaHeader.
Definition ncm_types.h:119
u8 attributes
Usually None (0).
Definition ncm_types.h:123
u16 content_count
Number of NcmContentInfos after the extra bytes.
Definition ncm_types.h:121
u16 content_meta_count
Number of NcmContentMetaInfos that come after the NcmContentInfos.
Definition ncm_types.h:122
u16 extended_header_size
Size of optional struct that comes after this one.
Definition ncm_types.h:120
u8 storage_id
Usually None (0).
Definition ncm_types.h:124
ContentMetaInfo.
Definition ncm_types.h:110
u64 id
Id.
Definition ncm_types.h:111
u8 type
NcmContentMetaType
Definition ncm_types.h:113
u32 version
Version.
Definition ncm_types.h:112
u8 attr
NcmContentMetaAttribute
Definition ncm_types.h:114
ContentMetaKey.
Definition ncm_types.h:79
u8 install_type
NcmContentInstallType
Definition ncm_types.h:83
u64 id
Id.
Definition ncm_types.h:80
u8 type
NcmContentMetaType
Definition ncm_types.h:82
u32 version
Version.
Definition ncm_types.h:81
DataPatchMetaExtendedHeader.
Definition ncm_types.h:159
u64 application_id
ApplicationId of this data patch's add-on-content's corresponding application.
Definition ncm_types.h:161
u64 data_id
DataId of this data patch's corresponding add-on-content.
Definition ncm_types.h:160
u64 padding
Padding.
Definition ncm_types.h:164
u32 required_application_version
Version of the application required by this data patch.
Definition ncm_types.h:162
u32 extended_data_size
Size of the extended data following the NcmContentInfos.
Definition ncm_types.h:163
LegacyAddOnContentMetaExtendedHeader [1.0.0-14.1.2].
Definition ncm_types.h:152
u64 application_id
ApplicationId of this add-on-content's corresponding application.
Definition ncm_types.h:153
u32 required_application_version
Version of the application required by this add-on-content.
Definition ncm_types.h:154
u32 padding
Padding.
Definition ncm_types.h:155
PackagedContentInfo.
Definition ncm_types.h:104
PatchMetaExtendedHeader.
Definition ncm_types.h:135
u32 required_system_version
Firmware version required by this patch.
Definition ncm_types.h:137
u64 application_id
ApplicationId of this patch's corresponding application.
Definition ncm_types.h:136
u32 extended_data_size
Size of the extended data following the NcmContentInfos.
Definition ncm_types.h:138
PlaceHolderId.
Definition ncm_types.h:74
Uuid uuid
UUID.
Definition ncm_types.h:75
ProgramLocation.
Definition ncm_types.h:173
u8 storageID
NcmStorageId
Definition ncm_types.h:175
u64 program_id
ProgramId.
Definition ncm_types.h:174
SystemUpdateMetaExtendedHeader.
Definition ncm_types.h:168
u32 extended_data_size
Size of the extended data after NcmContentInfos and NcmContentMetaInfos.
Definition ncm_types.h:169
Definition types.h:48
#define BIT(n)
Creates a bitmask from a bit number.
Definition types.h:54
uint64_t u64
64-bit unsigned integer.
Definition types.h:22
uint8_t u8
8-bit unsigned integer.
Definition types.h:19
uint16_t u16
16-bit unsigned integer.
Definition types.h:20
#define NX_CONSTEXPR
Flags a function as constexpr in C++14 and above; or as (always) inline otherwise.
Definition types.h:92
uint32_t u32
32-bit unsigned integer.
Definition types.h:21