From bc939df69ccd706cfd48eb55c2ed74b1ebfeafc4 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 24 Aug 2021 08:02:04 -0400 Subject: [PATCH] NWC24Config: Make creation stage an enum class Makes the enum strongly typed instead of interacting with a raw u32 value. While we're at it, we can add helpers to the NWC24Config to make using code poke at the internals of the class a little bit less and also make the querying a little nicer to read. --- .../Core/Core/IOS/Network/KD/NWC24Config.cpp | 10 ++++---- Source/Core/Core/IOS/Network/KD/NWC24Config.h | 24 +++++++++++-------- .../Core/Core/IOS/Network/KD/NetKDRequest.cpp | 10 ++++---- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/Source/Core/Core/IOS/Network/KD/NWC24Config.cpp b/Source/Core/Core/IOS/Network/KD/NWC24Config.cpp index 4d7264ff27..794b1ff9be 100644 --- a/Source/Core/Core/IOS/Network/KD/NWC24Config.cpp +++ b/Source/Core/Core/IOS/Network/KD/NWC24Config.cpp @@ -60,7 +60,7 @@ void NWC24Config::ResetConfig() SetMagic(0x57634366); SetUnk(8); - SetCreationStage(NWC24_IDCS_INITIAL); + SetCreationStage(NWC24CreationStage::Initial); SetEnableBooting(0); SetEmail("@wii.com"); @@ -165,14 +165,14 @@ void NWC24Config::SetChecksum(u32 checksum) m_data.checksum = Common::swap32(checksum); } -u32 NWC24Config::CreationStage() const +NWC24CreationStage NWC24Config::CreationStage() const { - return Common::swap32(m_data.creation_stage); + return NWC24CreationStage(Common::swap32(u32(m_data.creation_stage))); } -void NWC24Config::SetCreationStage(u32 creation_stage) +void NWC24Config::SetCreationStage(NWC24CreationStage creation_stage) { - m_data.creation_stage = Common::swap32(creation_stage); + m_data.creation_stage = NWC24CreationStage(Common::swap32(u32(creation_stage))); } u32 NWC24Config::EnableBooting() const diff --git a/Source/Core/Core/IOS/Network/KD/NWC24Config.h b/Source/Core/Core/IOS/Network/KD/NWC24Config.h index 5f7dc08d73..82fef35e8e 100644 --- a/Source/Core/Core/IOS/Network/KD/NWC24Config.h +++ b/Source/Core/Core/IOS/Network/KD/NWC24Config.h @@ -25,16 +25,16 @@ enum ErrorCode : s32 WC24_ERR_ID_NOT_REGISTERED = -44, }; +enum class NWC24CreationStage : u32 +{ + Initial = 0, + Generated = 1, + Registered = 2 +}; + class NWC24Config final { public: - enum - { - NWC24_IDCS_INITIAL = 0, - NWC24_IDCS_GENERATED = 1, - NWC24_IDCS_REGISTERED = 2 - }; - enum { URL_COUNT = 0x05, @@ -65,8 +65,12 @@ public: u32 Checksum() const; void SetChecksum(u32 checksum); - u32 CreationStage() const; - void SetCreationStage(u32 creation_stage); + NWC24CreationStage CreationStage() const; + void SetCreationStage(NWC24CreationStage creation_stage); + + bool IsCreated() const { return CreationStage() == NWC24CreationStage::Initial; } + bool IsGenerated() const { return CreationStage() == NWC24CreationStage::Generated; } + bool IsRegistered() const { return CreationStage() == NWC24CreationStage::Registered; } u32 EnableBooting() const; void SetEnableBooting(u32 enable_booting); @@ -85,7 +89,7 @@ private: u32 unk_04; // must be 8 u64 nwc24_id; u32 id_generation; - u32 creation_stage; // 0:not_generated; 1:generated; 2:registered + NWC24CreationStage creation_stage; char email[MAX_EMAIL_LENGTH]; char paswd[MAX_PASSWORD_LENGTH]; char mlchkid[0x24]; diff --git a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp index d5980423f5..986633ed76 100644 --- a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp +++ b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp @@ -228,7 +228,7 @@ std::optional NetKDRequestDevice::IOCtl(const IOCtlRequest& request) case IOCTL_NWC24_REQUEST_GENERATED_USER_ID: // (Input: none, Output: 32 bytes) INFO_LOG_FMT(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_GENERATED_USER_ID"); - if (config.CreationStage() == NWC24::NWC24Config::NWC24_IDCS_INITIAL) + if (config.IsCreated()) { const std::string settings_file_path = Common::GetTitleDataPath(Titles::SYSTEM_MENU) + "/" WII_SETTING; @@ -258,7 +258,7 @@ std::optional NetKDRequestDevice::IOCtl(const IOCtlRequest& request) const s32 ret = NWC24MakeUserID(&user_id, hollywood_id, id_ctr, hardware_model, area_code); config.SetId(user_id); config.IncrementIdGen(); - config.SetCreationStage(NWC24::NWC24Config::NWC24_IDCS_GENERATED); + config.SetCreationStage(NWC24::NWC24CreationStage::Generated); config.WriteConfig(); WriteReturnValue(ret, request.buffer_out); @@ -268,16 +268,16 @@ std::optional NetKDRequestDevice::IOCtl(const IOCtlRequest& request) WriteReturnValue(NWC24::WC24_ERR_FATAL, request.buffer_out); } } - else if (config.CreationStage() == NWC24::NWC24Config::NWC24_IDCS_GENERATED) + else if (config.IsGenerated()) { WriteReturnValue(NWC24::WC24_ERR_ID_GENERATED, request.buffer_out); } - else if (config.CreationStage() == NWC24::NWC24Config::NWC24_IDCS_REGISTERED) + else if (config.IsRegistered()) { WriteReturnValue(NWC24::WC24_ERR_ID_REGISTERED, request.buffer_out); } Memory::Write_U64(config.Id(), request.buffer_out + 4); - Memory::Write_U32(config.CreationStage(), request.buffer_out + 0xC); + Memory::Write_U32(u32(config.CreationStage()), request.buffer_out + 0xC); break; case IOCTL_NWC24_GET_SCHEDULER_STAT: