return 0;
}
int usage_lf_read(void){
- PrintAndLog("Usage: lf read [h] [s]");
+ PrintAndLog("Usage: lf read [h] [s] [t]");
PrintAndLog("Options:");
PrintAndLog(" h This help");
PrintAndLog(" s silent run no printout");
- PrintAndLog("This function takes no arguments. ");
+ PrintAndLog(" t waits for device to respond with no timeout");
PrintAndLog("Use 'lf config' to set parameters.");
return 0;
}
}
int CmdLFRead(const char *Cmd) {
- bool arg1 = false;
- uint8_t cmdp = param_getchar(Cmd, 0);
-
- if ( cmdp == 'h' || cmdp == 'H') return usage_lf_read();
+ bool errors = FALSE;
+ bool arg1 = FALSE;
+ bool thresholdRead = FALSE;
+ uint8_t cmdp = 0;
+ while(param_getchar(Cmd, cmdp) != 0x00) {
+ switch(param_getchar(Cmd, cmdp)) {
+ case 'h':
+ case 'H':
+ return usage_lf_read();
+ case 's':
+ case 'S':
+ arg1 = TRUE;
+ cmdp++;
+ break;
+ case 't':
+ case 'T':
+ thresholdRead = TRUE;
+ cmdp++;
+ break;
+ default:
+ PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+ errors = 1;
+ break;
+ }
+ if(errors) break;
+ }
- //suppress print
- if ( cmdp == 's' || cmdp == 'S') arg1 = true;
+ // No args
+ if (cmdp == 0) errors = 1;
+
+ //Validations
+ if (errors) return usage_lf_read();
UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
clearCommandBuffer();
SendCommand(&c);
- if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) {
- PrintAndLog("command execution time out");
- return 1;
+ if ( thresholdRead ) {
+ WaitForResponse(CMD_ACK,NULL);
+ } else {
+ if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) {
+ PrintAndLog("command execution time out");
+ return 1;
+ }
}
return 0;
}
//by marshmellow
int CmdLFfind(const char *Cmd) {
int ans = 0;
+ size_t minLength = 1000;
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')){
CmdLFRead("s");
getSamples("30000", false);
- } else if (GraphTraceLen < 1000) {
+ } else if (GraphTraceLen < minLength) {
PrintAndLog("Data in Graphbuffer was too small.");
return 0;
}
if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
- // if ( justNoise(GraphBuffer, GraphTraceLen) ) {
- // PrintAndLog("Signal looks just like noise. Quitting.");
- // return 0;
- // }
-
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");
+ size_t testLen = minLength;
+
+ // only run these tests if device is online
+ if (!offline && (cmdp != '1')){
+
+ // only run if graphbuffer is just noise as it should be for hitag/cotag
+ if (graphJustNoise(GraphBuffer, testLen)) {
+
+ ans=CmdLFHitagReader("26");
+ if (ans==0)
+ return 1;
+
+ ans=CmdCOTAGRead("");
+ if (ans>0){
+ PrintAndLog("\nValid COTAG ID Found!");
+ return 1;
+ }
+ PrintAndLog("Signal looks just like noise. Quitting.");
+ return 0;
+ }
+ }
+
ans=CmdFSKdemodIO("");
if (ans>0) {
PrintAndLog("\nValid IO Prox ID Found!");
PrintAndLog("\nValid Presco ID Found!");
return 1;
}
- // ICEMAN; always call save_restorGB for COTAG. Will break graphbuffer
- save_restoreGB(1)
- ans=CmdCOTAGRead("");
- if (ans>0){
- PrintAndLog("\nValid COTAG ID Found!");
- return 1;
- }
- save_restoreGB(0)
- // TIdemod?
-/*
- if (!offline && (cmdp != '1')){
- ans=CmdLFHitagReader("26");
- if (ans==0) {
- return 1;
- }
- }
-*/
+ // TIdemod?
PrintAndLog("\nNo Known Tags Found!\n");
if (testRaw=='u' || testRaw=='U'){
//test unknown tag formats (raw mode)