X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/b97311b1bde85d0aa388085e9a5747ac4da680d5..f1004b345ea236d8ebb130672b066c4e95e2e298:/client/cmddata.c diff --git a/client/cmddata.c b/client/cmddata.c index b3e23cb6..8f2aea5a 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -40,7 +40,7 @@ void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx) if (buff == NULL) return; - if ( size >= MAX_DEMOD_BUF_LEN) + if ( size + startIdx >= MAX_DEMOD_BUF_LEN) size = MAX_DEMOD_BUF_LEN; size_t i = 0; @@ -51,18 +51,30 @@ void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx) return; } +bool getDemodBuf(uint8_t *buff, size_t *size) { + if (buff == NULL) return false; + if (size == NULL) return false; + if (*size == 0) return false; + + *size = (*size > DemodBufferLen) ? DemodBufferLen : *size; + + memcpy(buff, DemodBuffer, *size); + return true; +} + // option '1' to save DemodBuffer any other to restore void save_restoreDB(uint8_t saveOpt) { - static uint8_t SavedDB[MAX_GRAPH_TRACE_LEN]; + static uint8_t SavedDB[MAX_DEMOD_BUF_LEN]; static size_t SavedDBlen; static bool DB_Saved = false; if (saveOpt==1) { //save + memcpy(SavedDB, DemodBuffer, sizeof(DemodBuffer)); SavedDBlen = DemodBufferLen; DB_Saved=true; - } else if (DB_Saved){ //restore + } else if (DB_Saved) { //restore memcpy(DemodBuffer, SavedDB, sizeof(DemodBuffer)); DemodBufferLen = SavedDBlen; } @@ -212,8 +224,8 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType, bool st = false; size_t ststart = 0, stend = 0; if (*stCheck) st = DetectST_ext(BitStream, &BitLen, &foundclk, &ststart, &stend); + *stCheck = st; if (st) { - *stCheck = st; clk = (clk == 0) ? foundclk : clk; CursorCPos = ststart; CursorDPos = stend; @@ -311,7 +323,7 @@ int Cmdmandecoderaw(const char *Cmd) return 0; } if (DemodBufferLen==0) return 0; - uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; + uint8_t BitStream[MAX_DEMOD_BUF_LEN]={0}; int high=0,low=0; for (;ihigh) high=DemodBuffer[i]; @@ -373,13 +385,13 @@ int CmdBiphaseDecodeRaw(const char *Cmd) return 0; } sscanf(Cmd, "%i %i %i", &offset, &invert, &maxErr); - if (DemodBufferLen==0){ + if (DemodBufferLen==0) { PrintAndLog("DemodBuffer Empty - run 'data rawdemod ar' first"); return 0; } - uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; - memcpy(BitStream, DemodBuffer, DemodBufferLen); - size = DemodBufferLen; + uint8_t BitStream[MAX_DEMOD_BUF_LEN]={0}; + size = sizeof(BitStream); + if ( !getDemodBuf(BitStream, &size) ) return 0; errCnt=BiphaseRawDecode(BitStream, &size, offset, invert); if (errCnt<0){ PrintAndLog("Error during decode:%d", errCnt); @@ -408,7 +420,7 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose) int offset=0, clk=0, invert=0, maxErr=0; sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr); - uint8_t BitStream[MAX_DEMOD_BUF_LEN]; + uint8_t BitStream[MAX_GRAPH_TRACE_LEN]; size_t size = getFromGraphBuf(BitStream); //invert here inverts the ask raw demoded bits which has no effect on the demod, but we need the pointer int errCnt = askdemod(BitStream, &size, &clk, &invert, maxErr, 0, 0); @@ -1126,7 +1138,7 @@ uint8_t getByte(uint8_t bits_per_sample, BitstreamIn* b) return val; } -int getSamples(const char *Cmd, bool silent) +int getSamples(int n, bool silent) { //If we get all but the last byte in bigbuf, // we don't have to worry about remaining trash @@ -1135,14 +1147,12 @@ int getSamples(const char *Cmd, bool silent) uint8_t got[BIGBUF_SIZE-1] = { 0 }; - int n = strtol(Cmd, NULL, 0); - if (n == 0 || n > sizeof(got)) n = sizeof(got); - PrintAndLog("Reading %d bytes from device memory\n", n); + if (!silent) PrintAndLog("Reading %d bytes from device memory\n", n); GetFromBigBuf(got,n,0); - PrintAndLog("Data fetched"); + if (!silent) PrintAndLog("Data fetched"); UsbCommand response; WaitForResponse(CMD_ACK, &response); uint8_t bits_per_sample = 8; @@ -1157,7 +1167,7 @@ int getSamples(const char *Cmd, bool silent) } if(bits_per_sample < 8) { - PrintAndLog("Unpacking..."); + if (!silent) PrintAndLog("Unpacking..."); BitstreamIn bout = { got, bits_per_sample * n, 0}; int j =0; for (j = 0; j * bits_per_sample < n * 8 && j < n; j++) { @@ -1180,7 +1190,8 @@ int getSamples(const char *Cmd, bool silent) int CmdSamples(const char *Cmd) { - return getSamples(Cmd, false); + int n = strtol(Cmd, NULL, 0); + return getSamples(n, false); } int CmdTuneSamples(const char *Cmd)