Fix formating and add further functionality
This commit is contained in:
parent
134e022568
commit
d8cc4a1dc8
@ -48,9 +48,6 @@ typedef struct
|
||||
///< applet.
|
||||
} MiiSelectorConf;
|
||||
|
||||
/// Size of the data describing a single Mii
|
||||
#define MIISELECTOR_MIIDATA_SIZE 0x5c
|
||||
|
||||
/// Maximum length of the localized name of a Guest Mii
|
||||
#define MIISELECTOR_GUESTMII_NAME_LEN 12
|
||||
|
||||
@ -73,6 +70,15 @@ typedef struct
|
||||
///< string). Zeroed otherwise.
|
||||
} MiiSelectorReturn;
|
||||
|
||||
/// AppletEd options
|
||||
enum
|
||||
{
|
||||
MIISELECTOR_CANCEL = BIT(0), ///< Show the cancel button
|
||||
MIISELECTOR_GUESTS = BIT(1), ///< Make Guets Miis selectable
|
||||
MIISELECTOR_TOP = BIT(2), ///< Show AppletEd on top screen
|
||||
MIISELECTOR_GUESTSTART = BIT(3), ///< Start on guest page
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Launch the Mii selector library applet
|
||||
*
|
||||
@ -84,17 +90,49 @@ Result miiSelectorLaunch(const MiiSelectorConf *conf, MiiSelectorReturn* returnb
|
||||
/**
|
||||
* @brief Sets title of the Mii selector library applet
|
||||
*
|
||||
* @param conf Pointer to the current Mii selector configuration
|
||||
* @param text Title text
|
||||
* @param conf Pointer to miiSelector configuration
|
||||
* @param text Title text of Mii selector
|
||||
*/
|
||||
void miiSelectorSetTitle(MiiSelectorConf *conf, const char* text);
|
||||
|
||||
/**
|
||||
* @brief Specifies which special options are enabled in the Mii selector
|
||||
*
|
||||
* @param conf Pointer to miiSelector configuration
|
||||
* @param options Options bitmask
|
||||
*/
|
||||
void miiSelectorSetOptions(MiiSelectorConf *conf, char options);
|
||||
|
||||
/**
|
||||
* @brief Specifies which mii the cursor should start from
|
||||
*
|
||||
* @param conf Pointer to miiSelector configuration
|
||||
* @param index Indexed number of the Mii that the cursor will start on.
|
||||
* If there is no mii with that index, the the cursor will be at index 0.
|
||||
*/
|
||||
void miiSelectorSetIndex(MiiSelectorConf *conf, u32 index);
|
||||
|
||||
/**
|
||||
* @brief Get Mii name
|
||||
*
|
||||
* @param returnbuf Pointer to miiSelector return
|
||||
* @param out String containing a Mii's name (a length of at least 36 is expected)
|
||||
*/
|
||||
void miiSelectorReturnGetName(const MiiSelectorReturn *returnbuf, char* out);
|
||||
|
||||
/**
|
||||
* @brief Get Mii Author
|
||||
*
|
||||
* @param returnbuf Pointer to miiSelector return
|
||||
* @param out String containing a Mii's author (a length of at least 30 is expected)
|
||||
*/
|
||||
void miiSelectorReturnGetAuthor(const MiiSelectorReturn *returnbuf, char* out);
|
||||
|
||||
/**
|
||||
* @brief Verifies that the Mii data returned from the applet matches its
|
||||
* checksum
|
||||
*
|
||||
* @param returnbuffer Buffer filled by Mii selector applet
|
||||
*
|
||||
* @return `true` if `returnbuf->checksum` is the same as the one computed from `returnbuf`
|
||||
*/
|
||||
bool miiSelectorChecksumIsValid(const MiiSelectorReturn *returnbuf);
|
||||
|
@ -18,13 +18,30 @@ Result miiSelectorLaunch(const MiiSelectorConf *conf, MiiSelectorReturn *returnb
|
||||
ctx.config.magic = MIISELECTOR_MAGIC;
|
||||
|
||||
Result ret = aptLaunchLibraryApplet(APPID_APPLETED, &ctx.config, sizeof(MiiSelectorConf), 0);
|
||||
if(R_SUCCEEDED(ret) && returnbuf) {
|
||||
if(R_SUCCEEDED(ret) && returnbuf)
|
||||
memcpy(returnbuf, &ctx.ret, sizeof(MiiSelectorReturn));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void miiSelectorConvertToUTF8(char* out, const u16* in, int max)
|
||||
{
|
||||
if (!in || !*in)
|
||||
{
|
||||
out[0] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
ssize_t units = utf16_to_utf8((uint8_t*)out, in, max);
|
||||
if (units < 0)
|
||||
{
|
||||
out[0] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
out[units] = 0;
|
||||
}
|
||||
|
||||
static void miiSelectorConvertToUTF16(u16* out, const char* in, int max)
|
||||
{
|
||||
if (!in || !*in)
|
||||
@ -48,26 +65,58 @@ void miiSelectorSetTitle(MiiSelectorConf *conf, const char* text)
|
||||
miiSelectorConvertToUTF16(conf->title, text, MIISELECTOR_TITLE_LEN);
|
||||
}
|
||||
|
||||
static const char miiSelectorOptions[] =
|
||||
{
|
||||
offsetof(MiiSelectorConf, enable_cancel_button),
|
||||
offsetof(MiiSelectorConf, enable_selecting_guests),
|
||||
offsetof(MiiSelectorConf, show_on_top_screen),
|
||||
offsetof(MiiSelectorConf, show_guest_page),
|
||||
};
|
||||
|
||||
void miiSelectorSetOptions(MiiSelectorConf *conf, char options)
|
||||
{
|
||||
for (int i = 0; i < (sizeof(miiSelectorOptions)/sizeof(char)); i ++)
|
||||
*((u8*)conf + miiSelectorOptions[i]) = (options & BIT(i)) ? 1 : 0;
|
||||
}
|
||||
|
||||
void miiSelectorSetIndex(MiiSelectorConf *conf, u32 index) {
|
||||
conf->initial_index = index;
|
||||
}
|
||||
|
||||
void miiSelectorReturnGetName(const MiiSelectorReturn *returnbuf, char* out)
|
||||
{
|
||||
if (!out)
|
||||
return;
|
||||
|
||||
if (returnbuf->guest_mii_was_selected)
|
||||
miiSelectorConvertToUTF8(out, returnbuf->guest_mii_name, 36);
|
||||
else
|
||||
miiSelectorConvertToUTF8(out, returnbuf->mii.mii_name, 36);
|
||||
}
|
||||
|
||||
void miiSelectorReturnGetAuthor(const MiiSelectorReturn *returnbuf, char* out)
|
||||
{
|
||||
miiSelectorConvertToUTF8(out, returnbuf->mii.author_name, 30);
|
||||
}
|
||||
|
||||
static u16 crc16_ccitt(void const *buf, size_t len, uint32_t starting_val)
|
||||
{
|
||||
if(buf == NULL) {
|
||||
if(buf == NULL)
|
||||
return -1;
|
||||
}
|
||||
|
||||
u8 const *cbuf = buf;
|
||||
u32 crc = starting_val;
|
||||
|
||||
static const u16 POLY = 0x1021;
|
||||
|
||||
for(size_t i = 0; i < len; i++) {
|
||||
for(int bit = 7; bit >= 0; bit--) {
|
||||
for(size_t i = 0; i < len; i++)
|
||||
{
|
||||
for(int bit = 7; bit >= 0; bit--)
|
||||
crc = ((crc << 1) | ((cbuf[i] >> bit) & 0x1)) ^ (crc & 0x8000 ? POLY : 0);
|
||||
}
|
||||
}
|
||||
|
||||
for(int _ = 0; _ < 16; _++) {
|
||||
for(int _ = 0; _ < 16; _++)
|
||||
crc = (crc << 1) ^ (crc & 0x8000 ? POLY : 0);
|
||||
}
|
||||
|
||||
return (u16)(crc & 0xffff);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user