]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlf.c
FIX: added a break if the device starts acting strange when aquirering data from...
[proxmark3-svn] / client / cmdlf.c
index c638bb93acacfbbfe984c783168fd8414bda7967..3f89e6efddb030e2ab7cb36afd96a7772dff7b4f 100644 (file)
@@ -127,6 +127,18 @@ int usage_lf_simpsk(void) {
   PrintAndLog("       d <hexdata>    Data to sim as hex - omit to sim from DemodBuffer");
   return 0;
 }
+int usage_lf_find(void){
+    PrintAndLog("Usage:  lf search <0|1> [u]");
+    PrintAndLog("     <use data from Graphbuffer> , if not set, try reading data from tag.");
+    PrintAndLog("     [Search for Unknown tags] , if not set, reads only known tags.");
+    PrintAndLog("");
+    PrintAndLog("    sample: lf search     = try reading data from tag & search for known tags");
+    PrintAndLog("          : lf search 1   = use data from GraphBuffer & search for known tags");
+    PrintAndLog("          : lf search u   = try reading data from tag & search for known and unknown tags");
+    PrintAndLog("          : lf search 1 u = use data from GraphBuffer & search for known and unknown tags");
+       return 0;
+}
+
 
 /* send a LF command before reading */
 int CmdLFCommandRead(const char *Cmd)
@@ -180,7 +192,6 @@ int CmdLFCommandRead(const char *Cmd)
        if (errors) return usage_lf_cmdread();
        
        // in case they specified 'H'
-       // added to the end..  
        strcpy((char *)&c.d.asBytes + strLength, dummy);
 
        clearCommandBuffer();
