summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-01-14 21:42:23 -0500
committerGravatar bunnei2018-01-14 21:45:06 -0500
commit7bedea73a89c007a82b1f46a22c5000246a12df7 (patch)
treeb6a67a7aea84fa309d1180e1272f0e843b9edca4 /src
parentaudio: Add files to CMake. (diff)
downloadyuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.gz
yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.xz
yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.zip
time: Implement GetStandardUserSystemClock, GetCurrentTime.
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/hle/service/service.cpp5
-rw-r--r--src/core/hle/service/time/time.cpp16
-rw-r--r--src/core/hle/service/time/time.h16
-rw-r--r--src/core/hle/service/time/time_s.cpp58
-rw-r--r--src/core/hle/service/time/time_s.h23
6 files changed, 121 insertions, 1 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index e41981007..f5c92a5aa 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -55,6 +55,8 @@ set(SRCS
55 hle/service/service.cpp 55 hle/service/service.cpp
56 hle/service/sm/controller.cpp 56 hle/service/sm/controller.cpp
57 hle/service/sm/sm.cpp 57 hle/service/sm/sm.cpp
58 hle/service/time/time.cpp
59 hle/service/time/time_s.cpp
58 hle/service/vi/vi.cpp 60 hle/service/vi/vi.cpp
59 hle/service/vi/vi_m.cpp 61 hle/service/vi/vi_m.cpp
60 hle/shared_page.cpp 62 hle/shared_page.cpp
@@ -141,6 +143,8 @@ set(HEADERS
141 hle/service/service.h 143 hle/service/service.h
142 hle/service/sm/controller.h 144 hle/service/sm/controller.h
143 hle/service/sm/sm.h 145 hle/service/sm/sm.h
146 hle/service/time/time.h
147 hle/service/time/time_s.h
144 hle/service/vi/vi.h 148 hle/service/vi/vi.h
145 hle/service/vi/vi_m.h 149 hle/service/vi/vi_m.h
146 hle/shared_page.h 150 hle/shared_page.h
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index c27525980..02d434660 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -25,6 +25,7 @@
25#include "core/hle/service/service.h" 25#include "core/hle/service/service.h"
26#include "core/hle/service/sm/controller.h" 26#include "core/hle/service/sm/controller.h"
27#include "core/hle/service/sm/sm.h" 27#include "core/hle/service/sm/sm.h"
28#include "core/hle/service/time/time.h"
28#include "core/hle/service/vi/vi.h" 29#include "core/hle/service/vi/vi.h"
29 30
30using Kernel::ClientPort; 31using Kernel::ClientPort;
@@ -79,7 +80,8 @@ Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() {
79 ASSERT(port == nullptr); 80 ASSERT(port == nullptr);
80 Kernel::SharedPtr<Kernel::ServerPort> server_port; 81 Kernel::SharedPtr<Kernel::ServerPort> server_port;
81 Kernel::SharedPtr<Kernel::ClientPort> client_port; 82 Kernel::SharedPtr<Kernel::ClientPort> client_port;
82 std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, service_name); 83 std::tie(server_port, client_port) =
84 Kernel::ServerPort::CreatePortPair(max_sessions, service_name);
83 port = MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(std::move(server_port)).Unwrap(); 85 port = MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(std::move(server_port)).Unwrap();
84 port->SetHleHandler(shared_from_this()); 86 port->SetHleHandler(shared_from_this());
85 return client_port; 87 return client_port;
@@ -170,6 +172,7 @@ void Init() {
170 LM::InstallInterfaces(*SM::g_service_manager); 172 LM::InstallInterfaces(*SM::g_service_manager);
171 NVDRV::InstallInterfaces(*SM::g_service_manager); 173 NVDRV::InstallInterfaces(*SM::g_service_manager);
172 PCTL::InstallInterfaces(*SM::g_service_manager); 174 PCTL::InstallInterfaces(*SM::g_service_manager);
175 Time::InstallInterfaces(*SM::g_service_manager);
173 VI::InstallInterfaces(*SM::g_service_manager); 176 VI::InstallInterfaces(*SM::g_service_manager);
174 177
175 LOG_DEBUG(Service, "initialized OK"); 178 LOG_DEBUG(Service, "initialized OK");
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp
new file mode 100644
index 000000000..e3d58aa60
--- /dev/null
+++ b/src/core/hle/service/time/time.cpp
@@ -0,0 +1,16 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/time/time.h"
6#include "core/hle/service/time/time_s.h"
7
8namespace Service {
9namespace Time {
10
11void InstallInterfaces(SM::ServiceManager& service_manager) {
12 std::make_shared<TimeS>()->InstallAsService(service_manager);
13}
14
15} // namespace Time
16} // namespace Service
diff --git a/src/core/hle/service/time/time.h b/src/core/hle/service/time/time.h
new file mode 100644
index 000000000..7d0803e24
--- /dev/null
+++ b/src/core/hle/service/time/time.h
@@ -0,0 +1,16 @@
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
9namespace Service {
10namespace Time {
11
12/// Registers all Time services with the specified service manager.
13void InstallInterfaces(SM::ServiceManager& service_manager);
14
15} // namespace Time
16} // namespace Service
diff --git a/src/core/hle/service/time/time_s.cpp b/src/core/hle/service/time/time_s.cpp
new file mode 100644
index 000000000..6b0597d8e
--- /dev/null
+++ b/src/core/hle/service/time/time_s.cpp
@@ -0,0 +1,58 @@
1// Copyright 2018 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <chrono>
6#include "common/logging/log.h"
7#include "core/hle/ipc_helpers.h"
8#include "core/hle/kernel/client_port.h"
9#include "core/hle/kernel/client_session.h"
10#include "core/hle/service/time/time_s.h"
11
12namespace Service {
13namespace Time {
14
15class ISystemClock final : public ServiceFramework<ISystemClock> {
16public:
17 ISystemClock() : ServiceFramework("ISystemClock") {
18 static const FunctionInfo functions[] = {
19 {0, &ISystemClock::GetCurrentTime, "GetCurrentTime"},
20 };
21 RegisterHandlers(functions);
22 }
23
24private:
25 void GetCurrentTime(Kernel::HLERequestContext& ctx) {
26 const s64 time_since_epoch{std::chrono::duration_cast<std::chrono::milliseconds>(
27 std::chrono::system_clock::now().time_since_epoch())
28 .count()};
29 IPC::RequestBuilder rb{ctx, 4};
30 rb.Push(RESULT_SUCCESS);
31 rb.Push<u64>(time_since_epoch);
32 LOG_DEBUG(Service, "called");
33 }
34};
35
36void TimeS::GetStandardUserSystemClock(Kernel::HLERequestContext& ctx) {
37 auto client_port = std::make_shared<ISystemClock>()->CreatePort();
38 auto session = client_port->Connect();
39 if (session.Succeeded()) {
40 LOG_DEBUG(Service, "called, initialized ISystemClock -> session=%u",
41 (*session)->GetObjectId());
42 IPC::RequestBuilder rb{ctx, 2, 0, 1};
43 rb.Push(RESULT_SUCCESS);
44 rb.PushMoveObjects(std::move(session).Unwrap());
45 } else {
46 UNIMPLEMENTED();
47 }
48}
49
50TimeS::TimeS() : ServiceFramework("time:s") {
51 static const FunctionInfo functions[] = {
52 {0x00000000, &TimeS::GetStandardUserSystemClock, "GetStandardUserSystemClock"},
53 };
54 RegisterHandlers(functions);
55}
56
57} // namespace Time
58} // namespace Service
diff --git a/src/core/hle/service/time/time_s.h b/src/core/hle/service/time/time_s.h
new file mode 100644
index 000000000..073227910
--- /dev/null
+++ b/src/core/hle/service/time/time_s.h
@@ -0,0 +1,23 @@
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/kernel/hle_ipc.h"
8#include "core/hle/service/service.h"
9
10namespace Service {
11namespace Time {
12
13class TimeS final : public ServiceFramework<TimeS> {
14public:
15 TimeS();
16 ~TimeS() = default;
17
18private:
19 void GetStandardUserSystemClock(Kernel::HLERequestContext& ctx);
20};
21
22} // namespace Time
23} // namespace Service