]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
Merge branch 'master' of https://github.com/Proxmark/proxmark3
[proxmark3-svn] / client / cmddata.c
index b3e23cb6a30e28c77c1792b9231a75dd0e97b981..823da9cef465da873660e1b147d4ea745bac91d2 100644 (file)
@@ -40,8 +40,8 @@ void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx)
        if (buff == NULL) 
                return;
 
-       if ( size >= MAX_DEMOD_BUF_LEN)
-               size = MAX_DEMOD_BUF_LEN;
+       if ( size > MAX_DEMOD_BUF_LEN - startIdx)
+               size = MAX_DEMOD_BUF_LEN - startIdx;
 
        size_t i = 0;
        for (; i < size; i++){
@@ -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 (;i<DemodBufferLen;++i){
                if (DemodBuffer[i]>high) 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;
@@ -1151,13 +1161,13 @@ int getSamples(const char *Cmd, bool silent)
        if(response.arg[0] > 0)
        {
                sample_config *sc = (sample_config *) response.d.asBytes;
-               PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample
+               if (!silent) PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample
                    , sc->decimation);
                bits_per_sample = sc->bits_per_sample;
        }
        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)
Impressum, Datenschutz