@@ -269,191 +280,190 @@ int CmdFlexdemod(const char *Cmd)
   
 int CmdIndalaDemod(const char *Cmd)
 {
-  // Usage: recover 64bit UID by default, specify "224" as arg to recover a 224bit UID
-
-  int state = -1;
-  int count = 0;
-  int i, j;
-
-  // worst case with GraphTraceLen=64000 is < 4096
-  // under normal conditions it's < 2048
-
-  uint8_t rawbits[4096];
-  int rawbit = 0;
-  int worst = 0, worstPos = 0;
- // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32);
-  for (i = 0; i < GraphTraceLen-1; i += 2) {
-    count += 1;
-    if ((GraphBuffer[i] > GraphBuffer[i + 1]) && (state != 1)) {
-      if (state == 0) {
-        for (j = 0; j <  count - 8; j += 16) {
-          rawbits[rawbit++] = 0;
-        }
-        if ((abs(count - j)) > worst) {
-          worst = abs(count - j);
-          worstPos = i;
-        }
-      }
-      state = 1;
-      count = 0;
-    } else if ((GraphBuffer[i] < GraphBuffer[i + 1]) && (state != 0)) {
-      if (state == 1) {
-        for (j = 0; j <  count - 8; j += 16) {
-          rawbits[rawbit++] = 1;
-        }
-        if ((abs(count - j)) > worst) {
-          worst = abs(count - j);
-          worstPos = i;
-        }
-      }
-      state = 0;
-      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);
+       // Usage: recover 64bit UID by default, specify "224" as arg to recover a 224bit UID
+
+       int state = -1;
+       int count = 0;
+       int i, j;
+
+       // worst case with GraphTraceLen=64000 is < 4096
+       // under normal conditions it's < 2048
+
+       uint8_t rawbits[4096];
+       int rawbit = 0;
+       int worst = 0, worstPos = 0;
+       // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32);
+       
+       // loop through raw signal - since we know it is psk1 rf/32 fc/2 skip every other value (+=2)
+       for (i = 0; i < GraphTraceLen-1; i += 2) {
+               count += 1;
+               if ((GraphBuffer[i] > GraphBuffer[i + 1]) && (state != 1)) {
+                       // appears redundant - marshmellow
+                       if (state == 0) {
+                               for (j = 0; j <  count - 8; j += 16) {
+                                       rawbits[rawbit++] = 0;
+                               }
+                               if ((abs(count - j)) > worst) {
+                                       worst = abs(count - j);
+                                       worstPos = i;
+                               }
+                       }
+                       state = 1;
+                       count = 0;
+               } else if ((GraphBuffer[i] < GraphBuffer[i + 1]) && (state != 0)) {
+                       //appears redundant
+                       if (state == 1) {
+                               for (j = 0; j <  count - 8; j += 16) {
+                                       rawbits[rawbit++] = 1;
+                               }
+                               if ((abs(count - j)) > worst) {
+                                       worst = abs(count - j);
+                                       worstPos = i;
+                               }
+                       }
+                       state = 0;
+                       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);
        } else {
                return 0;
        }
 
-  // Finding the start of a UID
-  int uidlen, long_wait;
-  if (strcmp(Cmd, "224") == 0) {
-    uidlen = 224;
-    long_wait = 30;
-  } else {
-    uidlen = 64;
-    long_wait = 29;
-  }
+       // Finding the start of a UID
+       int uidlen, long_wait;
+       if (strcmp(Cmd, "224") == 0) {
+               uidlen = 224;
+               long_wait = 30;
+       } else {
+               uidlen = 64;
+               long_wait = 29;
+       }
 
-  int start;
-  int first = 0;
-  for (start = 0; start <= rawbit - uidlen; start++) {
-    first = rawbits[start];
-    for (i = start; i < start + long_wait; i++) {
-      if (rawbits[i] != first) {
-        break;
-      }
-    }
-    if (i == (start + long_wait)) {
-      break;
-    }
-  }
+       int start;
+       int first = 0;
+       for (start = 0; start <= rawbit - uidlen; start++) {
+               first = rawbits[start];
+               for (i = start; i < start + long_wait; i++) {
+                       if (rawbits[i] != first) {
+                               break;
+                       }
+               }
+               if (i == (start + long_wait)) {
+                       break;
+               }
+       }
   
-  if (start == rawbit - uidlen + 1) {
-    PrintAndLog("nothing to wait for");
-    return 0;
-  }
+       if (start == rawbit - uidlen + 1) {
+               PrintAndLog("nothing to wait for");
+               return 0;
+       }
 
-  // Inverting signal if needed
-  if (first == 1) {
-    for (i = start; i < rawbit; i++) {
-      rawbits[i] = !rawbits[i];
-    }
-  }
+       // Inverting signal if needed
+       if (first == 1) {
+               for (i = start; i < rawbit; i++) {
+                       rawbits[i] = !rawbits[i];
+               }
+       }
 
-  // Dumping UID
+       // Dumping UID
        uint8_t bits[224] = {0x00};
        char showbits[225] = {0x00};
-  int bit;
-  i = start;
-  int times = 0;
+       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++) {
-      bits[bit] = rawbits[i++];
-      // As we cannot know the parity, let's use "." and "/"
-      showbits[bit] = '.' + bits[bit];
-    }
-    showbits[bit+1]='\0';
-    PrintAndLog("Partial UID=%s", showbits);
-    return 0;
-  } else {
-    for (bit = 0; bit < uidlen; bit++) {
-      bits[bit] = rawbits[i++];
-      showbits[bit] = '0' + bits[bit];
-    }
-    times = 1;
-  }
+       if (uidlen > rawbit) {
+               PrintAndLog("Warning: not enough raw bits to get a full UID");
+               for (bit = 0; bit < rawbit; bit++) {
+                       bits[bit] = rawbits[i++];
+                       // As we cannot know the parity, let's use "." and "/"
+                       showbits[bit] = '.' + bits[bit];
+               }
+               showbits[bit+1]='\0';
+               PrintAndLog("Partial UID=%s", showbits);
+               return 0;
+       } else {
+               for (bit = 0; bit < uidlen; bit++) {
+                       bits[bit] = rawbits[i++];
+                       showbits[bit] = '0' + bits[bit];
+               }
+               times = 1;
+       }
   
