mirror of
https://github.com/switchbrew/libnx.git
synced 2025-07-26 20:12:14 +02:00
Moved most ncm types into ncm_types.h. Renamed FsStorageId to NcmStorageId, with updated names for some values (now located in ncm_types.h). Various improvements + improved docs.
This commit is contained in:
parent
ce570a70f1
commit
9888df18da
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "../../types.h"
|
#include "../../types.h"
|
||||||
#include "../../services/fs.h"
|
#include "../../services/fs.h"
|
||||||
|
#include "../../services/ncm_types.h"
|
||||||
|
|
||||||
/// RomFS header.
|
/// RomFS header.
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -95,7 +96,7 @@ Result romfsMountFromFsdev(const char *path, u64 offset, const char *name);
|
|||||||
* @param storageId Storage ID to mount from.
|
* @param storageId Storage ID to mount from.
|
||||||
* @param name Device mount name.
|
* @param name Device mount name.
|
||||||
*/
|
*/
|
||||||
Result romfsMountFromDataArchive(u64 dataId, FsStorageId storageId, const char *name);
|
Result romfsMountFromDataArchive(u64 dataId, NcmStorageId storageId, const char *name);
|
||||||
|
|
||||||
/// Unmounts the RomFS device.
|
/// Unmounts the RomFS device.
|
||||||
Result romfsUnmount(const char *name);
|
Result romfsUnmount(const char *name);
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "../services/pdm.h"
|
#include "../services/pdm.h"
|
||||||
#include "../services/caps.h"
|
#include "../services/caps.h"
|
||||||
#include "../services/pm.h"
|
#include "../services/pm.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/ncm_types.h"
|
||||||
#include "../services/acc.h"
|
#include "../services/acc.h"
|
||||||
#include "../kernel/tmem.h"
|
#include "../kernel/tmem.h"
|
||||||
#include "../kernel/event.h"
|
#include "../kernel/event.h"
|
||||||
@ -291,8 +291,8 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
u64 application_id; ///< ApplicationId.
|
u64 application_id; ///< ApplicationId.
|
||||||
u32 version; ///< Application version.
|
u32 version; ///< Application version.
|
||||||
u8 app_storageId; ///< FsStorageId for the Application.
|
u8 app_storageId; ///< \ref NcmStorageId for the Application.
|
||||||
u8 update_storageId; ///< FsStorageId for the Application update.
|
u8 update_storageId; ///< \ref NcmStorageId for the Application update.
|
||||||
u8 unk_xa; ///< Unknown.
|
u8 unk_xa; ///< Unknown.
|
||||||
u8 pad; ///< Padding.
|
u8 pad; ///< Padding.
|
||||||
} AppletApplicationLaunchProperty;
|
} AppletApplicationLaunchProperty;
|
||||||
@ -1298,7 +1298,7 @@ Result appletGetDisplayVersion(char *displayVersion);
|
|||||||
* @param[out] app_storageId Same as AppletApplicationLaunchProperty::app_storageId.
|
* @param[out] app_storageId Same as AppletApplicationLaunchProperty::app_storageId.
|
||||||
* @param[out] update_storageId Same as AppletApplicationLaunchProperty::update_storageId.
|
* @param[out] update_storageId Same as AppletApplicationLaunchProperty::update_storageId.
|
||||||
*/
|
*/
|
||||||
Result appletGetLaunchStorageInfoForDebug(FsStorageId *app_storageId, FsStorageId *update_storageId);
|
Result appletGetLaunchStorageInfoForDebug(NcmStorageId *app_storageId, NcmStorageId *update_storageId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Blocks the usage of the home button, for short (Home Menu) and long (Overlay) presses.
|
* @brief Blocks the usage of the home button, for short (Home Menu) and long (Overlay) presses.
|
||||||
@ -1927,11 +1927,11 @@ Result appletGetCallerAppletIdentityInfo(AppletIdentityInfo *info);
|
|||||||
Result appletGetMainAppletApplicationControlProperty(NacpStruct *nacp);
|
Result appletGetMainAppletApplicationControlProperty(NacpStruct *nacp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Gets the FsStorageId for the MainApplet.
|
* @brief Gets the NcmStorageId for the MainApplet.
|
||||||
* @note Only available with AppletType_LibraryApplet on [2.0.0+].
|
* @note Only available with AppletType_LibraryApplet on [2.0.0+].
|
||||||
* @param[out] storageId FsStorageId
|
* @param[out] storageId \ref NcmStorageId
|
||||||
*/
|
*/
|
||||||
Result appletGetMainAppletStorageId(FsStorageId *storageId);
|
Result appletGetMainAppletStorageId(NcmStorageId *storageId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Gets an array of \ref AppletIdentityInfo for the CallerStack.
|
* @brief Gets an array of \ref AppletIdentityInfo for the CallerStack.
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include "../kernel/event.h"
|
#include "../kernel/event.h"
|
||||||
|
#include "../services/ncm_types.h"
|
||||||
#include "../services/acc.h"
|
#include "../services/acc.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
|
|
||||||
@ -157,16 +158,6 @@ typedef enum {
|
|||||||
FsWriteOption_Flush = BIT(0), ///< Forces a flush after write.
|
FsWriteOption_Flush = BIT(0), ///< Forces a flush after write.
|
||||||
} FsWriteOption;
|
} FsWriteOption;
|
||||||
|
|
||||||
/// StorageId
|
|
||||||
typedef enum {
|
|
||||||
FsStorageId_None = 0, ///< None
|
|
||||||
FsStorageId_Host = 1, ///< Host
|
|
||||||
FsStorageId_GameCard = 2, ///< GameCard
|
|
||||||
FsStorageId_NandSystem = 3, ///< NandSystem
|
|
||||||
FsStorageId_NandUser = 4, ///< NandUser
|
|
||||||
FsStorageId_SdCard = 5, ///< SdCard
|
|
||||||
} FsStorageId;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FsContentStorageId_NandSystem = 0,
|
FsContentStorageId_NandSystem = 0,
|
||||||
FsContentStorageId_NandUser = 1,
|
FsContentStorageId_NandUser = 1,
|
||||||
@ -317,7 +308,7 @@ Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId cont
|
|||||||
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); /// [7.0.0+]
|
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); /// [7.0.0+]
|
||||||
|
|
||||||
Result fsOpenDataStorageByCurrentProcess(FsStorage* out);
|
Result fsOpenDataStorageByCurrentProcess(FsStorage* out);
|
||||||
Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, FsStorageId storageId);
|
Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, NcmStorageId storageId);
|
||||||
|
|
||||||
Result fsOpenDeviceOperator(FsDeviceOperator* out);
|
Result fsOpenDeviceOperator(FsDeviceOperator* out);
|
||||||
Result fsOpenSdCardDetectionEventNotifier(FsEventNotifier* out);
|
Result fsOpenSdCardDetectionEventNotifier(FsEventNotifier* out);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/ncm_types.h"
|
||||||
|
|
||||||
/// Initialize fsp-pr.
|
/// Initialize fsp-pr.
|
||||||
Result fsprInitialize(void);
|
Result fsprInitialize(void);
|
||||||
@ -18,7 +18,7 @@ void fsprExit(void);
|
|||||||
/// Gets the Service object for the actual fsp-pr service session.
|
/// Gets the Service object for the actual fsp-pr service session.
|
||||||
Service* fsprGetServiceSession(void);
|
Service* fsprGetServiceSession(void);
|
||||||
|
|
||||||
Result fsprRegisterProgram(u64 pid, u64 tid, FsStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size);
|
Result fsprRegisterProgram(u64 pid, u64 tid, NcmStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size);
|
||||||
Result fsprUnregisterProgram(u64 pid);
|
Result fsprUnregisterProgram(u64 pid);
|
||||||
Result fsprSetCurrentProcess(void);
|
Result fsprSetCurrentProcess(void);
|
||||||
Result fsprSetEnabledProgramVerification(bool enabled);
|
Result fsprSetEnabledProgramVerification(bool enabled);
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/ncm_types.h"
|
||||||
#include "../services/ncm.h"
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 main_thread_priority;
|
u8 main_thread_priority;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/ncm_types.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Service s;
|
Service s;
|
||||||
@ -26,7 +26,7 @@ void lrExit(void);
|
|||||||
/// Gets the Service object for the actual lr service session.
|
/// Gets the Service object for the actual lr service session.
|
||||||
Service* lrGetServiceSession(void);
|
Service* lrGetServiceSession(void);
|
||||||
|
|
||||||
Result lrOpenLocationResolver(FsStorageId storage, LrLocationResolver* out);
|
Result lrOpenLocationResolver(NcmStorageId storage, LrLocationResolver* out);
|
||||||
Result lrOpenRegisteredLocationResolver(LrRegisteredLocationResolver* out);
|
Result lrOpenRegisteredLocationResolver(LrRegisteredLocationResolver* out);
|
||||||
// TODO: Other ILocationResolverManager commands
|
// TODO: Other ILocationResolverManager commands
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
|
#include "../services/ncm_types.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/fs.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
|
|
||||||
@ -19,117 +20,6 @@ typedef struct {
|
|||||||
Service s; ///< IContentMetaDatabase
|
Service s; ///< IContentMetaDatabase
|
||||||
} NcmContentMetaDatabase;
|
} NcmContentMetaDatabase;
|
||||||
|
|
||||||
/// ContentType
|
|
||||||
typedef enum {
|
|
||||||
NcmContentType_Meta = 0, ///< Meta
|
|
||||||
NcmContentType_Program = 1, ///< Program
|
|
||||||
NcmContentType_Data = 2, ///< Data
|
|
||||||
NcmContentType_Control = 3, ///< Control
|
|
||||||
NcmContentType_HtmlDocument = 4, ///< HtmlDocument
|
|
||||||
NcmContentType_LegalInformation = 5, ///< LegalInformation
|
|
||||||
NcmContentType_DeltaFragment = 6, ///< DeltaFragment
|
|
||||||
} NcmContentType;
|
|
||||||
|
|
||||||
/// ContentMetaType
|
|
||||||
typedef enum {
|
|
||||||
NcmContentMetaType_Unknown = 0x0, ///< Unknown
|
|
||||||
NcmContentMetaType_SystemProgram = 0x1, ///< SystemProgram
|
|
||||||
NcmContentMetaType_SystemData = 0x2, ///< SystemData
|
|
||||||
NcmContentMetaType_SystemUpdate = 0x3, ///< SystemUpdate
|
|
||||||
NcmContentMetaType_BootImagePackage = 0x4, ///< BootImagePackage
|
|
||||||
NcmContentMetaType_BootImagePackageSafe = 0x5, ///< BootImagePackageSafe
|
|
||||||
NcmContentMetaType_Application = 0x80, ///< Application
|
|
||||||
NcmContentMetaType_Patch = 0x81, ///< Patch
|
|
||||||
NcmContentMetaType_AddOnContent = 0x82, ///< AddOnContent
|
|
||||||
NcmContentMetaType_Delta = 0x83, ///< Delta
|
|
||||||
} NcmContentMetaType;
|
|
||||||
|
|
||||||
/// ContentMetaAttribute
|
|
||||||
typedef enum {
|
|
||||||
NcmContentMetaAttribute_None = 0, ///< None
|
|
||||||
NcmContentMetaAttribute_IncludesExFatDriver = BIT(0), ///< IncludesExFatDriver
|
|
||||||
NcmContentMetaAttribute_Rebootless = BIT(1), ///< Rebootless
|
|
||||||
} NcmContentMetaAttribute;
|
|
||||||
|
|
||||||
/// ContentInstallType
|
|
||||||
typedef enum {
|
|
||||||
NcmContentInstallType_Full = 0, ///< Full
|
|
||||||
NcmContentInstallType_FragmentOnly = 1, ///< FragmentOnly
|
|
||||||
NcmContentInstallType_Unknown = 7, ///< Unknown
|
|
||||||
} NcmContentInstallType;
|
|
||||||
|
|
||||||
/// ContentId
|
|
||||||
typedef struct {
|
|
||||||
alignas(4) u8 c[0x10]; ///< Id
|
|
||||||
} NcmContentId;
|
|
||||||
|
|
||||||
/// PlaceHolderId
|
|
||||||
typedef struct {
|
|
||||||
alignas(8) u8 c[0x10]; ///< Id
|
|
||||||
} NcmPlaceHolderId;
|
|
||||||
|
|
||||||
/// ContentMetaKey
|
|
||||||
typedef struct {
|
|
||||||
u64 id; ///< Id.
|
|
||||||
u32 version; ///< Version.
|
|
||||||
u8 type; ///< \ref NcmContentMetaType
|
|
||||||
u8 install_type; ///< \ref NcmContentInstallType
|
|
||||||
u8 padding[2]; ///< Padding.
|
|
||||||
} NcmContentMetaKey;
|
|
||||||
|
|
||||||
/// ApplicationContentMetaKey
|
|
||||||
typedef struct {
|
|
||||||
NcmContentMetaKey key; ///< \ref NcmContentMetaKey
|
|
||||||
u64 application_id; ///< ApplicationId.
|
|
||||||
} NcmApplicationContentMetaKey;
|
|
||||||
|
|
||||||
/// ContentInfo
|
|
||||||
typedef struct {
|
|
||||||
NcmContentId content_id; ///< \ref NcmContentId
|
|
||||||
u8 size[0x6]; ///< Content size.
|
|
||||||
u8 content_type; ///< \ref NcmContentType.
|
|
||||||
u8 id_offset; ///< Offset of this content. Unused by most applications.
|
|
||||||
} NcmContentInfo;
|
|
||||||
|
|
||||||
/// Used by system updates. They share the exact same struct as NcmContentMetaKey
|
|
||||||
typedef NcmContentMetaKey NcmContentMetaInfo;
|
|
||||||
|
|
||||||
/// ContentMetaHeader
|
|
||||||
typedef struct {
|
|
||||||
u16 extended_header_size; ///< Size of optional struct that comes after this one.
|
|
||||||
u16 content_count; ///< Number of NcmContentInfos after the extra bytes.
|
|
||||||
u16 content_meta_count; ///< Number of NcmContentMetaInfos that come after the NcmContentInfos.
|
|
||||||
u8 attributes; ///< Usually None (0).
|
|
||||||
u8 storage_id; ///< Usually None (0).
|
|
||||||
} NcmContentMetaHeader;
|
|
||||||
|
|
||||||
/// ApplicationMetaExtendedHeader
|
|
||||||
typedef struct {
|
|
||||||
u64 patch_id; ///< PatchId of this application's patch.
|
|
||||||
u32 required_system_version; ///< Firmware version required by this application.
|
|
||||||
u32 required_application_version; ///< [9.0.0+] Owner application version required by this application. Previously padding.
|
|
||||||
} NcmApplicationMetaExtendedHeader;
|
|
||||||
|
|
||||||
/// PatchMetaExtendedHeader
|
|
||||||
typedef struct {
|
|
||||||
u64 application_id; ///< ApplicationId of this patch's corresponding application.
|
|
||||||
u32 required_system_version; ///< Firmware version required by this patch.
|
|
||||||
u32 extended_data_size; ///< Size of the extended data following the NcmContentInfos.
|
|
||||||
u8 reserved[0x8]; ///< Unused.
|
|
||||||
} NcmPatchMetaExtendedHeader;
|
|
||||||
|
|
||||||
/// AddOnContentMetaExtendedHeader
|
|
||||||
typedef struct {
|
|
||||||
u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
|
|
||||||
u32 required_application_version; ///< Version of the application required by this add-on-content.
|
|
||||||
u32 padding; ///< Padding.
|
|
||||||
} NcmAddOnContentMetaExtendedHeader;
|
|
||||||
|
|
||||||
/// SystemUpdateMetaExtendedHeader
|
|
||||||
typedef struct {
|
|
||||||
u32 extended_data_size; ///< Size of the extended data after NcmContentInfos and NcmContentMetaInfos.
|
|
||||||
} NcmSystemUpdateMetaExtendedHeader;
|
|
||||||
|
|
||||||
/// RightsId
|
/// RightsId
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FsRightsId rights_id;
|
FsRightsId rights_id;
|
||||||
@ -137,13 +27,6 @@ typedef struct {
|
|||||||
u8 pad[7]; ///< [3.0.0+]
|
u8 pad[7]; ///< [3.0.0+]
|
||||||
} NcmRightsId;
|
} NcmRightsId;
|
||||||
|
|
||||||
/// ProgramLocation
|
|
||||||
typedef struct {
|
|
||||||
u64 program_id; ///< ProgramId
|
|
||||||
u8 storageID; ///< \ref FsStorageId
|
|
||||||
u8 pad[7];
|
|
||||||
} NcmProgramLocation;
|
|
||||||
|
|
||||||
/// Initialize ncm.
|
/// Initialize ncm.
|
||||||
Result ncmInitialize(void);
|
Result ncmInitialize(void);
|
||||||
|
|
||||||
@ -153,19 +36,19 @@ void ncmExit(void);
|
|||||||
/// Gets the Service object for the actual ncm service session.
|
/// Gets the Service object for the actual ncm service session.
|
||||||
Service* ncmGetServiceSession(void);
|
Service* ncmGetServiceSession(void);
|
||||||
|
|
||||||
Result ncmCreateContentStorage(FsStorageId storage_id);
|
Result ncmCreateContentStorage(NcmStorageId storage_id);
|
||||||
Result ncmCreateContentMetaDatabase(FsStorageId storage_id);
|
Result ncmCreateContentMetaDatabase(NcmStorageId storage_id);
|
||||||
Result ncmVerifyContentStorage(FsStorageId storage_id);
|
Result ncmVerifyContentStorage(NcmStorageId storage_id);
|
||||||
Result ncmVerifyContentMetaDatabase(FsStorageId storage_id);
|
Result ncmVerifyContentMetaDatabase(NcmStorageId storage_id);
|
||||||
Result ncmOpenContentStorage(NcmContentStorage* out_content_storage, FsStorageId storage_id);
|
Result ncmOpenContentStorage(NcmContentStorage* out_content_storage, NcmStorageId storage_id);
|
||||||
Result ncmOpenContentMetaDatabase(NcmContentMetaDatabase* out_content_meta_database, FsStorageId storage_id);
|
Result ncmOpenContentMetaDatabase(NcmContentMetaDatabase* out_content_meta_database, NcmStorageId storage_id);
|
||||||
Result ncmCloseContentStorageForcibly(FsStorageId storage_id); ///< [1.0.0]
|
Result ncmCloseContentStorageForcibly(NcmStorageId storage_id); ///< [1.0.0]
|
||||||
Result ncmCloseContentMetaDatabaseForcibly(FsStorageId storage_id); ///< [1.0.0]
|
Result ncmCloseContentMetaDatabaseForcibly(NcmStorageId storage_id); ///< [1.0.0]
|
||||||
Result ncmCleanupContentMetaDatabase(FsStorageId storage_id);
|
Result ncmCleanupContentMetaDatabase(NcmStorageId storage_id);
|
||||||
Result ncmActivateContentStorage(FsStorageId storage_id); ///< [2.0.0+]
|
Result ncmActivateContentStorage(NcmStorageId storage_id); ///< [2.0.0+]
|
||||||
Result ncmInactivateContentStorage(FsStorageId storage_id); ///< [2.0.0+]
|
Result ncmInactivateContentStorage(NcmStorageId storage_id); ///< [2.0.0+]
|
||||||
Result ncmActivateContentMetaDatabase(FsStorageId storage_id); ///< [2.0.0+]
|
Result ncmActivateContentMetaDatabase(NcmStorageId storage_id); ///< [2.0.0+]
|
||||||
Result ncmInactivateContentMetaDatabase(FsStorageId storage_id); ///< [2.0.0+]
|
Result ncmInactivateContentMetaDatabase(NcmStorageId storage_id); ///< [2.0.0+]
|
||||||
Result ncmInvalidateRightsIdCache(void); ///< [9.0.0+]
|
Result ncmInvalidateRightsIdCache(void); ///< [9.0.0+]
|
||||||
|
|
||||||
void ncmContentStorageClose(NcmContentStorage* cs);
|
void ncmContentStorageClose(NcmContentStorage* cs);
|
||||||
|
137
nx/include/switch/services/ncm_types.h
Normal file
137
nx/include/switch/services/ncm_types.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/**
|
||||||
|
* @file ncm_types.h
|
||||||
|
* @brief Content Manager (ncm) service types (see ncm.h for the rest).
|
||||||
|
* @author Adubbz, zhuowei, and yellows8
|
||||||
|
* @copyright libnx Authors
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include "../types.h"
|
||||||
|
|
||||||
|
/// StorageId
|
||||||
|
typedef enum {
|
||||||
|
NcmStorageId_None = 0, ///< None
|
||||||
|
NcmStorageId_Host = 1, ///< Host
|
||||||
|
NcmStorageId_GameCard = 2, ///< GameCard
|
||||||
|
NcmStorageId_BuiltInSystem = 3, ///< BuiltInSystem
|
||||||
|
NcmStorageId_BuiltInUser = 4, ///< BuiltInUser
|
||||||
|
NcmStorageId_SdCard = 5, ///< SdCard
|
||||||
|
NcmStorageId_Any = 6, ///< Any
|
||||||
|
} NcmStorageId;
|
||||||
|
|
||||||
|
/// ContentType
|
||||||
|
typedef enum {
|
||||||
|
NcmContentType_Meta = 0, ///< Meta
|
||||||
|
NcmContentType_Program = 1, ///< Program
|
||||||
|
NcmContentType_Data = 2, ///< Data
|
||||||
|
NcmContentType_Control = 3, ///< Control
|
||||||
|
NcmContentType_HtmlDocument = 4, ///< HtmlDocument
|
||||||
|
NcmContentType_LegalInformation = 5, ///< LegalInformation
|
||||||
|
NcmContentType_DeltaFragment = 6, ///< DeltaFragment
|
||||||
|
} NcmContentType;
|
||||||
|
|
||||||
|
/// ContentMetaType
|
||||||
|
typedef enum {
|
||||||
|
NcmContentMetaType_Unknown = 0x0, ///< Unknown
|
||||||
|
NcmContentMetaType_SystemProgram = 0x1, ///< SystemProgram
|
||||||
|
NcmContentMetaType_SystemData = 0x2, ///< SystemData
|
||||||
|
NcmContentMetaType_SystemUpdate = 0x3, ///< SystemUpdate
|
||||||
|
NcmContentMetaType_BootImagePackage = 0x4, ///< BootImagePackage
|
||||||
|
NcmContentMetaType_BootImagePackageSafe = 0x5, ///< BootImagePackageSafe
|
||||||
|
NcmContentMetaType_Application = 0x80, ///< Application
|
||||||
|
NcmContentMetaType_Patch = 0x81, ///< Patch
|
||||||
|
NcmContentMetaType_AddOnContent = 0x82, ///< AddOnContent
|
||||||
|
NcmContentMetaType_Delta = 0x83, ///< Delta
|
||||||
|
} NcmContentMetaType;
|
||||||
|
|
||||||
|
/// ContentMetaAttribute
|
||||||
|
typedef enum {
|
||||||
|
NcmContentMetaAttribute_None = 0, ///< None
|
||||||
|
NcmContentMetaAttribute_IncludesExFatDriver = BIT(0), ///< IncludesExFatDriver
|
||||||
|
NcmContentMetaAttribute_Rebootless = BIT(1), ///< Rebootless
|
||||||
|
} NcmContentMetaAttribute;
|
||||||
|
|
||||||
|
/// ContentInstallType
|
||||||
|
typedef enum {
|
||||||
|
NcmContentInstallType_Full = 0, ///< Full
|
||||||
|
NcmContentInstallType_FragmentOnly = 1, ///< FragmentOnly
|
||||||
|
NcmContentInstallType_Unknown = 7, ///< Unknown
|
||||||
|
} NcmContentInstallType;
|
||||||
|
|
||||||
|
/// ContentId
|
||||||
|
typedef struct {
|
||||||
|
alignas(4) u8 c[0x10]; ///< Id
|
||||||
|
} NcmContentId;
|
||||||
|
|
||||||
|
/// PlaceHolderId
|
||||||
|
typedef struct {
|
||||||
|
alignas(8) u8 c[0x10]; ///< Id
|
||||||
|
} NcmPlaceHolderId;
|
||||||
|
|
||||||
|
/// ContentMetaKey
|
||||||
|
typedef struct {
|
||||||
|
u64 id; ///< Id.
|
||||||
|
u32 version; ///< Version.
|
||||||
|
u8 type; ///< \ref NcmContentMetaType
|
||||||
|
u8 install_type; ///< \ref NcmContentInstallType
|
||||||
|
u8 padding[2]; ///< Padding.
|
||||||
|
} NcmContentMetaKey;
|
||||||
|
|
||||||
|
/// ApplicationContentMetaKey
|
||||||
|
typedef struct {
|
||||||
|
NcmContentMetaKey key; ///< \ref NcmContentMetaKey
|
||||||
|
u64 application_id; ///< ApplicationId.
|
||||||
|
} NcmApplicationContentMetaKey;
|
||||||
|
|
||||||
|
/// ContentInfo
|
||||||
|
typedef struct {
|
||||||
|
NcmContentId content_id; ///< \ref NcmContentId
|
||||||
|
u8 size[0x6]; ///< Content size.
|
||||||
|
u8 content_type; ///< \ref NcmContentType.
|
||||||
|
u8 id_offset; ///< Offset of this content. Unused by most applications.
|
||||||
|
} NcmContentInfo;
|
||||||
|
|
||||||
|
/// Used by system updates. They share the exact same struct as NcmContentMetaKey
|
||||||
|
typedef NcmContentMetaKey NcmContentMetaInfo;
|
||||||
|
|
||||||
|
/// ContentMetaHeader
|
||||||
|
typedef struct {
|
||||||
|
u16 extended_header_size; ///< Size of optional struct that comes after this one.
|
||||||
|
u16 content_count; ///< Number of NcmContentInfos after the extra bytes.
|
||||||
|
u16 content_meta_count; ///< Number of NcmContentMetaInfos that come after the NcmContentInfos.
|
||||||
|
u8 attributes; ///< Usually None (0).
|
||||||
|
u8 storage_id; ///< Usually None (0).
|
||||||
|
} NcmContentMetaHeader;
|
||||||
|
|
||||||
|
/// ApplicationMetaExtendedHeader
|
||||||
|
typedef struct {
|
||||||
|
u64 patch_id; ///< PatchId of this application's patch.
|
||||||
|
u32 required_system_version; ///< Firmware version required by this application.
|
||||||
|
u32 required_application_version; ///< [9.0.0+] Owner application version required by this application. Previously padding.
|
||||||
|
} NcmApplicationMetaExtendedHeader;
|
||||||
|
|
||||||
|
/// PatchMetaExtendedHeader
|
||||||
|
typedef struct {
|
||||||
|
u64 application_id; ///< ApplicationId of this patch's corresponding application.
|
||||||
|
u32 required_system_version; ///< Firmware version required by this patch.
|
||||||
|
u32 extended_data_size; ///< Size of the extended data following the NcmContentInfos.
|
||||||
|
u8 reserved[0x8]; ///< Unused.
|
||||||
|
} NcmPatchMetaExtendedHeader;
|
||||||
|
|
||||||
|
/// AddOnContentMetaExtendedHeader
|
||||||
|
typedef struct {
|
||||||
|
u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
|
||||||
|
u32 required_application_version; ///< Version of the application required by this add-on-content.
|
||||||
|
u32 padding; ///< Padding.
|
||||||
|
} NcmAddOnContentMetaExtendedHeader;
|
||||||
|
|
||||||
|
/// SystemUpdateMetaExtendedHeader
|
||||||
|
typedef struct {
|
||||||
|
u32 extended_data_size; ///< Size of the extended data after NcmContentInfos and NcmContentMetaInfos.
|
||||||
|
} NcmSystemUpdateMetaExtendedHeader;
|
||||||
|
|
||||||
|
/// ProgramLocation
|
||||||
|
typedef struct {
|
||||||
|
u64 program_id; ///< ProgramId
|
||||||
|
u8 storageID; ///< \ref NcmStorageId
|
||||||
|
u8 pad[7];
|
||||||
|
} NcmProgramLocation;
|
@ -8,8 +8,7 @@
|
|||||||
#include "../types.h"
|
#include "../types.h"
|
||||||
#include "../nacp.h"
|
#include "../nacp.h"
|
||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
#include "../services/fs.h"
|
#include "../services/ncm_types.h"
|
||||||
#include "../services/ncm.h"
|
|
||||||
#include "../services/async.h"
|
#include "../services/async.h"
|
||||||
#include "../kernel/event.h"
|
#include "../kernel/event.h"
|
||||||
#include "../kernel/tmem.h"
|
#include "../kernel/tmem.h"
|
||||||
@ -59,7 +58,7 @@ typedef struct {
|
|||||||
/// NsApplicationContentMetaStatus
|
/// NsApplicationContentMetaStatus
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 meta_type; ///< \ref NcmContentMetaType
|
u8 meta_type; ///< \ref NcmContentMetaType
|
||||||
u8 storageID; ///< \ref FsStorageId
|
u8 storageID; ///< \ref NcmStorageId
|
||||||
u8 unk_x02; ///< Unknown.
|
u8 unk_x02; ///< Unknown.
|
||||||
u8 padding; ///< Padding.
|
u8 padding; ///< Padding.
|
||||||
u32 version; ///< Application version.
|
u32 version; ///< Application version.
|
||||||
@ -80,7 +79,7 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
u64 program_id; ///< program_id.
|
u64 program_id; ///< program_id.
|
||||||
u32 version; ///< Program version.
|
u32 version; ///< Program version.
|
||||||
u8 storageID; ///< \ref FsStorageId
|
u8 storageID; ///< \ref NcmStorageId
|
||||||
u8 index; ///< Index.
|
u8 index; ///< Index.
|
||||||
u8 is_application; ///< Whether this is an Application.
|
u8 is_application; ///< Whether this is an Application.
|
||||||
} NsLaunchProperties;
|
} NsLaunchProperties;
|
||||||
@ -186,17 +185,17 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the total storage capacity (used + free) from content manager services.
|
* @brief Returns the total storage capacity (used + free) from content manager services.
|
||||||
* @param[in] storage_id Specified FsStorageId. (Must be FsStorageId_SdCard)
|
* @param[in] storage_id \ref NcmStorageId. Must be ::NcmStorageId_SdCard.
|
||||||
* @param[out] size Pointer to output the total storage size to.
|
* @param[out] size Pointer to output the total storage size to.
|
||||||
*/
|
*/
|
||||||
Result nsGetTotalSpaceSize(FsStorageId storage_id, u64 *size);
|
Result nsGetTotalSpaceSize(NcmStorageId storage_id, u64 *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the available storage capacity from content manager services.
|
* @brief Returns the available storage capacity from content manager services.
|
||||||
* @param[in] storage_id Specified FsStorageId. (Must be FsStorageId_SdCard)
|
* @param[in] storage_id \ref NcmStorageId. Must be ::NcmStorageId_SdCard.
|
||||||
* @param[out] size Pointer to output the free storage size to.
|
* @param[out] size Pointer to output the free storage size to.
|
||||||
*/
|
*/
|
||||||
Result nsGetFreeSpaceSize(FsStorageId storage_id, u64 *size);
|
Result nsGetFreeSpaceSize(NcmStorageId storage_id, u64 *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generates a \ref NsSystemDeliveryInfo using the currently installed SystemUpdate meta.
|
* @brief Generates a \ref NsSystemDeliveryInfo using the currently installed SystemUpdate meta.
|
||||||
@ -308,9 +307,9 @@ Result nsEstimateRequiredSize(const NcmContentMetaKey *meta, s32 count, s64 *out
|
|||||||
* @param[in] application_id ApplicationId
|
* @param[in] application_id ApplicationId
|
||||||
* @param[in] meta Input array of \ref NcmContentMetaKey. The ::NcmContentMetaType must match ::NcmContentMetaType_Patch.
|
* @param[in] meta Input array of \ref NcmContentMetaKey. The ::NcmContentMetaType must match ::NcmContentMetaType_Patch.
|
||||||
* @param[in] count Size of the meta array in entries.
|
* @param[in] count Size of the meta array in entries.
|
||||||
* @param[in] storage_id ::FsStorageId. qlaunch uses value 6.
|
* @param[in] storage_id \ref NcmStorageId. qlaunch uses ::NcmStorageId_Any.
|
||||||
*/
|
*/
|
||||||
Result nsRequestReceiveApplication(AsyncResult *a, u32 addr, u16 port, u64 application_id, const NcmContentMetaKey *meta, s32 count, FsStorageId storage_id);
|
Result nsRequestReceiveApplication(AsyncResult *a, u32 addr, u16 port, u64 application_id, const NcmContentMetaKey *meta, s32 count, NcmStorageId storage_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CommitReceiveApplication
|
* @brief CommitReceiveApplication
|
||||||
|
@ -98,7 +98,7 @@ typedef struct {
|
|||||||
} unk_x8;
|
} unk_x8;
|
||||||
|
|
||||||
u8 appletId; ///< \ref AppletId
|
u8 appletId; ///< \ref AppletId
|
||||||
u8 storageId; ///< See FsStorageId.
|
u8 storageId; ///< \ref NcmStorageId
|
||||||
u8 logPolicy; ///< \ref PdmPlayLogPolicy
|
u8 logPolicy; ///< \ref PdmPlayLogPolicy
|
||||||
u8 eventType; ///< \ref PdmAppletEventType
|
u8 eventType; ///< \ref PdmAppletEventType
|
||||||
u8 unused[0xc]; ///< Unused.
|
u8 unused[0xc]; ///< Unused.
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "runtime/devices/fs_dev.h"
|
#include "runtime/devices/fs_dev.h"
|
||||||
#include "runtime/util/utf.h"
|
#include "runtime/util/utf.h"
|
||||||
#include "services/fs.h"
|
#include "services/fs.h"
|
||||||
|
#include "services/ncm_types.h"
|
||||||
#include "runtime/env.h"
|
#include "runtime/env.h"
|
||||||
#include "nro.h"
|
#include "nro.h"
|
||||||
|
|
||||||
@ -326,7 +327,7 @@ Result romfsMountFromFsdev(const char *path, u64 offset, const char *name)
|
|||||||
return romfsMountCommon(name, mount);
|
return romfsMountCommon(name, mount);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result romfsMountFromDataArchive(u64 dataId, FsStorageId storageId, const char *name) {
|
Result romfsMountFromDataArchive(u64 dataId, NcmStorageId storageId, const char *name) {
|
||||||
FsStorage storage;
|
FsStorage storage;
|
||||||
|
|
||||||
Result rc = fsOpenDataStorageByDataId(&storage, dataId, storageId);
|
Result rc = fsOpenDataStorageByDataId(&storage, dataId, storageId);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "services/apm.h"
|
#include "services/apm.h"
|
||||||
#include "services/caps.h"
|
#include "services/caps.h"
|
||||||
#include "services/pm.h"
|
#include "services/pm.h"
|
||||||
#include "services/fs.h"
|
#include "services/ncm_types.h"
|
||||||
#include "services/acc.h"
|
#include "services/acc.h"
|
||||||
#include "runtime/env.h"
|
#include "runtime/env.h"
|
||||||
#include "runtime/hosversion.h"
|
#include "runtime/hosversion.h"
|
||||||
@ -1953,7 +1953,7 @@ Result appletGetDisplayVersion(char *displayVersion) {
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result appletGetLaunchStorageInfoForDebug(FsStorageId *app_storageId, FsStorageId *update_storageId) {
|
Result appletGetLaunchStorageInfoForDebug(NcmStorageId *app_storageId, NcmStorageId *update_storageId) {
|
||||||
if (!serviceIsActive(&g_appletSrv) || !_appletIsApplication())
|
if (!serviceIsActive(&g_appletSrv) || !_appletIsApplication())
|
||||||
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||||
if (hosversionBefore(2,0,0))
|
if (hosversionBefore(2,0,0))
|
||||||
@ -2502,7 +2502,7 @@ IPC_MAKE_CMD_IMPL_INITEXPR( Result appletCanUseApplicationCore(bool *out),
|
|||||||
IPC_MAKE_CMD_IMPL_INITEXPR( Result appletGetCallerAppletIdentityInfo(AppletIdentityInfo *info), &g_appletILibraryAppletSelfAccessor, 14, _appletGetIdentityInfo, __nx_applet_type != AppletType_LibraryApplet, info)
|
IPC_MAKE_CMD_IMPL_INITEXPR( Result appletGetCallerAppletIdentityInfo(AppletIdentityInfo *info), &g_appletILibraryAppletSelfAccessor, 14, _appletGetIdentityInfo, __nx_applet_type != AppletType_LibraryApplet, info)
|
||||||
IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletGetMainAppletApplicationControlProperty(NacpStruct *nacp), &g_appletILibraryAppletSelfAccessor, 15, _appletCmdNoInRecvBuf, __nx_applet_type != AppletType_LibraryApplet, (2,0,0), nacp, sizeof(*nacp))
|
IPC_MAKE_CMD_IMPL_INITEXPR_HOSVER(Result appletGetMainAppletApplicationControlProperty(NacpStruct *nacp), &g_appletILibraryAppletSelfAccessor, 15, _appletCmdNoInRecvBuf, __nx_applet_type != AppletType_LibraryApplet, (2,0,0), nacp, sizeof(*nacp))
|
||||||
|
|
||||||
Result appletGetMainAppletStorageId(FsStorageId *storageId) {
|
Result appletGetMainAppletStorageId(NcmStorageId *storageId) {
|
||||||
u8 tmp=0;
|
u8 tmp=0;
|
||||||
Result rc=0;
|
Result rc=0;
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "sf/sessionmgr.h"
|
#include "sf/sessionmgr.h"
|
||||||
#include "runtime/hosversion.h"
|
#include "runtime/hosversion.h"
|
||||||
#include "services/fs.h"
|
#include "services/fs.h"
|
||||||
|
#include "services/ncm_types.h"
|
||||||
#include "services/acc.h"
|
#include "services/acc.h"
|
||||||
|
|
||||||
__attribute__((weak)) u32 __nx_fs_num_sessions = 3;
|
__attribute__((weak)) u32 __nx_fs_num_sessions = 3;
|
||||||
@ -375,7 +376,7 @@ Result fsOpenDataStorageByCurrentProcess(FsStorage* out) {
|
|||||||
return _fsCmdGetSession(&g_fsSrv, &out->s, 200);
|
return _fsCmdGetSession(&g_fsSrv, &out->s, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, FsStorageId storageId) {
|
Result fsOpenDataStorageByDataId(FsStorage* out, u64 dataId, NcmStorageId storageId) {
|
||||||
const struct {
|
const struct {
|
||||||
u8 storage_id;
|
u8 storage_id;
|
||||||
u64 data_id;
|
u64 data_id;
|
||||||
|
@ -32,7 +32,7 @@ Service* fsprGetServiceSession(void) {
|
|||||||
static const uint32_t g_fspr_default_fah[] = {0x1, 0xFFFFFFFF, 0xFFFFFFFF, 0x1C, 0, 0x1C, 0};
|
static const uint32_t g_fspr_default_fah[] = {0x1, 0xFFFFFFFF, 0xFFFFFFFF, 0x1C, 0, 0x1C, 0};
|
||||||
static const uint32_t g_fspr_default_fac[] = {0x1, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF};
|
static const uint32_t g_fspr_default_fac[] = {0x1, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF};
|
||||||
|
|
||||||
Result fsprRegisterProgram(u64 pid, u64 tid, FsStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size) {
|
Result fsprRegisterProgram(u64 pid, u64 tid, NcmStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size) {
|
||||||
if (fs_access_header == NULL) {
|
if (fs_access_header == NULL) {
|
||||||
fs_access_header = g_fspr_default_fah;
|
fs_access_header = g_fspr_default_fah;
|
||||||
fah_size = sizeof(g_fspr_default_fah);
|
fah_size = sizeof(g_fspr_default_fah);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "service_guard.h"
|
#include "service_guard.h"
|
||||||
#include "services/lr.h"
|
#include "services/lr.h"
|
||||||
|
#include "services/fs.h"
|
||||||
#include "runtime/hosversion.h"
|
#include "runtime/hosversion.h"
|
||||||
|
|
||||||
static Service g_lrSrv;
|
static Service g_lrSrv;
|
||||||
@ -20,7 +21,7 @@ Service* lrGetServiceSession(void) {
|
|||||||
return &g_lrSrv;
|
return &g_lrSrv;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result lrOpenLocationResolver(FsStorageId storage, LrLocationResolver* out) {
|
Result lrOpenLocationResolver(NcmStorageId storage, LrLocationResolver* out) {
|
||||||
const u8 in = (u8)storage;
|
const u8 in = (u8)storage;
|
||||||
return serviceDispatchIn(&g_lrSrv, 0, in,
|
return serviceDispatchIn(&g_lrSrv, 0, in,
|
||||||
.out_num_objects = 1,
|
.out_num_objects = 1,
|
||||||
|
@ -59,60 +59,60 @@ static Result _ncmCmdInPlaceHolderIdOutU64(Service* srv, const NcmPlaceHolderId*
|
|||||||
return serviceDispatchInOut(srv, cmd_id, *inval, *outval);
|
return serviceDispatchInOut(srv, cmd_id, *inval, *outval);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmCreateContentStorage(FsStorageId storage_id) {
|
Result ncmCreateContentStorage(NcmStorageId storage_id) {
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 0);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmCreateContentMetaDatabase(FsStorageId storage_id) {
|
Result ncmCreateContentMetaDatabase(NcmStorageId storage_id) {
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 1);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmVerifyContentStorage(FsStorageId storage_id) {
|
Result ncmVerifyContentStorage(NcmStorageId storage_id) {
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 2);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmVerifyContentMetaDatabase(FsStorageId storage_id) {
|
Result ncmVerifyContentMetaDatabase(NcmStorageId storage_id) {
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 3);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmOpenContentStorage(NcmContentStorage* out_content_storage, FsStorageId storage_id) {
|
Result ncmOpenContentStorage(NcmContentStorage* out_content_storage, NcmStorageId storage_id) {
|
||||||
return _ncmGetInterfaceInU8(&out_content_storage->s, storage_id, 4);
|
return _ncmGetInterfaceInU8(&out_content_storage->s, storage_id, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmOpenContentMetaDatabase(NcmContentMetaDatabase* out_content_meta_database, FsStorageId storage_id) {
|
Result ncmOpenContentMetaDatabase(NcmContentMetaDatabase* out_content_meta_database, NcmStorageId storage_id) {
|
||||||
return _ncmGetInterfaceInU8(&out_content_meta_database->s, storage_id, 5);
|
return _ncmGetInterfaceInU8(&out_content_meta_database->s, storage_id, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmCloseContentStorageForcibly(FsStorageId storage_id) {
|
Result ncmCloseContentStorageForcibly(NcmStorageId storage_id) {
|
||||||
if (hosversionAtLeast(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionAtLeast(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 6);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmCloseContentMetaDatabaseForcibly(FsStorageId storage_id) {
|
Result ncmCloseContentMetaDatabaseForcibly(NcmStorageId storage_id) {
|
||||||
if (hosversionAtLeast(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionAtLeast(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 7);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmCleanupContentMetaDatabase(FsStorageId storage_id) {
|
Result ncmCleanupContentMetaDatabase(NcmStorageId storage_id) {
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 8);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmActivateContentStorage(FsStorageId storage_id) {
|
Result ncmActivateContentStorage(NcmStorageId storage_id) {
|
||||||
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 9);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmInactivateContentStorage(FsStorageId storage_id) {
|
Result ncmInactivateContentStorage(NcmStorageId storage_id) {
|
||||||
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 10);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmActivateContentMetaDatabase(FsStorageId storage_id) {
|
Result ncmActivateContentMetaDatabase(NcmStorageId storage_id) {
|
||||||
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 11);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 11);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ncmInactivateContentMetaDatabase(FsStorageId storage_id) {
|
Result ncmInactivateContentMetaDatabase(NcmStorageId storage_id) {
|
||||||
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
if (hosversionBefore(2,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
return _ncmCmdInU8(&g_ncmSrv, storage_id, 12);
|
return _ncmCmdInU8(&g_ncmSrv, storage_id, 12);
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
#include "service_guard.h"
|
#include "service_guard.h"
|
||||||
#include "runtime/hosversion.h"
|
#include "runtime/hosversion.h"
|
||||||
#include "services/ns.h"
|
#include "services/ns.h"
|
||||||
#include "services/fs.h"
|
#include "services/ncm_types.h"
|
||||||
#include "services/ncm.h"
|
|
||||||
#include "services/async.h"
|
#include "services/async.h"
|
||||||
#include "kernel/tmem.h"
|
#include "kernel/tmem.h"
|
||||||
|
|
||||||
@ -206,11 +205,11 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result nsGetTotalSpaceSize(FsStorageId storage_id, u64 *size) {
|
Result nsGetTotalSpaceSize(NcmStorageId storage_id, u64 *size) {
|
||||||
return _nsCmdInU64OutU64(&g_nsAppManSrv, storage_id, size, 47);
|
return _nsCmdInU64OutU64(&g_nsAppManSrv, storage_id, size, 47);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result nsGetFreeSpaceSize(FsStorageId storage_id, u64 *size) {
|
Result nsGetFreeSpaceSize(NcmStorageId storage_id, u64 *size) {
|
||||||
return _nsCmdInU64OutU64(&g_nsAppManSrv, storage_id, size, 48);
|
return _nsCmdInU64OutU64(&g_nsAppManSrv, storage_id, size, 48);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +360,7 @@ Result nsEstimateRequiredSize(const NcmContentMetaKey *meta, s32 count, s64 *out
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result nsRequestReceiveApplication(AsyncResult *a, u32 addr, u16 port, u64 application_id, const NcmContentMetaKey *meta, s32 count, FsStorageId storage_id) {
|
Result nsRequestReceiveApplication(AsyncResult *a, u32 addr, u16 port, u64 application_id, const NcmContentMetaKey *meta, s32 count, NcmStorageId storage_id) {
|
||||||
if (hosversionBefore(4,0,0))
|
if (hosversionBefore(4,0,0))
|
||||||
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user