diff options
| author | 2018-02-12 17:44:55 -0300 | |
|---|---|---|
| committer | 2018-02-12 17:44:55 -0300 | |
| commit | 3160f83607b96dd27374e52e460ee5a868dc9921 (patch) | |
| tree | 3c184f3eac4e34c11c595d6d5e4b16c120d8f8e7 /src/core | |
| parent | Merge pull request #177 from bunnei/vi-fixes (diff) | |
| download | yuzu-3160f83607b96dd27374e52e460ee5a868dc9921.tar.gz yuzu-3160f83607b96dd27374e52e460ee5a868dc9921.tar.xz yuzu-3160f83607b96dd27374e52e460ee5a868dc9921.zip | |
Add RequestUpdateAudioRenderer, StartAudioRenderer and StopAudioRenderer stubs to audren:u
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/service/audio/audren_u.cpp | 78 |
1 files changed, 76 insertions, 2 deletions
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index 4c3a685e9..01f8ba4bb 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -20,8 +20,8 @@ public: | |||
| 20 | {0x2, nullptr, "GetAudioRendererMixBufferCount"}, | 20 | {0x2, nullptr, "GetAudioRendererMixBufferCount"}, |
| 21 | {0x3, nullptr, "GetAudioRendererState"}, | 21 | {0x3, nullptr, "GetAudioRendererState"}, |
| 22 | {0x4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, | 22 | {0x4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, |
| 23 | {0x5, nullptr, "StartAudioRenderer"}, | 23 | {0x5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"}, |
| 24 | {0x6, nullptr, "StopAudioRenderer"}, | 24 | {0x6, &IAudioRenderer::StopAudioRenderer, "StopAudioRenderer"}, |
| 25 | {0x7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"}, | 25 | {0x7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"}, |
| 26 | {0x8, nullptr, "SetAudioRendererRenderingTimeLimit"}, | 26 | {0x8, nullptr, "SetAudioRendererRenderingTimeLimit"}, |
| 27 | {0x9, nullptr, "GetAudioRendererRenderingTimeLimit"}, | 27 | {0x9, nullptr, "GetAudioRendererRenderingTimeLimit"}, |
| @@ -35,6 +35,42 @@ public: | |||
| 35 | 35 | ||
| 36 | private: | 36 | private: |
| 37 | void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { | 37 | void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { |
| 38 | AudioRendererResponseData response_data = {0}; | ||
| 39 | |||
| 40 | response_data.section_0_size = | ||
| 41 | response_data.state_entries.size() * sizeof(AudioRendererStateEntry); | ||
| 42 | response_data.section_1_size = response_data.section_1.size(); | ||
| 43 | response_data.section_2_size = response_data.section_2.size(); | ||
| 44 | response_data.section_3_size = response_data.section_3.size(); | ||
| 45 | response_data.section_4_size = response_data.section_4.size(); | ||
| 46 | response_data.section_5_size = response_data.section_5.size(); | ||
| 47 | response_data.total_size = sizeof(AudioRendererResponseData); | ||
| 48 | |||
| 49 | for (unsigned i = 0; i < response_data.state_entries.size(); i++) { | ||
| 50 | // 4 = Busy and 5 = Ready? | ||
| 51 | response_data.state_entries[i].state = 5; | ||
| 52 | } | ||
| 53 | |||
| 54 | auto& buffer = ctx.BufferDescriptorB()[0]; | ||
| 55 | |||
| 56 | Memory::WriteBlock(buffer.Address(), &response_data, response_data.total_size); | ||
| 57 | |||
| 58 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 59 | |||
| 60 | rb.Push(RESULT_SUCCESS); | ||
| 61 | |||
| 62 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 63 | } | ||
| 64 | |||
| 65 | void StartAudioRenderer(Kernel::HLERequestContext& ctx) { | ||
| 66 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 67 | |||
| 68 | rb.Push(RESULT_SUCCESS); | ||
| 69 | |||
| 70 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 71 | } | ||
| 72 | |||
| 73 | void StopAudioRenderer(Kernel::HLERequestContext& ctx) { | ||
| 38 | IPC::ResponseBuilder rb{ctx, 2}; | 74 | IPC::ResponseBuilder rb{ctx, 2}; |
| 39 | 75 | ||
| 40 | rb.Push(RESULT_SUCCESS); | 76 | rb.Push(RESULT_SUCCESS); |
| @@ -52,6 +88,44 @@ private: | |||
| 52 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | 88 | LOG_WARNING(Service_Audio, "(STUBBED) called"); |
| 53 | } | 89 | } |
| 54 | 90 | ||
| 91 | struct AudioRendererStateEntry { | ||
| 92 | u32_le state; | ||
| 93 | u32_le unknown_4; | ||
| 94 | u32_le unknown_8; | ||
| 95 | u32_le unknown_c; | ||
| 96 | }; | ||
| 97 | static_assert(sizeof(AudioRendererStateEntry) == 0x10, | ||
| 98 | "AudioRendererStateEntry has wrong size"); | ||
| 99 | |||
| 100 | struct AudioRendererResponseData { | ||
| 101 | u32_le unknown_0; | ||
| 102 | u32_le section_5_size; | ||
| 103 | u32_le section_0_size; | ||
| 104 | u32_le section_1_size; | ||
| 105 | u32_le unknown_10; | ||
| 106 | u32_le section_2_size; | ||
| 107 | u32_le unknown_18; | ||
| 108 | u32_le section_3_size; | ||
| 109 | u32_le section_4_size; | ||
| 110 | u32_le unknown_24; | ||
| 111 | u32_le unknown_28; | ||
| 112 | u32_le unknown_2c; | ||
| 113 | u32_le unknown_30; | ||
| 114 | u32_le unknown_34; | ||
| 115 | u32_le unknown_38; | ||
| 116 | u32_le total_size; | ||
| 117 | |||
| 118 | std::array<AudioRendererStateEntry, 0x18e> state_entries; | ||
| 119 | |||
| 120 | std::array<u8, 0x600> section_1; | ||
| 121 | std::array<u8, 0xe0> section_2; | ||
| 122 | std::array<u8, 0x20> section_3; | ||
| 123 | std::array<u8, 0x10> section_4; | ||
| 124 | std::array<u8, 0xb0> section_5; | ||
| 125 | }; | ||
| 126 | static_assert(sizeof(AudioRendererResponseData) == 0x20e0, | ||
| 127 | "AudioRendererResponseData has wrong size"); | ||
| 128 | |||
| 55 | Kernel::SharedPtr<Kernel::Event> system_event; | 129 | Kernel::SharedPtr<Kernel::Event> system_event; |
| 56 | }; | 130 | }; |
| 57 | 131 | ||