#nullable enable using System; using System.Runtime.CompilerServices; namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp { /// /// A small static buffer + an API that we access from the Android side via reflection. /// public static class KenjinxAmiiboShim { private static byte[]? s_tag; [MethodImpl(MethodImplOptions.NoInlining)] public static bool InjectAmiibo(byte[] tagBytes) { if (tagBytes is null || tagBytes.Length == 0) return false; s_tag = (byte[])tagBytes.Clone(); System.Diagnostics.Debug.WriteLine($"[Kenjinx] KenjinxAmiiboShim.InjectAmiibo bytes={tagBytes.Length}"); return true; } [MethodImpl(MethodImplOptions.NoInlining)] public static void ClearAmiibo() { s_tag = null; System.Diagnostics.Debug.WriteLine("[Kenjinx] KenjinxAmiiboShim.ClearAmiibo"); } // ▼ Used by INfp – retrieves the data exactly once a day and empties the buffer public static bool TryConsume(out byte[] data) { if (s_tag is null) { data = Array.Empty(); return false; } data = s_tag; s_tag = null; return true; } // ▼ Convenient alias public static void Clear() => ClearAmiibo(); public static bool HasInjectedAmiibo => s_tag is not null; public static ReadOnlySpan PeekInjectedAmiibo() => s_tag is null ? ReadOnlySpan.Empty : new ReadOnlySpan(s_tag); } }