-  //convert UID to HEX
-  uint32_t uid1, uid2, uid3, uid4, uid5, uid6, uid7;
-  int idx;
+       //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') {
-        uid1=(uid1<<1)|(uid2>>31);
-        uid2=(uid2<<1)|0;
-        } else {
-        uid1=(uid1<<1)|(uid2>>31);
-        uid2=(uid2<<1)|1;
-        } 
-      }
-    PrintAndLog("UID=%s (%x%08x)", showbits, uid1, uid2);
-  }
-  else {
+       if (uidlen==64){
+               for( idx=0; idx<64; idx++) {
+                       if (showbits[idx] == '0') {
+                               uid1 = (uid1<<1) | (uid2>>31);
+                               uid2 = (uid2<<1) | 0;
+                       } else {
+                               uid1 = (uid1<<1) | (uid2>>31);
+                               uid2 = (uid2<<1) | 1;
+                       } 
+               }
+               PrintAndLog("UID=%s (%x%08x)", showbits, uid1, uid2);
+       } else {
                uid3 = uid4 = uid5 = uid6 = uid7 = 0;
 
-    for( idx=0; idx<224; idx++) {
-        uid1=(uid1<<1)|(uid2>>31);
-        uid2=(uid2<<1)|(uid3>>31);
-        uid3=(uid3<<1)|(uid4>>31);
-        uid4=(uid4<<1)|(uid5>>31);
-        uid5=(uid5<<1)|(uid6>>31);
-        uid6=(uid6<<1)|(uid7>>31);
-                       
+               for( idx=0; idx<224; idx++) {
+                       uid1 = (uid1<<1) | (uid2>>31);
+                       uid2 = (uid2<<1) | (uid3>>31);
+                       uid3 = (uid3<<1) | (uid4>>31);
+                       uid4 = (uid4<<1) | (uid5>>31);
+                       uid5 = (uid5<<1) | (uid6>>31);
+                       uid6 = (uid6<<1) | (uid7>>31);
+
                        if (showbits[idx] == '0') 
                                uid7 = (uid7<<1) | 0;
                        else 
                                uid7 = (uid7<<1) | 1;
-      }
-    PrintAndLog("UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7);
-  }
+               }
+               PrintAndLog("UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7);
+       }
 
-  // Checking UID against next occurrences
-    int failed = 0;
+       // Checking UID against next occurrences
+       int failed = 0;
        for (; i + uidlen <= rawbit;) {
                failed = 0;
-    for (bit = 0; bit < uidlen; bit++) {
-      if (bits[bit] != rawbits[i++]) {
-        failed = 1;
-        break;
-      }
-    }
-    if (failed == 1) {
-      break;
-    }
-    times += 1;
-  }
+               for (bit = 0; bit < uidlen; bit++) {
+                       if (bits[bit] != rawbits[i++]) {
+                               failed = 1;
+                               break;
+                       }
+               }
+               if (failed == 1) {
+                       break;
+               }
+               times += 1;
+       }
 
-  PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen);
+       PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen);
 
-  // Remodulating for tag cloning
+       // Remodulating for tag cloning
        // 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;
-  int phase = 0;
-  for (bit = 0; bit < uidlen; bit++) {
-    if (bits[bit] == 0) {
-      phase = 0;
-    } else {
-      phase = 1;
-    }
-    int j;
-    for (j = 0; j < 32; j++) {
-      GraphBuffer[i++] = phase;
-      phase = !phase;
-    }
-  }
+       GraphTraceLen = 32 * uidlen;
+       i = 0;
+       int phase = 0;
+       for (bit = 0; bit < uidlen; bit++) {
+               phase = (bits[bit] == 0) ? 0 : 1;
+               int j;
+               for (j = 0; j < 32; j++) {
+                       GraphBuffer[i++] = phase;
+                       phase = !phase;
+               }
+       }
 
-  RepaintGraphWindow();
-  return 1;
+       RepaintGraphWindow();
+       return 1;
 }
 
 int CmdIndalaClone(const char *Cmd)
@@ -494,6 +504,7 @@ int CmdIndalaClone(const char *Cmd)
     c.arg[1] = uid2;
   }
 
+       clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
@@ -571,6 +582,7 @@ int CmdLFSetConfig(const char *Cmd)
        //Averaging is a flag on high-bit of arg[1]
        UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG};
        memcpy(c.d.asBytes,&config,sizeof(sample_config));
+       clearCommandBuffer();
        SendCommand(&c);
        return 0;
 }
@@ -749,6 +761,7 @@ int CmdLFfskSim(const char *Cmd)
   UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
 
   memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
@@ -842,6 +855,7 @@ int CmdLFaskSim(const char *Cmd)
   UsbCommand c = {CMD_ASK_SIM_TAG, {arg1, arg2, size}};
   PrintAndLog("preparing to sim ask data: %d bits", size);
   memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
   SendCommand(&c);
   return 0;
 }
@@ -949,6 +963,7 @@ int CmdLFpskSim(const char *Cmd)
   UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}};
   PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size);
   memcpy(c.d.asBytes, DemodBuffer, size);
+       clearCommandBuffer();
   SendCommand(&c);
   
   return 0;
@@ -1041,85 +1056,66 @@ int CmdVchDemod(const char *Cmd)
 }
 
 //by marshmellow
