struct Crypto1State *pcs;\r
pcs = &mpcs;\r
\r
- // clear trace\r
- clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
bool turnOffField = (arg0 == 1);\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();\r
- clear_trace();\r
+\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card");\r
OnError(0);\r
\r
LEDsoff();\r
LED_A_ON();\r
- clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
int len = iso14443a_select_card(NULL, NULL, NULL);\r
if(!len) {\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%02X)",len);\r
struct Crypto1State *pcs;\r
pcs = &mpcs;\r
\r
- // clear trace\r
- clear_trace();\r
-\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
// datain = KEY bytes\r
void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)\r
{\r
+ LEDsoff();\r
+ LED_A_ON();\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
// free eventually allocated BigBuf memory\r
BigBuf_free();\r
clear_trace();\r
return;\r
}\r
\r
- LEDsoff();\r
- LED_A_ON();\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
int len = iso14443a_select_card(NULL, NULL, NULL);\r
if (!len) {\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%d)",len);\r
struct Crypto1State *pcs;\r
pcs = &mpcs;\r
\r
- // clear trace\r
- clear_trace();\r
-\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
\r
LEDsoff();\r
LED_A_ON();\r
- clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");\r
OnError(0);\r
memcpy(pwd, datain, 16);\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();\r
- clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ clear_trace();\r
+\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");\r
OnError(0);\r
uint32_t auth1_time, auth2_time;\r
static uint16_t delta_time;\r
\r
- // free eventually allocated BigBuf memory\r
- BigBuf_free();\r
- // clear trace\r
- clear_trace();\r
- set_tracing(false);\r
- \r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
LED_A_ON();\r
LED_C_OFF();\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
+ // free eventually allocated BigBuf memory\r
+ BigBuf_free();\r
\r
+ if (calibrate) clear_trace();\r
+ set_tracing(true);\r
+ \r
// statistics on nonce distance\r
int16_t isOK = 0;\r
#define NESTED_MAX_TRIES 12\r
\r
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
LEDsoff();\r
- set_tracing(TRUE);\r
}\r
\r
//-----------------------------------------------------------------------------\r
// MIFARE check keys. key count up to 85. \r
// \r
//-----------------------------------------------------------------------------\r
-void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)\r
+void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)\r
{\r
// params\r
- uint8_t blockNo = arg0;\r
- uint8_t keyType = arg1;\r
+ uint8_t blockNo = arg0 & 0xff;\r
+ uint8_t keyType = (arg0 >> 8) & 0xff;\r
+ bool clearTrace = arg1;\r
uint8_t keyCount = arg2;\r
uint64_t ui64Key = 0;\r
\r
int OLD_MF_DBGLEVEL = MF_DBGLEVEL; \r
MF_DBGLEVEL = MF_DBG_NONE;\r
\r
- // clear trace\r
- clear_trace();\r
- set_tracing(TRUE);\r
-\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
+ if (clearTrace) clear_trace();\r
+ set_tracing(TRUE);\r
\r
for (i = 0; i < keyCount; i++) {\r
if(mifare_classic_halt(pcs, cuid)) {\r
//-----------------------------------------------------------------------------\r
// Work with emulator memory\r
// \r
+// Note: we call FpgaDownloadAndGo(FPGA_BITSTREAM_HF) here although FPGA is not\r
+// involved in dealing with emulator memory. But if it is called later, it might\r
+// destroy the Emulator Memory.\r
//-----------------------------------------------------------------------------\r
+\r
void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
emlClearMem();\r
}\r
\r
void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
emlSetMem(datain, arg0, arg1); // data, block num, blocks count\r
}\r
\r
void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);\r
byte_t buf[USB_CMD_DATA_SIZE];\r
emlGetMem(buf, arg0, arg1); // data, block num, blocks count (max 4)\r
\r
byte_t dataoutbuf2[16];\r
uint8_t uid[10];\r
\r
- // clear trace\r
- clear_trace();\r
- set_tracing(false);\r
- \r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
-\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+ \r
+ clear_trace();\r
+ set_tracing(false);\r
\r
bool isOK = true;\r
\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
clear_trace();\r
set_tracing(TRUE);\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
}\r
\r
while (true) {\r
// bit 2 - need HALT after sequence\r
// bit 3 - need init FPGA and field before sequence\r
// bit 4 - need reset FPGA and LED\r
+ // bit 5 - need to set datain instead of issuing USB reply (called via ARM for StandAloneMode14a)\r
uint8_t workFlags = arg0;\r
uint8_t blockNo = arg2;\r
\r
LED_A_ON();\r
LED_B_OFF();\r
LED_C_OFF();\r
- \r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+\r
clear_trace();\r
set_tracing(TRUE);\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
}\r
\r
while (true) {\r
}\r
\r
LED_B_ON();\r
- cmd_send(CMD_ACK,isOK,0,0,data,18);\r
+ if (workFlags & 0x20) {\r
+ if (isOK)\r
+ memcpy(datain, data, 18);\r
+ }\r
+ else\r
+ cmd_send(CMD_ACK,isOK,0,0,data,18);\r
LED_B_OFF();\r
\r
if ((workFlags & 0x10) || (!isOK)) {\r
cmd_send(CMD_ACK,isOK,0,0,0,0);\r
}\r
\r
- //\r
+//\r
// DESFIRE\r
//\r
\r
uint8_t uid[10] = {0x00};\r
uint32_t cuid;\r
\r
- clear_trace();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
+ clear_trace();\r
\r
int len = iso14443a_select_card(uid, NULL, &cuid);\r
if(!len) {\r