From bd409c34162783d512d71a1c9e46bc874f73de38 Mon Sep 17 00:00:00 2001 From: german77 Date: Sun, 17 Sep 2023 10:45:24 -0600 Subject: service: mii: Add device crc16 --- src/core/hle/service/mii/mii_util.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core/hle/service/mii/mii_util.h b/src/core/hle/service/mii/mii_util.h index ddb544c23..3534fa31d 100644 --- a/src/core/hle/service/mii/mii_util.h +++ b/src/core/hle/service/mii/mii_util.h @@ -28,6 +28,32 @@ public: return Common::swap16(static_cast(crc)); } + static u16 CalculateDeviceCrc16(const Common::UUID& uuid, std::size_t data_size) { + constexpr u16 magic{0x1021}; + s32 crc{}; + + for (std::size_t i = 0; i < uuid.uuid.size(); i++) { + for (std::size_t j = 0; j < 8; j++) { + crc <<= 1; + if ((crc & 0x10000) != 0) { + crc = crc ^ magic; + } + } + crc ^= uuid.uuid[i]; + } + + // As much as this looks wrong this is what N's does + + for (std::size_t i = 0; i < data_size * 8; i++) { + crc <<= 1; + if ((crc & 0x10000) != 0) { + crc = crc ^ magic; + } + } + + return Common::swap16(static_cast(crc)); + } + static Common::UUID MakeCreateId() { return Common::UUID::MakeRandomRFC4122V4(); } -- cgit v1.2.3