mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-19 12:59:44 -07:00
a few bug fixes with adding hitag detection to...
`lf search`
This commit is contained in:
parent
0b91ce03e5
commit
921e63992c
2 changed files with 33 additions and 6 deletions
|
@ -1203,6 +1203,7 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
bQuiet = false;
|
bQuiet = false;
|
||||||
bCrypto = false;
|
bCrypto = false;
|
||||||
bAuthenticating = false;
|
bAuthenticating = false;
|
||||||
|
bQuitTraceFull = true;
|
||||||
} break;
|
} break;
|
||||||
default: {
|
default: {
|
||||||
Dbprintf("Error, unknown function: %d",htf);
|
Dbprintf("Error, unknown function: %d",htf);
|
||||||
|
@ -1331,6 +1332,8 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
// we need to wait (T_Wait2 + half_tag_period) when the last was a 'one'.
|
// we need to wait (T_Wait2 + half_tag_period) when the last was a 'one'.
|
||||||
// All timer values are in terms of T0 units
|
// All timer values are in terms of T0 units
|
||||||
while(AT91C_BASE_TC0->TC_CV < T0*(t_wait+(HITAG_T_TAG_HALF_PERIOD*lastbit)));
|
while(AT91C_BASE_TC0->TC_CV < T0*(t_wait+(HITAG_T_TAG_HALF_PERIOD*lastbit)));
|
||||||
|
|
||||||
|
//Dbprintf("DEBUG: Sending reader frame");
|
||||||
|
|
||||||
// Transmit the reader frame
|
// Transmit the reader frame
|
||||||
hitag_reader_send_frame(tx,txlen);
|
hitag_reader_send_frame(tx,txlen);
|
||||||
|
@ -1360,7 +1363,9 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
bSkip = true;
|
bSkip = true;
|
||||||
tag_sof = reset_sof;
|
tag_sof = reset_sof;
|
||||||
response = 0;
|
response = 0;
|
||||||
|
//Dbprintf("DEBUG: Waiting to receive frame");
|
||||||
|
uint32_t errorCount = 0;
|
||||||
|
|
||||||
// Receive frame, watch for at most T0*EOF periods
|
// Receive frame, watch for at most T0*EOF periods
|
||||||
while (AT91C_BASE_TC1->TC_CV < T0*HITAG_T_WAIT_MAX) {
|
while (AT91C_BASE_TC1->TC_CV < T0*HITAG_T_WAIT_MAX) {
|
||||||
// Check if falling edge in tag modulation is detected
|
// Check if falling edge in tag modulation is detected
|
||||||
|
@ -1376,19 +1381,29 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
// Capture tag frame (manchester decoding using only falling edges)
|
// Capture tag frame (manchester decoding using only falling edges)
|
||||||
if(ra >= HITAG_T_EOF) {
|
if(ra >= HITAG_T_EOF) {
|
||||||
if (rxlen != 0) {
|
if (rxlen != 0) {
|
||||||
//DbpString("wierd1?");
|
//Dbprintf("DEBUG: Wierd1");
|
||||||
}
|
}
|
||||||
// Capture the T0 periods that have passed since last communication or field drop (reset)
|
// Capture the T0 periods that have passed since last communication or field drop (reset)
|
||||||
// We always recieve a 'one' first, which has the falling edge after a half period |-_|
|
// We always recieve a 'one' first, which has the falling edge after a half period |-_|
|
||||||
response = ra-HITAG_T_TAG_HALF_PERIOD;
|
response = ra-HITAG_T_TAG_HALF_PERIOD;
|
||||||
} else if(ra >= HITAG_T_TAG_CAPTURE_FOUR_HALF) {
|
} else if(ra >= HITAG_T_TAG_CAPTURE_FOUR_HALF) {
|
||||||
// Manchester coding example |-_|_-|-_| (101)
|
// Manchester coding example |-_|_-|-_| (101)
|
||||||
|
|
||||||
|
//need to test to verify we don't exceed memory...
|
||||||
|
//if ( ((rxlen+2) / 8) > HITAG_FRAME_LEN) {
|
||||||
|
// break;
|
||||||
|
//}
|
||||||
rx[rxlen / 8] |= 0 << (7-(rxlen%8));
|
rx[rxlen / 8] |= 0 << (7-(rxlen%8));
|
||||||
rxlen++;
|
rxlen++;
|
||||||
rx[rxlen / 8] |= 1 << (7-(rxlen%8));
|
rx[rxlen / 8] |= 1 << (7-(rxlen%8));
|
||||||
rxlen++;
|
rxlen++;
|
||||||
} else if(ra >= HITAG_T_TAG_CAPTURE_THREE_HALF) {
|
} else if(ra >= HITAG_T_TAG_CAPTURE_THREE_HALF) {
|
||||||
// Manchester coding example |_-|...|_-|-_| (0...01)
|
// Manchester coding example |_-|...|_-|-_| (0...01)
|
||||||
|
|
||||||
|
//need to test to verify we don't exceed memory...
|
||||||
|
//if ( ((rxlen+2) / 8) > HITAG_FRAME_LEN) {
|
||||||
|
// break;
|
||||||
|
//}
|
||||||
rx[rxlen / 8] |= 0 << (7-(rxlen%8));
|
rx[rxlen / 8] |= 0 << (7-(rxlen%8));
|
||||||
rxlen++;
|
rxlen++;
|
||||||
// We have to skip this half period at start and add the 'one' the second time
|
// We have to skip this half period at start and add the 'one' the second time
|
||||||
|
@ -1400,6 +1415,11 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
bSkip = !bSkip;
|
bSkip = !bSkip;
|
||||||
} else if(ra >= HITAG_T_TAG_CAPTURE_TWO_HALF) {
|
} else if(ra >= HITAG_T_TAG_CAPTURE_TWO_HALF) {
|
||||||
// Manchester coding example |_-|_-| (00) or |-_|-_| (11)
|
// Manchester coding example |_-|_-| (00) or |-_|-_| (11)
|
||||||
|
|
||||||
|
//need to test to verify we don't exceed memory...
|
||||||
|
//if ( ((rxlen+2) / 8) > HITAG_FRAME_LEN) {
|
||||||
|
// break;
|
||||||
|
//}
|
||||||
if (tag_sof) {
|
if (tag_sof) {
|
||||||
// Ignore bits that are transmitted during SOF
|
// Ignore bits that are transmitted during SOF
|
||||||
tag_sof--;
|
tag_sof--;
|
||||||
|
@ -1409,16 +1429,21 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) {
|
||||||
rxlen++;
|
rxlen++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//Dbprintf("DEBUG: Wierd2");
|
||||||
|
errorCount++;
|
||||||
// Ignore wierd value, is to small to mean anything
|
// Ignore wierd value, is to small to mean anything
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//if we saw over 100 wierd values break it probably isn't hitag...
|
||||||
|
if (errorCount >100) break;
|
||||||
// We can break this loop if we received the last bit from a frame
|
// We can break this loop if we received the last bit from a frame
|
||||||
if (AT91C_BASE_TC1->TC_CV > T0*HITAG_T_EOF) {
|
if (AT91C_BASE_TC1->TC_CV > T0*HITAG_T_EOF) {
|
||||||
if (rxlen>0) break;
|
if (rxlen>0) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Dbprintf("DEBUG: Done waiting for frame");
|
||||||
|
|
||||||
LED_B_OFF();
|
LED_B_OFF();
|
||||||
LED_D_OFF();
|
LED_D_OFF();
|
||||||
AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;
|
AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;
|
||||||
|
|
|
@ -1180,9 +1180,11 @@ int CmdLFfind(const char *Cmd)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ans=CmdLFHitagReader("26");
|
if (!offline && (cmdp != '1')){
|
||||||
if (ans==0) {
|
ans=CmdLFHitagReader("26");
|
||||||
return 1;
|
if (ans==0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLog("\nNo Known Tags Found!\n");
|
PrintAndLog("\nNo Known Tags Found!\n");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue