aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2023-09-14 09:50:19 +0200
committerGitHub <noreply@github.com>2023-09-14 09:50:19 +0200
commite6700b314f1384f015666767baf9ea1d8411e330 (patch)
tree4adba27f9fd232e279d1697a54a4f3c4e374d806 /src/Ryujinx.Horizon/Sdk
parente2cfe6fe44b62d7aba1425ae2e621f50045f406c (diff)
lbl: Migrate service to Horizon (#5628)
* lbl: Migrate service to Horizon * Fix formatting * Addresses gdkchan's feedback * Fix comments
Diffstat (limited to 'src/Ryujinx.Horizon/Sdk')
-rw-r--r--src/Ryujinx.Horizon/Sdk/Lbl/ILblController.cs20
-rw-r--r--src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs43
-rw-r--r--src/Ryujinx.Horizon/Sdk/Sm/ServiceName.cs2
-rw-r--r--src/Ryujinx.Horizon/Sdk/Sm/SmApi.cs14
4 files changed, 77 insertions, 2 deletions
diff --git a/src/Ryujinx.Horizon/Sdk/Lbl/ILblController.cs b/src/Ryujinx.Horizon/Sdk/Lbl/ILblController.cs
new file mode 100644
index 00000000..594722e9
--- /dev/null
+++ b/src/Ryujinx.Horizon/Sdk/Lbl/ILblController.cs
@@ -0,0 +1,20 @@
+using Ryujinx.Horizon.Common;
+using Ryujinx.Horizon.Sdk.Sf;
+
+namespace Ryujinx.Horizon.Sdk.Lbl
+{
+ interface ILblController : IServiceObject
+ {
+ Result SetBrightnessReflectionDelayLevel(float unknown0, float unknown1);
+ Result GetBrightnessReflectionDelayLevel(out float unknown1, float unknown0);
+ Result SetCurrentBrightnessMapping(float unknown0, float unknown1, float unknown2);
+ Result GetCurrentBrightnessMapping(out float unknown0, out float unknown1, out float unknown2);
+ Result SetCurrentAmbientLightSensorMapping(float unknown0, float unknown1, float unknown2);
+ Result GetCurrentAmbientLightSensorMapping(out float unknown0, out float unknown1, out float unknown2);
+ Result SetCurrentBrightnessSettingForVrMode(float currentBrightnessSettingForVrMode);
+ Result GetCurrentBrightnessSettingForVrMode(out float currentBrightnessSettingForVrMode);
+ Result EnableVrMode();
+ Result DisableVrMode();
+ Result IsVrModeEnabled(out bool vrModeEnabled);
+ }
+}
diff --git a/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs
new file mode 100644
index 00000000..843a9acd
--- /dev/null
+++ b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs
@@ -0,0 +1,43 @@
+using Ryujinx.Horizon.Common;
+using Ryujinx.Horizon.Sdk.Sm;
+using System;
+
+namespace Ryujinx.Horizon.Sdk.Lbl
+{
+ public class LblApi : IDisposable
+ {
+ private const string LblName = "lbl";
+
+ private int _sessionHandle;
+
+ public LblApi()
+ {
+ using var smApi = new SmApi();
+
+ smApi.Initialize();
+ smApi.GetServiceHandle(out _sessionHandle, ServiceName.Encode(LblName)).AbortOnFailure();
+ }
+
+ public Result EnableVrMode()
+ {
+ return ServiceUtil.SendRequest(out _, _sessionHandle, 26, sendPid: false, ReadOnlySpan<byte>.Empty);
+ }
+
+ public Result DisableVrMode()
+ {
+ return ServiceUtil.SendRequest(out _, _sessionHandle, 27, sendPid: false, ReadOnlySpan<byte>.Empty);
+ }
+
+ public void Dispose()
+ {
+ if (_sessionHandle != 0)
+ {
+ HorizonStatic.Syscall.CloseHandle(_sessionHandle);
+
+ _sessionHandle = 0;
+ }
+
+ GC.SuppressFinalize(this);
+ }
+ }
+}
diff --git a/src/Ryujinx.Horizon/Sdk/Sm/ServiceName.cs b/src/Ryujinx.Horizon/Sdk/Sm/ServiceName.cs
index f90d39c2..c89f118c 100644
--- a/src/Ryujinx.Horizon/Sdk/Sm/ServiceName.cs
+++ b/src/Ryujinx.Horizon/Sdk/Sm/ServiceName.cs
@@ -4,7 +4,7 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Horizon.Sdk.Sm
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- readonly struct ServiceName
+ public readonly struct ServiceName
{
public static ServiceName Invalid { get; } = new(0);
diff --git a/src/Ryujinx.Horizon/Sdk/Sm/SmApi.cs b/src/Ryujinx.Horizon/Sdk/Sm/SmApi.cs
index 3e5635bf..1ab400bd 100644
--- a/src/Ryujinx.Horizon/Sdk/Sm/SmApi.cs
+++ b/src/Ryujinx.Horizon/Sdk/Sm/SmApi.cs
@@ -5,7 +5,7 @@ using System;
namespace Ryujinx.Horizon.Sdk.Sm
{
- class SmApi
+ public class SmApi : IDisposable
{
private const string SmName = "sm:";
@@ -109,5 +109,17 @@ namespace Ryujinx.Horizon.Sdk.Sm
return ServiceUtil.SendRequest(out _, _portHandle, 4, sendPid: true, data);
}
+
+ public void Dispose()
+ {
+ if (_portHandle != 0)
+ {
+ HorizonStatic.Syscall.CloseHandle(_portHandle);
+
+ _portHandle = 0;
+ }
+
+ GC.SuppressFinalize(this);
+ }
}
}