int CmdHF14BList(const char *Cmd)
{
- uint8_t got[TRACE_BUFFER_SIZE];
- GetFromBigBuf(got,sizeof(got),0);
- WaitForResponse(CMD_ACK,NULL);
-
- PrintAndLog("recorded activity:");
+ uint8_t *got = malloc(USB_CMD_DATA_SIZE);
+
+ // Query for the actual size of the trace
+ UsbCommand response;
+ GetFromBigBuf(got, USB_CMD_DATA_SIZE, 0);
+ WaitForResponse(CMD_ACK, &response);
+ uint16_t traceLen = response.arg[2];
+ if (traceLen > USB_CMD_DATA_SIZE) {
+ uint8_t *p = realloc(got, traceLen);
+ if (p == NULL) {
+ PrintAndLog("Cannot allocate memory for trace");
+ free(got);
+ return 2;
+ }
+ got = p;
+ GetFromBigBuf(got, traceLen, 0);
+ WaitForResponse(CMD_ACK,NULL);
+ }
+ PrintAndLog("recorded activity: (TraceLen = %d bytes)", traceLen);
PrintAndLog(" time :rssi: who bytes");
PrintAndLog("---------+----+----+-----------");
for(;;) {
- if(i >= TRACE_BUFFER_SIZE) { break; }
+ if(i >= traceLen) { break; }
bool isResponse;
int timestamp = *((uint32_t *)(got+i));
if(len > 100) {
break;
}
- if(i + len >= TRACE_BUFFER_SIZE) {
+ if(i + len >= traceLen) {
break;
}
prev = timestamp;
i += (len + 9);
}
+ free(got);
return 0;
}
UsbCommand resp;
uint8_t *recv;
UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}}; // len,recv?
- uint8_t reply = 1;
- uint8_t crc = 0;
- uint8_t power = 0;
- char buf[5] = "";
- int i = 0;
+ uint8_t reply=1;
+ uint8_t crc=0;
+ uint8_t power=0;
+ char buf[5]="";
+ int i=0;
uint8_t data[100] = {0x00};
unsigned int datalen=0, temp;
char *hexout;
switch (cmd[i+1]) {
case 'r':
case 'R':
- reply = 0;
+ reply=0;
break;
case 'c':
case 'C':
- crc = 1;
+ crc=1;
break;
case 'p':
case 'P':
- power = 1;
+ power=1;
break;
default:
PrintAndLog("Invalid option");
PrintAndLog("Invalid char on input");
return 1;
}
-
- if (datalen == 0) {
+ if (datalen == 0)
+ {
PrintAndLog("Missing data input");
- return 1;
+ return 0;
}
-
- if(crc) {
+ if(crc)
+ {
uint8_t first, second;
ComputeCrc14443(CRC_14443_B, data, datalen, &first, &second);
data[datalen++] = first;