1 // Copyright 2018 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 "core/hle/service/service.h"
8 #include "core/hle/service/time/clock_types.h"
9 #include "core/hle/service/time/time_manager.h"
10 
11 namespace Core {
12 class System;
13 }
14 
15 namespace Service::Time {
16 
17 class Module final {
18 public:
19     Module() = default;
20 
21     class Interface : public ServiceFramework<Interface> {
22     public:
23         explicit Interface(std::shared_ptr<Module> module_, Core::System& system_,
24                            const char* name);
25         ~Interface() override;
26 
27         void GetStandardUserSystemClock(Kernel::HLERequestContext& ctx);
28         void GetStandardNetworkSystemClock(Kernel::HLERequestContext& ctx);
29         void GetStandardSteadyClock(Kernel::HLERequestContext& ctx);
30         void GetTimeZoneService(Kernel::HLERequestContext& ctx);
31         void GetStandardLocalSystemClock(Kernel::HLERequestContext& ctx);
32         void IsStandardNetworkSystemClockAccuracySufficient(Kernel::HLERequestContext& ctx);
33         void CalculateMonotonicSystemClockBaseTimePoint(Kernel::HLERequestContext& ctx);
34         void GetClockSnapshot(Kernel::HLERequestContext& ctx);
35         void GetClockSnapshotFromSystemClockContext(Kernel::HLERequestContext& ctx);
36         void CalculateStandardUserSystemClockDifferenceByUser(Kernel::HLERequestContext& ctx);
37         void CalculateSpanBetween(Kernel::HLERequestContext& ctx);
38         void GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx);
39 
40     private:
41         ResultCode GetClockSnapshotFromSystemClockContextInternal(
42             Kernel::Thread* thread, Clock::SystemClockContext user_context,
43             Clock::SystemClockContext network_context, u8 type,
44             Clock::ClockSnapshot& cloc_snapshot);
45 
46     protected:
47         std::shared_ptr<Module> module;
48     };
49 };
50 
51 /// Registers all Time services with the specified service manager.
52 void InstallInterfaces(Core::System& system);
53 
54 } // namespace Service::Time
55