Browse Source
Merge pull request #8031 from Morph1984/cleanup-mii-please
Merge pull request #8031 from Morph1984/cleanup-mii-please
applets: Cleanup MiiEdit applet implementationnce_cpp
committed by
GitHub
19 changed files with 644 additions and 574 deletions
-
9src/core/CMakeLists.txt
-
19src/core/frontend/applets/mii.cpp
-
34src/core/frontend/applets/mii.h
-
18src/core/frontend/applets/mii_edit.cpp
-
23src/core/frontend/applets/mii_edit.h
-
100src/core/hle/service/am/applets/applet_mii.cpp
-
90src/core/hle/service/am/applets/applet_mii.h
-
139src/core/hle/service/am/applets/applet_mii_edit.cpp
-
45src/core/hle/service/am/applets/applet_mii_edit.h
-
83src/core/hle/service/am/applets/applet_mii_edit_types.h
-
28src/core/hle/service/am/applets/applets.cpp
-
8src/core/hle/service/am/applets/applets.h
-
3src/core/hle/service/mii/mii_manager.cpp
-
303src/core/hle/service/mii/mii_manager.h
-
2src/core/hle/service/mii/raw_data.h
-
307src/core/hle/service/mii/types.h
-
1src/core/hle/service/nfp/nfp.cpp
-
2src/core/hle/service/nfp/nfp.h
-
4src/yuzu/main.cpp
@ -1,19 +0,0 @@ |
|||||
// Copyright 2022 yuzu Emulator Project
|
|
||||
// Licensed under GPLv2 or any later version
|
|
||||
// Refer to the license.txt file included.
|
|
||||
|
|
||||
#include "common/logging/log.h"
|
|
||||
#include "core/frontend/applets/mii.h"
|
|
||||
|
|
||||
namespace Core::Frontend { |
|
||||
|
|
||||
MiiApplet::~MiiApplet() = default; |
|
||||
|
|
||||
void DefaultMiiApplet::ShowMii( |
|
||||
const MiiParameters& parameters, |
|
||||
const std::function<void(const Core::Frontend::MiiParameters& parameters)> callback) const { |
|
||||
LOG_INFO(Service_HID, "(STUBBED) called"); |
|
||||
callback(parameters); |
|
||||
} |
|
||||
|
|
||||
} // namespace Core::Frontend
|
|
||||
@ -1,34 +0,0 @@ |
|||||
// Copyright 2022 yuzu Emulator Project |
|
||||
// Licensed under GPLv2 or any later version |
|
||||
// Refer to the license.txt file included. |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <functional> |
|
||||
|
|
||||
#include "core/hle/service/mii/mii_manager.h" |
|
||||
|
|
||||
namespace Core::Frontend { |
|
||||
|
|
||||
struct MiiParameters { |
|
||||
bool is_editable; |
|
||||
Service::Mii::MiiInfo mii_data{}; |
|
||||
}; |
|
||||
|
|
||||
class MiiApplet { |
|
||||
public: |
|
||||
virtual ~MiiApplet(); |
|
||||
|
|
||||
virtual void ShowMii(const MiiParameters& parameters, |
|
||||
const std::function<void(const Core::Frontend::MiiParameters& parameters)> |
|
||||
callback) const = 0; |
|
||||
}; |
|
||||
|
|
||||
class DefaultMiiApplet final : public MiiApplet { |
|
||||
public: |
|
||||
void ShowMii(const MiiParameters& parameters, |
|
||||
const std::function<void(const Core::Frontend::MiiParameters& parameters)> |
|
||||
callback) const override; |
|
||||
}; |
|
||||
|
|
||||
} // namespace Core::Frontend |
|
||||
@ -0,0 +1,18 @@ |
|||||
|
// Copyright 2022 yuzu Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "common/logging/log.h"
|
||||
|
#include "core/frontend/applets/mii_edit.h"
|
||||
|
|
||||
|
namespace Core::Frontend { |
||||
|
|
||||
|
MiiEditApplet::~MiiEditApplet() = default; |
||||
|
|
||||
|
void DefaultMiiEditApplet::ShowMiiEdit(const std::function<void()>& callback) const { |
||||
|
LOG_WARNING(Service_AM, "(STUBBED) called"); |
||||
|
|
||||
|
callback(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Core::Frontend
|
||||
@ -0,0 +1,23 @@ |
|||||
|
// Copyright 2022 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <functional> |
||||
|
|
||||
|
namespace Core::Frontend { |
||||
|
|
||||
|
class MiiEditApplet { |
||||
|
public: |
||||
|
virtual ~MiiEditApplet(); |
||||
|
|
||||
|
virtual void ShowMiiEdit(const std::function<void()>& callback) const = 0; |
||||
|
}; |
||||
|
|
||||
|
class DefaultMiiEditApplet final : public MiiEditApplet { |
||||
|
public: |
||||
|
void ShowMiiEdit(const std::function<void()>& callback) const override; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Core::Frontend |
||||
@ -1,100 +0,0 @@ |
|||||
// Copyright 2022 yuzu Emulator Project
|
|
||||
// Licensed under GPLv2 or any later version
|
|
||||
// Refer to the license.txt file included.
|
|
||||
|
|
||||
#include "common/assert.h"
|
|
||||
#include "common/logging/log.h"
|
|
||||
#include "core/core.h"
|
|
||||
#include "core/frontend/applets/mii.h"
|
|
||||
#include "core/hle/service/am/am.h"
|
|
||||
#include "core/hle/service/am/applets/applet_mii.h"
|
|
||||
|
|
||||
namespace Service::AM::Applets { |
|
||||
|
|
||||
Mii::Mii(Core::System& system_, LibraryAppletMode applet_mode_, |
|
||||
const Core::Frontend::MiiApplet& frontend_) |
|
||||
: Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} |
|
||||
|
|
||||
Mii::~Mii() = default; |
|
||||
|
|
||||
void Mii::Initialize() { |
|
||||
is_complete = false; |
|
||||
|
|
||||
const auto storage = broker.PopNormalDataToApplet(); |
|
||||
ASSERT(storage != nullptr); |
|
||||
|
|
||||
const auto data = storage->GetData(); |
|
||||
ASSERT(data.size() == sizeof(MiiAppletInput)); |
|
||||
|
|
||||
std::memcpy(&input_data, data.data(), sizeof(MiiAppletInput)); |
|
||||
} |
|
||||
|
|
||||
bool Mii::TransactionComplete() const { |
|
||||
return is_complete; |
|
||||
} |
|
||||
|
|
||||
ResultCode Mii::GetStatus() const { |
|
||||
return ResultSuccess; |
|
||||
} |
|
||||
|
|
||||
void Mii::ExecuteInteractive() { |
|
||||
UNREACHABLE_MSG("Unexpected interactive applet data!"); |
|
||||
} |
|
||||
|
|
||||
void Mii::Execute() { |
|
||||
if (is_complete) { |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
const auto callback = [this](const Core::Frontend::MiiParameters& parameters) { |
|
||||
DisplayCompleted(parameters); |
|
||||
}; |
|
||||
|
|
||||
switch (input_data.applet_mode) { |
|
||||
case MiiAppletMode::ShowMiiEdit: { |
|
||||
Service::Mii::MiiManager manager; |
|
||||
Core::Frontend::MiiParameters params{ |
|
||||
.is_editable = false, |
|
||||
.mii_data = input_data.mii_char_info.mii_data, |
|
||||
}; |
|
||||
frontend.ShowMii(params, callback); |
|
||||
break; |
|
||||
} |
|
||||
case MiiAppletMode::EditMii: { |
|
||||
Service::Mii::MiiManager manager; |
|
||||
Core::Frontend::MiiParameters params{ |
|
||||
.is_editable = true, |
|
||||
.mii_data = input_data.mii_char_info.mii_data, |
|
||||
}; |
|
||||
frontend.ShowMii(params, callback); |
|
||||
break; |
|
||||
} |
|
||||
case MiiAppletMode::CreateMii: { |
|
||||
Service::Mii::MiiManager manager; |
|
||||
Core::Frontend::MiiParameters params{ |
|
||||
.is_editable = true, |
|
||||
.mii_data = manager.BuildDefault(0), |
|
||||
}; |
|
||||
frontend.ShowMii(params, callback); |
|
||||
break; |
|
||||
} |
|
||||
default: |
|
||||
UNIMPLEMENTED_MSG("Unimplemented LibAppletMiiEdit mode={:02X}!", input_data.applet_mode); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
void Mii::DisplayCompleted(const Core::Frontend::MiiParameters& parameters) { |
|
||||
is_complete = true; |
|
||||
|
|
||||
std::vector<u8> reply(sizeof(AppletOutputForCharInfoEditing)); |
|
||||
output_data = { |
|
||||
.result = ResultSuccess, |
|
||||
.mii_data = parameters.mii_data, |
|
||||
}; |
|
||||
|
|
||||
std::memcpy(reply.data(), &output_data, sizeof(AppletOutputForCharInfoEditing)); |
|
||||
broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); |
|
||||
broker.SignalStateChanged(); |
|
||||
} |
|
||||
|
|
||||
} // namespace Service::AM::Applets
|
|
||||
@ -1,90 +0,0 @@ |
|||||
// Copyright 2022 yuzu Emulator Project |
|
||||
// Licensed under GPLv2 or any later version |
|
||||
// Refer to the license.txt file included. |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <array> |
|
||||
|
|
||||
#include "core/hle/result.h" |
|
||||
#include "core/hle/service/am/applets/applets.h" |
|
||||
#include "core/hle/service/mii/mii_manager.h" |
|
||||
|
|
||||
namespace Core { |
|
||||
class System; |
|
||||
} |
|
||||
|
|
||||
namespace Service::AM::Applets { |
|
||||
|
|
||||
// This is nn::mii::AppletMode |
|
||||
enum class MiiAppletMode : u32 { |
|
||||
ShowMiiEdit = 0, |
|
||||
AppendMii = 1, |
|
||||
AppendMiiImage = 2, |
|
||||
UpdateMiiImage = 3, |
|
||||
CreateMii = 4, |
|
||||
EditMii = 5, |
|
||||
}; |
|
||||
|
|
||||
struct MiiCharInfo { |
|
||||
Service::Mii::MiiInfo mii_data{}; |
|
||||
INSERT_PADDING_BYTES(0x28); |
|
||||
}; |
|
||||
static_assert(sizeof(MiiCharInfo) == 0x80, "MiiCharInfo has incorrect size."); |
|
||||
|
|
||||
// This is nn::mii::AppletInput |
|
||||
struct MiiAppletInput { |
|
||||
s32 version{}; |
|
||||
MiiAppletMode applet_mode{}; |
|
||||
u32 special_mii_key_code{}; |
|
||||
union { |
|
||||
std::array<Common::UUID, 8> valid_uuid; |
|
||||
MiiCharInfo mii_char_info; |
|
||||
}; |
|
||||
Common::UUID used_uuid; |
|
||||
INSERT_PADDING_BYTES(0x64); |
|
||||
}; |
|
||||
static_assert(sizeof(MiiAppletInput) == 0x100, "MiiAppletInput has incorrect size."); |
|
||||
|
|
||||
// This is nn::mii::AppletOutput |
|
||||
struct MiiAppletOutput { |
|
||||
ResultCode result{ResultSuccess}; |
|
||||
s32 index{}; |
|
||||
INSERT_PADDING_BYTES(0x18); |
|
||||
}; |
|
||||
static_assert(sizeof(MiiAppletOutput) == 0x20, "MiiAppletOutput has incorrect size."); |
|
||||
|
|
||||
// This is nn::mii::AppletOutputForCharInfoEditing |
|
||||
struct AppletOutputForCharInfoEditing { |
|
||||
ResultCode result{ResultSuccess}; |
|
||||
Service::Mii::MiiInfo mii_data{}; |
|
||||
INSERT_PADDING_BYTES(0x24); |
|
||||
}; |
|
||||
static_assert(sizeof(AppletOutputForCharInfoEditing) == 0x80, |
|
||||
"AppletOutputForCharInfoEditing has incorrect size."); |
|
||||
|
|
||||
class Mii final : public Applet { |
|
||||
public: |
|
||||
explicit Mii(Core::System& system_, LibraryAppletMode applet_mode_, |
|
||||
const Core::Frontend::MiiApplet& frontend_); |
|
||||
~Mii() override; |
|
||||
|
|
||||
void Initialize() override; |
|
||||
|
|
||||
bool TransactionComplete() const override; |
|
||||
ResultCode GetStatus() const override; |
|
||||
void ExecuteInteractive() override; |
|
||||
void Execute() override; |
|
||||
|
|
||||
void DisplayCompleted(const Core::Frontend::MiiParameters& parameters); |
|
||||
|
|
||||
private: |
|
||||
const Core::Frontend::MiiApplet& frontend; |
|
||||
MiiAppletInput input_data{}; |
|
||||
AppletOutputForCharInfoEditing output_data{}; |
|
||||
|
|
||||
bool is_complete = false; |
|
||||
Core::System& system; |
|
||||
}; |
|
||||
|
|
||||
} // namespace Service::AM::Applets |
|
||||
@ -0,0 +1,139 @@ |
|||||
|
// Copyright 2022 yuzu Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "common/assert.h"
|
||||
|
#include "common/logging/log.h"
|
||||
|
#include "core/core.h"
|
||||
|
#include "core/frontend/applets/mii_edit.h"
|
||||
|
#include "core/hle/service/am/am.h"
|
||||
|
#include "core/hle/service/am/applets/applet_mii_edit.h"
|
||||
|
#include "core/hle/service/mii/mii_manager.h"
|
||||
|
|
||||
|
namespace Service::AM::Applets { |
||||
|
|
||||
|
MiiEdit::MiiEdit(Core::System& system_, LibraryAppletMode applet_mode_, |
||||
|
const Core::Frontend::MiiEditApplet& frontend_) |
||||
|
: Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} |
||||
|
|
||||
|
MiiEdit::~MiiEdit() = default; |
||||
|
|
||||
|
void MiiEdit::Initialize() { |
||||
|
// Note: MiiEdit is not initialized with common arguments.
|
||||
|
// Instead, it is initialized by an AppletInput storage with size 0x100 bytes.
|
||||
|
// Do NOT call Applet::Initialize() here.
|
||||
|
|
||||
|
const auto storage = broker.PopNormalDataToApplet(); |
||||
|
ASSERT(storage != nullptr); |
||||
|
|
||||
|
const auto applet_input_data = storage->GetData(); |
||||
|
ASSERT(applet_input_data.size() >= sizeof(MiiEditAppletInputCommon)); |
||||
|
|
||||
|
std::memcpy(&applet_input_common, applet_input_data.data(), sizeof(MiiEditAppletInputCommon)); |
||||
|
|
||||
|
LOG_INFO(Service_AM, |
||||
|
"Initializing MiiEdit Applet with MiiEditAppletVersion={} and MiiEditAppletMode={}", |
||||
|
applet_input_common.version, applet_input_common.applet_mode); |
||||
|
|
||||
|
switch (applet_input_common.version) { |
||||
|
case MiiEditAppletVersion::Version3: |
||||
|
ASSERT(applet_input_data.size() == |
||||
|
sizeof(MiiEditAppletInputCommon) + sizeof(MiiEditAppletInputV3)); |
||||
|
std::memcpy(&applet_input_v3, applet_input_data.data() + sizeof(MiiEditAppletInputCommon), |
||||
|
sizeof(MiiEditAppletInputV3)); |
||||
|
break; |
||||
|
case MiiEditAppletVersion::Version4: |
||||
|
ASSERT(applet_input_data.size() == |
||||
|
sizeof(MiiEditAppletInputCommon) + sizeof(MiiEditAppletInputV4)); |
||||
|
std::memcpy(&applet_input_v4, applet_input_data.data() + sizeof(MiiEditAppletInputCommon), |
||||
|
sizeof(MiiEditAppletInputV4)); |
||||
|
break; |
||||
|
default: |
||||
|
UNIMPLEMENTED_MSG("Unknown MiiEditAppletVersion={} with size={}", |
||||
|
applet_input_common.version, applet_input_data.size()); |
||||
|
ASSERT(applet_input_data.size() >= |
||||
|
sizeof(MiiEditAppletInputCommon) + sizeof(MiiEditAppletInputV4)); |
||||
|
std::memcpy(&applet_input_v4, applet_input_data.data() + sizeof(MiiEditAppletInputCommon), |
||||
|
sizeof(MiiEditAppletInputV4)); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
bool MiiEdit::TransactionComplete() const { |
||||
|
return is_complete; |
||||
|
} |
||||
|
|
||||
|
ResultCode MiiEdit::GetStatus() const { |
||||
|
return ResultSuccess; |
||||
|
} |
||||
|
|
||||
|
void MiiEdit::ExecuteInteractive() { |
||||
|
UNREACHABLE_MSG("Attempted to call interactive execution on non-interactive applet."); |
||||
|
} |
||||
|
|
||||
|
void MiiEdit::Execute() { |
||||
|
if (is_complete) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// This is a default stub for each of the MiiEdit applet modes.
|
||||
|
switch (applet_input_common.applet_mode) { |
||||
|
case MiiEditAppletMode::ShowMiiEdit: |
||||
|
case MiiEditAppletMode::AppendMii: |
||||
|
case MiiEditAppletMode::AppendMiiImage: |
||||
|
case MiiEditAppletMode::UpdateMiiImage: |
||||
|
MiiEditOutput(MiiEditResult::Success, 0); |
||||
|
break; |
||||
|
case MiiEditAppletMode::CreateMii: |
||||
|
case MiiEditAppletMode::EditMii: { |
||||
|
Service::Mii::MiiManager mii_manager; |
||||
|
|
||||
|
const MiiEditCharInfo char_info{ |
||||
|
.mii_info{applet_input_common.applet_mode == MiiEditAppletMode::EditMii |
||||
|
? applet_input_v4.char_info.mii_info |
||||
|
: mii_manager.BuildDefault(0)}, |
||||
|
}; |
||||
|
|
||||
|
MiiEditOutputForCharInfoEditing(MiiEditResult::Success, char_info); |
||||
|
break; |
||||
|
} |
||||
|
default: |
||||
|
UNIMPLEMENTED_MSG("Unknown MiiEditAppletMode={}", applet_input_common.applet_mode); |
||||
|
|
||||
|
MiiEditOutput(MiiEditResult::Success, 0); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void MiiEdit::MiiEditOutput(MiiEditResult result, s32 index) { |
||||
|
const MiiEditAppletOutput applet_output{ |
||||
|
.result{result}, |
||||
|
.index{index}, |
||||
|
}; |
||||
|
|
||||
|
std::vector<u8> out_data(sizeof(MiiEditAppletOutput)); |
||||
|
std::memcpy(out_data.data(), &applet_output, sizeof(MiiEditAppletOutput)); |
||||
|
|
||||
|
is_complete = true; |
||||
|
|
||||
|
broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); |
||||
|
broker.SignalStateChanged(); |
||||
|
} |
||||
|
|
||||
|
void MiiEdit::MiiEditOutputForCharInfoEditing(MiiEditResult result, |
||||
|
const MiiEditCharInfo& char_info) { |
||||
|
const MiiEditAppletOutputForCharInfoEditing applet_output{ |
||||
|
.result{result}, |
||||
|
.char_info{char_info}, |
||||
|
}; |
||||
|
|
||||
|
std::vector<u8> out_data(sizeof(MiiEditAppletOutputForCharInfoEditing)); |
||||
|
std::memcpy(out_data.data(), &applet_output, sizeof(MiiEditAppletOutputForCharInfoEditing)); |
||||
|
|
||||
|
is_complete = true; |
||||
|
|
||||
|
broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(out_data))); |
||||
|
broker.SignalStateChanged(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Service::AM::Applets
|
||||
@ -0,0 +1,45 @@ |
|||||
|
// Copyright 2022 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "core/hle/result.h" |
||||
|
#include "core/hle/service/am/applets/applet_mii_edit_types.h" |
||||
|
#include "core/hle/service/am/applets/applets.h" |
||||
|
|
||||
|
namespace Core { |
||||
|
class System; |
||||
|
} // namespace Core |
||||
|
|
||||
|
namespace Service::AM::Applets { |
||||
|
|
||||
|
class MiiEdit final : public Applet { |
||||
|
public: |
||||
|
explicit MiiEdit(Core::System& system_, LibraryAppletMode applet_mode_, |
||||
|
const Core::Frontend::MiiEditApplet& frontend_); |
||||
|
~MiiEdit() override; |
||||
|
|
||||
|
void Initialize() override; |
||||
|
|
||||
|
bool TransactionComplete() const override; |
||||
|
ResultCode GetStatus() const override; |
||||
|
void ExecuteInteractive() override; |
||||
|
void Execute() override; |
||||
|
|
||||
|
void MiiEditOutput(MiiEditResult result, s32 index); |
||||
|
|
||||
|
void MiiEditOutputForCharInfoEditing(MiiEditResult result, const MiiEditCharInfo& char_info); |
||||
|
|
||||
|
private: |
||||
|
const Core::Frontend::MiiEditApplet& frontend; |
||||
|
Core::System& system; |
||||
|
|
||||
|
MiiEditAppletInputCommon applet_input_common{}; |
||||
|
MiiEditAppletInputV3 applet_input_v3{}; |
||||
|
MiiEditAppletInputV4 applet_input_v4{}; |
||||
|
|
||||
|
bool is_complete{false}; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Service::AM::Applets |
||||
@ -0,0 +1,83 @@ |
|||||
|
// Copyright 2022 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <array> |
||||
|
|
||||
|
#include "common/common_funcs.h" |
||||
|
#include "common/common_types.h" |
||||
|
#include "core/hle/service/mii/types.h" |
||||
|
|
||||
|
namespace Service::AM::Applets { |
||||
|
|
||||
|
enum class MiiEditAppletVersion : s32 { |
||||
|
Version3 = 0x3, // 1.0.0 - 10.1.1 |
||||
|
Version4 = 0x4, // 10.2.0+ |
||||
|
}; |
||||
|
|
||||
|
// This is nn::mii::AppletMode |
||||
|
enum class MiiEditAppletMode : u32 { |
||||
|
ShowMiiEdit = 0, |
||||
|
AppendMii = 1, |
||||
|
AppendMiiImage = 2, |
||||
|
UpdateMiiImage = 3, |
||||
|
CreateMii = 4, |
||||
|
EditMii = 5, |
||||
|
}; |
||||
|
|
||||
|
enum class MiiEditResult : u32 { |
||||
|
Success, |
||||
|
Cancel, |
||||
|
}; |
||||
|
|
||||
|
struct MiiEditCharInfo { |
||||
|
Service::Mii::MiiInfo mii_info{}; |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditCharInfo) == 0x58, "MiiEditCharInfo has incorrect size."); |
||||
|
|
||||
|
struct MiiEditAppletInputCommon { |
||||
|
MiiEditAppletVersion version{}; |
||||
|
MiiEditAppletMode applet_mode{}; |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditAppletInputCommon) == 0x8, |
||||
|
"MiiEditAppletInputCommon has incorrect size."); |
||||
|
|
||||
|
struct MiiEditAppletInputV3 { |
||||
|
u32 special_mii_key_code{}; |
||||
|
std::array<Common::UUID, 8> valid_uuids{}; |
||||
|
Common::UUID used_uuid{}; |
||||
|
INSERT_PADDING_BYTES(0x64); |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditAppletInputV3) == 0x100 - sizeof(MiiEditAppletInputCommon), |
||||
|
"MiiEditAppletInputV3 has incorrect size."); |
||||
|
|
||||
|
struct MiiEditAppletInputV4 { |
||||
|
u32 special_mii_key_code{}; |
||||
|
MiiEditCharInfo char_info{}; |
||||
|
INSERT_PADDING_BYTES(0x28); |
||||
|
Common::UUID used_uuid{}; |
||||
|
INSERT_PADDING_BYTES(0x64); |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditAppletInputV4) == 0x100 - sizeof(MiiEditAppletInputCommon), |
||||
|
"MiiEditAppletInputV4 has incorrect size."); |
||||
|
|
||||
|
// This is nn::mii::AppletOutput |
||||
|
struct MiiEditAppletOutput { |
||||
|
MiiEditResult result{}; |
||||
|
s32 index{}; |
||||
|
INSERT_PADDING_BYTES(0x18); |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditAppletOutput) == 0x20, "MiiEditAppletOutput has incorrect size."); |
||||
|
|
||||
|
// This is nn::mii::AppletOutputForCharInfoEditing |
||||
|
struct MiiEditAppletOutputForCharInfoEditing { |
||||
|
MiiEditResult result{}; |
||||
|
MiiEditCharInfo char_info{}; |
||||
|
INSERT_PADDING_BYTES(0x24); |
||||
|
}; |
||||
|
static_assert(sizeof(MiiEditAppletOutputForCharInfoEditing) == 0x80, |
||||
|
"MiiEditAppletOutputForCharInfoEditing has incorrect size."); |
||||
|
|
||||
|
} // namespace Service::AM::Applets |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue