aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2024-04-09 11:38:38 +0200
committerArisotura <thetotalworm@gmail.com>2024-04-09 11:38:38 +0200
commit968bd26d854f71faf19d9de3ba454e62f1f13f58 (patch)
treeb740c2261664ddead5f8675fbcf8be6f25635446
parent6e26559cd2a225437072a67b4a55f7fd5831057d (diff)
fix generation of instance-unique MAC address when using an external firmware
-rw-r--r--src/frontend/qt_sdl/ROMManager.cpp110
-rw-r--r--src/frontend/qt_sdl/ROMManager.h2
2 files changed, 58 insertions, 54 deletions
diff --git a/src/frontend/qt_sdl/ROMManager.cpp b/src/frontend/qt_sdl/ROMManager.cpp
index 6550846..bff9e4c 100644
--- a/src/frontend/qt_sdl/ROMManager.cpp
+++ b/src/frontend/qt_sdl/ROMManager.cpp
@@ -642,7 +642,7 @@ Firmware GenerateFirmware(int type) noexcept
}
}
- CustomizeFirmware(firmware);
+ CustomizeFirmware(firmware, true);
// If we don't have Wi-fi settings to load,
// then the defaults will have already been populated by the constructor.
@@ -681,10 +681,7 @@ std::optional<Firmware> LoadFirmware(int type) noexcept
return std::nullopt;
}
- if (Config::FirmwareOverrideSettings)
- {
- CustomizeFirmware(firmware);
- }
+ CustomizeFirmware(firmware, Config::FirmwareOverrideSettings);
return firmware;
}
@@ -1120,54 +1117,59 @@ bool ParseMacAddress(void* data)
return false;
}
-void CustomizeFirmware(Firmware& firmware) noexcept
+void CustomizeFirmware(Firmware& firmware, bool overridesettings) noexcept
{
- auto& currentData = firmware.GetEffectiveUserData();
+ if (overridesettings)
+ {
+ auto &currentData = firmware.GetEffectiveUserData();
- // setting up username
- std::string orig_username = Config::FirmwareUsername;
- if (!orig_username.empty())
- { // If the frontend defines a username, take it. If not, leave the existing one.
- std::u16string username = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(orig_username);
- size_t usernameLength = std::min(username.length(), (size_t) 10);
- currentData.NameLength = usernameLength;
- memcpy(currentData.Nickname, username.data(), usernameLength * sizeof(char16_t));
- }
+ // setting up username
+ std::string orig_username = Config::FirmwareUsername;
+ if (!orig_username.empty())
+ { // If the frontend defines a username, take it. If not, leave the existing one.
+ std::u16string username = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(
+ orig_username);
+ size_t usernameLength = std::min(username.length(), (size_t) 10);
+ currentData.NameLength = usernameLength;
+ memcpy(currentData.Nickname, username.data(), usernameLength * sizeof(char16_t));
+ }
- auto language = static_cast<Firmware::Language>(Config::FirmwareLanguage);
- if (language != Firmware::Language::Reserved)
- { // If the frontend specifies a language (rather than using the existing value)...
- currentData.Settings &= ~Firmware::Language::Reserved; // ..clear the existing language...
- currentData.Settings |= language; // ...and set the new one.
- }
+ auto language = static_cast<Firmware::Language>(Config::FirmwareLanguage);
+ if (language != Firmware::Language::Reserved)
+ { // If the frontend specifies a language (rather than using the existing value)...
+ currentData.Settings &= ~Firmware::Language::Reserved; // ..clear the existing language...
+ currentData.Settings |= language; // ...and set the new one.
+ }
- // setting up color
- u8 favoritecolor = Config::FirmwareFavouriteColour;
- if (favoritecolor != 0xFF)
- {
- currentData.FavoriteColor = favoritecolor;
- }
+ // setting up color
+ u8 favoritecolor = Config::FirmwareFavouriteColour;
+ if (favoritecolor != 0xFF)
+ {
+ currentData.FavoriteColor = favoritecolor;
+ }
- u8 birthmonth = Config::FirmwareBirthdayMonth;
- if (birthmonth != 0)
- { // If the frontend specifies a birth month (rather than using the existing value)...
- currentData.BirthdayMonth = birthmonth;
- }
+ u8 birthmonth = Config::FirmwareBirthdayMonth;
+ if (birthmonth != 0)
+ { // If the frontend specifies a birth month (rather than using the existing value)...
+ currentData.BirthdayMonth = birthmonth;
+ }
- u8 birthday = Config::FirmwareBirthdayDay;
- if (birthday != 0)
- { // If the frontend specifies a birthday (rather than using the existing value)...
- currentData.BirthdayDay = birthday;
- }
+ u8 birthday = Config::FirmwareBirthdayDay;
+ if (birthday != 0)
+ { // If the frontend specifies a birthday (rather than using the existing value)...
+ currentData.BirthdayDay = birthday;
+ }
- // setup message
- std::string orig_message = Config::FirmwareMessage;
- if (!orig_message.empty())
- {
- std::u16string message = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(orig_message);
- size_t messageLength = std::min(message.length(), (size_t) 26);
- currentData.MessageLength = messageLength;
- memcpy(currentData.Message, message.data(), messageLength * sizeof(char16_t));
+ // setup message
+ std::string orig_message = Config::FirmwareMessage;
+ if (!orig_message.empty())
+ {
+ std::u16string message = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(
+ orig_message);
+ size_t messageLength = std::min(message.length(), (size_t) 26);
+ currentData.MessageLength = messageLength;
+ memcpy(currentData.Message, message.data(), messageLength * sizeof(char16_t));
+ }
}
MacAddress mac;
@@ -1176,14 +1178,16 @@ void CustomizeFirmware(Firmware& firmware) noexcept
memcpy(&mac, header.MacAddr.data(), sizeof(MacAddress));
-
- MacAddress configuredMac;
- rep = ParseMacAddress(&configuredMac);
- rep &= (configuredMac != MacAddress());
-
- if (rep)
+ if (overridesettings)
{
- mac = configuredMac;
+ MacAddress configuredMac;
+ rep = ParseMacAddress(&configuredMac);
+ rep &= (configuredMac != MacAddress());
+
+ if (rep)
+ {
+ mac = configuredMac;
+ }
}
int inst = Platform::InstanceID();
diff --git a/src/frontend/qt_sdl/ROMManager.h b/src/frontend/qt_sdl/ROMManager.h
index 6d0b81d..ae85461 100644
--- a/src/frontend/qt_sdl/ROMManager.h
+++ b/src/frontend/qt_sdl/ROMManager.h
@@ -67,7 +67,7 @@ std::optional<FATStorageArgs> GetDSiSDCardArgs() noexcept;
std::optional<FATStorage> LoadDSiSDCard() noexcept;
std::optional<FATStorageArgs> GetDLDISDCardArgs() noexcept;
std::optional<FATStorage> LoadDLDISDCard() noexcept;
-void CustomizeFirmware(Firmware& firmware) noexcept;
+void CustomizeFirmware(Firmware& firmware, bool overridesettings) noexcept;
Firmware GenerateFirmware(int type) noexcept;
/// Loads and customizes a firmware image based on the values in Config
std::optional<Firmware> LoadFirmware(int type) noexcept;