X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/355c8b4a7df083c13d82963fb9d14548647e91b1..7d5ebac99397fe7661760259377a4f222fdb92cb:/armsrc/util.c diff --git a/armsrc/util.c b/armsrc/util.c index a4f55879..4948fce8 100644 --- a/armsrc/util.c +++ b/armsrc/util.c @@ -12,7 +12,9 @@ #include "util.h" #include "string.h" #include "apps.h" +#include "BigBuf.h" +int tracing = TRUE; void print_result(char *name, uint8_t *buf, size_t len) { @@ -436,7 +438,9 @@ void iso14a_set_tracing(bool enable) { } void clear_trace() { - memset(trace, 0x44, TRACE_SIZE); + uint8_t *trace = BigBuf_get_addr(); + uint16_t max_traceLen = BigBuf_max_traceLen(); + memset(trace, 0x44, max_traceLen); traceLen = 0; } @@ -455,15 +459,18 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ { if (!tracing) return FALSE; + uint8_t *trace = BigBuf_get_addr(); + uint16_t num_paritybytes = (iLen-1)/8 + 1; // number of valid paritybytes in *parity uint16_t duration = timestamp_end - timestamp_start; // Return when trace is full - if (traceLen + sizeof(iLen) + sizeof(timestamp_start) + sizeof(duration) + num_paritybytes + iLen >= TRACE_SIZE) { + uint16_t max_traceLen = BigBuf_max_traceLen(); + + if (traceLen + sizeof(iLen) + sizeof(timestamp_start) + sizeof(duration) + num_paritybytes + iLen >= max_traceLen) { tracing = FALSE; // don't trace any more return FALSE; } - // Traceformat: // 32 bits timestamp (little endian) // 16 bits duration (little endian) @@ -502,6 +509,11 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } traceLen += num_paritybytes; + if(traceLen +4 < max_traceLen) + { //If it hadn't been cleared, for whatever reason.. + memset(trace+traceLen,0x44, 4); + } + return TRUE; }