diff options
| author | Ac_K <Acoustik666@gmail.com> | 2020-11-15 22:30:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-15 22:30:20 +0100 |
| commit | 313f8d2eb6e4833170d685d6afd940c077e066f6 (patch) | |
| tree | e5840f885fa0a7c83244806e11103748b6c928c0 /Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs | |
| parent | 4bc4cacdd0b615553a11cdcdb2aa7d3b563eac0b (diff) | |
am/lbl/hid/pctl: Enabled VR Rendering (#1688)
* am/lbl/hid/pctl: Enabled VR Rendering
This PR enable VR rendering on games which support it through the Toy-Con VR Goggles.
Please remember Ryujinx currently don't support console SixAxis sensor and for now, in some games, the view can't be moved.
Everything is implemented accordingly to RE:
- am: ICommonStateGetter: SetVrModeEnabled, BeginVrModeEx, EndVrModeEx.
- lbl: ILblController: SetBrightnessReflectionDelayLevel, GetBrightnessReflectionDelayLevel, SetCurrentAmbientLightSensorMapping, GetCurrentAmbientLightSensorMapping, SetCurrentBrightnessSettingForVrMode, GetCurrentBrightnessSettingForVrMode, EnableVrMode, DisableVrMode, IsVrModeEnabled.
- pctl: IParentalControlService: ConfirmStereoVisionPermission, ConfirmStereoVisionRestrictionConfigurable, GetStereoVisionRestriction, SetStereoVisionRestriction, ResetConfirmedStereoVisionPermission, IsStereoVisionPermitted.
- hid: IHidServer: ResetSevenSixAxisSensorTimestamp is stubbed because we don't support console SixAxisSensor for now.
Maybe we could add a setting later to enable or disable VR. But I think it's fine to keep this always available since you have to enable it in games.
* Fix permission flag check
* Address gdkchan feedback
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs b/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs index af468fca..0c792efa 100644 --- a/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs +++ b/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs @@ -10,6 +10,9 @@ namespace Ryujinx.HLE.HOS.Services.Pctl.ParentalControlServiceFactory private ulong _titleId; private bool _freeCommunicationEnabled; private int[] _ratingAge; + private bool _featuresRestriction = false; + private bool _stereoVisionRestrictionConfigurable = true; + private bool _stereoVisionRestriction = false; public IParentalControlService(ServiceCtx context, bool withInitialize, int permissionFlag) { @@ -79,5 +82,123 @@ namespace Ryujinx.HLE.HOS.Services.Pctl.ParentalControlServiceFactory return ResultCode.Success; } + + [Command(1013)] // 4.0.0+ + // ConfirmStereoVisionPermission() + public ResultCode ConfirmStereoVisionPermission(ServiceCtx context) + { + return IsStereoVisionPermittedImpl(); + } + + [Command(1061)] // 4.0.0+ + // ConfirmStereoVisionRestrictionConfigurable() + public ResultCode ConfirmStereoVisionRestrictionConfigurable(ServiceCtx context) + { + if ((_permissionFlag & 2) == 0) + { + return ResultCode.PermissionDenied; + } + + if (_stereoVisionRestrictionConfigurable) + { + return ResultCode.Success; + } + else + { + return ResultCode.StereoVisionRestrictionConfigurableDisabled; + } + } + + [Command(1062)] // 4.0.0+ + // GetStereoVisionRestriction() -> bool + public ResultCode GetStereoVisionRestriction(ServiceCtx context) + { + if ((_permissionFlag & 0x200) == 0) + { + return ResultCode.PermissionDenied; + } + + bool stereoVisionRestriction = false; + + if (_stereoVisionRestrictionConfigurable) + { + stereoVisionRestriction = _stereoVisionRestriction; + } + + context.ResponseData.Write(stereoVisionRestriction); + + return ResultCode.Success; + } + + [Command(1063)] // 4.0.0+ + // SetStereoVisionRestriction(bool) + public ResultCode SetStereoVisionRestriction(ServiceCtx context) + { + if ((_permissionFlag & 0x200) == 0) + { + return ResultCode.PermissionDenied; + } + + bool stereoVisionRestriction = context.RequestData.ReadBoolean(); + + if (!_featuresRestriction) + { + if (_stereoVisionRestrictionConfigurable) + { + _stereoVisionRestriction = stereoVisionRestriction; + + // TODO: It signals an internal event of service. We have to determine where this event is used. + } + } + + return ResultCode.Success; + } + + [Command(1064)] // 5.0.0+ + // ResetConfirmedStereoVisionPermission() + public ResultCode ResetConfirmedStereoVisionPermission(ServiceCtx context) + { + return ResultCode.Success; + } + + [Command(1065)] // 5.0.0+ + // IsStereoVisionPermitted() -> bool + public ResultCode IsStereoVisionPermitted(ServiceCtx context) + { + bool isStereoVisionPermitted = false; + + ResultCode resultCode = IsStereoVisionPermittedImpl(); + + if (resultCode == ResultCode.Success) + { + isStereoVisionPermitted = true; + } + + context.ResponseData.Write(isStereoVisionPermitted); + + return resultCode; + } + + private ResultCode IsStereoVisionPermittedImpl() + { + /* + // TODO: Application Exemptions are readed from file "appExemptions.dat" in the service savedata. + // Since we don't support the pctl savedata for now, this can be implemented later. + + if (appExemption) + { + return ResultCode.Success; + } + */ + + if (_stereoVisionRestrictionConfigurable && _stereoVisionRestriction) + { + return ResultCode.StereoVisionDenied; + } + else + { + return ResultCode.Success; + } + } } }
\ No newline at end of file |
