181 lines
4.8 KiB
C
181 lines
4.8 KiB
C
/**
|
|
* @file boss.h
|
|
* @brief BOSS service, see also: https://www.3dbrew.org/wiki/BOSS_Services
|
|
*/
|
|
#pragma once
|
|
|
|
/// BOSS context.
|
|
typedef struct
|
|
{
|
|
u32 property[0x7];
|
|
|
|
char url[0x200];
|
|
|
|
u32 property_x8;
|
|
u8 property_x9;
|
|
|
|
u8 property_xa[0x100];
|
|
|
|
u8 property_xb[0x200];
|
|
|
|
char property_xd[0x360];//Additonal optional HTTP request headers.
|
|
|
|
u32 property_xe;
|
|
|
|
u32 property_xf[0xc>>2];
|
|
|
|
u8 property_x10;
|
|
u8 property_x11;
|
|
u8 property_x12;
|
|
u32 property_x13;
|
|
u32 property_x14;
|
|
|
|
u8 property_x15[0x40];
|
|
|
|
u32 property_x16;
|
|
|
|
u32 property_x3b;
|
|
|
|
u8 property_x3e[0x200];
|
|
} bossContext;
|
|
|
|
/// BOSS task status.
|
|
typedef enum {
|
|
BOSSTASKSTATUS_STARTED = 0x2,
|
|
BOSSTASKSTATUS_ERROR = 0x7,
|
|
} bossTaskStatus;
|
|
|
|
/// Type values for bossGetNsDataHeaderInfo().
|
|
typedef enum {
|
|
bossNsDataHeaderInfoType_ContentSize = 0x3 /// Size of the content.
|
|
} bossNsDataHeaderInfoTypes;
|
|
|
|
/// Size of the output data for bossGetNsDataHeaderInfo().
|
|
typedef enum {
|
|
bossNsDataHeaderInfoTypeSize_ContentSize = 0x4 ///Type2
|
|
} bossNsDataHeaderInfoTypeSizes;
|
|
|
|
/**
|
|
* @brief Initializes BOSS.
|
|
* @param programID programID to use, 0 for the current process. Only used when BOSSP is available without *hax payload.
|
|
* @param force_user When true, just use bossU instead of trying to initialize with bossP first.
|
|
*/
|
|
Result bossInit(u64 programID, bool force_user);
|
|
|
|
/**
|
|
* @brief Run the InitializeSession service cmd. This is mainly for changing the programID associated with the current BOSS session.
|
|
* @param programID programID to use, 0 for the current process.
|
|
*/
|
|
Result bossReinit(u64 programID);
|
|
|
|
/// Exits BOSS.
|
|
void bossExit(void);
|
|
|
|
/// Returns the BOSS session handle.
|
|
Handle bossGetSessionHandle(void);
|
|
|
|
/**
|
|
* @brief Set the content data storage location.
|
|
* @param extdataID u64 extdataID, must have the high word set to the shared-extdata value when it's for NAND.
|
|
* @param boss_size Probably the max size in the extdata which BOSS can use.
|
|
* @param mediaType Roughly the same as FS mediatype.
|
|
*/
|
|
Result bossSetStorageInfo(u64 extdataID, u32 boss_size, u8 mediaType);
|
|
|
|
/**
|
|
* @brief Unregister the content data storage location, which includes unregistering the BOSS-session programID with BOSS.
|
|
*/
|
|
Result bossUnregisterStorage(void);
|
|
|
|
/**
|
|
* @brief Register a task.
|
|
* @param taskID BOSS taskID.
|
|
* @param unk0 Unknown, usually zero.
|
|
* @param unk1 Unknown, usually zero.
|
|
*/
|
|
Result bossRegisterTask(const char *taskID, u8 unk0, u8 unk1);
|
|
|
|
/**
|
|
* @brief Send a property.
|
|
* @param PropertyID PropertyID
|
|
* @param buf Input buffer data.
|
|
* @param size Buffer size.
|
|
*/
|
|
Result bossSendProperty(u16 PropertyID, const void* buf, u32 size);
|
|
|
|
/**
|
|
* @brief Deletes the content file for the specified NsDataId.
|
|
* @param NsDataId NsDataId
|
|
*/
|
|
Result bossDeleteNsData(u32 NsDataId);
|
|
|
|
/**
|
|
* @brief Gets header info for the specified NsDataId.
|
|
* @param NsDataId NsDataId
|
|
* @param type Type of data to load.
|
|
* @param buffer Output buffer.
|
|
* @param size Output buffer size.
|
|
*/
|
|
Result bossGetNsDataHeaderInfo(u32 NsDataId, u8 type, void* buffer, u32 size);
|
|
|
|
/**
|
|
* @brief Reads data from the content for the specified NsDataId.
|
|
* @param NsDataId NsDataId
|
|
* @param offset Offset in the content.
|
|
* @param buffer Output buffer.
|
|
* @param size Output buffer size.
|
|
* @param transfer_total Optional output actual read size, can be NULL.
|
|
* @param unk_out Optional unknown output, can be NULL.
|
|
*/
|
|
Result bossReadNsData(u32 NsDataId, u64 offset, void* buffer, u32 size, u32 *transfer_total, u32 *unk_out);
|
|
|
|
/**
|
|
* @brief Starts a task soon after running this command.
|
|
* @param taskID BOSS taskID.
|
|
*/
|
|
Result bossStartTaskImmediate(const char *taskID);
|
|
|
|
/**
|
|
* @brief Similar to bossStartTaskImmediate?
|
|
* @param taskID BOSS taskID.
|
|
*/
|
|
Result bossStartBgImmediate(const char *taskID);
|
|
|
|
/**
|
|
* @brief Deletes a task by using CancelTask and UnregisterTask internally.
|
|
* @param taskID BOSS taskID.
|
|
* @param unk Unknown, usually zero?
|
|
*/
|
|
Result bossDeleteTask(const char *taskID, u32 unk);
|
|
|
|
/**
|
|
* @brief Returns task state.
|
|
* @param taskID BOSS taskID.
|
|
* @param inval Unknown, normally 0?
|
|
* @param status Output status, see bossTaskStatus.
|
|
* @param out1 Output field.
|
|
* @param out2 Output field.
|
|
*/
|
|
Result bossGetTaskState(const char *taskID, s8 inval, u8 *status, u32 *out1, u8 *out2);
|
|
|
|
/**
|
|
* @brief This loads the current state of PropertyID 0x0 for the specified task.
|
|
* @param taskID BOSS taskID.
|
|
*/
|
|
Result bossGetTaskProperty0(const char *taskID, u8 *out);
|
|
|
|
/**
|
|
* @brief Setup a BOSS context with the default config.
|
|
* @param bossContext BOSS context.
|
|
* @param seconds_interval Interval in seconds for running the task automatically.
|
|
* @param url Task URL.
|
|
*/
|
|
void bossSetupContextDefault(bossContext *ctx, u32 seconds_interval, const char *url);
|
|
|
|
/**
|
|
* @brief Sends the config stored in the context. Used before registering a task.
|
|
* @param bossContext BOSS context.
|
|
*/
|
|
Result bossSendContextConfig(bossContext *ctx);
|
|
|