]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
ADD: `data detectclock` - added clock blocks in plot window. Its a draft. Not working...
[proxmark3-svn] / client / cmddata.c
index 74973b34d67c58a2212636042c1414a6e206b63f..00932a369d811be86ebabaddfdf01f4debb7e538 100644 (file)
@@ -364,7 +364,7 @@ int CmdGetBitStream(const char *Cmd)
 //print 64 bit EM410x ID in multiple formats
 void printEM410x(uint32_t hi, uint64_t id)
 {
-       //if (!id && !hi) return;
+       if (!id && !hi) return;
        
        PrintAndLog("EM410x %s pattern found", (hi) ? "XL" : "" );
 
@@ -471,11 +471,11 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo )
                if (g_debugMode){
                        if (ans == -1)
                                PrintAndLog("DEBUG: Error - Em410x not only 0|1 in decoded bitstream");
+                       else if (ans == -2)
+                               PrintAndLog("DEBUG: Error - Em410x preamble not found");
                        else if (ans == -3)
                                PrintAndLog("DEBUG: Error - Em410x Size not correct: %d", size);
                        else if (ans == -4)
-                               PrintAndLog("DEBUG: Error - Em410x preamble not found");
-                       else if (ans == -5)
                                PrintAndLog("DEBUG: Error - Em410x parity failed");
                }
                return 0;
@@ -531,6 +531,7 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType,
        int clk = 0;
        int maxErr = 100;
        int maxLen = 0;
+       uint8_t askamp = 0;
        char amp = param_getchar(Cmd, 0);
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN] = {0};
        sscanf(Cmd, "%i %i %i %i %c", &clk, &invert, &maxErr, &maxLen, &amp);
@@ -553,14 +554,16 @@ int ASKDemod_ext(const char *Cmd, bool verbose, bool emSearch, uint8_t askType,
                askAmp(BitStream, BitLen); 
 
        bool st = false;
-       if (*stCheck) st = DetectST(BitStream, &BitLen, &foundclk);
+       size_t ststart = 0, stend = 0;
+       if (*stCheck) st = DetectST_ext(BitStream, &BitLen, &foundclk, &ststart, &stend);
        if (st) {
                *stCheck = st;
                clk = (clk == 0) ? foundclk : clk;
-               if (verbose || g_debugMode) PrintAndLog("\nFound Sequence Terminator");
+               CursorCPos = ststart;
+               CursorDPos = stend;
+               if (verbose || g_debugMode) PrintAndLog("\nFound Sequence Terminator - First one is shown by orange and blue graph markers");
        }
-               
-       int errCnt = askdemod(BitStream, &BitLen, &clk, &invert, maxErr, 0, askType);
+       int errCnt = askdemod(BitStream, &BitLen, &clk, &invert, maxErr, askamp, askType);
        if (errCnt<0 || BitLen<16){  //if fatal error (or -1)
                if (g_debugMode) PrintAndLog("DEBUG: no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk);
                return 0;
@@ -834,7 +837,7 @@ int CmdVikingDemod(const char *Cmd)
                return 0;
        }
        size_t size = DemodBufferLen;
-       //call lfdemod.c demod for Viking
+
        int ans = VikingDemod_AM(DemodBuffer, &size);
        if (ans < 0) {
                if (g_debugMode) PrintAndLog("DEBUG: Error - Viking Demod %d %s", ans, (ans == -5)?"[chksum error]":"");
@@ -1050,29 +1053,30 @@ int CmdDetectClockRate(const char *Cmd)
        if (strlen(Cmd) > 6 || strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H')
                return usage_data_detectclock();
 
-       int ans = 0;
+       int clock = 0;
        switch ( cmdp ) {
                case 'a' :
                case 'A' :
-                       ans = GetAskClock(Cmd+1, true, false);
+                       clock = GetAskClock(Cmd+1, true, false);
                        break;
                case 'f' :
                case 'F' :
-                       ans = GetFskClock("", true, false);
+                       clock = GetFskClock("", true, false);
                        break;
                case 'n' :
                case 'N' :
-                       ans = GetNrzClock("", true, false);
+                       clock = GetNrzClock("", true, false);
                        break;
                case 'p' :
                case 'P' :
-                       ans = GetPskClock("", true, false);
+                       clock = GetPskClock("", true, false);
                        break;
                default :
                        PrintAndLog ("Please specify a valid modulation to detect the clock of - see option h for help");
                        break;
        }
-       return ans;
+       RepaintGraphWindow();
+       return clock;
 }
 
 char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
@@ -2095,6 +2099,16 @@ int CmdGrid(const char *Cmd)
        RepaintGraphWindow();
        return 0;
 }
+void setGrid_Clock(uint8_t clock){
+       PlotGridXdefault = clock;
+       RepaintGraphWindow();
+}
+
+int CmdSetGraphMarkers(const char *Cmd) {
+       sscanf(Cmd, "%i %i", &CursorCPos, &CursorDPos);
+       RepaintGraphWindow();
+       return 0;
+}
 
 int CmdHexsamples(const char *Cmd)
 {
@@ -2356,6 +2370,22 @@ int CmdRtrim(const char *Cmd)
        return 0;
 }
 
+// trim graph (middle) piece
+int CmdMtrim(const char *Cmd) {
+       int start = 0, stop = 0;
+       sscanf(Cmd, "%i %i", &start, &stop);
+
+       if (start > GraphTraceLen       || stop > GraphTraceLen || start > stop) return 0;
+       start++; //leave start position sample
+
+       GraphTraceLen -= stop - start;
+       for (int i = 0; i < GraphTraceLen; i++) {
+               GraphBuffer[start+i] = GraphBuffer[stop+i];
+       }
+       return 0;
+}
+
+
 int CmdNorm(const char *Cmd)
 {
        int i;
@@ -2588,6 +2618,7 @@ static command_t CommandTable[] =
        {"load",            CmdLoad,            1, "<filename> -- Load trace (to graph window"},
        {"ltrim",           CmdLtrim,           1, "<samples> -- Trim samples from left of trace"},
        {"rtrim",           CmdRtrim,           1, "<location to end trace> -- Trim samples from right of trace"},
+       {"mtrim",           CmdMtrim,           1, "<start> <stop> -- Trim out samples from the specified start to the specified stop"},
        {"manrawdecode",    Cmdmandecoderaw,    1, "[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer"},
        {"norm",            CmdNorm,            1, "Normalize max/min to +/-128"},
        {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
@@ -2597,6 +2628,7 @@ static command_t CommandTable[] =
        {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
        {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
        {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
+       {"setgraphmarkers", CmdSetGraphMarkers, 1, "[orange_marker] [blue_marker] (in graph window)"},
        {"scale",           CmdScale,           1, "<int> -- Set cursor display scale"},
        {"setdebugmode",    CmdSetDebugMode,    1, "<0|1|2> -- Turn on or off Debugging Level for lf demods"},
        {"shiftgraphzero",  CmdGraphShiftZero,  1, "<shift> -- Shift 0 for Graphed wave + or - shift value"},
Impressum, Datenschutz