diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Lbl')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Lbl/ILblController.cs | 88 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Lbl/LblControllerServer.cs | 54 |
2 files changed, 140 insertions, 2 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Lbl/ILblController.cs b/Ryujinx.HLE/HOS/Services/Lbl/ILblController.cs index de84095e..6964de6b 100644 --- a/Ryujinx.HLE/HOS/Services/Lbl/ILblController.cs +++ b/Ryujinx.HLE/HOS/Services/Lbl/ILblController.cs @@ -1,8 +1,92 @@ namespace Ryujinx.HLE.HOS.Services.Lbl { - [Service("lbl")] - class ILblController : IpcService + abstract class ILblController : IpcService { public ILblController(ServiceCtx context) { } + + protected abstract void SetCurrentBrightnessSettingForVrMode(float currentBrightnessSettingForVrMode); + protected abstract float GetCurrentBrightnessSettingForVrMode(); + internal abstract void EnableVrMode(); + internal abstract void DisableVrMode(); + protected abstract bool IsVrModeEnabled(); + + [Command(17)] + // SetBrightnessReflectionDelayLevel(float, float) + public ResultCode SetBrightnessReflectionDelayLevel(ServiceCtx context) + { + return ResultCode.Success; + } + + [Command(18)] + // GetBrightnessReflectionDelayLevel(float) -> float + public ResultCode GetBrightnessReflectionDelayLevel(ServiceCtx context) + { + context.ResponseData.Write(0.0f); + + return ResultCode.Success; + } + + [Command(21)] + // SetCurrentAmbientLightSensorMapping(unknown<0xC>) + public ResultCode SetCurrentAmbientLightSensorMapping(ServiceCtx context) + { + return ResultCode.Success; + } + + [Command(22)] + // GetCurrentAmbientLightSensorMapping() -> unknown<0xC> + public ResultCode GetCurrentAmbientLightSensorMapping(ServiceCtx context) + { + return ResultCode.Success; + } + + [Command(24)] // 3.0.0+ + // SetCurrentBrightnessSettingForVrMode(float) + public ResultCode SetCurrentBrightnessSettingForVrMode(ServiceCtx context) + { + float currentBrightnessSettingForVrMode = context.RequestData.ReadSingle(); + + SetCurrentBrightnessSettingForVrMode(currentBrightnessSettingForVrMode); + + return ResultCode.Success; + } + + [Command(25)] // 3.0.0+ + // GetCurrentBrightnessSettingForVrMode() -> float + public ResultCode GetCurrentBrightnessSettingForVrMode(ServiceCtx context) + { + float currentBrightnessSettingForVrMode = GetCurrentBrightnessSettingForVrMode(); + + context.ResponseData.Write(currentBrightnessSettingForVrMode); + + return ResultCode.Success; + } + + [Command(26)] // 3.0.0+ + // EnableVrMode() + public ResultCode EnableVrMode(ServiceCtx context) + { + EnableVrMode(); + + return ResultCode.Success; + } + + [Command(27)] // 3.0.0+ + // DisableVrMode() + public ResultCode DisableVrMode(ServiceCtx context) + { + DisableVrMode(); + + return ResultCode.Success; + } + + [Command(28)] // 3.0.0+ + // IsVrModeEnabled() -> bool + public ResultCode IsVrModeEnabled(ServiceCtx context) + { + context.ResponseData.Write(IsVrModeEnabled()); + + return ResultCode.Success; + } } }
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Lbl/LblControllerServer.cs b/Ryujinx.HLE/HOS/Services/Lbl/LblControllerServer.cs new file mode 100644 index 00000000..b68be1f2 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Lbl/LblControllerServer.cs @@ -0,0 +1,54 @@ +namespace Ryujinx.HLE.HOS.Services.Lbl +{ + [Service("lbl")] + class LblControllerServer : ILblController + { + private bool _vrModeEnabled; + private float _currentBrightnessSettingForVrMode; + + public LblControllerServer(ServiceCtx context) : base(context) { } + + protected override void SetCurrentBrightnessSettingForVrMode(float currentBrightnessSettingForVrMode) + { + if (float.IsNaN(currentBrightnessSettingForVrMode) || float.IsInfinity(currentBrightnessSettingForVrMode)) + { + _currentBrightnessSettingForVrMode = 0.0f; + + return; + } + + _currentBrightnessSettingForVrMode = currentBrightnessSettingForVrMode; + } + + protected override float GetCurrentBrightnessSettingForVrMode() + { + if (float.IsNaN(_currentBrightnessSettingForVrMode) || float.IsInfinity(_currentBrightnessSettingForVrMode)) + { + return 0.0f; + } + + return _currentBrightnessSettingForVrMode; + } + + internal override void EnableVrMode() + { + _vrModeEnabled = true; + + // NOTE: Service check _vrModeEnabled field value in a thread and then change the screen brightness. + // Since we don't support that. It's fine to do nothing. + } + + internal override void DisableVrMode() + { + _vrModeEnabled = false; + + // NOTE: Service check _vrModeEnabled field value in a thread and then change the screen brightness. + // Since we don't support that. It's fine to do nothing. + } + + protected override bool IsVrModeEnabled() + { + return _vrModeEnabled; + } + } +} |
