]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
oops! clobbered manchester code inversion with last update! :(
authoradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Mon, 6 Jul 2009 09:36:15 +0000 (09:36 +0000)
committeradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Mon, 6 Jul 2009 09:36:15 +0000 (09:36 +0000)
winsrc/command.cpp

index 1f77c4883306d26db5cdac4d52d3c0e4b437c1c1..405405dead97bfb99340f2a152d0e23400d93746 100644 (file)
@@ -9,7 +9,6 @@
 #include <stdio.h>\r
 #include <limits.h>\r
 #include <math.h>\r
-#include <unistd.h>\r
 \r
 #include "prox.h"\r
 #include "../common/iso14443_crc.c"\r
@@ -2081,7 +2080,7 @@ static void Cmdmanchestermod(char *str)
  *               Typical values can be 64, 32, 128...\r
  */\r
 static void Cmdmanchesterdemod(char *str) {\r
-       int i, j;\r
+       int i, j, invert= 0;\r
        int bit;\r
        int clock;\r
        int lastval;\r
@@ -2093,6 +2092,16 @@ static void Cmdmanchesterdemod(char *str) {
        int bit2idx = 0;\r
        int warnings = 0;\r
 \r
+       /* check if we're inverting output */\r
+       if(*str == 'i')\r
+       {\r
+               PrintToScrollback("Inverting output");\r
+               invert= 1;\r
+               do\r
+                       ++str;\r
+               while(*str == ' '); // in case a 2nd argument was given\r
+       }\r
+\r
        /* Holds the decoded bitstream: each clock period contains 2 bits       */\r
        /* later simplified to 1 bit after manchester decoding.                 */\r
        /* Add 10 bits to allow for noisy / uncertain traces without aborting   */\r
@@ -2163,7 +2172,7 @@ static void Cmdmanchesterdemod(char *str) {
                        if (!hithigh || !hitlow)\r
                                bit ^= 1;\r
 \r
-                       BitStream[bit2idx++] = bit;\r
+                       BitStream[bit2idx++] = bit ^ invert;\r
                }\r
        }\r
 \r
@@ -2171,7 +2180,7 @@ static void Cmdmanchesterdemod(char *str) {
        else\r
        {\r
 \r
-       /* Then detect duration between 2 successive transitions */\r
+               /* Then detect duration between 2 successive transitions */\r
                for (bitidx = 1; i < GraphTraceLen; i++)\r
                {\r
                        if (GraphBuffer[i-1] != GraphBuffer[i])\r
@@ -2206,18 +2215,18 @@ static void Cmdmanchesterdemod(char *str) {
                                                PrintToScrollback("Error: too many detection errors, aborting.");\r
                                                return;\r
                                        }\r
+                               }\r
                        }\r
                }\r
-       }\r
 \r
-       // At this stage, we now have a bitstream of "01" ("1") or "10" ("0"), parse it into final decoded bitstream\r
-       // Actually, we overwrite BitStream with the new decoded bitstream, we just need to be careful\r
-       // to stop output at the final bitidx2 value, not bitidx\r
-       for (i = 0; i < bitidx; i += 2) {\r
-               if ((BitStream[i] == 0) && (BitStream[i+1] == 1)) {\r
-                       BitStream[bit2idx++] = 1;\r
+               // At this stage, we now have a bitstream of "01" ("1") or "10" ("0"), parse it into final decoded bitstream\r
+               // Actually, we overwrite BitStream with the new decoded bitstream, we just need to be careful\r
+               // to stop output at the final bitidx2 value, not bitidx\r
+               for (i = 0; i < bitidx; i += 2) {\r
+                       if ((BitStream[i] == 0) && (BitStream[i+1] == 1)) {\r
+                               BitStream[bit2idx++] = 1 ^ invert;\r
                } else if ((BitStream[i] == 1) && (BitStream[i+1] == 0)) {\r
-                       BitStream[bit2idx++] = 0;\r
+                       BitStream[bit2idx++] = 0 ^ invert;\r
                } else {\r
                        // We cannot end up in this state, this means we are unsynchronized,\r
                        // move up 1 bit:\r
@@ -2231,8 +2240,8 @@ static void Cmdmanchesterdemod(char *str) {
                                        PrintToScrollback("Error: too many decode errors, aborting.");\r
                                        return;\r
                                }\r
-               }\r
-       }\r
+                       }\r
+               }       \r
        }\r
 \r
        PrintToScrollback("Manchester decoded bitstream");\r
@@ -2452,16 +2461,15 @@ static struct {
        "hisamplest",           CmdHi14readt,0,         "    Get samples HF, for testing",\r
        "hisimlisten",          CmdHisimlisten,0,       "    Get HF samples as fake tag",\r
        "hpf",                          CmdHpf,1,               "    Remove DC offset from trace",\r
-       "indalademod",          CmdIndalademod,0,         "['224'] -- Demodulate samples for Indala",\r
+       "indalademod",          CmdIndalademod,0,         "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)",\r
        "lcd",                          CmdLcd,0,                       "<HEX command> <count> -- Send command/data to LCD",\r
        "lcdreset",                     CmdLcdReset,0,          "    Hardware reset LCD",\r
        "load",                         CmdLoad,1,              "<filename> -- Load trace (to graph window",\r
-       "locomread",                    CmdLoCommandRead,0,             "<off period> <'0' period> <'1' period> <command> ['h'] -- Modulate LF reader field to send command before read (all periods in microseconds) (option 'h' for 134)",\r
        "loread",                       CmdLoread,0,            "['h'] -- Read 125/134 kHz LF ID-only tag (option 'h' for 134)",\r
        "losamples",            CmdLosamples,0,         "[128 - 16000] -- Get raw samples for LF tag",\r
        "losim",                        CmdLosim,0,             "    Simulate LF tag",\r
        "ltrim",                        CmdLtrim,1,             "<samples> -- Trim samples from left of trace",\r
-       "mandemod",                     Cmdmanchesterdemod,1,   "[clock rate] -- Try a Manchester demodulation on a binary stream",\r
+       "mandemod",                     Cmdmanchesterdemod,1,   "[i] [clock rate] -- Manchester demodulate binary stream (option 'i' to invert output)",\r
        "manmod",                       Cmdmanchestermod,1,     "[clock rate] -- Manchester modulate a binary stream",\r
        "norm",                         CmdNorm,1,              "    Normalize max/min to +/-500",\r
        "plot",                         CmdPlot,1,              "    Show graph window",\r
Impressum, Datenschutz