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/core/hle/service/time/time_s.cpp | |
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 '')
-rw-r--r-- | src/core/hle/service/time/time_s.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
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 |