using NUnit.Framework; using System; using System.Collections.Generic; using System.Text; using NFC; using NFC.Readers.PCSC; using System.Threading; using NFC.Mifare_DESFire; namespace NFC_Test { [TestFixture, Explicit] public class REAL_Windows { [Test] public void GetReaders() { IHardware hardware = new Hardware(); string[] readers = hardware.GetReaders(); Console.WriteLine("Readers detected: {0}", readers.Length); if(readers.Length > 0) { Console.WriteLine("List of ReaderIDs:"); foreach (string readerID in readers) { Console.WriteLine("{0}", readerID); } } } [TestCase("ACS ACR122U PICC Interface 0")] public void Connect(string readerID) { IHardware hardware = new Hardware(); IReader reader = hardware.OpenReader(readerID); bool connected_successfully = false; ReaderEventHandler handler = (sender, card) => { card.Connect(); connected_successfully = true; card.Disconnect(); }; reader.CardDiscovered += handler; reader.Start(); Assert.AreEqual(true, connected_successfully); reader.Stop(); reader.CardDiscovered -= handler; } [TestCase("ACS ACR122U PICC Interface 0")] public void GetApplicationIDs(string readerID) { IHardware hardware = new Hardware(); IReader reader = hardware.OpenReader(readerID); bool transmit_successfully = false; ReaderEventHandler handler = (sender, card) => { card.Connect(); MifareDESFire desfire = new MifareDESFire(); APDUCommand cmd = desfire.GetApplicationIDs(); APDUResponse response = card.Transmit(cmd); if (response.StatusWord == NFC.Mifare_DESFire.APDUStatusWords.OK) { UInt32[] ApplicationIDs = desfire.ConvertApplicationIDs(response); foreach(UInt32 id in ApplicationIDs) { Console.WriteLine("0x{0:X3}", id); } transmit_successfully = true; } card.Disconnect(); }; reader.CardDiscovered += handler; reader.Start(); Assert.AreEqual(true, transmit_successfully); reader.Stop(); reader.CardDiscovered -= handler; } [TestCase("ACS ACR122U PICC Interface 0", (UInt32)0xC0FFEE)] public void SelectApplication(string readerID, UInt32 applicationID) { IHardware hardware = new Hardware(); IReader reader = hardware.OpenReader(readerID); bool transmit_successfully = false; ReaderEventHandler handler = (sender, card) => { card.Connect(); MifareDESFire desfire = new MifareDESFire(); APDUCommand cmd = desfire.SelectApplication(applicationID); cmd.ToArray(); APDUResponse response = card.Transmit(cmd); if (response.StatusWord == NFC.Mifare_DESFire.APDUStatusWords.OK) { transmit_successfully = true; } card.Disconnect(); }; reader.CardDiscovered += handler; reader.Start(); Assert.AreEqual(true, transmit_successfully); reader.Stop(); reader.CardDiscovered -= handler; } } }