diff options
author | bunnei <bunneidev@gmail.com> | 2018-01-15 03:42:23 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2018-01-15 03:45:06 +0100 |
commit | 7bedea73a89c007a82b1f46a22c5000246a12df7 (patch) | |
tree | b6a67a7aea84fa309d1180e1272f0e843b9edca4 /src | |
parent | audio: Add files to CMake. (diff) | |
download | yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.gz yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.bz2 yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.lz yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.xz yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.tar.zst yuzu-7bedea73a89c007a82b1f46a22c5000246a12df7.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/core/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/core/hle/service/service.cpp | 5 | ||||
-rw-r--r-- | src/core/hle/service/time/time.cpp | 16 | ||||
-rw-r--r-- | src/core/hle/service/time/time.h | 16 | ||||
-rw-r--r-- | src/core/hle/service/time/time_s.cpp | 58 | ||||
-rw-r--r-- | src/core/hle/service/time/time_s.h | 23 |
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 hle/service/service.cpp hle/service/sm/controller.cpp hle/service/sm/sm.cpp + hle/service/time/time.cpp + hle/service/time/time_s.cpp hle/service/vi/vi.cpp hle/service/vi/vi_m.cpp hle/shared_page.cpp @@ -141,6 +143,8 @@ set(HEADERS hle/service/service.h hle/service/sm/controller.h hle/service/sm/sm.h + hle/service/time/time.h + hle/service/time/time_s.h hle/service/vi/vi.h hle/service/vi/vi_m.h 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 @@ #include "core/hle/service/service.h" #include "core/hle/service/sm/controller.h" #include "core/hle/service/sm/sm.h" +#include "core/hle/service/time/time.h" #include "core/hle/service/vi/vi.h" using Kernel::ClientPort; @@ -79,7 +80,8 @@ Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() { ASSERT(port == nullptr); Kernel::SharedPtr<Kernel::ServerPort> server_port; Kernel::SharedPtr<Kernel::ClientPort> client_port; - std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, service_name); + std::tie(server_port, client_port) = + Kernel::ServerPort::CreatePortPair(max_sessions, service_name); port = MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(std::move(server_port)).Unwrap(); port->SetHleHandler(shared_from_this()); return client_port; @@ -170,6 +172,7 @@ void Init() { LM::InstallInterfaces(*SM::g_service_manager); NVDRV::InstallInterfaces(*SM::g_service_manager); PCTL::InstallInterfaces(*SM::g_service_manager); + Time::InstallInterfaces(*SM::g_service_manager); VI::InstallInterfaces(*SM::g_service_manager); 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 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/service/time/time.h" +#include "core/hle/service/time/time_s.h" + +namespace Service { +namespace Time { + +void InstallInterfaces(SM::ServiceManager& service_manager) { + std::make_shared<TimeS>()->InstallAsService(service_manager); +} + +} // namespace Time +} // 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 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service { +namespace Time { + +/// Registers all Time services with the specified service manager. +void InstallInterfaces(SM::ServiceManager& service_manager); + +} // namespace Time +} // 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 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <chrono> +#include "common/logging/log.h" +#include "core/hle/ipc_helpers.h" +#include "core/hle/kernel/client_port.h" +#include "core/hle/kernel/client_session.h" +#include "core/hle/service/time/time_s.h" + +namespace Service { +namespace Time { + +class ISystemClock final : public ServiceFramework<ISystemClock> { +public: + ISystemClock() : ServiceFramework("ISystemClock") { + static const FunctionInfo functions[] = { + {0, &ISystemClock::GetCurrentTime, "GetCurrentTime"}, + }; + RegisterHandlers(functions); + } + +private: + void GetCurrentTime(Kernel::HLERequestContext& ctx) { + const s64 time_since_epoch{std::chrono::duration_cast<std::chrono::milliseconds>( + std::chrono::system_clock::now().time_since_epoch()) + .count()}; + IPC::RequestBuilder rb{ctx, 4}; + rb.Push(RESULT_SUCCESS); + rb.Push<u64>(time_since_epoch); + LOG_DEBUG(Service, "called"); + } +}; + +void TimeS::GetStandardUserSystemClock(Kernel::HLERequestContext& ctx) { + auto client_port = std::make_shared<ISystemClock>()->CreatePort(); + auto session = client_port->Connect(); + if (session.Succeeded()) { + LOG_DEBUG(Service, "called, initialized ISystemClock -> session=%u", + (*session)->GetObjectId()); + IPC::RequestBuilder rb{ctx, 2, 0, 1}; + rb.Push(RESULT_SUCCESS); + rb.PushMoveObjects(std::move(session).Unwrap()); + } else { + UNIMPLEMENTED(); + } +} + +TimeS::TimeS() : ServiceFramework("time:s") { + static const FunctionInfo functions[] = { + {0x00000000, &TimeS::GetStandardUserSystemClock, "GetStandardUserSystemClock"}, + }; + RegisterHandlers(functions); +} + +} // namespace Time +} // 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 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/kernel/hle_ipc.h" +#include "core/hle/service/service.h" + +namespace Service { +namespace Time { + +class TimeS final : public ServiceFramework<TimeS> { +public: + TimeS(); + ~TimeS() = default; + +private: + void GetStandardUserSystemClock(Kernel::HLERequestContext& ctx); +}; + +} // namespace Time +} // namespace Service |