// free eventually allocated BigBuf memory\r
BigBuf_free();\r
\r
- clear_trace();\r
- set_tracing(false);\r
+ if (calibrate) clear_trace();\r
+ set_tracing(true);\r
\r
// statistics on nonce distance\r
int16_t isOK = 0;\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
LED_C_OFF();\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);\r
\r
- clear_trace();\r
+ if (clearTrace) clear_trace();\r
set_tracing(TRUE);\r
\r
for (i = 0; i < keyCount; i++) {\r
break;\r
};\r
\r
- if(mifare_classic_halt(NULL, cuid)) {\r
- if (MF_DBGLEVEL >= 1) Dbprintf("Halt error");\r
- break;\r
- };\r
+ mifare_classic_halt(NULL, cuid);\r
};\r
\r
// reset chip\r
break;\r
};\r
\r
- if(mifare_classic_halt(NULL, cuid)) {\r
- if (MF_DBGLEVEL >= 1) Dbprintf("Halt error");\r
- break;\r
- };\r
+ mifare_classic_halt(NULL, cuid);\r
}; \r
\r
// write block\r
}; \r
\r
if (workFlags & 0x04) {\r
- if (mifare_classic_halt(NULL, cuid)) {\r
- if (MF_DBGLEVEL >= 1) Dbprintf("Halt error");\r
- break;\r
- };\r
+ mifare_classic_halt(NULL, cuid);\r
}\r
\r
isOK = 1;\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
memcpy(data, receivedAnswer, 18);\r
\r
if (workFlags & 0x04) {\r
- if (mifare_classic_halt(NULL, cuid)) {\r
- if (MF_DBGLEVEL >= 1) Dbprintf("Halt error");\r
- break;\r
- };\r
+ mifare_classic_halt(NULL, cuid);\r
}\r
\r
isOK = 1;\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
// card commands\r
uint8_t wupC1[] = { 0x40 }; \r
uint8_t wupC2[] = { 0x43 }; \r
+ uint8_t halt_ret = 0;\r
\r
// variables\r
byte_t isOK = 1;\r
isOK = 0;\r
};\r
\r
- if (mifare_classic_halt(NULL, 0)) {\r
+ halt_ret = mifare_classic_halt(NULL, 0);\r
+ if (halt_ret && halt_ret != 4) {\r
isOK = 0;\r
};\r
\r