Пример #1
0
 private async void NfcService_OnNfcTagRead(object sender, NfcTagInfo e)
 {
     nfcService.StopReadingTag();
     btnRead.IsEnabled = true;
     Device.BeginInvokeOnMainThread(() => lbState.Text = "NFC card read");
     await ShowNfcMessage(e.Records.FirstOrDefault());
 }
Пример #2
0
        private void ManageReadOperation()
        {
            //TODO 2. READING CARD 5
            NfcTagInfo nTag = GetNfcTagInfo(currentTag);

            OnNfcTagRead?.Invoke(this, nTag);
            currentIntent = null;
        }
Пример #3
0
        public void start()
        {
            g_TagCB.onTagArrival = (IntPtr unmanagedAddr) =>
            {
                NfcTagInfo g_tagInfos = new NfcTagInfo();

                g_tagInfos = (NfcTagInfo)Marshal.PtrToStructure(unmanagedAddr, typeof(NfcTagInfo));

                byte[] uidArray = new byte[g_tagInfos.uid_length];
                for (int i = 0; i < g_tagInfos.uid_length; i++)
                {
                    uidArray[i] = g_tagInfos.uid[i];
                }
                string uidString = BitConverter.ToString(uidArray).Replace("-", "");
                Console.WriteLine("Tag arrived! ID: {0}", uidString);

                if (readerMode == READER_MODE_IDLE)
                {
                    if (!findUser(uidString))
                    {
                        Console.WriteLine("Cannot find user");
                        createAccessRequest(uidString, false);
                    }
                    else
                    {
                        Console.WriteLine("User found!");
                        createAccessRequest(uidString, true);
                    }
                }
                else if (readerMode == READER_MODE_WRITE_KEY)
                {
                    if (!createUser(uidString))
                    {
                        Console.WriteLine("Cannot create user");
                    }

                    else
                    {
                        Console.WriteLine("User created!");
                    }
                }
            };

            g_TagCB.onTagDeparture = () =>
            {
                Console.WriteLine("Tag departed!");
            };

            IntPtr unmanagedAddr = Marshal.AllocHGlobal(Marshal.SizeOf(g_TagCB));

            Marshal.StructureToPtr(g_TagCB, unmanagedAddr, true);

            nfcManager_doInitialize();
            nfcManager_registerTagCallback(unmanagedAddr);
            nfcManager_enableDiscovery(-1, 0x01, 0, 0);

            Console.Write("NFC poll started!\n");
        }
Пример #4
0
        private void OnNdefRed(NFCNdefMessage message, NSError error)
        {
            if (message == null)
            {
                OnNfcTagRead?.Invoke(this, null);
                return;
            }
            NfcTagInfo tagInfo = new NfcTagInfo();

            tagInfo.Records = GetRecords(message.Records);

            OnNfcTagRead?.Invoke(this, tagInfo);
        }
Пример #5
0
        private NfcTagInfo GetNfcTagInfo(Tag tag)
        {
            if (tag == null)
            {
                return(null);
            }

            Ndef       ndef = Ndef.Get(tag);
            NfcTagInfo nTag = new NfcTagInfo();

            if (ndef != null)
            {
                if (ndef.CachedNdefMessage != null)
                {
                    NdefMessage ndefMessage = ndef.CachedNdefMessage; //TODO 2. READING CARD 6 ndef.NdefMessage -> TagLost
                    var         records     = ndefMessage.GetRecords();
                    nTag.Records = GetRecords(records);
                }
            }

            return(nTag);
        }