aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2020-11-15 22:30:20 +0100
committerGitHub <noreply@github.com>2020-11-15 22:30:20 +0100
commit313f8d2eb6e4833170d685d6afd940c077e066f6 (patch)
treee5840f885fa0a7c83244806e11103748b6c928c0 /Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs
parent4bc4cacdd0b615553a11cdcdb2aa7d3b563eac0b (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.cs121
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