mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-12-23 17:00:57 +01:00
service: Migrate to the new UUID implementation
This commit is contained in:
parent
cb30fe50cd
commit
ee0547e4c4
9 changed files with 36 additions and 45 deletions
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/kernel/k_event.h"
|
#include "core/hle/kernel/k_event.h"
|
||||||
|
@ -170,10 +170,10 @@ private:
|
||||||
void GetPlayHistoryRegistrationKey(Kernel::HLERequestContext& ctx) {
|
void GetPlayHistoryRegistrationKey(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto local_play = rp.Pop<bool>();
|
const auto local_play = rp.Pop<bool>();
|
||||||
const auto uuid = rp.PopRaw<Common::UUID>();
|
const auto uuid = rp.PopRaw<Common::NewUUID>();
|
||||||
|
|
||||||
LOG_WARNING(Service_Friend, "(STUBBED) called, local_play={}, uuid=0x{}", local_play,
|
LOG_WARNING(Service_Friend, "(STUBBED) called, local_play={}, uuid=0x{}", local_play,
|
||||||
uuid.Format());
|
uuid.RawString());
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
@ -182,11 +182,11 @@ private:
|
||||||
void GetFriendList(Kernel::HLERequestContext& ctx) {
|
void GetFriendList(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto friend_offset = rp.Pop<u32>();
|
const auto friend_offset = rp.Pop<u32>();
|
||||||
const auto uuid = rp.PopRaw<Common::UUID>();
|
const auto uuid = rp.PopRaw<Common::NewUUID>();
|
||||||
[[maybe_unused]] const auto filter = rp.PopRaw<SizedFriendFilter>();
|
[[maybe_unused]] const auto filter = rp.PopRaw<SizedFriendFilter>();
|
||||||
const auto pid = rp.Pop<u64>();
|
const auto pid = rp.Pop<u64>();
|
||||||
LOG_WARNING(Service_Friend, "(STUBBED) called, offset={}, uuid=0x{}, pid={}", friend_offset,
|
LOG_WARNING(Service_Friend, "(STUBBED) called, offset={}, uuid=0x{}, pid={}", friend_offset,
|
||||||
uuid.Format(), pid);
|
uuid.RawString(), pid);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
@ -202,7 +202,7 @@ private:
|
||||||
|
|
||||||
class INotificationService final : public ServiceFramework<INotificationService> {
|
class INotificationService final : public ServiceFramework<INotificationService> {
|
||||||
public:
|
public:
|
||||||
explicit INotificationService(Core::System& system_, Common::UUID uuid_)
|
explicit INotificationService(Core::System& system_, Common::NewUUID uuid_)
|
||||||
: ServiceFramework{system_, "INotificationService"}, uuid{uuid_},
|
: ServiceFramework{system_, "INotificationService"}, uuid{uuid_},
|
||||||
service_context{system_, "INotificationService"} {
|
service_context{system_, "INotificationService"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
@ -293,7 +293,7 @@ private:
|
||||||
bool has_received_friend_request;
|
bool has_received_friend_request;
|
||||||
};
|
};
|
||||||
|
|
||||||
Common::UUID uuid;
|
Common::NewUUID uuid;
|
||||||
KernelHelpers::ServiceContext service_context;
|
KernelHelpers::ServiceContext service_context;
|
||||||
|
|
||||||
Kernel::KEvent* notification_event;
|
Kernel::KEvent* notification_event;
|
||||||
|
@ -310,9 +310,9 @@ void Module::Interface::CreateFriendService(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
void Module::Interface::CreateNotificationService(Kernel::HLERequestContext& ctx) {
|
void Module::Interface::CreateNotificationService(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
auto uuid = rp.PopRaw<Common::UUID>();
|
auto uuid = rp.PopRaw<Common::NewUUID>();
|
||||||
|
|
||||||
LOG_DEBUG(Service_Friend, "called, uuid=0x{}", uuid.Format());
|
LOG_DEBUG(Service_Friend, "called, uuid=0x{}", uuid.RawString());
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
|
|
@ -118,16 +118,6 @@ u16 GenerateCrc16(const void* data, std::size_t size) {
|
||||||
return Common::swap16(static_cast<u16>(crc));
|
return Common::swap16(static_cast<u16>(crc));
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::UUID GenerateValidUUID() {
|
|
||||||
auto uuid{Common::UUID::Generate()};
|
|
||||||
|
|
||||||
// Bit 7 must be set, and bit 6 unset for the UUID to be valid
|
|
||||||
uuid.uuid[1] &= 0xFFFFFFFFFFFFFF3FULL;
|
|
||||||
uuid.uuid[1] |= 0x0000000000000080ULL;
|
|
||||||
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T GetRandomValue(T min, T max) {
|
T GetRandomValue(T min, T max) {
|
||||||
std::random_device device;
|
std::random_device device;
|
||||||
|
@ -141,7 +131,8 @@ T GetRandomValue(T max) {
|
||||||
return GetRandomValue<T>({}, max);
|
return GetRandomValue<T>({}, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
MiiStoreData BuildRandomStoreData(Age age, Gender gender, Race race, const Common::UUID& user_id) {
|
MiiStoreData BuildRandomStoreData(Age age, Gender gender, Race race,
|
||||||
|
const Common::NewUUID& user_id) {
|
||||||
MiiStoreBitFields bf{};
|
MiiStoreBitFields bf{};
|
||||||
|
|
||||||
if (gender == Gender::All) {
|
if (gender == Gender::All) {
|
||||||
|
@ -320,7 +311,7 @@ MiiStoreData BuildRandomStoreData(Age age, Gender gender, Race race, const Commo
|
||||||
return {DefaultMiiName, bf, user_id};
|
return {DefaultMiiName, bf, user_id};
|
||||||
}
|
}
|
||||||
|
|
||||||
MiiStoreData BuildDefaultStoreData(const DefaultMii& info, const Common::UUID& user_id) {
|
MiiStoreData BuildDefaultStoreData(const DefaultMii& info, const Common::NewUUID& user_id) {
|
||||||
MiiStoreBitFields bf{};
|
MiiStoreBitFields bf{};
|
||||||
|
|
||||||
bf.font_region.Assign(info.font_region);
|
bf.font_region.Assign(info.font_region);
|
||||||
|
@ -381,13 +372,13 @@ MiiStoreData BuildDefaultStoreData(const DefaultMii& info, const Common::UUID& u
|
||||||
MiiStoreData::MiiStoreData() = default;
|
MiiStoreData::MiiStoreData() = default;
|
||||||
|
|
||||||
MiiStoreData::MiiStoreData(const MiiStoreData::Name& name, const MiiStoreBitFields& bit_fields,
|
MiiStoreData::MiiStoreData(const MiiStoreData::Name& name, const MiiStoreBitFields& bit_fields,
|
||||||
const Common::UUID& user_id) {
|
const Common::NewUUID& user_id) {
|
||||||
data.name = name;
|
data.name = name;
|
||||||
data.uuid = GenerateValidUUID();
|
data.uuid = Common::NewUUID::MakeRandomRFC4122V4();
|
||||||
|
|
||||||
std::memcpy(data.data.data(), &bit_fields, sizeof(MiiStoreBitFields));
|
std::memcpy(data.data.data(), &bit_fields, sizeof(MiiStoreBitFields));
|
||||||
data_crc = GenerateCrc16(data.data.data(), sizeof(data));
|
data_crc = GenerateCrc16(data.data.data(), sizeof(data));
|
||||||
device_crc = GenerateCrc16(&user_id, sizeof(Common::UUID));
|
device_crc = GenerateCrc16(&user_id, sizeof(Common::NewUUID));
|
||||||
}
|
}
|
||||||
|
|
||||||
MiiManager::MiiManager() : user_id{Service::Account::ProfileManager().GetLastOpenedUser()} {}
|
MiiManager::MiiManager() : user_id{Service::Account::ProfileManager().GetLastOpenedUser()} {}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "common/bit_field.h"
|
#include "common/bit_field.h"
|
||||||
#include "common/common_funcs.h"
|
#include "common/common_funcs.h"
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
#include "core/hle/service/mii/types.h"
|
#include "core/hle/service/mii/types.h"
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ enum class SourceFlag : u32 {
|
||||||
DECLARE_ENUM_FLAG_OPERATORS(SourceFlag);
|
DECLARE_ENUM_FLAG_OPERATORS(SourceFlag);
|
||||||
|
|
||||||
struct MiiInfo {
|
struct MiiInfo {
|
||||||
Common::UUID uuid;
|
Common::NewUUID uuid;
|
||||||
std::array<char16_t, 11> name;
|
std::array<char16_t, 11> name;
|
||||||
u8 font_region;
|
u8 font_region;
|
||||||
u8 favorite_color;
|
u8 favorite_color;
|
||||||
|
@ -192,7 +192,7 @@ struct MiiStoreData {
|
||||||
|
|
||||||
MiiStoreData();
|
MiiStoreData();
|
||||||
MiiStoreData(const Name& name, const MiiStoreBitFields& bit_fields,
|
MiiStoreData(const Name& name, const MiiStoreBitFields& bit_fields,
|
||||||
const Common::UUID& user_id);
|
const Common::NewUUID& user_id);
|
||||||
|
|
||||||
// This corresponds to the above structure MiiStoreBitFields. I did it like this because the
|
// This corresponds to the above structure MiiStoreBitFields. I did it like this because the
|
||||||
// BitField<> type makes this (and any thing that contains it) not trivially copyable, which is
|
// BitField<> type makes this (and any thing that contains it) not trivially copyable, which is
|
||||||
|
@ -202,7 +202,7 @@ struct MiiStoreData {
|
||||||
static_assert(sizeof(MiiStoreBitFields) == sizeof(data), "data field has incorrect size.");
|
static_assert(sizeof(MiiStoreBitFields) == sizeof(data), "data field has incorrect size.");
|
||||||
|
|
||||||
Name name{};
|
Name name{};
|
||||||
Common::UUID uuid{Common::INVALID_UUID};
|
Common::NewUUID uuid{};
|
||||||
} data;
|
} data;
|
||||||
|
|
||||||
u16 data_crc{};
|
u16 data_crc{};
|
||||||
|
@ -326,7 +326,7 @@ public:
|
||||||
ResultCode GetIndex(const MiiInfo& info, u32& index);
|
ResultCode GetIndex(const MiiInfo& info, u32& index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Common::UUID user_id{Common::INVALID_UUID};
|
const Common::NewUUID user_id{};
|
||||||
u64 update_counter{};
|
u64 update_counter{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/service/ns/pdm_qry.h"
|
#include "core/hle/service/ns/pdm_qry.h"
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
|
@ -49,7 +49,7 @@ void PDM_QRY::QueryPlayStatisticsByApplicationIdAndUserAccountId(Kernel::HLERequ
|
||||||
const auto unknown = rp.Pop<bool>();
|
const auto unknown = rp.Pop<bool>();
|
||||||
rp.Pop<u8>(); // Padding
|
rp.Pop<u8>(); // Padding
|
||||||
const auto application_id = rp.Pop<u64>();
|
const auto application_id = rp.Pop<u64>();
|
||||||
const auto user_account_uid = rp.PopRaw<Common::UUID>();
|
const auto user_account_uid = rp.PopRaw<Common::NewUUID>();
|
||||||
|
|
||||||
// TODO(German77): Read statistics of the game
|
// TODO(German77): Read statistics of the game
|
||||||
PlayStatistics statistics{
|
PlayStatistics statistics{
|
||||||
|
@ -59,7 +59,7 @@ void PDM_QRY::QueryPlayStatisticsByApplicationIdAndUserAccountId(Kernel::HLERequ
|
||||||
|
|
||||||
LOG_WARNING(Service_NS,
|
LOG_WARNING(Service_NS,
|
||||||
"(STUBBED) called. unknown={}. application_id=0x{:016X}, user_account_uid=0x{}",
|
"(STUBBED) called. unknown={}. application_id=0x{:016X}, user_account_uid=0x{}",
|
||||||
unknown, application_id, user_account_uid.Format());
|
unknown, application_id, user_account_uid.RawString());
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 12};
|
IPC::ResponseBuilder rb{ctx, 12};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include "common/common_funcs.h"
|
#include "common/common_funcs.h"
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/hle/service/time/errors.h"
|
#include "core/hle/service/time/errors.h"
|
||||||
#include "core/hle/service/time/time_zone_types.h"
|
#include "core/hle/service/time/time_zone_types.h"
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ enum class TimeType : u8 {
|
||||||
/// https://switchbrew.org/wiki/Glue_services#SteadyClockTimePoint
|
/// https://switchbrew.org/wiki/Glue_services#SteadyClockTimePoint
|
||||||
struct SteadyClockTimePoint {
|
struct SteadyClockTimePoint {
|
||||||
s64 time_point;
|
s64 time_point;
|
||||||
Common::UUID clock_source_id;
|
Common::NewUUID clock_source_id;
|
||||||
|
|
||||||
ResultCode GetSpanBetween(SteadyClockTimePoint other, s64& span) const {
|
ResultCode GetSpanBetween(SteadyClockTimePoint other, s64& span) const {
|
||||||
span = 0;
|
span = 0;
|
||||||
|
@ -36,7 +36,7 @@ struct SteadyClockTimePoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
static SteadyClockTimePoint GetRandom() {
|
static SteadyClockTimePoint GetRandom() {
|
||||||
return {0, Common::UUID::Generate()};
|
return {0, Common::NewUUID::MakeRandom()};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SteadyClockTimePoint) == 0x18, "SteadyClockTimePoint is incorrect size");
|
static_assert(sizeof(SteadyClockTimePoint) == 0x18, "SteadyClockTimePoint is incorrect size");
|
||||||
|
@ -45,7 +45,7 @@ static_assert(std::is_trivially_copyable_v<SteadyClockTimePoint>,
|
||||||
|
|
||||||
struct SteadyClockContext {
|
struct SteadyClockContext {
|
||||||
u64 internal_offset;
|
u64 internal_offset;
|
||||||
Common::UUID steady_time_point;
|
Common::NewUUID steady_time_point;
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SteadyClockContext) == 0x18, "SteadyClockContext is incorrect size");
|
static_assert(sizeof(SteadyClockContext) == 0x18, "SteadyClockContext is incorrect size");
|
||||||
static_assert(std::is_trivially_copyable_v<SteadyClockContext>,
|
static_assert(std::is_trivially_copyable_v<SteadyClockContext>,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/hle/service/time/clock_types.h"
|
#include "core/hle/service/time/clock_types.h"
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
@ -18,11 +18,11 @@ public:
|
||||||
SteadyClockCore() = default;
|
SteadyClockCore() = default;
|
||||||
virtual ~SteadyClockCore() = default;
|
virtual ~SteadyClockCore() = default;
|
||||||
|
|
||||||
const Common::UUID& GetClockSourceId() const {
|
const Common::NewUUID& GetClockSourceId() const {
|
||||||
return clock_source_id;
|
return clock_source_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetClockSourceId(const Common::UUID& value) {
|
void SetClockSourceId(const Common::NewUUID& value) {
|
||||||
clock_source_id = value;
|
clock_source_id = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Common::UUID clock_source_id{Common::UUID::Generate()};
|
Common::NewUUID clock_source_id{Common::NewUUID::MakeRandom()};
|
||||||
bool is_initialized{};
|
bool is_initialized{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ struct TimeManager::Impl final {
|
||||||
time_zone_content_manager{system} {
|
time_zone_content_manager{system} {
|
||||||
|
|
||||||
const auto system_time{Clock::TimeSpanType::FromSeconds(GetExternalRtcValue())};
|
const auto system_time{Clock::TimeSpanType::FromSeconds(GetExternalRtcValue())};
|
||||||
SetupStandardSteadyClock(system, Common::UUID::Generate(), system_time, {}, {});
|
SetupStandardSteadyClock(system, Common::NewUUID::MakeRandom(), system_time, {}, {});
|
||||||
SetupStandardLocalSystemClock(system, {}, system_time.ToSeconds());
|
SetupStandardLocalSystemClock(system, {}, system_time.ToSeconds());
|
||||||
|
|
||||||
Clock::SystemClockContext clock_context{};
|
Clock::SystemClockContext clock_context{};
|
||||||
|
@ -132,7 +132,7 @@ struct TimeManager::Impl final {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupStandardSteadyClock(Core::System& system_, Common::UUID clock_source_id,
|
void SetupStandardSteadyClock(Core::System& system_, Common::NewUUID clock_source_id,
|
||||||
Clock::TimeSpanType setup_value,
|
Clock::TimeSpanType setup_value,
|
||||||
Clock::TimeSpanType internal_offset, bool is_rtc_reset_detected) {
|
Clock::TimeSpanType internal_offset, bool is_rtc_reset_detected) {
|
||||||
standard_steady_clock_core.SetClockSourceId(clock_source_id);
|
standard_steady_clock_core.SetClockSourceId(clock_source_id);
|
||||||
|
|
|
@ -20,7 +20,7 @@ SharedMemory::SharedMemory(Core::System& system_) : system(system_) {
|
||||||
|
|
||||||
SharedMemory::~SharedMemory() = default;
|
SharedMemory::~SharedMemory() = default;
|
||||||
|
|
||||||
void SharedMemory::SetupStandardSteadyClock(const Common::UUID& clock_source_id,
|
void SharedMemory::SetupStandardSteadyClock(const Common::NewUUID& clock_source_id,
|
||||||
Clock::TimeSpanType current_time_point) {
|
Clock::TimeSpanType current_time_point) {
|
||||||
const Clock::TimeSpanType ticks_time_span{Clock::TimeSpanType::FromTicks(
|
const Clock::TimeSpanType ticks_time_span{Clock::TimeSpanType::FromTicks(
|
||||||
system.CoreTiming().GetClockTicks(), Core::Hardware::CNTFREQ)};
|
system.CoreTiming().GetClockTicks(), Core::Hardware::CNTFREQ)};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/uuid.h"
|
#include "common/new_uuid.h"
|
||||||
#include "core/hle/kernel/k_shared_memory.h"
|
#include "core/hle/kernel/k_shared_memory.h"
|
||||||
#include "core/hle/service/time/clock_types.h"
|
#include "core/hle/service/time/clock_types.h"
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public:
|
||||||
};
|
};
|
||||||
static_assert(sizeof(Format) == 0xd8, "Format is an invalid size");
|
static_assert(sizeof(Format) == 0xd8, "Format is an invalid size");
|
||||||
|
|
||||||
void SetupStandardSteadyClock(const Common::UUID& clock_source_id,
|
void SetupStandardSteadyClock(const Common::NewUUID& clock_source_id,
|
||||||
Clock::TimeSpanType current_time_point);
|
Clock::TimeSpanType current_time_point);
|
||||||
void UpdateLocalSystemClockContext(const Clock::SystemClockContext& context);
|
void UpdateLocalSystemClockContext(const Clock::SystemClockContext& context);
|
||||||
void UpdateNetworkSystemClockContext(const Clock::SystemClockContext& context);
|
void UpdateNetworkSystemClockContext(const Clock::SystemClockContext& context);
|
||||||
|
|
Loading…
Reference in a new issue