X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/c2731f37bef482bde1a87d79566c0b3bde658c98..e069d740e376914c9d639630e04898e28918f1ff:/armsrc/mifaredesfire.c

diff --git a/armsrc/mifaredesfire.c b/armsrc/mifaredesfire.c
index cacd767f..6a9baead 100644
--- a/armsrc/mifaredesfire.c
+++ b/armsrc/mifaredesfire.c
@@ -1,5 +1,4 @@
 #include "mifaredesfire.h"
-#include "BigBuf.h"
 
 #define MAX_APPLICATION_COUNT 28
 #define MAX_FILE_COUNT 16
@@ -19,17 +18,13 @@ static  uint8_t deselect_cmd[] = {0xc2,0xe0,0xb4};
 
 bool InitDesfireCard(){
 
+	iso14a_card_select_t card;
+	
 	iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
 	set_tracing(TRUE);
 
-	byte_t cardbuf[USB_CMD_DATA_SIZE] = {0x00};
-	iso14a_card_select_t *card = (iso14a_card_select_t*)cardbuf;
-	
-	int len = iso14443a_select_card(NULL,card,NULL);
-
-	if (!len) {
-		if (MF_DBGLEVEL >= MF_DBG_ERROR)
-			Dbprintf("Can't select card");
+	if (!iso14443a_select_card(NULL, &card, NULL, true, 0)) {
+		if (MF_DBGLEVEL >= MF_DBG_ERROR) DbpString("Can't select card");
 		OnError(1);
 		return false;
 	}
@@ -63,9 +58,8 @@ void MifareSendCommand(uint8_t arg0, uint8_t arg1, uint8_t *datain){
 		print_result(" RX    : ", datain, datalen);
 	}
 	
-	if ( flags & CLEARTRACE ){
+	if ( flags & CLEARTRACE )
 		clear_trace();
-	}
 	
 	if ( flags & INIT ){
 		if ( !InitDesfireCard() )
@@ -73,9 +67,8 @@ void MifareSendCommand(uint8_t arg0, uint8_t arg1, uint8_t *datain){
 	}
 	
 	int len = DesfireAPDU(datain, datalen, resp);
-	if (MF_DBGLEVEL >= 4) {
+	if (MF_DBGLEVEL >= 4)
 		print_result("ERR <--: ", resp, len);
-	}
 
 	if ( !len ) {
 		OnError(2);
@@ -85,9 +78,8 @@ void MifareSendCommand(uint8_t arg0, uint8_t arg1, uint8_t *datain){
 	// reset the pcb_blocknum,
 	pcb_blocknum = 0;
 	
-	if ( flags & DISCONNECT ){
+	if ( flags & DISCONNECT )
 		OnSuccess();
-	}
 	
 	cmd_send(CMD_ACK,1,len,0,resp,len);
 }
@@ -95,9 +87,9 @@ void MifareSendCommand(uint8_t arg0, uint8_t arg1, uint8_t *datain){
 void MifareDesfireGetInformation(){
 		
 	int len = 0;
+	iso14a_card_select_t card;
 	uint8_t resp[USB_CMD_DATA_SIZE] = {0x00};
 	uint8_t dataout[USB_CMD_DATA_SIZE] = {0x00};
-	byte_t cardbuf[USB_CMD_DATA_SIZE] = {0x00};
 	
 	/*
 		1 = PCB					1
@@ -113,17 +105,13 @@ void MifareDesfireGetInformation(){
 	iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
 
 	// card select - information
-	iso14a_card_select_t *card = (iso14a_card_select_t*)cardbuf;
-	byte_t isOK = iso14443a_select_card(NULL, card, NULL);
-	if ( isOK == 0) {
-		if (MF_DBGLEVEL >= MF_DBG_ERROR) {
-			Dbprintf("Can't select card");
-		}
+	if ( !iso14443a_select_card(NULL, &card, NULL, true, 0) ) {
+		if (MF_DBGLEVEL >= MF_DBG_ERROR) DbpString("Can't select card");
 		OnError(1);
 		return;
 	}
 
-	memcpy(dataout,card->uid,7);
+	memcpy(dataout, card.uid, 7);
 
 	LED_A_ON();
 	LED_B_OFF();
@@ -510,20 +498,18 @@ int DesfireAPDU(uint8_t *cmd, size_t cmd_len, uint8_t *dataout){
 	size_t len = 0;
 	size_t wrappedLen = 0;
 	uint8_t wCmd[USB_CMD_DATA_SIZE] = {0x00};
-	
 	uint8_t resp[MAX_FRAME_SIZE];
     uint8_t par[MAX_PARITY_SIZE];
 	
 	wrappedLen = CreateAPDU( cmd, cmd_len, wCmd);
 	
-	if (MF_DBGLEVEL >= 4) {
+	if (MF_DBGLEVEL >= 4)
 		print_result("WCMD <--: ", wCmd, wrappedLen);	
-	}
+
 	ReaderTransmit( wCmd, wrappedLen, NULL);
 
 	len = ReaderReceive(resp, par);
-	
-	if( len == 0x00 ){
+	if ( !len ) {
 		if (MF_DBGLEVEL >= 4) Dbprintf("fukked");
 		return FALSE; //DATA LINK ERROR
 	}
@@ -569,6 +555,7 @@ size_t CreateAPDU( uint8_t *datain, size_t len, uint8_t *dataout){
 void OnSuccess(){
 	pcb_blocknum = 0;
 	ReaderTransmit(deselect_cmd, 3 , NULL);
+	mifare_ultra_halt();
 	FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 	LEDsoff();
 	set_tracing(FALSE);