From b2fef6ee1fcd820f8bdeee6cc48aa2912d334f72 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Mon, 22 Sep 2025 08:02:01 -0500 Subject: [PATCH] Common/Network: Add BluetoothAddress struct and string conversion functions. --- Source/Core/Common/Network.cpp | 15 +++++++++++++++ Source/Core/Common/Network.h | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/Source/Core/Common/Network.cpp b/Source/Core/Common/Network.cpp index a5d6eae1e7..aed767a85e 100644 --- a/Source/Core/Common/Network.cpp +++ b/Source/Core/Common/Network.cpp @@ -86,6 +86,21 @@ std::optional StringToMacAddress(std::string_view mac_string) return std::make_optional(mac); } +std::string BluetoothAddressToString(BluetoothAddress bdaddr) +{ + std::ranges::reverse(bdaddr); + return MacAddressToString(std::bit_cast(bdaddr)); +} + +std::optional StringToBluetoothAddress(std::string_view str) +{ + auto result = StringToMacAddress(str); + if (!result) + return std::nullopt; + std::ranges::reverse(*result); + return std::bit_cast(*result); +} + EthernetHeader::EthernetHeader() = default; EthernetHeader::EthernetHeader(u16 ether_type) : ethertype(htons(ether_type)) diff --git a/Source/Core/Common/Network.h b/Source/Core/Common/Network.h index 87f1f3a444..8f446d7a38 100644 --- a/Source/Core/Common/Network.h +++ b/Source/Core/Common/Network.h @@ -36,6 +36,12 @@ enum DHCPConst }; using MACAddress = std::array; + +// Note: Bluetooth address display order is reverse of the storage order. +struct BluetoothAddress : std::array +{ +}; + constexpr std::size_t IPV4_ADDR_LEN = 4; using IPAddress = std::array; constexpr IPAddress IP_ADDR_ANY = {0, 0, 0, 0}; @@ -259,8 +265,13 @@ struct NetworkErrorState }; MACAddress GenerateMacAddress(MACConsumer type); + std::string MacAddressToString(const MACAddress& mac); std::optional StringToMacAddress(std::string_view mac_string); + +std::string BluetoothAddressToString(BluetoothAddress bdaddr); +std::optional StringToBluetoothAddress(std::string_view str); + u16 ComputeNetworkChecksum(const void* data, u16 length, u32 initial_value = 0); u16 ComputeTCPNetworkChecksum(const IPAddress& from, const IPAddress& to, const void* data, u16 length, u8 protocol);