diff options
-rw-r--r-- | src/core/hle/service/audio/audout_u.cpp | 15 | ||||
-rw-r--r-- | src/core/hle/service/audio/audout_u.h | 1 | ||||
-rw-r--r-- | src/core/hle/service/hid/hid.cpp | 7 |
3 files changed, 21 insertions, 2 deletions
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp index 8ecfef413..8a436bf97 100644 --- a/src/core/hle/service/audio/audout_u.cpp +++ b/src/core/hle/service/audio/audout_u.cpp @@ -49,9 +49,22 @@ void AudOutU::ListAudioOuts(Kernel::HLERequestContext& ctx) { rb.Push<u32>(1); } +void AudOutU::OpenAudioOut(Kernel::HLERequestContext& ctx) { + LOG_WARNING(Service, "(STUBBED) called"); + + IPC::RequestBuilder rb{ctx, 6}; + + rb.Push(RESULT_SUCCESS); + rb.Push<u32>(48000); // Sample Rate + rb.Push<u32>(2); // Channels + rb.Push<u32>(2); // PCM Format (INT16) + rb.Push<u32>(0); // Unknown + rb.PushIpcInterface<Audio::IAudioOut>(); +} + AudOutU::AudOutU() : ServiceFramework("audout:u") { static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"}, - {0x00000001, nullptr, "OpenAudioOut"}, + {0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"}, {0x00000002, nullptr, "Unknown2"}, {0x00000003, nullptr, "Unknown3"}}; RegisterHandlers(functions); diff --git a/src/core/hle/service/audio/audout_u.h b/src/core/hle/service/audio/audout_u.h index 17529245b..69626cc58 100644 --- a/src/core/hle/service/audio/audout_u.h +++ b/src/core/hle/service/audio/audout_u.h @@ -20,6 +20,7 @@ public: private: void ListAudioOuts(Kernel::HLERequestContext& ctx); + void OpenAudioOut(Kernel::HLERequestContext& ctx); }; } // namespace Audio diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index be7a6ff65..d99e9c505 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -162,8 +162,13 @@ public: ~Hid() = default; private: + Kernel::SharedPtr<Kernel::ClientPort> client_port; + void CreateAppletResource(Kernel::HLERequestContext& ctx) { - auto client_port = std::make_shared<IAppletResource>()->CreatePort(); + if (client_port == nullptr) { + client_port = std::make_shared<IAppletResource>()->CreatePort(); + } + auto session = client_port->Connect(); if (session.Succeeded()) { LOG_DEBUG(Service, "called, initialized IAppletResource -> session=%u", |