From 559b7f0a84961702f4dc7b24d891e73b1e745fa1 Mon Sep 17 00:00:00 2001 From: Mariano Zambelli <91083003+zambasaurus@users.noreply.github.com> Date: Wed, 22 Jul 2026 19:48:55 -0300 Subject: [PATCH] feat(voice): add QoS stubs (GetStatus, Terminate, SetMode) (#541) * feat(voice): add QoS stubs (GetStatus, Terminate, SetMode) Titles call these functions during voice/multiplayer setup to check network availability and configure modes. Unresolved imports caused WARN floods in the loader logs. Reporting initialized + disconnected lets callers take their normal offline path. * fix(voice): return success (0) from sceVoiceQoSGetStatus instead of disconnected state --- src/SharpEmu.Libs/Voice/VoiceQoSExports.cs | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/SharpEmu.Libs/Voice/VoiceQoSExports.cs b/src/SharpEmu.Libs/Voice/VoiceQoSExports.cs index 8a495606..ac0143a3 100644 --- a/src/SharpEmu.Libs/Voice/VoiceQoSExports.cs +++ b/src/SharpEmu.Libs/Voice/VoiceQoSExports.cs @@ -16,4 +16,37 @@ public static class VoiceQoSExports { return ctx.SetReturn(0); } + + [SysAbiExport( + Nid = "Trpt2QBZHCI", + ExportName = "sceVoiceQoSGetStatus", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceVoiceQoS")] + public static int VoiceQoSGetStatus(CpuContext ctx) + { + // Returns 0 to indicate connected state (voice available) + return ctx.SetReturn(0); + } + + [SysAbiExport( + Nid = "FuXenJLkk-c", + ExportName = "sceVoiceQoSTerminate", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceVoiceQoS")] + public static int VoiceQoSTerminate(CpuContext ctx) + { + // No-op: cleanup is handled by emulator shutdown + return ctx.SetReturn(0); + } + + [SysAbiExport( + Nid = "+0lOiPZjnBI", + ExportName = "sceVoiceQoSSetMode", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceVoiceQoS")] + public static int VoiceQoSSetMode(CpuContext ctx) + { + // No-op: mode configuration is not emulated + return ctx.SetReturn(0); + } }