libctru/libctru/include/3ds/services/boss.h

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);