Stub OpenAudioOut and fix a issue with HID IAppletResource being created more than once

This commit is contained in:
gdkchan 2018-01-22 17:27:55 -03:00
parent 07355cf7cc
commit 832009bfdb
3 changed files with 21 additions and 2 deletions

View File

@ -49,9 +49,22 @@ void AudOutU::ListAudioOuts(Kernel::HLERequestContext& ctx) {
rb.Push<u32>(1); 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") { AudOutU::AudOutU() : ServiceFramework("audout:u") {
static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"}, static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"},
{0x00000001, nullptr, "OpenAudioOut"}, {0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"},
{0x00000002, nullptr, "Unknown2"}, {0x00000002, nullptr, "Unknown2"},
{0x00000003, nullptr, "Unknown3"}}; {0x00000003, nullptr, "Unknown3"}};
RegisterHandlers(functions); RegisterHandlers(functions);

View File

@ -20,6 +20,7 @@ public:
private: private:
void ListAudioOuts(Kernel::HLERequestContext& ctx); void ListAudioOuts(Kernel::HLERequestContext& ctx);
void OpenAudioOut(Kernel::HLERequestContext& ctx);
}; };
} // namespace Audio } // namespace Audio

View File

@ -162,8 +162,13 @@ public:
~Hid() = default; ~Hid() = default;
private: private:
Kernel::SharedPtr<Kernel::ClientPort> client_port;
void CreateAppletResource(Kernel::HLERequestContext& ctx) { 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(); auto session = client_port->Connect();
if (session.Succeeded()) { if (session.Succeeded()) {
LOG_DEBUG(Service, "called, initialized IAppletResource -> session=%u", LOG_DEBUG(Service, "called, initialized IAppletResource -> session=%u",