using PCSC; using PCSC.Iso7816; namespace NFC.Readers.PCSC { public class Card : ICard { private IsoReader _ISOReader; private string _ReaderID; public Card(IsoReader isoreader, string readerID) { _ISOReader = isoreader; _ReaderID = readerID; } public void Connect() { _ISOReader.Connect(_ReaderID, SCardShareMode.Shared, SCardProtocol.Any); } public void Disconnect() { _ISOReader.Disconnect(SCardReaderDisposition.Eject); } public APDUResponse Transmit(APDUCommand apdu_cmd) { Response response = _ISOReader.Transmit(Convert(apdu_cmd)); return Convert(response); } public CommandApdu Convert(APDUCommand apdu_cmd) { CommandApdu apdu = new CommandApdu(IsoCase.Case2Short, _ISOReader.ActiveProtocol) { CLA = apdu_cmd.Class, INS = apdu_cmd.Instruction, P1 = apdu_cmd.Parameter1, P2 = apdu_cmd.Parameter2, Data = apdu_cmd.Data, Le = apdu_cmd.LengthExpected }; return apdu; } public APDUResponse Convert(Response response) { ResponseApdu responseApdu = response.Get(0); APDUResponse apduResponse = new APDUResponse() { SW1 = responseApdu.SW1, SW2 = responseApdu.SW2, Body = responseApdu.GetData() }; return apduResponse; } } }