mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
121 lines
6.7 KiB
C
121 lines
6.7 KiB
C
/**
|
|
* @file ncm.h
|
|
* @brief Content Manager (ncm) service IPC wrapper.
|
|
* @author zhuowei & Adubbz
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "../types.h"
|
|
#include "../services/fs.h"
|
|
#include "../services/sm.h"
|
|
|
|
/// ContentType
|
|
typedef enum {
|
|
NcmContentType_CNMT = 0, ///< CNMT
|
|
NcmContentType_Program = 1, ///< Program
|
|
NcmContentType_Data = 2, ///< Data
|
|
NcmContentType_Icon = 3, ///< Icon
|
|
NcmContentType_Doc = 4, ///< Doc
|
|
NcmContentType_Info = 5, ///< Info
|
|
} NcmContentType;
|
|
|
|
/// ContentMetaType
|
|
typedef enum {
|
|
NcmContentMetaType_SystemProgram = 0x01, ///< SystemProgram
|
|
NcmContentMetaType_SystemData = 0x02, ///< SystemData
|
|
NcmContentMetaType_SystemUpdate = 0x03, ///< SystemUpdate
|
|
NcmContentMetaType_BootImagePackage = 0x04, ///< BootImagePackage
|
|
NcmContentMetaType_BootImagePackageSafe = 0x05, ///< BootImagePackageSafe
|
|
NcmContentMetaType_Application = 0x80, ///< Application
|
|
NcmContentMetaType_Patch = 0x81, ///< Patch
|
|
NcmContentMetaType_AddOnContent = 0x82, ///< AddOnContent
|
|
NcmContentMetaType_Delta = 0x83, ///< Delta
|
|
} NcmContentMetaType;
|
|
|
|
/// ContentMetaAttribute
|
|
typedef enum {
|
|
NcmContentMetaAttribute_Exfat = (1 << 0), ///< Exfat
|
|
NcmContentMetaAttribute_Rebootless = (1 << 1), ///< Rebootless
|
|
} NcmContentMetaAttribute;
|
|
|
|
/// NcmContentStorage
|
|
typedef struct {
|
|
Service s; ///< IContentStorage
|
|
} NcmContentStorage;
|
|
|
|
/// NcmContentMetaDatabase
|
|
typedef struct {
|
|
Service s; ///< IContentMetaDatabase
|
|
} NcmContentMetaDatabase;
|
|
|
|
/// NcaId
|
|
typedef struct {
|
|
u8 c[0x10]; ///< Id
|
|
} NcmNcaId;
|
|
|
|
/// MetaRecord
|
|
typedef struct {
|
|
u64 titleId; ///< titleID.
|
|
u32 version; ///< Title version.
|
|
u8 type; ///< Type.
|
|
u8 flags; ///< Flags.
|
|
u8 padding[2]; ///< Padding.
|
|
} NcmMetaRecord;
|
|
|
|
/// ContentRecord
|
|
typedef struct {
|
|
NcmNcaId ncaId; ///< \ref NcmNcaId
|
|
u8 size[0x6]; ///< Content size.
|
|
u8 type; ///< Type.
|
|
u8 padding; ///< Padding.
|
|
} NcmContentRecord;
|
|
|
|
/// ContentMetaRecordsHeader
|
|
typedef struct {
|
|
u16 numExtraBytes; ///< Size of optional struct that comes after this one.
|
|
u16 numContentRecords; ///< Number of NcmContentRecord entries after the extra bytes.
|
|
u16 numMetaRecords; ///< Number of NcmMetaRecord entries that come after the NcmContentRecords.
|
|
u16 padding; ///< Always zero.
|
|
} NcmContentMetaRecordsHeader;
|
|
|
|
/// ApplicationContentMetaKey
|
|
typedef struct {
|
|
NcmMetaRecord metaRecord; ///< \ref NcmMetaRecord
|
|
u64 baseTitleId; ///< Base titleID.
|
|
} NcmApplicationContentMetaKey;
|
|
|
|
Result ncmInitialize(void);
|
|
void ncmExit(void);
|
|
Service* ncmGetServiceSession(void);
|
|
|
|
Result ncmOpenContentStorage(FsStorageId storage, NcmContentStorage* out);
|
|
Result ncmOpenContentMetaDatabase(FsStorageId storage, NcmContentMetaDatabase* out);
|
|
|
|
Result ncmContentStorageGeneratePlaceHolderId(NcmContentStorage* cs, NcmNcaId* outputId);
|
|
Result ncmContentStorageCreatePlaceHolder(NcmContentStorage* cs, const NcmNcaId* registeredId, const NcmNcaId* placeholderId, u64 size);
|
|
Result ncmContentStorageDeletePlaceHolder(NcmContentStorage* cs, const NcmNcaId* placeholderId);
|
|
Result ncmContentStorageWritePlaceHolder(NcmContentStorage* cs, const NcmNcaId* placeholderId, u64 offset, const void* srcData, size_t srcDataSize);
|
|
Result ncmContentStorageRegister(NcmContentStorage* cs, const NcmNcaId* registeredId, const NcmNcaId* placeholderId);
|
|
Result ncmContentStorageDelete(NcmContentStorage* cs, const NcmNcaId* registeredId);
|
|
Result ncmContentStorageHas(NcmContentStorage* cs, const NcmNcaId* ncaId, bool* out);
|
|
Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out, size_t outSize);
|
|
Result ncmContentStorageGetPlaceHolderPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out, size_t outSize);
|
|
Result ncmContentStorageCleanupAllPlaceHolder(NcmContentStorage* cs);
|
|
Result ncmContentStorageGetSize(NcmContentStorage* cs, const NcmNcaId* ncaId, u64* out);
|
|
Result ncmContentStorageDisableForcibly(NcmContentStorage* cs);
|
|
Result ncmContentStorageReadContentIdFile(NcmContentStorage* cs, const NcmNcaId* ncaId, u64 offset, void* outBuf, size_t bufSize);
|
|
Result ncmContentStorageGetRightsIdFromContentId(NcmContentStorage* cs, const NcmNcaId* ncaId, FsRightsId* rightsIdOut, u32* keyGenerationOut);
|
|
|
|
Result ncmContentMetaDatabaseSet(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u64 inDataSize, const NcmContentMetaRecordsHeader* srcRecordsData);
|
|
Result ncmContentMetaDatabaseGet(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u64 outDataSize, NcmContentMetaRecordsHeader* outRecordsData, u64* sizeRead);
|
|
Result ncmContentMetaDatabaseRemove(NcmContentMetaDatabase* db, const NcmMetaRecord *record);
|
|
Result ncmContentMetaDatabaseGetContentIdByType(NcmContentMetaDatabase* db, NcmContentType contentType, const NcmMetaRecord* record, NcmNcaId* out);
|
|
Result ncmContentMetaDatabaseListContentInfo(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u32 index, NcmContentRecord* contentRecordsOut, size_t contentRecordsBufSize, u32* numEntriesRead);
|
|
Result ncmContentMetaDatabaseList(NcmContentMetaDatabase* db, u32 titleType, u64 titleIdExact, u64 titleIdLow, u64 titleIdHigh, NcmMetaRecord* metaRecordsOut, size_t metaRecordsBufSize, u32* numEntriesWritten, u32* numEntriesTotal);
|
|
Result ncmContentMetaDatabaseGetLatestContentMetaKey(NcmContentMetaDatabase* db, u64 titleId, NcmMetaRecord* out);
|
|
Result ncmContentMetaDatabaseListApplication(NcmContentMetaDatabase* db, u8 filter, NcmApplicationContentMetaKey* outBuf, size_t outBufSize, u32* numEntriesWritten, u32* numEntriesTotal);
|
|
Result ncmContentMetaDatabaseHas(NcmContentMetaDatabase* db, const NcmMetaRecord* record, bool* out);
|
|
Result ncmContentMetaDatabaseDisableForcibly(NcmContentMetaDatabase* db);
|
|
Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db);
|
|
Result ncmContentMetaDatabaseGetAttributes(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u8* out);
|