package com.github.devnied.emvnfccard.provider;
import java.io.IOException;
import android.nfc.tech.IsoDep;
import android.util.Log;
import com.github.devnied.emvnfccard.BuildConfig;
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;
/**
* Provider used to communicate with EMV card
*
* @author Millau Julien
*
*/
public class Provider implements IProvider {
/**
* TAG for logger
*/
private static final String TAG = Provider.class.getName();
/**
* Logger
*/
private StringBuffer log = new StringBuffer();
/**
* Tag comm
*/
private IsoDep mTagCom;
@Override
public byte[] transceive(final byte[] pCommand) throws CommunicationException {
if (BuildConfig.DEBUG) {
Log.d(TAG, "send: " + BytesUtils.bytesToString(pCommand));
}
log.append("=================<br/>");
log.append("<font color='green'><b>send:</b> " + BytesUtils.bytesToString(pCommand)).append("</font><br/>");
byte[] response = null;
try {
// send command to emv card
response = mTagCom.transceive(pCommand);
} catch (IOException e) {
throw new CommunicationException(e.getMessage());
}
log.append("<font color='blue'><b>resp:</b> " + BytesUtils.bytesToString(response)).append("</font><br/>");
Log.d(TAG, "resp: " + BytesUtils.bytesToString(response));
try {
Log.d(TAG, "resp: " + TlvUtil.prettyPrintAPDUResponse(response));
SwEnum val = SwEnum.getSW(response);
if (val != null) {
Log.d(TAG, "resp: " + val.getDetail());
}
log.append("<pre>").append(TlvUtil.prettyPrintAPDUResponse(response).replace("\n", "<br/>").replace(" ", " "))
.append("</pre><br/>");
} catch (Exception e) {
}
return response;
}
/**
* Setter for the field mTagCom
*
* @param mTagCom
* the mTagCom to set
*/
public void setmTagCom(final IsoDep mTagCom) {
this.mTagCom = mTagCom;
}
/**
* Method used to get the field log
*
* @return the log
*/
public StringBuffer getLog() {
return log;
}
}