sim: Obtain card ATR when opening the card

Change-Id: I42e387535c40f371b06f384af0ca5dc1e42ed00e
diff --git a/src/sim/reader_pcsc.c b/src/sim/reader_pcsc.c
index c37380a..7d424b8 100644
--- a/src/sim/reader_pcsc.c
+++ b/src/sim/reader_pcsc.c
@@ -56,6 +56,27 @@
 	char *name;
 };
 
+static int pcsc_get_atr(struct osim_card_hdl *card)
+{
+	struct osim_reader_hdl *rh = card->reader;
+	struct pcsc_reader_state *st = rh->priv;
+	char pbReader[MAX_READERNAME];
+	DWORD dwReaderLen = sizeof(pbReader);
+	DWORD dwAtrLen = sizeof(card->atr);
+	DWORD dwState, dwProt;
+	long rc;
+
+	rc = SCardStatus(st->hCard, pbReader, &dwReaderLen, &dwState, &dwProt,
+			 card->atr, &dwAtrLen);
+	PCSC_ERROR(rc, "SCardStatus");
+	card->atr_len = dwAtrLen;
+
+	return 0;
+
+end:
+	return -EIO;
+}
+
 static struct osim_reader_hdl *pcsc_reader_open(int num, const char *id, void *ctx)
 {
 	struct osim_reader_hdl *rh;
@@ -130,6 +151,8 @@
 	chan->card = card;
 	llist_add(&chan->list, &card->channels);
 
+	pcsc_get_atr(card);
+
 	return card;
 
 end: