// Copyright 2018 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include "common/logging/log.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/kernel/hle_ipc.h" #include "core/hle/service/audio/audren_u.h" namespace Service { namespace Audio { class IAudioRenderer final : public ServiceFramework { public: IAudioRenderer() : ServiceFramework("IAudioRenderer") { static const FunctionInfo functions[] = { {0x0, nullptr, "GetAudioRendererSampleRate"}, {0x1, nullptr, "GetAudioRendererSampleCount"}, {0x2, nullptr, "GetAudioRendererMixBufferCount"}, {0x3, nullptr, "GetAudioRendererState"}, {0x4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, {0x5, nullptr, "StartAudioRenderer"}, {0x6, nullptr, "StopAudioRenderer"}, {0x7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"}, {0x8, nullptr, "SetAudioRendererRenderingTimeLimit"}, {0x9, nullptr, "GetAudioRendererRenderingTimeLimit"}, }; RegisterHandlers(functions); system_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "IAudioRenderer:SystemEvent"); } ~IAudioRenderer() = default; private: void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { IPC::ResponseBuilder rb{ctx, 2}; rb.Push(RESULT_SUCCESS); LOG_WARNING(Service_Audio, "(STUBBED) called"); } void QuerySystemEvent(Kernel::HLERequestContext& ctx) { // system_event->Signal(); IPC::ResponseBuilder rb{ctx, 2, 1}; rb.Push(RESULT_SUCCESS); rb.PushCopyObjects(system_event); LOG_WARNING(Service_Audio, "(STUBBED) called"); } Kernel::SharedPtr system_event; }; AudRenU::AudRenU() : ServiceFramework("audren:u") { static const FunctionInfo functions[] = { {0x00000000, &AudRenU::OpenAudioRenderer, "OpenAudioRenderer"}, {0x00000001, &AudRenU::GetAudioRendererWorkBufferSize, "GetAudioRendererWorkBufferSize"}, {0x00000002, nullptr, "GetAudioRenderersProcessMasterVolume"}, {0x00000003, nullptr, "SetAudioRenderersProcessMasterVolume"}, }; RegisterHandlers(functions); } void AudRenU::OpenAudioRenderer(Kernel::HLERequestContext& ctx) { IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(RESULT_SUCCESS); rb.PushIpcInterface(); LOG_DEBUG(Service_Audio, "called"); } void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { IPC::ResponseBuilder rb{ctx, 4}; rb.Push(RESULT_SUCCESS); rb.Push(0x1000); LOG_WARNING(Service_Audio, "called"); } } // namespace Audio } // namespace Service