]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
with em410xread, retest if we read our bits the wrong way (1=0 and 0=1)
authorskamkar <skamkar@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 3 Jul 2009 00:56:12 +0000 (00:56 +0000)
committerskamkar <skamkar@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 3 Jul 2009 00:56:12 +0000 (00:56 +0000)
winsrc/command.cpp

index 0397ea3796d2b39d5664d5639bb632f87e9356d2..8da91f528f8addc5aafe7993d32d82e3f0a206d9 100644 (file)
@@ -262,6 +262,7 @@ static void CmdEM410xread(char *str)
        int i, j, clock, header, rows, bit, hithigh, hitlow, first, bit2idx, high, low;\r
        int parity[4];\r
        char id[11];\r
+       int retested = 0;\r
        int BitStream[MAX_GRAPH_TRACE_LEN];\r
        high = low = 0;\r
 \r
@@ -307,14 +308,15 @@ static void CmdEM410xread(char *str)
                        if (hithigh && hitlow)\r
                                break;\r
                }\r
-\r
+               \r
                /* If we didn't hit both high and low peaks, we had a bit transition */\r
                if (!hithigh || !hitlow)\r
                        bit ^= 1;\r
-\r
+               \r
                BitStream[bit2idx++] = bit;\r
        }\r
-\r
+       \r
+retest:\r
        /* We go till 5 before the graph ends because we'll get that far below */\r
        for (i = 1; i < bit2idx - 5; i++)\r
        {\r
@@ -363,7 +365,7 @@ static void CmdEM410xread(char *str)
 \r
                                /* Stop any loops */\r
                                go = 0;\r
-                               break;\r
+                               return;\r
                        }\r
 \r
                        /* Crap! Incorrect parity or no stop bit, start all over */\r
@@ -388,6 +390,16 @@ static void CmdEM410xread(char *str)
                                header = 0;\r
                }\r
        }\r
+       \r
+       /* if we've already retested after flipping bits, return */\r
+       if (retested++)\r
+               return;\r
+\r
+       /* if this didn't work, try flipping bits */\r
+       for (i = 0; i < bit2idx; i++)\r
+               BitStream[i] ^= 1;\r
+\r
+       goto retest;\r
 }\r
 \r
 /* emulate an EM410X tag\r
@@ -1862,7 +1874,7 @@ static void Cmdaskdemod(char *str) {
                 * - we're high: transition if we hit a low\r
                 * (we need to do it this way because some tags keep high or\r
                 * low for long periods, others just reach the peak and go\r
-                * down)
+                * down)\r
                 */\r
                if ((GraphBuffer[i]==high) && (GraphBuffer[i-1] == c)) {\r
                                        GraphBuffer[i]=1-c;\r
Impressum, Datenschutz