Properly document both services

This commit is contained in:
XorTroll 2020-04-16 15:08:42 +02:00
parent 9d9e72b3ac
commit 9e0f259f6c
2 changed files with 107 additions and 22 deletions

View File

@ -1,6 +1,6 @@
/** /**
* @file mii.h * @file mii.h
* @brief Mii services IPC wrapper. * @brief Mii services (mii:*) IPC wrapper.
* @author XorTroll * @author XorTroll
* @copyright libnx Authors * @copyright libnx Authors
*/ */
@ -9,49 +9,56 @@
#include "../sf/service.h" #include "../sf/service.h"
typedef enum { typedef enum {
MiiServiceType_System, MiiServiceType_System = 0, ///< Initializes mii:e.
MiiServiceType_User MiiServiceType_User = 1, ///< Initializes mii:u.
} MiiServiceType; } MiiServiceType;
/// Mii age.
typedef enum { typedef enum {
MiiAge_Young, MiiAge_Young = 0, ///< Young
MiiAge_Normal, MiiAge_Normal = 1, ///< Normal
MiiAge_Old, MiiAge_Old = 2, ///< Old
MiiAge_All MiiAge_All = 3, ///< All of them
} MiiAge; } MiiAge;
/// Mii gender.
typedef enum { typedef enum {
MiiGender_Male, MiiGender_Male = 0, ///< Male
MiiGender_Female, MiiGender_Female = 1, ///< Female
MiiGender_All MiiGender_All = 2, ///< Both of them
} MiiGender; } MiiGender;
/// Mii race.
typedef enum { typedef enum {
MiiRace_Black, MiiRace_Black = 0, ///< Black
MiiRace_White, MiiRace_White = 1, ///< White
MiiRace_Asian, MiiRace_Asian = 2, ///< Asian
MiiRace_All MiiRace_All = 3, ///< All of them
} MiiRace; } MiiRace;
// Mii source flag.
typedef enum { typedef enum {
MiiSourceFlag_Database = BIT(0), MiiSourceFlag_Database = BIT(0), ///< Miis created by the user
MiiSourceFlag_Default = BIT(1), MiiSourceFlag_Default = BIT(1), ///< Default console miis
MiiSourceFlag_All = MiiSourceFlag_Database | MiiSourceFlag_Default MiiSourceFlag_All = MiiSourceFlag_Database | MiiSourceFlag_Default, ///< All of them
} MiiSourceFlag; } MiiSourceFlag;
// Mii special key code
typedef enum { typedef enum {
MiiSpecialKeyCode_Normal, MiiSpecialKeyCode_Normal = 0, ///< Normal miis
MiiSpecialKeyCode_Special = 0xA523B78F MiiSpecialKeyCode_Special = 0xA523B78F, ///< Special miis
} MiiSpecialKeyCode; } MiiSpecialKeyCode;
typedef struct { typedef struct {
Service s; Service s;
} MiiDatabase; } MiiDatabase;
// Mii create ID.
typedef struct { typedef struct {
Uuid uuid; Uuid uuid;
} MiiCreateId; } MiiCreateId;
// Mii data structure.
typedef struct { typedef struct {
MiiCreateId create_id; MiiCreateId create_id;
u16 mii_name[10+1]; ///< utf-16be, null-terminated u16 mii_name[10+1]; ///< utf-16be, null-terminated
@ -115,12 +122,56 @@ void miiExit(void);
/// Gets the Service object for the actual mii service session. /// Gets the Service object for the actual mii service session.
Service* miiGetServiceSession(void); Service* miiGetServiceSession(void);
/**
* @brief Opens a mii database.
* @param[in] key_code Mii key code filter.
* @param[out] out Database.
*/
Result miiOpenDatabase(MiiDatabase *out, MiiSpecialKeyCode key_code); Result miiOpenDatabase(MiiDatabase *out, MiiSpecialKeyCode key_code);
/**
* @brief Returns whether the mii database is updated.
* @param[in] db Database.
* @param[in] flag Source flag.
* @param[out] out Out boolean.
*/
Result miiDatabaseIsUpdated(MiiDatabase *db, u8 *out, MiiSourceFlag flag); Result miiDatabaseIsUpdated(MiiDatabase *db, u8 *out, MiiSourceFlag flag);
/**
* @brief Returns whether the mii database is full.
* @param[in] db Database.
* @param[in] flag Source flag.
* @param[out] out Out boolean.
*/
Result miiDatabaseIsFull(MiiDatabase *db, u8 *out); Result miiDatabaseIsFull(MiiDatabase *db, u8 *out);
/**
* @brief Returns number of miis in the database with the specified source flag.
* @param[in] db Database.
* @param[in] flag Source flag.
* @param[out] out Out count.
*/
Result miiDatabaseGetCount(MiiDatabase *db, u32 *out, MiiSourceFlag flag); Result miiDatabaseGetCount(MiiDatabase *db, u32 *out, MiiSourceFlag flag);
/**
* @brief Reads mii charinfo data from the specified source flag.
* @param[in] db Database.
* @param[in] flag Source flag.
* @param[out] out_infos Output mii charinfo array.
* @param[in] out_infos_count Amount of mii chainfos to read.
* @param[out] out_count Number of mii charinfos which were read.
*/
Result miiDatabaseGetCharInfo(MiiDatabase *db, MiiSourceFlag flag, MiiCharInfo *out_infos, size_t out_infos_count, u32 *out_count); Result miiDatabaseGetCharInfo(MiiDatabase *db, MiiSourceFlag flag, MiiCharInfo *out_infos, size_t out_infos_count, u32 *out_count);
/**
* @brief Generates a random mii charinfo (doesn't register it in the console database).
* @param[in] db Database.
* @param[in] age Mii's age.
* @param[in] gender Mii's gender.
* @param[in] race Mii's race.
* @param[out] out_info Out mii charinfo data.
*/
Result miiDatabaseBuildRandom(MiiDatabase *db, MiiAge age, MiiGender gender, MiiRace race, MiiCharInfo *out_info); Result miiDatabaseBuildRandom(MiiDatabase *db, MiiAge age, MiiGender gender, MiiRace race, MiiCharInfo *out_info);
/// Closes a mii database.
void miiDatabaseClose(MiiDatabase *db); void miiDatabaseClose(MiiDatabase *db);

View File

@ -7,15 +7,17 @@
#pragma once #pragma once
#include "mii.h" #include "mii.h"
/// Image ID.
typedef struct { typedef struct {
Uuid uuid; Uuid uuid;
} MiiimgImageId; } MiiimgImageId;
/// Image attribute.
typedef struct { typedef struct {
MiiimgImageId image_id; MiiimgImageId image_id; ///< Image ID.
MiiCreateId create_id; MiiCreateId create_id; ///< Mii's create ID.
u32 unk; u32 unk;
u16 mii_name[10+1]; u16 mii_name[10+1]; ///< utf-16be, null-terminated
} PACKED MiiimgImageAttribute; } PACKED MiiimgImageAttribute;
/// Initialize miiimg. /// Initialize miiimg.
@ -27,9 +29,41 @@ void miiimgExit(void);
/// Gets the Service object for the actual miiimg service session. /// Gets the Service object for the actual miiimg service session.
Service* miiimgGetServiceSession(void); Service* miiimgGetServiceSession(void);
/**
* @brief Reloads the image database.
*/
Result miiimgReload(); Result miiimgReload();
/**
* @brief Gets the number of mii images in the database.
* @param[out] out_count Mii image count.
*/
Result miiimgGetCount(u32 *out_count); Result miiimgGetCount(u32 *out_count);
/**
* @brief Gets whether the image database is empty.
* @param[out] out_empty Whether the database is empty.
*/
Result miiimgIsEmpty(u8 *out_empty); Result miiimgIsEmpty(u8 *out_empty);
/**
* @brief Gets whether the image database is full.
* @param[out] out_empty Whether the database is full.
*/
Result miiimgIsFull(u8 *out_full); Result miiimgIsFull(u8 *out_full);
/**
* @brief Gets the image attribute for the specified image index.
* @param[in] index Image index.
* @param[out] out_attr Out image attribute.
*/
Result miiimgGetAttribute(u32 index, MiiimgImageAttribute *out_attr); Result miiimgGetAttribute(u32 index, MiiimgImageAttribute *out_attr);
/**
* @brief Loads the image data (raw RGBA8) for the specified image ID.
* @param[in] id Input image ID.
* @param[out] out_image Out iamge buffer.
* @param[in] out_image_size Out image buffer size.
* @note Server doesn't seem to check the image buffer size, but 0x40000 is the optimal size.
*/
Result miiimgLoadImage(MiiimgImageId id, void *out_image, size_t out_image_size); Result miiimgLoadImage(MiiimgImageId id, void *out_image, size_t out_image_size);