Move MiiData to its own namespace and add ChecksummedMiiData (#6824)
* Move mii to own namespace and add checksummed mii data * Fix compile issues * Make mii classes trivial and add cast operator * Fix Android side * Add new line at the end of files. * Make miidata a struct and crc16 a u32_be as per switch code. * Apply suggestions * Change back crc to u16 and set padding to 0.
This commit is contained in:
@@ -71,9 +71,6 @@ void MiiSelector::Update() {
|
||||
const MiiSelectorData& data = frontend_applet->ReceiveData();
|
||||
result.return_code = data.return_code;
|
||||
result.selected_mii_data = data.mii;
|
||||
// Calculate the checksum of the selected Mii, see https://www.3dbrew.org/wiki/Mii#Checksum
|
||||
result.mii_data_checksum = boost::crc<16, 0x1021, 0, 0, false, false>(
|
||||
&result.selected_mii_data, sizeof(HLE::Applets::MiiData) + sizeof(result.unknown1));
|
||||
result.selected_guest_mii_index = 0xFFFFFFFF;
|
||||
|
||||
// TODO(Subv): We're finalizing the applet immediately after it's started,
|
||||
@@ -92,29 +89,31 @@ MiiResult MiiSelector::GetStandardMiiResult() {
|
||||
// This data was obtained by writing the returned buffer in AppletManager::GlanceParameter of
|
||||
// the LLEd Mii picker of version system version 11.8.0 to a file and then matching the values
|
||||
// to the members of the MiiResult struct
|
||||
MiiData mii_data;
|
||||
mii_data.mii_id = 0x03001030;
|
||||
Mii::MiiData mii_data;
|
||||
mii_data.magic = 0x03;
|
||||
mii_data.mii_options.raw = 0x00;
|
||||
mii_data.mii_pos.raw = 0x10;
|
||||
mii_data.console_identity.raw = 0x30;
|
||||
mii_data.system_id = 0xD285B6B300C8850A;
|
||||
mii_data.specialness_and_creation_date = 0x98391EE4;
|
||||
mii_data.creator_mac = {0x40, 0xF4, 0x07, 0xB7, 0x37, 0x10};
|
||||
mii_data.padding = 0x0;
|
||||
mii_data.mii_information = 0xA600;
|
||||
mii_data.mii_id = 0x98391EE4;
|
||||
mii_data.mac = {0x40, 0xF4, 0x07, 0xB7, 0x37, 0x10};
|
||||
mii_data.pad = 0x0000;
|
||||
mii_data.mii_details.raw = 0xA600;
|
||||
mii_data.mii_name = {'C', 'i', 't', 'r', 'a', 0x0, 0x0, 0x0, 0x0, 0x0};
|
||||
mii_data.width_height = 0x4040;
|
||||
mii_data.appearance_bits1.raw = 0x0;
|
||||
mii_data.appearance_bits2.raw = 0x0;
|
||||
mii_data.height = 0x40;
|
||||
mii_data.width = 0x40;
|
||||
mii_data.face_style.raw = 0x00;
|
||||
mii_data.face_details.raw = 0x00;
|
||||
mii_data.hair_style = 0x21;
|
||||
mii_data.appearance_bits3.hair_color.Assign(0x1);
|
||||
mii_data.appearance_bits3.flip_hair.Assign(0x0);
|
||||
mii_data.unknown1 = 0x02684418;
|
||||
mii_data.appearance_bits4.eyebrow_style.Assign(0x6);
|
||||
mii_data.appearance_bits4.eyebrow_color.Assign(0x1);
|
||||
mii_data.appearance_bits5.eyebrow_scale.Assign(0x4);
|
||||
mii_data.appearance_bits5.eyebrow_yscale.Assign(0x3);
|
||||
mii_data.appearance_bits6 = 0x4614;
|
||||
mii_data.unknown2 = 0x81121768;
|
||||
mii_data.allow_copying = 0x0D;
|
||||
mii_data.unknown3 = {0x0, 0x0, 0x29, 0x0, 0x52, 0x48, 0x50};
|
||||
mii_data.hair_details.raw = 0x01;
|
||||
mii_data.eye_details.raw = 0x02684418;
|
||||
mii_data.eyebrow_details.raw = 0x26344614;
|
||||
mii_data.nose_details.raw = 0x8112;
|
||||
mii_data.mouth_details.raw = 0x1768;
|
||||
mii_data.mustache_details.raw = 0x0D00;
|
||||
mii_data.beard_details.raw = 0x0029;
|
||||
mii_data.glasses_details.raw = 0x0052;
|
||||
mii_data.mole_details.raw = 0x4850;
|
||||
mii_data.author_name = {'f', 'l', 'T', 'o', 'b', 'i', 0x0, 0x0, 0x0, 0x0};
|
||||
|
||||
MiiResult result;
|
||||
@@ -122,8 +121,6 @@ MiiResult MiiSelector::GetStandardMiiResult() {
|
||||
result.is_guest_mii_selected = 0x0;
|
||||
result.selected_guest_mii_index = 0xFFFFFFFF;
|
||||
result.selected_mii_data = mii_data;
|
||||
result.unknown1 = 0x0;
|
||||
result.mii_data_checksum = 0x056C;
|
||||
result.guest_mii_name.fill(0x0);
|
||||
|
||||
return result;
|
||||
|
@@ -9,6 +9,7 @@
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/applets/applet.h"
|
||||
#include "core/hle/kernel/shared_memory.h"
|
||||
#include "core/hle/mii.h"
|
||||
#include "core/hle/result.h"
|
||||
#include "core/hle/service/apt/apt.h"
|
||||
|
||||
@@ -44,65 +45,11 @@ ASSERT_REG_POSITION(initially_selected_mii_index, 0x90);
|
||||
ASSERT_REG_POSITION(guest_mii_whitelist, 0x94);
|
||||
#undef ASSERT_REG_POSITION
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct MiiData {
|
||||
u32_be mii_id;
|
||||
u64_be system_id;
|
||||
u32_be specialness_and_creation_date;
|
||||
std::array<u8, 0x6> creator_mac;
|
||||
u16_be padding;
|
||||
u16_be mii_information;
|
||||
std::array<u16_le, 0xA> mii_name;
|
||||
u16_be width_height;
|
||||
union {
|
||||
u8 raw;
|
||||
|
||||
BitField<0, 1, u8> disable_sharing;
|
||||
BitField<1, 4, u8> face_shape;
|
||||
BitField<5, 3, u8> skin_color;
|
||||
} appearance_bits1;
|
||||
union {
|
||||
u8 raw;
|
||||
|
||||
BitField<0, 4, u8> wrinkles;
|
||||
BitField<4, 4, u8> makeup;
|
||||
} appearance_bits2;
|
||||
u8 hair_style;
|
||||
union {
|
||||
u8 raw;
|
||||
|
||||
BitField<0, 3, u8> hair_color;
|
||||
BitField<3, 1, u8> flip_hair;
|
||||
} appearance_bits3;
|
||||
u32_be unknown1;
|
||||
union {
|
||||
u8 raw;
|
||||
|
||||
BitField<0, 5, u8> eyebrow_style;
|
||||
BitField<5, 3, u8> eyebrow_color;
|
||||
} appearance_bits4;
|
||||
union {
|
||||
u8 raw;
|
||||
|
||||
BitField<0, 4, u8> eyebrow_scale;
|
||||
BitField<4, 3, u8> eyebrow_yscale;
|
||||
} appearance_bits5;
|
||||
u16_be appearance_bits6;
|
||||
u32_be unknown2;
|
||||
u8 allow_copying;
|
||||
std::array<u8, 0x7> unknown3;
|
||||
std::array<u16_le, 0xA> author_name;
|
||||
};
|
||||
static_assert(sizeof(MiiData) == 0x5C, "MiiData structure has incorrect size");
|
||||
#pragma pack(pop)
|
||||
|
||||
struct MiiResult {
|
||||
u32_be return_code;
|
||||
u32_be is_guest_mii_selected;
|
||||
u32_be selected_guest_mii_index;
|
||||
MiiData selected_mii_data;
|
||||
u16_be unknown1;
|
||||
u16_be mii_data_checksum;
|
||||
Mii::ChecksummedMiiData selected_mii_data;
|
||||
std::array<u16_le, 0xC> guest_mii_name;
|
||||
};
|
||||
static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size");
|
||||
|
Reference in New Issue
Block a user