From: Martin Holst Swende Date: Sat, 7 Feb 2015 20:05:14 +0000 (+0100) Subject: Some documentation and formatting to LogTraceHitag X-Git-Tag: v2.0.0-rc1~23^2~2 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/665775c844a3f8f1efe055cd25462b3cd7a7441a?ds=sidebyside;hp=-c Some documentation and formatting to LogTraceHitag --- 665775c844a3f8f1efe055cd25462b3cd7a7441a diff --git a/armsrc/BigBuf.c b/armsrc/BigBuf.c index 18db66f3..6e99a793 100644 --- a/armsrc/BigBuf.c +++ b/armsrc/BigBuf.c @@ -185,27 +185,38 @@ bool RAMFUNC LogTrace(const uint8_t *btBytes, uint16_t iLen, uint32_t timestamp_ } int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int bReader) { - static uint16_t traceLen = 0; - uint8_t *trace = BigBuf_get_addr(); + if (!tracing) return FALSE; + + uint8_t *trace = BigBuf_get_addr(); + uint16_t iLen = nbytes(iBits); // Return when trace is full - if (traceLen + sizeof(rsamples) + sizeof(dwParity) + sizeof(iBits) + nbytes(iBits) > BigBuf_max_traceLen()) return FALSE; + if (traceLen + sizeof(rsamples) + sizeof(dwParity) + sizeof(iBits) + iLen > BigBuf_max_traceLen()) return FALSE; + + //Hitag traces appear to use this traceformat: + // 32 bits timestamp (little endian,Highest Bit used as readerToTag flag) + // 32 bits parity + // 8 bits size (number of bits in the trace entry) + // y Bytes data - // Trace the random, i'm curious rsamples += iSamples; trace[traceLen++] = ((rsamples >> 0) & 0xff); trace[traceLen++] = ((rsamples >> 8) & 0xff); trace[traceLen++] = ((rsamples >> 16) & 0xff); trace[traceLen++] = ((rsamples >> 24) & 0xff); + if (!bReader) { - trace[traceLen - 1] |= 0x80; + trace[traceLen - 1] |= 0x80; } + trace[traceLen++] = ((dwParity >> 0) & 0xff); trace[traceLen++] = ((dwParity >> 8) & 0xff); trace[traceLen++] = ((dwParity >> 16) & 0xff); trace[traceLen++] = ((dwParity >> 24) & 0xff); trace[traceLen++] = iBits; - memcpy(trace + traceLen, btBytes, nbytes(iBits)); - traceLen += nbytes(iBits); + + memcpy(trace + traceLen, btBytes, iLen); + traceLen += iLen; + return TRUE; } diff --git a/armsrc/util.c b/armsrc/util.c index 88931927..74fba94b 100644 --- a/armsrc/util.c +++ b/armsrc/util.c @@ -35,7 +35,7 @@ void print_result(char *name, uint8_t *buf, size_t len) { } size_t nbytes(size_t nbits) { - return (nbits/8)+((nbits%8)>0); + return (nbits >> 3)+((nbits % 8) > 0); } uint32_t SwapBits(uint32_t value, int nrbits) {