1 // Copyright 2019 yuzu emulator team 2 // Licensed under GPLv2 or any later version 3 // Refer to the license.txt file included. 4 5 #pragma once 6 7 #include "common/common_types.h" 8 #include "core/hle/service/time/clock_types.h" 9 10 namespace Core { 11 class System; 12 } 13 14 namespace Service::Time::Clock { 15 16 class SteadyClockCore; 17 class SystemClockContextUpdateCallback; 18 19 // Parts of this implementation were based on Ryujinx (https://github.com/Ryujinx/Ryujinx/pull/783). 20 // This code was released under public domain. 21 22 class SystemClockCore { 23 public: 24 explicit SystemClockCore(SteadyClockCore& steady_clock_core); 25 virtual ~SystemClockCore(); 26 GetSteadyClockCore()27 SteadyClockCore& GetSteadyClockCore() const { 28 return steady_clock_core; 29 } 30 31 ResultCode GetCurrentTime(Core::System& system, s64& posix_time) const; 32 33 ResultCode SetCurrentTime(Core::System& system, s64 posix_time); 34 GetClockContext(Core::System & system,SystemClockContext & value)35 virtual ResultCode GetClockContext([[maybe_unused]] Core::System& system, 36 SystemClockContext& value) const { 37 value = context; 38 return RESULT_SUCCESS; 39 } 40 SetClockContext(const SystemClockContext & value)41 virtual ResultCode SetClockContext(const SystemClockContext& value) { 42 context = value; 43 return RESULT_SUCCESS; 44 } 45 46 virtual ResultCode Flush(const SystemClockContext& context); 47 SetUpdateCallbackInstance(std::shared_ptr<SystemClockContextUpdateCallback> callback)48 void SetUpdateCallbackInstance(std::shared_ptr<SystemClockContextUpdateCallback> callback) { 49 system_clock_context_update_callback = std::move(callback); 50 } 51 52 ResultCode SetSystemClockContext(const SystemClockContext& context); 53 IsInitialized()54 bool IsInitialized() const { 55 return is_initialized; 56 } 57 MarkAsInitialized()58 void MarkAsInitialized() { 59 is_initialized = true; 60 } 61 62 bool IsClockSetup(Core::System& system) const; 63 64 private: 65 SteadyClockCore& steady_clock_core; 66 SystemClockContext context{}; 67 bool is_initialized{}; 68 std::shared_ptr<SystemClockContextUpdateCallback> system_clock_context_update_callback; 69 }; 70 71 } // namespace Service::Time::Clock 72