2020-09-15 15:27:01 +02:00

64 lines
1.6 KiB
C#

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;
}
}
}