mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-19 04:49:38 -07:00
Generic tracing pt.3 : reworking how iso14443b-traces are stored in ARM-memory
This commit is contained in:
parent
355c8b4a7d
commit
9e8255d4e9
5 changed files with 32 additions and 24 deletions
|
@ -986,7 +986,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
|
||||||
void __attribute__((noreturn)) AppMain(void)
|
void __attribute__((noreturn)) AppMain(void)
|
||||||
{
|
{
|
||||||
SpinDelay(100);
|
SpinDelay(100);
|
||||||
|
clear_trace();
|
||||||
if(common_area.magic != COMMON_AREA_MAGIC || common_area.version != 1) {
|
if(common_area.magic != COMMON_AREA_MAGIC || common_area.version != 1) {
|
||||||
/* Initialize common area */
|
/* Initialize common area */
|
||||||
memset(&common_area, 0, sizeof(common_area));
|
memset(&common_area, 0, sizeof(common_area));
|
||||||
|
|
|
@ -628,30 +628,26 @@ static void GetSamplesFor14443Demod(int weTx, int n, int quiet)
|
||||||
int max = 0;
|
int max = 0;
|
||||||
int gotFrame = FALSE;
|
int gotFrame = FALSE;
|
||||||
|
|
||||||
//# define DMA_BUFFER_SIZE 8
|
|
||||||
int8_t *dmaBuf;
|
|
||||||
|
|
||||||
int lastRxCounter;
|
int lastRxCounter;
|
||||||
int8_t *upTo;
|
|
||||||
|
|
||||||
int ci, cq;
|
int ci, cq;
|
||||||
|
|
||||||
int samples = 0;
|
int samples = 0;
|
||||||
|
|
||||||
// Clear out the state of the "UART" that receives from the tag.
|
// Clear out the state of the "UART" that receives from the tag.
|
||||||
memset(BigBuf, 0x00, 400);
|
memset(Demod.output, 0x00, MAX_FRAME_SIZE);
|
||||||
Demod.output = (uint8_t *)BigBuf;
|
Demod.output = ((uint8_t *)BigBuf) + RECV_RESP_OFFSET;
|
||||||
Demod.len = 0;
|
Demod.len = 0;
|
||||||
Demod.state = DEMOD_UNSYNCD;
|
Demod.state = DEMOD_UNSYNCD;
|
||||||
|
|
||||||
// And the UART that receives from the reader
|
// And the UART that receives from the reader
|
||||||
Uart.output = (((uint8_t *)BigBuf) + 1024);
|
Uart.output = ((uint8_t *)BigBuf) + RECV_CMD_OFFSET;
|
||||||
Uart.byteCntMax = 100;
|
Uart.byteCntMax = MAX_FRAME_SIZE;
|
||||||
Uart.state = STATE_UNSYNCD;
|
Uart.state = STATE_UNSYNCD;
|
||||||
|
|
||||||
// Setup for the DMA.
|
// The DMA buffer, used to stream samples from the FPGA
|
||||||
dmaBuf = (int8_t *)(BigBuf + 32);
|
int8_t *dmaBuf = ((int8_t *)BigBuf) + DMA_BUFFER_OFFSET;
|
||||||
upTo = dmaBuf;
|
int8_t *upTo= dmaBuf;
|
||||||
lastRxCounter = DEMOD_DMA_BUFFER_SIZE;
|
lastRxCounter = DEMOD_DMA_BUFFER_SIZE;
|
||||||
FpgaSetupSscDma((uint8_t *)dmaBuf, DEMOD_DMA_BUFFER_SIZE);
|
FpgaSetupSscDma((uint8_t *)dmaBuf, DEMOD_DMA_BUFFER_SIZE);
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,7 @@
|
||||||
#include "mifareutil.h"
|
#include "mifareutil.h"
|
||||||
|
|
||||||
static uint32_t iso14a_timeout;
|
static uint32_t iso14a_timeout;
|
||||||
uint8_t *trace = (uint8_t *) BigBuf+TRACE_OFFSET;
|
|
||||||
int rsamples = 0;
|
int rsamples = 0;
|
||||||
int traceLen = 0;
|
|
||||||
int tracing = TRUE;
|
|
||||||
uint8_t trigger = 0;
|
uint8_t trigger = 0;
|
||||||
// the block number for the ISO14443-4 PCB
|
// the block number for the ISO14443-4 PCB
|
||||||
static uint8_t iso14_pcb_blocknum = 0;
|
static uint8_t iso14_pcb_blocknum = 0;
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
|
|
||||||
|
uint8_t *trace = (uint8_t *) BigBuf+TRACE_OFFSET;
|
||||||
|
int traceLen = 0;
|
||||||
|
int tracing = TRUE;
|
||||||
|
|
||||||
|
|
||||||
void print_result(char *name, uint8_t *buf, size_t len) {
|
void print_result(char *name, uint8_t *buf, size_t len) {
|
||||||
|
@ -463,7 +466,6 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_
|
||||||
tracing = FALSE; // don't trace any more
|
tracing = FALSE; // don't trace any more
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Traceformat:
|
// Traceformat:
|
||||||
// 32 bits timestamp (little endian)
|
// 32 bits timestamp (little endian)
|
||||||
// 16 bits duration (little endian)
|
// 16 bits duration (little endian)
|
||||||
|
@ -502,6 +504,11 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_
|
||||||
}
|
}
|
||||||
traceLen += num_paritybytes;
|
traceLen += num_paritybytes;
|
||||||
|
|
||||||
|
if(traceLen +4 < TRACE_SIZE)
|
||||||
|
{ //If it hadn't been cleared, for whatever reason..
|
||||||
|
memset(trace+traceLen,0x44, 4);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -413,15 +413,18 @@ uint16_t printTraceLine(uint16_t tracepos, uint8_t* trace, uint8_t protocol, boo
|
||||||
if (tracepos + data_len + parity_len >= TRACE_SIZE) {
|
if (tracepos + data_len + parity_len >= TRACE_SIZE) {
|
||||||
return TRACE_SIZE;
|
return TRACE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *frame = trace + tracepos;
|
uint8_t *frame = trace + tracepos;
|
||||||
tracepos += data_len;
|
tracepos += data_len;
|
||||||
uint8_t *parityBytes = trace + tracepos;
|
uint8_t *parityBytes = trace + tracepos;
|
||||||
tracepos += parity_len;
|
tracepos += parity_len;
|
||||||
|
|
||||||
|
|
||||||
//--- Draw the data column
|
//--- Draw the data column
|
||||||
|
//char line[16][110];
|
||||||
char line[16][110];
|
char line[16][110];
|
||||||
for (int j = 0; j < data_len; j++) {
|
|
||||||
|
for (int j = 0; j < data_len && j/16 < 16; j++) {
|
||||||
|
|
||||||
int oddparity = 0x01;
|
int oddparity = 0x01;
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
|
@ -430,11 +433,17 @@ uint16_t printTraceLine(uint16_t tracepos, uint8_t* trace, uint8_t protocol, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t parityBits = parityBytes[j>>3];
|
uint8_t parityBits = parityBytes[j>>3];
|
||||||
|
|
||||||
if (isResponse && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
|
if (isResponse && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) {
|
||||||
sprintf(line[j/16]+((j%16)*4), "%02x! ", frame[j]);
|
snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
sprintf(line[j/16]+((j%16)*4), "%02x ", frame[j]);
|
snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(data_len == 0)
|
||||||
|
{
|
||||||
|
if(data_len == 0){
|
||||||
|
sprintf(line[0],"<empty trace - possible error>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//--- Draw the CRC column
|
//--- Draw the CRC column
|
||||||
|
@ -479,8 +488,8 @@ uint16_t printTraceLine(uint16_t tracepos, uint8_t* trace, uint8_t protocol, boo
|
||||||
annotateIso14443b(explanation,sizeof(explanation),frame,data_len);
|
annotateIso14443b(explanation,sizeof(explanation),frame,data_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int num_lines = (data_len - 1)/16 + 1;
|
int num_lines = MIN((data_len - 1)/16 + 1, 16);
|
||||||
for (int j = 0; j < num_lines; j++) {
|
for (int j = 0; j < num_lines ; j++) {
|
||||||
if (j == 0) {
|
if (j == 0) {
|
||||||
PrintAndLog(" %9d | %9d | %s | %-64s| %s| %s",
|
PrintAndLog(" %9d | %9d | %s | %-64s| %s| %s",
|
||||||
(timestamp - first_timestamp),
|
(timestamp - first_timestamp),
|
||||||
|
@ -573,7 +582,6 @@ int CmdHFList(const char *Cmd)
|
||||||
uint16_t tracepos = 0;
|
uint16_t tracepos = 0;
|
||||||
GetFromBigBuf(trace, TRACE_SIZE, 0);
|
GetFromBigBuf(trace, TRACE_SIZE, 0);
|
||||||
WaitForResponse(CMD_ACK, NULL);
|
WaitForResponse(CMD_ACK, NULL);
|
||||||
|
|
||||||
PrintAndLog("Recorded Activity");
|
PrintAndLog("Recorded Activity");
|
||||||
PrintAndLog("");
|
PrintAndLog("");
|
||||||
PrintAndLog("Start = Start of Start Bit, End = End of last modulation. Src = Source of Transfer");
|
PrintAndLog("Start = Start of Start Bit, End = End of last modulation. Src = Source of Transfer");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue