aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs')
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs147
1 files changed, 0 insertions, 147 deletions
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
deleted file mode 100644
index 5d5a26c2..00000000
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-using Ryujinx.Common.Logging;
-using Ryujinx.Common.Memory;
-using Ryujinx.HLE.HOS.Services.Am.AppletAE;
-using Ryujinx.HLE.HOS.Services.Hid;
-using Ryujinx.HLE.HOS.Services.Hid.Types;
-using System;
-using System.IO;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using static Ryujinx.HLE.HOS.Services.Hid.HidServer.HidUtils;
-
-namespace Ryujinx.HLE.HOS.Applets
-{
- internal class ControllerApplet : IApplet
- {
- private Horizon _system;
-
- private AppletSession _normalSession;
-
- public event EventHandler AppletStateChanged;
-
- public ControllerApplet(Horizon system)
- {
- _system = system;
- }
-
- public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
- {
- _normalSession = normalSession;
-
- byte[] launchParams = _normalSession.Pop();
- byte[] controllerSupportArgPrivate = _normalSession.Pop();
- ControllerSupportArgPrivate privateArg = IApplet.ReadStruct<ControllerSupportArgPrivate>(controllerSupportArgPrivate);
-
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerApplet ArgPriv {privateArg.PrivateSize} {privateArg.ArgSize} {privateArg.Mode} " +
- $"HoldType:{(NpadJoyHoldType)privateArg.NpadJoyHoldType} StyleSets:{(ControllerType)privateArg.NpadStyleSet}");
-
- if (privateArg.Mode != ControllerSupportMode.ShowControllerSupport)
- {
- _normalSession.Push(BuildResponse()); // Dummy response for other modes
- AppletStateChanged?.Invoke(this, null);
-
- return ResultCode.Success;
- }
-
- byte[] controllerSupportArg = _normalSession.Pop();
-
- ControllerSupportArgHeader argHeader;
-
- if (privateArg.ArgSize == Marshal.SizeOf<ControllerSupportArgV7>())
- {
- ControllerSupportArgV7 arg = IApplet.ReadStruct<ControllerSupportArgV7>(controllerSupportArg);
- argHeader = arg.Header;
-
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerSupportArg Version 7 EnableExplainText={arg.EnableExplainText != 0}");
- // Read enable text here?
- }
- else if (privateArg.ArgSize == Marshal.SizeOf<ControllerSupportArgVPre7>())
- {
- ControllerSupportArgVPre7 arg = IApplet.ReadStruct<ControllerSupportArgVPre7>(controllerSupportArg);
- argHeader = arg.Header;
-
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerSupportArg Version Pre-7 EnableExplainText={arg.EnableExplainText != 0}");
- // Read enable text here?
- }
- else
- {
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerSupportArg Version Unknown");
-
- argHeader = IApplet.ReadStruct<ControllerSupportArgHeader>(controllerSupportArg); // Read just the header
- }
-
- int playerMin = argHeader.PlayerCountMin;
- int playerMax = argHeader.PlayerCountMax;
- bool singleMode = argHeader.EnableSingleMode != 0;
-
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerApplet Arg {playerMin} {playerMax} {argHeader.EnableTakeOverConnection} {argHeader.EnableSingleMode}");
-
- if (singleMode)
- {
- // Applications can set an arbitrary player range even with SingleMode, so clamp it
- playerMin = playerMax = 1;
- }
-
- int configuredCount = 0;
- PlayerIndex primaryIndex = PlayerIndex.Unknown;
- while (!_system.Device.Hid.Npads.Validate(playerMin, playerMax, (ControllerType)privateArg.NpadStyleSet, out configuredCount, out primaryIndex))
- {
- ControllerAppletUiArgs uiArgs = new ControllerAppletUiArgs
- {
- PlayerCountMin = playerMin,
- PlayerCountMax = playerMax,
- SupportedStyles = (ControllerType)privateArg.NpadStyleSet,
- SupportedPlayers = _system.Device.Hid.Npads.GetSupportedPlayers(),
- IsDocked = _system.State.DockedMode
- };
-
- if (!_system.Device.UiHandler.DisplayMessageDialog(uiArgs))
- {
- break;
- }
- }
-
- ControllerSupportResultInfo result = new ControllerSupportResultInfo
- {
- PlayerCount = (sbyte)configuredCount,
- SelectedId = (uint)GetNpadIdTypeFromIndex(primaryIndex)
- };
-
- Logger.Stub?.PrintStub(LogClass.ServiceHid, $"ControllerApplet ReturnResult {result.PlayerCount} {result.SelectedId}");
-
- _normalSession.Push(BuildResponse(result));
- AppletStateChanged?.Invoke(this, null);
-
- _system.ReturnFocus();
-
- return ResultCode.Success;
- }
-
- public ResultCode GetResult()
- {
- return ResultCode.Success;
- }
-
- private byte[] BuildResponse(ControllerSupportResultInfo result)
- {
- using (MemoryStream stream = MemoryStreamManager.Shared.GetStream())
- using (BinaryWriter writer = new BinaryWriter(stream))
- {
- writer.Write(MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref result, Unsafe.SizeOf<ControllerSupportResultInfo>())));
-
- return stream.ToArray();
- }
- }
-
- private byte[] BuildResponse()
- {
- using (MemoryStream stream = MemoryStreamManager.Shared.GetStream())
- using (BinaryWriter writer = new BinaryWriter(stream))
- {
- writer.Write((ulong)ResultCode.Success);
-
- return stream.ToArray();
- }
- }
- }
-}