]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
lf search use new psk, small demod adjustments 41/head
authormarshmellow42 <marshmellowrf@gmail.com>
Fri, 9 Jan 2015 21:46:17 +0000 (16:46 -0500)
committermarshmellow42 <marshmellowrf@gmail.com>
Fri, 9 Jan 2015 21:46:17 +0000 (16:46 -0500)
adjust thresholds for ask, fsk, io, psk based on more sample testing
adjust indala decode to set clock to 32 if no input (autodetect not
always correct)

client/cmddata.c
client/cmdlf.c
common/lfdemod.c

index 53a3ce5f410e1d17a5e3e2cbc51b06210e7e873d..781ca50c10c19ead991e9bd5804647ff1bd09b87 100644 (file)
@@ -870,8 +870,12 @@ int PSKnrzDemod(const char *Cmd){
 // optional arguments - same as CmdpskNRZrawDemod (clock & invert)
 int CmdIndalaDecode(const char *Cmd)
 {
+       int ans;
+       if (strlen(Cmd)>0)
+               ans=PSKnrzDemod(Cmd);
+       else
+               ans=PSKnrzDemod("32");
 
-       int ans=PSKnrzDemod(Cmd);
        if (ans < 0){
                PrintAndLog("Error1: %d",ans);
                return 0;
index 18bcf747e7c16f109a4c0220153bbf6bc9810db2..d9fe5fa9e1af8be96890d45c049da59546b7da53 100644 (file)
@@ -110,9 +110,9 @@ int CmdFlexdemod(const char *Cmd)
   i = 0;
   int phase = 0;
   for (bit = 0; bit < 64; bit++) {
-       
+
                phase = (bits[bit] == 0) ? 0 : 1;
-               
+
     int j;
     for (j = 0; j < 32; j++) {
       GraphBuffer[i++] = phase;
@@ -123,7 +123,7 @@ int CmdFlexdemod(const char *Cmd)
   RepaintGraphWindow();
   return 0;
 }
-  
+
 int CmdIndalaDemod(const char *Cmd)
 {
   // Usage: recover 64bit UID by default, specify "224" as arg to recover a 224bit UID
@@ -167,7 +167,7 @@ int CmdIndalaDemod(const char *Cmd)
       count = 0;
     }
   }
-  
+
   if (rawbit>0){
     PrintAndLog("Recovered %d raw bits, expected: %d", rawbit, GraphTraceLen/32);
     PrintAndLog("worst metric (0=best..7=worst): %d at pos %d", worst, worstPos);
@@ -198,7 +198,7 @@ int CmdIndalaDemod(const char *Cmd)
       break;
     }
   }
-  
+
   if (start == rawbit - uidlen + 1) {
     PrintAndLog("nothing to wait for");
     return 0;
@@ -217,7 +217,7 @@ int CmdIndalaDemod(const char *Cmd)
   int bit;
   i = start;
   int times = 0;
-       
+
   if (uidlen > rawbit) {
     PrintAndLog("Warning: not enough raw bits to get a full UID");
     for (bit = 0; bit < rawbit; bit++) {
@@ -235,12 +235,12 @@ int CmdIndalaDemod(const char *Cmd)
     }
     times = 1;
   }
-  
+
   //convert UID to HEX
   uint32_t uid1, uid2, uid3, uid4, uid5, uid6, uid7;
   int idx;
        uid1 = uid2 = 0;
-       
+
   if (uidlen==64){
     for( idx=0; idx<64; idx++) {
         if (showbits[idx] == '0') {
@@ -249,7 +249,7 @@ int CmdIndalaDemod(const char *Cmd)
         } else {
         uid1=(uid1<<1)|(uid2>>31);
         uid2=(uid2<<1)|1;
-        } 
+        }
       }
     PrintAndLog("UID=%s (%x%08x)", showbits, uid1, uid2);
   }
@@ -263,10 +263,10 @@ int CmdIndalaDemod(const char *Cmd)
         uid4=(uid4<<1)|(uid5>>31);
         uid5=(uid5<<1)|(uid6>>31);
         uid6=(uid6<<1)|(uid7>>31);
-                       
-                       if (showbits[idx] == '0') 
+
+                       if (showbits[idx] == '0')
                                uid7 = (uid7<<1) | 0;
-                       else 
+                       else
                                uid7 = (uid7<<1) | 1;
       }
     PrintAndLog("UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7);
@@ -291,7 +291,7 @@ int CmdIndalaDemod(const char *Cmd)
   PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen);
 
   // Remodulating for tag cloning
-       // HACK: 2015-01-04 this will have an impact on our new way of seening lf commands (demod) 
+       // HACK: 2015-01-04 this will have an impact on our new way of seening lf commands (demod)
        // since this changes graphbuffer data.
   GraphTraceLen = 32*uidlen;
   i = 0;
@@ -559,23 +559,37 @@ int CmdLFfind(const char *Cmd)
     ans=CmdSamples("20000");
   }
   if (GraphTraceLen<1000) return 0;
