Răsfoiți Sursa

Manage state of NfcManager (#3678)

* Manage state of NfcManager

Very basic state management but works with Hyrule Warriors Definitive Edition. Partially fixes #2122

* Fixes changes from review
Carl Ouellette 3 ani în urmă
părinte
comite
2099a3e84b

+ 27 - 1
Ryujinx.HLE/HOS/Services/Nfc/NfcManager/INfc.cs

@@ -5,22 +5,48 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.NfcManager
     class INfc : IpcService
     {
         private NfcPermissionLevel _permissionLevel;
+        private State _state;
 
         public INfc(NfcPermissionLevel permissionLevel)
         {
             _permissionLevel = permissionLevel;
+            _state = State.NonInitialized;
         }
 
         [CommandHipc(0)]
         [CommandHipc(400)] // 4.0.0+
-        // Initialize()
+        // Initialize(u64, u64, pid, buffer<unknown, 5>)
         public ResultCode Initialize(ServiceCtx context)
         {
+            _state = State.Initialized;
+
             Logger.Stub?.PrintStub(LogClass.ServiceNfc, new { _permissionLevel });
 
             return ResultCode.Success;
         }
 
+        [CommandHipc(1)]
+        [CommandHipc(401)] // 4.0.0+
+        // Finalize()
+        public ResultCode Finalize(ServiceCtx context)
+        {
+            _state = State.NonInitialized;
+
+            Logger.Stub?.PrintStub(LogClass.ServiceNfc, new { _permissionLevel });
+
+            return ResultCode.Success;
+        }
+
+        [CommandHipc(2)]
+        [CommandHipc(402)] // 4.0.0+
+        // GetState() -> u32
+        public ResultCode GetState(ServiceCtx context) 
+        {
+            context.ResponseData.Write((int)_state);
+
+            return ResultCode.Success;
+        }
+
         [CommandHipc(3)]
         [CommandHipc(403)] // 4.0.0+
         // IsNfcEnabled() -> b8

+ 8 - 0
Ryujinx.HLE/HOS/Services/Nfc/NfcManager/Types/State.cs

@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Nfc.NfcManager
+{
+    enum State
+    {
+        NonInitialized,
+        Initialized
+    }
+}