diff --git a/sample-pcsc/src/main/java/com/github/devnied/emvpcsccard/EMV-NFC Paycard b/sample-pcsc/src/main/java/com/github/devnied/emvpcsccard/EMV-NFC Paycard new file mode 100644 index 00000000..e436e3ed --- /dev/null +++ b/sample-pcsc/src/main/java/com/github/devnied/emvpcsccard/EMV-NFC Paycard @@ -0,0 +1,127 @@ +package com.github.devnied.emvpcsccard; + +import java.nio.ByteBuffer; + +import javax.smartcardio.CardChannel; + +import javax.smartcardio.CardException; + +import org.slf4j.Logger; + +import org.slf4j.LoggerFactory; + +import com.github.devnied.emvnfccard.enums.SwEnum; + +import com.github.devnied.emvnfccard.exception.CommunicationException; + +import com.github.devnied.emvnfccard.parser.IProvider; + +import com.github.devnied.emvnfccard.utils.TlvUtil; + +import fr.devnied.bitlib.BytesUtils; + +public class PcscProvider implements IProvider { + + /** * Class logger + + */ + + private static final Logger LOGGER = LoggerFactory.getLogger(PcscProvider.class); + + /** + + * CardChanel + + */ + + private final CardChannel channel; + + /** + + * Buffer + + */ + + private final ByteBuffer buffer = ByteBuffer.allocate(1024); + + /** + + * Constructor using field + + * + + * @param pChannel + + * card channel + + */ + + public PcscProvider(final CardChannel pChannel) { + + channel = pChannel; + + } + + @Override + + public byte[] transceive(final byte[] pCommand) throws CommunicationException { + + byte[] ret = null; + + buffer.clear(); + + if (LOGGER.isDebugEnabled()) { + + LOGGER.debug("send: " + BytesUtils.bytesToString(pCommand)); + + } + + try { + + int nbByte = channel.transmit(ByteBuffer.wrap(pCommand), buffer); + + ret = new byte[nbByte]; + + System.arraycopy(buffer.array(), 0, ret, 0, ret.length); + + } catch (CardException e) { + + // Do nothing + + } + + if (LOGGER.isDebugEnabled()) { + + LOGGER.debug("resp: " + BytesUtils.bytesToString(ret)); + + try { + + LOGGER.debug("resp: " + TlvUtil.prettyPrintAPDUResponse(ret)); + + SwEnum val = SwEnum.getSW(ret); + + if (val != null) { + + LOGGER.debug("resp: " + val.getDetail()); + + } + + } catch (Exception e) { + + } + + } + + return ret; + + } + + @Override + + public byte[] getAt() { + + return channel.getCard().getATR().getBytes(); + + } + +}