+  PrintAndLog("NOTE: some demods output possible binary\n  if it finds something that looks like a tag");
   PrintAndLog("Checking for known tags:");
+
   ans=Cmdaskmandemod("");
-  if (ans>0) return 1;
+  if (ans>0) {
+    PrintAndLog("Valid EM410x ID Found!");
+    return 1;
+  }
   ans=CmdFSKdemodHID("");
-  if (ans>0) return 1;
+  if (ans>0) {
+    PrintAndLog("Valid HID Prox ID Found!");
+    return 1;
+  }
   ans=CmdFSKdemodIO("");
-  if (ans>0) return 1;
+  if (ans>0) {
+    PrintAndLog("Valid IO Prox ID Found!");
+    return 1;
+  }
   //add psk and indala
-  ans=CmdIndalaDemod("");
-  if (ans>0) return 1;
-  ans=CmdIndalaDemod("224");
-  if (ans>0) return 1;
+  ans=CmdIndalaDecode("");
+  if (ans>0) {
+    PrintAndLog("Valid Indala ID Found!");
+    return 1;
+  }
+ // ans=CmdIndalaDemod("224");
+ // if (ans>0) return 1;
   PrintAndLog("No Known Tags Found!\n");
   return 0;
 }
 
-static command_t CommandTable[] = 
+static command_t CommandTable[] =
 {
   {"help",        CmdHelp,            1, "This help"},
   {"cmdread",     CmdLFCommandRead,   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)"},
@@ -602,7 +616,7 @@ static command_t CommandTable[] =
 int CmdLF(const char *Cmd)
 {
   CmdsParse(CommandTable, Cmd);
-  return 0; 
+  return 0;
 }
 
 int CmdHelp(const char *Cmd)
index 25e5255241a63fd0743dedc0cdbbb80bfafef3a6..11ad1403eced9b20b56384131b1368249d68039b 100644 (file)
@@ -300,7 +300,7 @@ int askrawdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert)
                else if (BinStream[i] < low)
                        low = BinStream[i];
        }
-       if ((high < 158)){  //throw away static
+       if ((high < 134)){  //throw away static  high has to be more than 6 on graph. noise <= -10 here
                //   PrintAndLog("no data found");
                return -2;
        }
@@ -407,21 +407,11 @@ size_t fsk_wave_demod(uint8_t * dest, size_t size, uint8_t fchigh, uint8_t fclow
 {
        uint32_t last_transition = 0;
        uint32_t idx = 1;
-       uint32_t maxVal=0;
+       //uint32_t maxVal=0;
        if (fchigh==0) fchigh=10;
        if (fclow==0) fclow=8;
-       // we do care about the actual theshold value as sometimes near the center of the
-       // wave we may get static that changes direction of wave for one value
-       // if our value is too low it might affect the read.  and if our tag or
-       // antenna is weak a setting too high might not see anything. [marshmellow]
-       if (size<100) return 0;
-       for(idx=1; idx<100; idx++){
-               if(maxVal<dest[idx]) maxVal = dest[idx];
-       }
-       // set close to the top of the wave threshold with 25% margin for error
-       // less likely to get a false transition up there.
-       // (but have to be careful not to go too high and miss some short waves)
-       uint8_t threshold_value = (uint8_t)(((maxVal-128)*.75)+128);
+       //set the threshold close to 0 (graph) to avoid static
+       uint8_t threshold_value = 134; //(uint8_t)(((maxVal-128)*.75)+128);
 
        // sync to first lo-hi transition, and threshold
 
@@ -573,7 +563,7 @@ uint32_t bytebits_to_byte(uint8_t* src, size_t numbits)
 
 int IOdemodFSK(uint8_t *dest, size_t size)
 {
-       static const uint8_t THRESHOLD = 140;
+       static const uint8_t THRESHOLD = 134;
        uint32_t idx=0;
        //make sure buffer has data
        if (size < 66) return -1;
@@ -707,8 +697,8 @@ int DetectpskNRZClock(uint8_t dest[], size_t size, int clock)
                        low = dest[i];
                }
        }
-       peak=(int)(((peak-128)*.90)+128);
-       low= (int)(((low-128)*.90)+128);
+       peak=(int)(((peak-128)*.75)+128);
+       low= (int)(((low-128)*.75)+128);
        //PrintAndLog("DEBUG: peak: %d, low: %d",peak,low);
        int ii;
        uint8_t clkCnt;
@@ -720,7 +710,7 @@ int DetectpskNRZClock(uint8_t dest[], size_t size, int clock)
        //test each valid clock from smallest to greatest to see which lines up
        for(clkCnt=0; clkCnt < 6; ++clkCnt){
                if (clk[clkCnt] == 32){
-                       tol=0;
+                       tol=1;
                }else{
                        tol=0;
                }
Impressum, Datenschutz