-int CmdLFfind(const char *Cmd)
-{
-  int ans=0;
-  char cmdp = param_getchar(Cmd, 0);
-  char testRaw = param_getchar(Cmd, 1);
-  if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  lf search <0|1> [u]");
-    PrintAndLog("     <use data from Graphbuffer> , if not set, try reading data from tag.");
-    PrintAndLog("     [Search for Unknown tags] , if not set, reads only known tags.");
-    PrintAndLog("");
-    PrintAndLog("    sample: lf search     = try reading data from tag & search for known tags");
-    PrintAndLog("          : lf search 1   = use data from GraphBuffer & search for known tags");
-    PrintAndLog("          : lf search u   = try reading data from tag & search for known and unknown tags");
-    PrintAndLog("          : lf search 1 u = use data from GraphBuffer & search for known and unknown tags");
-
-    return 0;
-  }
+int CmdLFfind(const char *Cmd) {
+       int ans = 0;
+       char cmdp = param_getchar(Cmd, 0);
+       char testRaw = param_getchar(Cmd, 1);
+       if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find();
 
-  if (!offline && (cmdp != '1')){
+       if (!offline && (cmdp != '1')){
                CmdLFRead("s");
                getSamples("30000",false);
-  } else if (GraphTraceLen < 1000) {
-    PrintAndLog("Data in Graphbuffer was too small.");
-    return 0;
-  }
-  if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
-
-  PrintAndLog("NOTE: some demods output possible binary\n  if it finds something that looks like a tag");
-  PrintAndLog("False Positives ARE possible\n");  
-  PrintAndLog("\nChecking for known tags:\n");
+       } else if (GraphTraceLen < 1000) {
+               PrintAndLog("Data in Graphbuffer was too small.");
+               return 0;
+       }
+       if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
 
-  ans=CmdFSKdemodIO("");
-  if (ans>0) {
-    PrintAndLog("\nValid IO Prox ID Found!");
-    return 1;
-  }
+       PrintAndLog("NOTE: some demods output possible binary\n  if it finds something that looks like a tag");
+       PrintAndLog("False Positives ARE possible\n");  
+       PrintAndLog("\nChecking for known tags:\n");
 
-  ans=CmdFSKdemodPyramid("");
-  if (ans>0) {
-    PrintAndLog("\nValid Pyramid ID Found!");
-    return 1;
-  }
+       ans=CmdFSKdemodIO("");
+       if (ans>0) {
+       PrintAndLog("\nValid IO Prox ID Found!");
+       return 1;
+       }
 
-  ans=CmdFSKdemodParadox("");
-  if (ans>0) {
-    PrintAndLog("\nValid Paradox ID Found!");
-    return 1;
-  }
+       ans=CmdFSKdemodPyramid("");
+       if (ans>0) {
+       PrintAndLog("\nValid Pyramid ID Found!");
+       return 1;
+       }
 
-  ans=CmdFSKdemodAWID("");
-  if (ans>0) {
-    PrintAndLog("\nValid AWID ID Found!");
-    return 1;
-  }
+       ans=CmdFSKdemodParadox("");
+       if (ans>0) {
+       PrintAndLog("\nValid Paradox ID Found!");
+       return 1;
+       }
 
-  ans=CmdFSKdemodHID("");
-  if (ans>0) {
-    PrintAndLog("\nValid HID Prox ID Found!");
-    return 1;
-  }
+       ans=CmdFSKdemodAWID("");
+       if (ans>0) {
+       PrintAndLog("\nValid AWID ID Found!");
+       return 1;
+       }
 
-  //add psk and indala
-  ans=CmdIndalaDecode("");
-  if (ans>0) {
-    PrintAndLog("\nValid Indala ID Found!");
-    return 1;
-  }
+       ans=CmdFSKdemodHID("");
+       if (ans>0) {
+       PrintAndLog("\nValid HID Prox ID Found!");
+       return 1;
+       }
 
-  ans=CmdAskEM410xDemod("");
-  if (ans>0) {
-    PrintAndLog("\nValid EM410x ID Found!");
-    return 1;
-  }
+       ans=CmdAskEM410xDemod("");
+       if (ans>0) {
+       PrintAndLog("\nValid EM410x ID Found!");
+       return 1;
+       }
 
-  ans=CmdG_Prox_II_Demod("");
-  if (ans>0) {
-    PrintAndLog("\nValid Guardall G-Prox II ID Found!");
-    return 1;
-  }
+       ans=CmdG_Prox_II_Demod("");
+       if (ans>0) {
+       PrintAndLog("\nValid Guardall G-Prox II ID Found!");
+       return 1;
+       }
 
        ans=CmdFDXBdemodBI("");
        if (ans>0) {
@@ -1133,98 +1129,115 @@ int CmdLFfind(const char *Cmd)
                return 1;
        }       
 
+       ans=CmdVikingDemod("");
+       if (ans>0) {
+               PrintAndLog("\nValid Viking ID Found!");
+               return 1;
+       }       
+
+       ans=CmdIndalaDecode("");
+       if (ans>0) {
+               PrintAndLog("\nValid Indala ID Found!");
+               return 1;
+       }
+
        ans=CmdPSKNexWatch("");
        if (ans>0) {
                PrintAndLog("\nValid NexWatch ID Found!");
                return 1;
        }
-
-  PrintAndLog("\nNo Known Tags Found!\n");
-  if (testRaw=='u' || testRaw=='U'){
-    //test unknown tag formats (raw mode)
-    PrintAndLog("\nChecking for Unknown tags:\n");
-    ans=AutoCorrelate(4000, FALSE, FALSE);
+       // TIdemod?
        
-    if (ans > 0) {
-
-               PrintAndLog("Possible Auto Correlation of %d repeating samples",ans);
 
-               if ( ans % 8 == 0)  {
-                       int bytes = (ans / 8);
-                       PrintAndLog("Possible %d bytes", bytes);
-                       int blocks = 0;
-                       if ( bytes % 2 == 0) {
-                               blocks = (bytes / 2);   
-                               PrintAndLog("Possible  2 blocks, width %d", blocks);
-                       }
-                       if ( bytes % 4 == 0) {
-                               blocks = (bytes / 4);   
-                               PrintAndLog("Possible  4 blocks, width %d", blocks);
-                       }
-                       if ( bytes % 8 == 0) {
-                               blocks = (bytes / 8);   
-                               PrintAndLog("Possible  8 blocks, width %d", blocks);
-                       }
-                       if ( bytes % 16 == 0) {
-                               blocks = (bytes / 16);  
-                               PrintAndLog("Possible 16 blocks, width %d", blocks);
+       PrintAndLog("\nNo Known Tags Found!\n");
+       if (testRaw=='u' || testRaw=='U'){
+               //test unknown tag formats (raw mode)
+               PrintAndLog("\nChecking for Unknown tags:\n");
+               ans=AutoCorrelate(4000, FALSE, FALSE);
+       
+               if (ans > 0) {
+
+                       PrintAndLog("Possible Auto Correlation of %d repeating samples",ans);
+
+                       if ( ans % 8 == 0)  {
+                               int bytes = (ans / 8);
+                               PrintAndLog("Possible %d bytes", bytes);
+                               int blocks = 0;
+                               if ( bytes % 2 == 0) {
+                                       blocks = (bytes / 2);   
+                                       PrintAndLog("Possible  2 blocks, width %d", blocks);
+                               }
+                               if ( bytes % 4 == 0) {
+                                       blocks = (bytes / 4);   
+                                       PrintAndLog("Possible  4 blocks, width %d", blocks);
+                               }
+                               if ( bytes % 8 == 0) {
+                                       blocks = (bytes / 8);   
+                                       PrintAndLog("Possible  8 blocks, width %d", blocks);
+                               }
+                               if ( bytes % 16 == 0) {
+                                       blocks = (bytes / 16);  
+                                       PrintAndLog("Possible 16 blocks, width %d", blocks);
+                               }
                        }
                }
-       }
+
                ans=GetFskClock("",FALSE,FALSE); 
-    if (ans != 0){ //fsk
+               if (ans != 0){ //fsk
                        ans=FSKrawDemod("",TRUE);
-      if (ans>0) {
-        PrintAndLog("\nUnknown FSK Modulated Tag Found!");
-        return 1;
-      }
-    }
+                       if (ans>0) {
+                               PrintAndLog("\nUnknown FSK Modulated Tag Found!");
+                               return 1;
+                       }
+               }
+
                ans=ASKDemod("0 0 0",TRUE,FALSE,1);
-    if (ans>0) {
-      PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!");
-      PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
-      return 1;
-    }
-    ans=CmdPSK1rawDemod("");
-    if (ans>0) {
-      PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'");
-      PrintAndLog("\nCould also be PSK3 - [currently not supported]");
-      PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod");
-      return 1;
-    }
-    PrintAndLog("\nNo Data Found!\n");
-  }
-  return 0;
+               if (ans>0) {
+                 PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!");
+                 PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
+                 return 1;
+               }
+               
+               ans=CmdPSK1rawDemod("");
+               if (ans>0) {
+                       PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'");
+                       PrintAndLog("\nCould also be PSK3 - [currently not supported]");
+                       PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod");
+                       return 1;
+               }
+               PrintAndLog("\nNo Data Found!\n");
+       }
+       return 0;
 }
 
 static command_t CommandTable[] = 
 {
-  {"help",        CmdHelp,            1, "This help"},
+       {"help",        CmdHelp,            1, "This help"},
        {"awid",        CmdLFAWID,          1, "{ AWID RFIDs... }"},
-  {"em4x",        CmdLFEM4X,          1, "{ EM4X RFIDs... }"},
-  {"hid",         CmdLFHID,           1, "{ HID RFIDs... }"},
-  {"hitag",       CmdLFHitag,         1, "{ HITAG RFIDs... }"},
-  {"io",                 CmdLFIO,                1, "{ IOPROX RFIDs... }"},
-  {"pcf7931",     CmdLFPCF7931,       1, "{ PCF7931 RFIDs... }"},
-  {"ti",          CmdLFTI,            1, "{ TI RFIDs... }"},
-  {"t55xx",       CmdLFT55XX,         1, "{ T55X7 RFIDs... }"},
-  {"viking",      CmdLFViking,        1, "{ Viking RFIDs... }"},
-  {"config",      CmdLFSetConfig,     0, "Set config for LF sampling, bit/sample, decimation, frequency"},
-  {"cmdread",     CmdLFCommandRead,   0, "<off period> <'0' period> <'1' period> <command> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"},
-  {"flexdemod",   CmdFlexdemod,       1, "Demodulate samples for FlexPass"},
-  {"indalademod", CmdIndalaDemod,     1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
-  {"indalaclone", CmdIndalaClone,     0, "<UID> ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"},
-  {"read",        CmdLFRead,          0, "['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"},
-  {"search",      CmdLFfind,          1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t-- 'u' to search for unknown tags"},
-  {"sim",         CmdLFSim,           0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"},
-  {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d <hexdata>] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"},
-  {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
-  {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \n\t\t-- Simulate LF PSK tag from demodbuffer or input"},
-  {"simbidir",    CmdLFSimBidir,      0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"},
-  {"snoop",       CmdLFSnoop,         0, "['l'|'h'|<divisor>] [trigger threshold] -- Snoop LF (l:125khz, h:134khz)"},
-  {"vchdemod",    CmdVchDemod,        1, "['clone'] -- Demodulate samples for VeriChip"},
-  {NULL, NULL, 0, NULL}
+       {"em4x",        CmdLFEM4X,          1, "{ EM4X RFIDs... }"},
+       {"hid",         CmdLFHID,           1, "{ HID RFIDs... }"},
+       {"hitag",       CmdLFHitag,         1, "{ HITAG RFIDs... }"},
+       {"io",            CmdLFIO,                1, "{ IOPROX RFIDs... }"},
+       {"pcf7931",     CmdLFPCF7931,       1, "{ PCF7931 RFIDs... }"},
+       {"ti",          CmdLFTI,            1, "{ TI RFIDs... }"},
+       {"t55xx",       CmdLFT55XX,         1, "{ T55X7 RFIDs... }"},
+       {"viking",      CmdLFViking,        1, "{ Viking RFIDs... }"},
+       {"config",      CmdLFSetConfig,     0, "Set config for LF sampling, bit/sample, decimation, frequency"},
+
+       {"cmdread",     CmdLFCommandRead,   0, "<off period> <'0' period> <'1' period> <command> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"},
+       {"flexdemod",   CmdFlexdemod,       1, "Demodulate samples for FlexPass"},
+       {"indalademod", CmdIndalaDemod,     1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
+       {"indalaclone", CmdIndalaClone,     0, "<UID> ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"},
+       {"read",        CmdLFRead,          0, "['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"},
+       {"search",      CmdLFfind,          1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t-- 'u' to search for unknown tags"},
+       {"sim",         CmdLFSim,           0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"},
+       {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d <hexdata>] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"},
+       {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
+       {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \n\t\t-- Simulate LF PSK tag from demodbuffer or input"},
+       {"simbidir",    CmdLFSimBidir,      0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"},
+       {"snoop",       CmdLFSnoop,         0, "Snoop LF"},
+       {"vchdemod",    CmdVchDemod,        1, "['clone'] -- Demodulate samples for VeriChip"},
+       {NULL, NULL, 0, NULL}
 };
 
 int CmdLF(const char *Cmd)
Impressum, Datenschutz