]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
ADD: some new usb commmands from EMV, and for LEGIC.
[proxmark3-svn] / client / cmddata.c
index 2e363054b0e3e8a773fe6754773d91ee801c4184..6570b24370d2796ef71f63ff05791adc81a8c371 100644 (file)
@@ -76,7 +76,7 @@ void printDemodBuff(void)
        }
        if (bitLen>512) bitLen=512; //max output to 512 bits if we have more - should be plenty
 
        }
        if (bitLen>512) bitLen=512; //max output to 512 bits if we have more - should be plenty
 
-       char *bin = sprint_bin_break(DemodBuffer,bitLen,16);
+       char *bin = sprint_bin_break(DemodBuffer, bitLen,16);
        PrintAndLog("%s",bin);
 
        return;
        PrintAndLog("%s",bin);
 
        return;
@@ -877,13 +877,16 @@ int CmdGraphShiftZero(const char *Cmd)
 int CmdAskEdgeDetect(const char *Cmd)
 {
        int thresLen = 25;
 int CmdAskEdgeDetect(const char *Cmd)
 {
        int thresLen = 25;
+       int last = 0;
        sscanf(Cmd, "%i", &thresLen); 
 
        sscanf(Cmd, "%i", &thresLen); 
 
-       for(int i = 1; i<GraphTraceLen; i++){
-               if (GraphBuffer[i]-GraphBuffer[i-1]>=thresLen) //large jump up
-                       GraphBuffer[i-1] = 127;
-               else if(GraphBuffer[i]-GraphBuffer[i-1]<=-1*thresLen) //large jump down
-                       GraphBuffer[i-1] = -127;
+       for(int i = 1; i < GraphTraceLen; ++i){
+               if (GraphBuffer[i] - GraphBuffer[i-1] >= thresLen) //large jump up
+                       last = 127;
+               else if(GraphBuffer[i] - GraphBuffer[i-1] <= -1 * thresLen) //large jump down
+                       last = -127;
+                       
+               GraphBuffer[i-1] = last;
        }
        RepaintGraphWindow();
        return 0;
        }
        RepaintGraphWindow();
        return 0;
@@ -1314,37 +1317,51 @@ int CmdFSKdemodAWID(const char *Cmd)
        // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000
        // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        // |26 bit|   |-117--| |-----142------|
        // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000
        // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        // |26 bit|   |-117--| |-----142------|
+    //
+       // 00110010 0 0000111110100000 00000000000100010010100010000111 1 000000000 
+       // bbbbbbbb w ffffffffffffffff cccccccccccccccccccccccccccccccc w xxxxxxxxx
+       // |50 bit|   |----4000------| |-----------2248975------------| 
        // b = format bit len, o = odd parity of last 3 bits
        // f = facility code, c = card number
        // w = wiegand parity
        // b = format bit len, o = odd parity of last 3 bits
        // f = facility code, c = card number
        // w = wiegand parity
-       // (26 bit format shown)
 
        uint32_t fc = 0;
        uint32_t cardnum = 0;
        uint32_t code1 = 0;
        uint32_t code2 = 0;
 
        uint32_t fc = 0;
        uint32_t cardnum = 0;
        uint32_t code1 = 0;
        uint32_t code2 = 0;
-       uint8_t fmtLen = bytebits_to_byte(BitStream,8);
-       if (fmtLen==26){
-               fc = bytebits_to_byte(BitStream+9, 8);
-               cardnum = bytebits_to_byte(BitStream+17, 16);
-               code1 = bytebits_to_byte(BitStream+8,fmtLen);
-               PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo);
-       } else {
-               cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16);
-               if (fmtLen>32){
-                       code1 = bytebits_to_byte(BitStream+8,fmtLen-32);
-                       code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32);
-                       PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo);
-               } else{
-                       code1 = bytebits_to_byte(BitStream+8,fmtLen);
-                       PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo);
-               }
+       uint8_t fmtLen = bytebits_to_byte(BitStream, 8);
+       switch(fmtLen) {
+               case 26: 
+                       fc = bytebits_to_byte(BitStream + 9, 8);
+                       cardnum = bytebits_to_byte(BitStream + 17, 16);
+                       code1 = bytebits_to_byte(BitStream + 8,fmtLen);
+                       PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %u - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo);
+                       break;
+               case 50:
+                       fc = bytebits_to_byte(BitStream + 9, 16);
+                       cardnum = bytebits_to_byte(BitStream + 25, 32);
+                       code1 = bytebits_to_byte(BitStream + 8, (fmtLen-32) );
+                       code2 = bytebits_to_byte(BitStream + 8 + (fmtLen-32), 32);
+                       PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %u - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, code2, rawHi2, rawHi, rawLo);
+                       break;
+               default:
+                       if (fmtLen > 32 ) {
+                               cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16);
+                               code1 = bytebits_to_byte(BitStream+8,fmtLen-32);
+                               code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32);
+                               PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%u) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo);
+                       } else {
+                               cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16);
+                               code1 = bytebits_to_byte(BitStream+8,fmtLen);
+                               PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%u) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo);
+                       }
+                       break;          
        }
        }
+
        if (g_debugMode){
                PrintAndLog("DEBUG: idx: %d, Len: %d Printing Demod Buffer:", idx, 96);
                printDemodBuff();
        }
        if (g_debugMode){
                PrintAndLog("DEBUG: idx: %d, Len: %d Printing Demod Buffer:", idx, 96);
                printDemodBuff();
        }
-       //todo - convert hi2, hi, lo to demodbuffer for future sim/clone commands
        return 1;
 }
 
        return 1;
 }
 
Impressum, Datenschutz