2020-07-09 15:48:14 +02:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
|
|
|
|
|
|
|
#include <kernel/types/KProcess.h>
|
|
|
|
#include <audio/common.h>
|
|
|
|
#include "IAudioDevice.h"
|
|
|
|
|
|
|
|
namespace skyline::service::audio {
|
2021-01-11 20:17:06 +01:00
|
|
|
IAudioDevice::IAudioDevice(const DeviceState &state, ServiceManager &manager) : systemEvent(std::make_shared<type::KEvent>(state, true)), BaseService(state, manager) {}
|
2020-07-09 15:48:14 +02:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IAudioDevice::ListAudioDeviceName(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-09-25 02:05:12 +02:00
|
|
|
span buffer{request.outputBuf.at(0)};
|
2020-12-22 14:38:37 +01:00
|
|
|
std::array<std::string_view, 3> devices{"AudioTvOutput\0", "AudioStereoJackOutput\0", "AudioBuiltInSpeakerOutput\0"};
|
|
|
|
for (std::string_view deviceName : devices) {
|
2020-09-25 02:05:12 +02:00
|
|
|
if (deviceName.size() > buffer.size())
|
|
|
|
throw exception("The buffer supplied to ListAudioDeviceName is too small");
|
|
|
|
buffer.copy_from(deviceName);
|
|
|
|
buffer = buffer.subspan(deviceName.size());
|
2020-07-09 15:48:14 +02:00
|
|
|
}
|
2020-12-22 14:38:37 +01:00
|
|
|
response.Push<u32>(devices.size());
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-09 15:48:14 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IAudioDevice::SetAudioDeviceOutputVolume(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
|
|
return {};
|
|
|
|
}
|
2020-07-09 15:48:14 +02:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IAudioDevice::GetActiveAudioDeviceName(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-09-25 02:05:12 +02:00
|
|
|
std::string_view deviceName{"AudioStereoJackOutput\0"};
|
|
|
|
if (deviceName.size() > request.outputBuf.at(0).size())
|
|
|
|
throw exception("The buffer supplied to GetActiveAudioDeviceName is too small");
|
|
|
|
request.outputBuf.at(0).copy_from(deviceName);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-09 15:48:14 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IAudioDevice::QueryAudioDeviceSystemEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-08-21 15:28:47 +02:00
|
|
|
auto handle{state.process->InsertItem(systemEvent)};
|
2021-11-10 23:21:43 +01:00
|
|
|
Logger::Debug("Audio Device System Event Handle: 0x{:X}", handle);
|
2020-07-09 15:48:14 +02:00
|
|
|
response.copyHandles.push_back(handle);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-09 15:48:14 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IAudioDevice::GetActiveChannelCount(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2022-01-22 22:42:38 +01:00
|
|
|
response.Push<u32>(constant::StereoChannelCount);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-09 15:48:14 +02:00
|
|
|
}
|
|
|
|
}
|