From 112c20cef249c9637c1f14ce69f744116e9230b8 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sat, 30 Apr 2022 15:23:34 +0100 Subject: [PATCH] Stub QueryAudioDevice{Input,Output}Event Used in many 3.0.0+ games --- .../skyline/services/audio/IAudioDevice.cpp | 20 ++++++++++++++++++- .../cpp/skyline/services/audio/IAudioDevice.h | 13 ++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/src/main/cpp/skyline/services/audio/IAudioDevice.cpp b/app/src/main/cpp/skyline/services/audio/IAudioDevice.cpp index ff44f845..58668b44 100644 --- a/app/src/main/cpp/skyline/services/audio/IAudioDevice.cpp +++ b/app/src/main/cpp/skyline/services/audio/IAudioDevice.cpp @@ -6,7 +6,11 @@ #include "IAudioDevice.h" namespace skyline::service::audio { - IAudioDevice::IAudioDevice(const DeviceState &state, ServiceManager &manager) : systemEvent(std::make_shared(state, true)), BaseService(state, manager) {} + IAudioDevice::IAudioDevice(const DeviceState &state, ServiceManager &manager) + : BaseService(state, manager), + systemEvent(std::make_shared(state, true)), + outputEvent(std::make_shared(state, true)), + inputEvent(std::make_shared(state, true)) {} Result IAudioDevice::ListAudioDeviceName(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { span buffer{request.outputBuf.at(0)}; @@ -44,4 +48,18 @@ namespace skyline::service::audio { response.Push(constant::StereoChannelCount); return {}; } + + Result IAudioDevice::QueryAudioDeviceInputEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + auto handle{state.process->InsertItem(inputEvent)}; + Logger::Debug("Audio Device Input Event Handle: 0x{:X}", handle); + response.copyHandles.push_back(handle); + return {}; + } + + Result IAudioDevice::QueryAudioDeviceOutputEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + auto handle{state.process->InsertItem(outputEvent)}; + Logger::Debug("Audio Device Output Event Handle: 0x{:X}", handle); + response.copyHandles.push_back(handle); + return {}; + } } diff --git a/app/src/main/cpp/skyline/services/audio/IAudioDevice.h b/app/src/main/cpp/skyline/services/audio/IAudioDevice.h index 27a4f4f8..0a8a716b 100644 --- a/app/src/main/cpp/skyline/services/audio/IAudioDevice.h +++ b/app/src/main/cpp/skyline/services/audio/IAudioDevice.h @@ -12,7 +12,10 @@ namespace skyline::service::audio { */ class IAudioDevice : public BaseService { private: - std::shared_ptr systemEvent; //!< The KEvent that is signalled on audio device changes + std::shared_ptr systemEvent; //!< Signalled on all audio device changes + std::shared_ptr inputEvent; //!< Signalled on audio input device changes + std::shared_ptr outputEvent; //!< Signalled on audio output device changes + public: IAudioDevice(const DeviceState &state, ServiceManager &manager); @@ -44,6 +47,10 @@ namespace skyline::service::audio { */ Result GetActiveChannelCount(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result QueryAudioDeviceInputEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + Result QueryAudioDeviceOutputEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + SERVICE_DECL( SFUNC(0x0, IAudioDevice, ListAudioDeviceName), SFUNC(0x1, IAudioDevice, SetAudioDeviceOutputVolume), @@ -52,7 +59,9 @@ namespace skyline::service::audio { SFUNC(0x5, IAudioDevice, GetActiveChannelCount), SFUNC(0x6, IAudioDevice, ListAudioDeviceName), SFUNC(0x7, IAudioDevice, SetAudioDeviceOutputVolume), - SFUNC(0xA, IAudioDevice, GetActiveAudioDeviceName) + SFUNC(0xA, IAudioDevice, GetActiveAudioDeviceName), + SFUNC(0xB, IAudioDevice, QueryAudioDeviceInputEvent), + SFUNC(0xC, IAudioDevice, QueryAudioDeviceOutputEvent) ) }; }