|
|
@ -28,6 +28,32 @@ public: |
|
|
return Common::swap16(static_cast<u16>(crc)); |
|
|
return Common::swap16(static_cast<u16>(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<u16>(crc)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
static Common::UUID MakeCreateId() { |
|
|
static Common::UUID MakeCreateId() { |
|
|
return Common::UUID::MakeRandomRFC4122V4(); |
|
|
return Common::UUID::MakeRandomRFC4122V4(); |
|
|
} |
|
|
} |
|
|
|