fix generation of instance-unique MAC address when using an external firmware
This commit is contained in:
parent
6e26559cd2
commit
968bd26d85
|
@ -642,7 +642,7 @@ Firmware GenerateFirmware(int type) noexcept
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomizeFirmware(firmware);
|
CustomizeFirmware(firmware, true);
|
||||||
|
|
||||||
// If we don't have Wi-fi settings to load,
|
// If we don't have Wi-fi settings to load,
|
||||||
// then the defaults will have already been populated by the constructor.
|
// 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;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config::FirmwareOverrideSettings)
|
CustomizeFirmware(firmware, Config::FirmwareOverrideSettings);
|
||||||
{
|
|
||||||
CustomizeFirmware(firmware);
|
|
||||||
}
|
|
||||||
|
|
||||||
return firmware;
|
return firmware;
|
||||||
}
|
}
|
||||||
|
@ -1120,54 +1117,59 @@ bool ParseMacAddress(void* data)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CustomizeFirmware(Firmware& firmware) noexcept
|
void CustomizeFirmware(Firmware& firmware, bool overridesettings) noexcept
|
||||||
{
|
{
|
||||||
auto& currentData = firmware.GetEffectiveUserData();
|
if (overridesettings)
|
||||||
|
|
||||||
// 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.
|
|
||||||
}
|
|
||||||
|
|
||||||
// setting up color
|
|
||||||
u8 favoritecolor = Config::FirmwareFavouriteColour;
|
|
||||||
if (favoritecolor != 0xFF)
|
|
||||||
{
|
{
|
||||||
currentData.FavoriteColor = favoritecolor;
|
auto ¤tData = firmware.GetEffectiveUserData();
|
||||||
}
|
|
||||||
|
|
||||||
u8 birthmonth = Config::FirmwareBirthdayMonth;
|
// setting up username
|
||||||
if (birthmonth != 0)
|
std::string orig_username = Config::FirmwareUsername;
|
||||||
{ // If the frontend specifies a birth month (rather than using the existing value)...
|
if (!orig_username.empty())
|
||||||
currentData.BirthdayMonth = birthmonth;
|
{ // 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));
|
||||||
|
}
|
||||||
|
|
||||||
u8 birthday = Config::FirmwareBirthdayDay;
|
auto language = static_cast<Firmware::Language>(Config::FirmwareLanguage);
|
||||||
if (birthday != 0)
|
if (language != Firmware::Language::Reserved)
|
||||||
{ // If the frontend specifies a birthday (rather than using the existing value)...
|
{ // If the frontend specifies a language (rather than using the existing value)...
|
||||||
currentData.BirthdayDay = birthday;
|
currentData.Settings &= ~Firmware::Language::Reserved; // ..clear the existing language...
|
||||||
}
|
currentData.Settings |= language; // ...and set the new one.
|
||||||
|
}
|
||||||
|
|
||||||
// setup message
|
// setting up color
|
||||||
std::string orig_message = Config::FirmwareMessage;
|
u8 favoritecolor = Config::FirmwareFavouriteColour;
|
||||||
if (!orig_message.empty())
|
if (favoritecolor != 0xFF)
|
||||||
{
|
{
|
||||||
std::u16string message = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(orig_message);
|
currentData.FavoriteColor = favoritecolor;
|
||||||
size_t messageLength = std::min(message.length(), (size_t) 26);
|
}
|
||||||
currentData.MessageLength = messageLength;
|
|
||||||
memcpy(currentData.Message, message.data(), messageLength * sizeof(char16_t));
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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;
|
MacAddress mac;
|
||||||
|
@ -1176,14 +1178,16 @@ void CustomizeFirmware(Firmware& firmware) noexcept
|
||||||
|
|
||||||
memcpy(&mac, header.MacAddr.data(), sizeof(MacAddress));
|
memcpy(&mac, header.MacAddr.data(), sizeof(MacAddress));
|
||||||
|
|
||||||
|
if (overridesettings)
|
||||||
MacAddress configuredMac;
|
|
||||||
rep = ParseMacAddress(&configuredMac);
|
|
||||||
rep &= (configuredMac != MacAddress());
|
|
||||||
|
|
||||||
if (rep)
|
|
||||||
{
|
{
|
||||||
mac = configuredMac;
|
MacAddress configuredMac;
|
||||||
|
rep = ParseMacAddress(&configuredMac);
|
||||||
|
rep &= (configuredMac != MacAddress());
|
||||||
|
|
||||||
|
if (rep)
|
||||||
|
{
|
||||||
|
mac = configuredMac;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int inst = Platform::InstanceID();
|
int inst = Platform::InstanceID();
|
||||||
|
|
|
@ -67,7 +67,7 @@ std::optional<FATStorageArgs> GetDSiSDCardArgs() noexcept;
|
||||||
std::optional<FATStorage> LoadDSiSDCard() noexcept;
|
std::optional<FATStorage> LoadDSiSDCard() noexcept;
|
||||||
std::optional<FATStorageArgs> GetDLDISDCardArgs() noexcept;
|
std::optional<FATStorageArgs> GetDLDISDCardArgs() noexcept;
|
||||||
std::optional<FATStorage> LoadDLDISDCard() noexcept;
|
std::optional<FATStorage> LoadDLDISDCard() noexcept;
|
||||||
void CustomizeFirmware(Firmware& firmware) noexcept;
|
void CustomizeFirmware(Firmware& firmware, bool overridesettings) noexcept;
|
||||||
Firmware GenerateFirmware(int type) noexcept;
|
Firmware GenerateFirmware(int type) noexcept;
|
||||||
/// Loads and customizes a firmware image based on the values in Config
|
/// Loads and customizes a firmware image based on the values in Config
|
||||||
std::optional<Firmware> LoadFirmware(int type) noexcept;
|
std::optional<Firmware> LoadFirmware(int type) noexcept;
|
||||||
|
|
Loading…
Reference in New Issue