| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #include "common/logging/log.h"
- #include "core/hle/service/audio/audio_controller.h"
- #include "core/hle/service/cmif_serialization.h"
- #include "core/hle/service/ipc_helpers.h"
- #include "core/hle/service/set/system_settings_server.h"
- #include "core/hle/service/sm/sm.h"
- namespace Service::Audio {
- IAudioController::IAudioController(Core::System& system_)
- : ServiceFramework{system_, "audctl"}, service_context{system, "audctl"} {
- // clang-format off
- static const FunctionInfo functions[] = {
- {0, nullptr, "GetTargetVolume"},
- {1, nullptr, "SetTargetVolume"},
- {2, D<&IAudioController::GetTargetVolumeMin>, "GetTargetVolumeMin"},
- {3, D<&IAudioController::GetTargetVolumeMax>, "GetTargetVolumeMax"},
- {4, nullptr, "IsTargetMute"},
- {5, nullptr, "SetTargetMute"},
- {6, nullptr, "IsTargetConnected"},
- {7, nullptr, "SetDefaultTarget"},
- {8, nullptr, "GetDefaultTarget"},
- {9, D<&IAudioController::GetAudioOutputMode>, "GetAudioOutputMode"},
- {10, D<&IAudioController::SetAudioOutputMode>, "SetAudioOutputMode"},
- {11, nullptr, "SetForceMutePolicy"},
- {12, D<&IAudioController::GetForceMutePolicy>, "GetForceMutePolicy"},
- {13, D<&IAudioController::GetOutputModeSetting>, "GetOutputModeSetting"},
- {14, D<&IAudioController::SetOutputModeSetting>, "SetOutputModeSetting"},
- {15, nullptr, "SetOutputTarget"},
- {16, nullptr, "SetInputTargetForceEnabled"},
- {17, D<&IAudioController::SetHeadphoneOutputLevelMode>, "SetHeadphoneOutputLevelMode"},
- {18, D<&IAudioController::GetHeadphoneOutputLevelMode>, "GetHeadphoneOutputLevelMode"},
- {19, nullptr, "AcquireAudioVolumeUpdateEventForPlayReport"},
- {20, nullptr, "AcquireAudioOutputDeviceUpdateEventForPlayReport"},
- {21, nullptr, "GetAudioOutputTargetForPlayReport"},
- {22, D<&IAudioController::NotifyHeadphoneVolumeWarningDisplayedEvent>, "NotifyHeadphoneVolumeWarningDisplayedEvent"},
- {23, nullptr, "SetSystemOutputMasterVolume"},
- {24, nullptr, "GetSystemOutputMasterVolume"},
- {25, nullptr, "GetAudioVolumeDataForPlayReport"},
- {26, nullptr, "UpdateHeadphoneSettings"},
- {27, nullptr, "SetVolumeMappingTableForDev"},
- {28, nullptr, "GetAudioOutputChannelCountForPlayReport"},
- {29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
- {30, D<&IAudioController::SetSpeakerAutoMuteEnabled>, "SetSpeakerAutoMuteEnabled"},
- {31, D<&IAudioController::IsSpeakerAutoMuteEnabled>, "IsSpeakerAutoMuteEnabled"},
- {32, nullptr, "GetActiveOutputTarget"},
- {33, nullptr, "GetTargetDeviceInfo"},
- {34, D<&IAudioController::AcquireTargetNotification>, "AcquireTargetNotification"},
- {35, nullptr, "SetHearingProtectionSafeguardTimerRemainingTimeForDebug"},
- {36, nullptr, "GetHearingProtectionSafeguardTimerRemainingTimeForDebug"},
- {37, nullptr, "SetHearingProtectionSafeguardEnabled"},
- {38, nullptr, "IsHearingProtectionSafeguardEnabled"},
- {39, nullptr, "IsHearingProtectionSafeguardMonitoringOutputForDebug"},
- {40, nullptr, "GetSystemInformationForDebug"},
- {41, nullptr, "SetVolumeButtonLongPressTime"},
- {42, nullptr, "SetNativeVolumeForDebug"},
- {10000, nullptr, "NotifyAudioOutputTargetForPlayReport"},
- {10001, nullptr, "NotifyAudioOutputChannelCountForPlayReport"},
- {10002, nullptr, "NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport"},
- {10100, nullptr, "GetAudioVolumeDataForPlayReport"},
- {10101, nullptr, "BindAudioVolumeUpdateEventForPlayReport"},
- {10102, nullptr, "BindAudioOutputTargetUpdateEventForPlayReport"},
- {10103, nullptr, "GetAudioOutputTargetForPlayReport"},
- {10104, nullptr, "GetAudioOutputChannelCountForPlayReport"},
- {10105, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
- {10106, nullptr, "GetDefaultAudioOutputTargetForPlayReport"},
- {50000, nullptr, "SetAnalogInputBoostGainForPrototyping"},
- };
- // clang-format on
- RegisterHandlers(functions);
- m_set_sys =
- system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
- notification_event = service_context.CreateEvent("IAudioController:NotificationEvent");
- }
- IAudioController::~IAudioController() {
- service_context.CloseEvent(notification_event);
- };
- Result IAudioController::GetTargetVolumeMin(Out<s32> out_target_min_volume) {
- LOG_DEBUG(Audio, "called.");
- // This service function is currently hardcoded on the
- // actual console to this value (as of 8.0.0).
- *out_target_min_volume = 0;
- R_SUCCEED();
- }
- Result IAudioController::GetTargetVolumeMax(Out<s32> out_target_max_volume) {
- LOG_DEBUG(Audio, "called.");
- // This service function is currently hardcoded on the
- // actual console to this value (as of 8.0.0).
- *out_target_max_volume = 15;
- R_SUCCEED();
- }
- Result IAudioController::GetAudioOutputMode(Out<Set::AudioOutputMode> out_output_mode,
- Set::AudioOutputModeTarget target) {
- const auto result = m_set_sys->GetAudioOutputMode(out_output_mode, target);
- LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, *out_output_mode);
- R_RETURN(result);
- }
- Result IAudioController::SetAudioOutputMode(Set::AudioOutputModeTarget target,
- Set::AudioOutputMode output_mode) {
- LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
- R_RETURN(m_set_sys->SetAudioOutputMode(target, output_mode));
- }
- Result IAudioController::GetForceMutePolicy(Out<ForceMutePolicy> out_mute_policy) {
- LOG_WARNING(Audio, "(STUBBED) called");
- // Removed on FW 13.2.1+
- *out_mute_policy = ForceMutePolicy::Disable;
- R_SUCCEED();
- }
- Result IAudioController::GetOutputModeSetting(Out<Set::AudioOutputMode> out_output_mode,
- Set::AudioOutputModeTarget target) {
- LOG_WARNING(Audio, "(STUBBED) called, target={}", target);
- *out_output_mode = Set::AudioOutputMode::ch_7_1;
- R_SUCCEED();
- }
- Result IAudioController::SetOutputModeSetting(Set::AudioOutputModeTarget target,
- Set::AudioOutputMode output_mode) {
- LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
- R_SUCCEED();
- }
- Result IAudioController::SetHeadphoneOutputLevelMode(HeadphoneOutputLevelMode output_level_mode) {
- LOG_WARNING(Audio, "(STUBBED) called, output_level_mode={}", output_level_mode);
- R_SUCCEED();
- }
- Result IAudioController::GetHeadphoneOutputLevelMode(
- Out<HeadphoneOutputLevelMode> out_output_level_mode) {
- LOG_INFO(Audio, "called");
- *out_output_level_mode = HeadphoneOutputLevelMode::Normal;
- R_SUCCEED();
- }
- Result IAudioController::NotifyHeadphoneVolumeWarningDisplayedEvent() {
- LOG_WARNING(Service_Audio, "(STUBBED) called");
- R_SUCCEED();
- }
- Result IAudioController::SetSpeakerAutoMuteEnabled(bool is_speaker_auto_mute_enabled) {
- LOG_INFO(Audio, "called, is_speaker_auto_mute_enabled={}", is_speaker_auto_mute_enabled);
- R_RETURN(m_set_sys->SetSpeakerAutoMuteFlag(is_speaker_auto_mute_enabled));
- }
- Result IAudioController::IsSpeakerAutoMuteEnabled(Out<bool> out_is_speaker_auto_mute_enabled) {
- const auto result = m_set_sys->GetSpeakerAutoMuteFlag(out_is_speaker_auto_mute_enabled);
- LOG_INFO(Audio, "called, is_speaker_auto_mute_enabled={}", *out_is_speaker_auto_mute_enabled);
- R_RETURN(result);
- }
- Result IAudioController::AcquireTargetNotification(
- OutCopyHandle<Kernel::KReadableEvent> out_notification_event) {
- LOG_WARNING(Service_AM, "(STUBBED) called");
- *out_notification_event = ¬ification_event->GetReadableEvent();
- R_SUCCEED();
- }
- } // namespace Service::Audio
|