コード例 #1
0
        public static void MainSelfLibNfc(string[] args)
        {
            Console.WriteLine("Hello");
            Console.WriteLine("Using libnfc {0}", NfcContext.Version);

            //CancellationTokenSource cts = new CancellationTokenSource();
            //Console.CancelKeyPress += (s, e) =>
            //{
            //    if (cts.IsCancellationRequested)
            //    {
            //        //Hard break, let it go
            //    }
            //    else
            //    {
            //        //soft break, handle it
            //        e.Cancel = true;
            //        cts.Cancel();
            //    }
            //};

            byte pollNr      = 1;
            byte period      = 1;
            var  modulations = new[]
            {
                new NfcModulation(NfcModulationType.ISO14443A, NfcBaudRate.BR106),
                new NfcModulation(NfcModulationType.ISO14443B, NfcBaudRate.BR106),
                new NfcModulation(NfcModulationType.Felica, NfcBaudRate.BR212),
                new NfcModulation(NfcModulationType.Felica, NfcBaudRate.BR424),
                new NfcModulation(NfcModulationType.Jewel, NfcBaudRate.BR106),
            };

            Console.WriteLine("Opening libnfc context. sizeof(NfcModulation)={0}", Marshal.SizeOf <NfcModulation>());
            using (NfcContext context = new NfcContext())
            {
                string[] devices = context.ListDevices();
                Console.WriteLine("Found devices: [{0}]", string.Join(";", devices));
                Console.WriteLine("Opening default device");
                using (NfcDevice device = context.Open(null))
                {
                    Console.WriteLine("Device opened");
                    Console.WriteLine("  name={0} constring={1}", device.Name, device.ConnectionString);
                    Console.WriteLine("  info={0}", device.GetInfo());
                    Console.WriteLine("Initializing as initiator");
                    INfcInitiator initiator = device.InitInitiator(false);
                    Console.WriteLine("NFC reader opened");
                    Console.WriteLine("NFC reader name: {0}", device.Name);

                    while (true)
                    {
                        PollTagsAndDisplayInfo(initiator);
                    }
                }
            }
        }
コード例 #2
0
        public static Task <NfcTarget> PollAsync(this INfcInitiator initiator, NfcModulation[] modulations, byte period, CancellationToken cancellationToken)
        {
            TaskCompletionSource <NfcTarget> tcs = new TaskCompletionSource <NfcTarget>();
            var data = new PollData
            {
                Initiator         = (NfcDevice)initiator,
                Modulations       = modulations,
                Period            = period,
                CancellationToken = cancellationToken,
                Tcs = tcs,
            };

            ThreadPool.QueueUserWorkItem(PollAsync, data);
            return(tcs.Task);
        }
コード例 #3
0
        public static MifareTag SelectMifareTag(this INfcInitiator initiator)
        {
            NfcDevice         device   = (NfcDevice)initiator;
            NfcModulation     ncMifare = new NfcModulation(NfcModulationType.ISO14443A, NfcBaudRate.BR106);
            NfcSelectedTarget target   = initiator.Select(ncMifare);

            if (target == null)
            {
                return(null);
            }

            if (target.Target.TasteMifareClassic1k())
            {
                return(new MifareClassic1kTag(target));
            }
            return(new GenericTag(target));
        }
コード例 #4
0
        private static void PollTagsAndDisplayInfo(INfcInitiator initiator)
        {
            NfcModulation mod = new NfcModulation(NfcModulationType.ISO14443A, NfcBaudRate.BR106);

            using (var tags = initiator.ListPassiveTargets(mod))
            {
                Console.WriteLine("Found tags: {0} for modulation {1}", tags.Count, mod);
                Console.WriteLine("Last error: {0}", ((NfcDevice)initiator).LastError);
                if (tags.Count == 0)
                {
                    return;
                }

                foreach (var target in tags)
                {
                    DisplayInfo(target);
                }
            }
            ////There are tags, select one
            //Console.WriteLine("Selecting Mifare tag");
            //var tag = initiator.SelectMifareTag();
            //if (tag == null)
            //{
            //    Console.WriteLine("No corresponding tags selected");
            //    return;
            //}
            //using (tag)
            //{
            //    Console.WriteLine("Tag on board");


            //    while (tag.IsPresent())
            //    {
            //        Thread.Sleep(300);
            //        Console.Write(".");
            //    }
            //    Console.WriteLine();
            //    Console.WriteLine("Tag removed");
            //}
        }