fw 17 & 20 additions to snoop manager

This commit is contained in:
GreemDev
2025-08-02 01:28:41 -05:00
committed by LotP1
parent 1085e39e5d
commit 0015aba0a3
3 changed files with 46 additions and 4 deletions

View File

@ -33,11 +33,13 @@ namespace Ryujinx.Horizon.Audio
AudioOutManager audioOutManager = new(_managers.AudioOutputManager);
AudioInManager audioInManager = new(_managers.AudioInputManager);
FinalOutputRecorderManager finalOutputRecorderManager = new();
AudioSnoopManager audioSnoopManager = new();
_serverManager.RegisterObjectForServer(audioRendererManager, ServiceName.Encode("audren:u"), MaxSessionsCount);
_serverManager.RegisterObjectForServer(audioOutManager, ServiceName.Encode("audout:u"), MaxSessionsCount);
_serverManager.RegisterObjectForServer(audioInManager, ServiceName.Encode("audin:u"), MaxSessionsCount);
_serverManager.RegisterObjectForServer(finalOutputRecorderManager, ServiceName.Encode("audrec:u"), MaxSessionsCount);
_serverManager.RegisterObjectForServer(audioSnoopManager, ServiceName.Encode("auddev"), MaxSessionsCount);
}
public void ServiceRequests()

View File

@ -1,30 +1,64 @@
using Ryujinx.Horizon.Common;
using Ryujinx.Horizon.Sdk.Sf;
using Ryujinx.Horizon.Sdk.Sf.Hipc;
using System;
namespace Ryujinx.Horizon.Sdk.Audio.Detail
{
partial class AudioSnoopManager : IAudioSnoopManager
{
private byte[] _dspStatisticsParameter;
// Note: The interface changed completely on firmware 17.0.0, this implementation is for older firmware.
[CmifCommand(0)]
[CmifCommand(0)] // [6.0.0-16.1.0]
public Result EnableDspUsageMeasurement()
{
return Result.Success;
}
[CmifCommand(1)]
[CmifCommand(1)] // [6.0.0-16.1.0]
public Result DisableDspUsageMeasurement()
{
return Result.Success;
}
[CmifCommand(6)]
[CmifCommand(6)] // [6.0.0-16.1.0]
public Result GetDspUsage(out uint usage)
{
usage = 0;
return Result.Success;
}
[CmifCommand(0)] // 17.0.0+
public Result GetDspStatistics(out uint statistics) => GetDspUsage(out statistics);
[CmifCommand(1)] // 20.0.0+
public Result GetAppletStateSummaries([Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span<byte> summaries)
{
// Since we do not have any real applets, return empty state summaries.
summaries.Clear();
return Result.Success;
}
[CmifCommand(2)] // 20.0.0+
public Result SetDspStatisticsParameter([Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> parameter)
{
_dspStatisticsParameter = null;
_dspStatisticsParameter = new byte[0x100];
parameter.CopyTo(_dspStatisticsParameter);
return Result.Success;
}
[CmifCommand(3)] // 20.0.0+
public Result GetDspStatisticsParameter([Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span<byte> parameter)
{
_dspStatisticsParameter.CopyTo(parameter);
return Result.Success;
}
}
}

View File

@ -1,5 +1,6 @@
using Ryujinx.Horizon.Common;
using Ryujinx.Horizon.Sdk.Sf;
using System;
namespace Ryujinx.Horizon.Sdk.Audio.Detail
{
@ -8,5 +9,10 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail
Result EnableDspUsageMeasurement();
Result DisableDspUsageMeasurement();
Result GetDspUsage(out uint usage);
Result GetDspStatistics(out uint statistics);
Result GetAppletStateSummaries(Span<byte> summaries);
Result SetDspStatisticsParameter(ReadOnlySpan<byte> parameter);
Result GetDspStatisticsParameter(Span<byte> parameter);
}
}