mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 22:03:42 -07:00
adapt timeout
This commit is contained in:
parent
b98b51c279
commit
70ba690c06
1 changed files with 15 additions and 25 deletions
|
@ -100,6 +100,8 @@ int gLow = 0;
|
||||||
|
|
||||||
static void init_tag(void) {
|
static void init_tag(void) {
|
||||||
|
|
||||||
|
// iceman: memset(tag.sectors, 0x00, sizeof));
|
||||||
|
|
||||||
// initialize global tag structure
|
// initialize global tag structure
|
||||||
for (int i = 0; i < 34; i++)
|
for (int i = 0; i < 34; i++)
|
||||||
for (int j = 0; j < 7; j++)
|
for (int j = 0; j < 7; j++)
|
||||||
|
@ -186,10 +188,9 @@ static void em4x50_setup_read(void) {
|
||||||
|
|
||||||
// 50ms for the resonant antenna to settle.
|
// 50ms for the resonant antenna to settle.
|
||||||
SpinDelay(50);
|
SpinDelay(50);
|
||||||
|
|
||||||
// Now set up the SSC to get the ADC samples that are now streaming at us.
|
// Now set up the SSC to get the ADC samples that are now streaming at us.
|
||||||
FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER);
|
FpgaSetupSsc(FPGA_MAJOR_MODE_LF_READER);
|
||||||
// start a 1.5ticks is 1us
|
|
||||||
StartTicks();
|
|
||||||
|
|
||||||
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125);
|
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125);
|
||||||
|
|
||||||
|
@ -256,10 +257,9 @@ static bool get_signalproperties(void) {
|
||||||
signal_found = true;
|
signal_found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!signal_found)
|
if (signal_found == false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// calculate mean maximum value of 32 periods, each period has a length of
|
// calculate mean maximum value of 32 periods, each period has a length of
|
||||||
|
@ -313,13 +313,15 @@ static int get_next_bit(void) {
|
||||||
|
|
||||||
static uint32_t get_pulse_length(void) {
|
static uint32_t get_pulse_length(void) {
|
||||||
|
|
||||||
|
// Dbprintf( _CYAN_("4x50 get_pulse_length A") );
|
||||||
|
|
||||||
int32_t timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
int32_t timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
||||||
|
|
||||||
// iterates pulse length (low -> high -> low)
|
// iterates pulse length (low -> high -> low)
|
||||||
|
|
||||||
volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
volatile uint8_t sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
||||||
|
|
||||||
while (sample > gLow || (timeout--)) {
|
while (sample > gLow && (timeout--)) {
|
||||||
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +331,7 @@ static uint32_t get_pulse_length(void) {
|
||||||
AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG;
|
AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG;
|
||||||
timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
||||||
|
|
||||||
while (sample < gHigh || (timeout--)) {
|
while (sample < gHigh && (timeout--)) {
|
||||||
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +339,7 @@ static uint32_t get_pulse_length(void) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
timeout = (T0 * 3 * EM4X50_T_TAG_FULL_PERIOD);
|
||||||
while (sample > gLow || (timeout--)) {
|
while (sample > gLow && (timeout--)) {
|
||||||
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
sample = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,17 +347,12 @@ static uint32_t get_pulse_length(void) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return (uint32_t)AT91C_BASE_TC1->TC_CV;
|
return (uint32_t)AT91C_BASE_TC1->TC_CV;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool check_pulse_length(uint32_t pl, int length) {
|
static bool check_pulse_length(uint32_t pl, int length) {
|
||||||
|
|
||||||
// check if pulse length <pl> corresponds to given length <length>
|
// check if pulse length <pl> corresponds to given length <length>
|
||||||
|
return ((pl >= T0 * (length - EM4X50_TAG_TOLERANCE)) & (pl <= T0 * (length + EM4X50_TAG_TOLERANCE)));
|
||||||
if ((pl >= T0 * (length - EM4X50_TAG_TOLERANCE)) &
|
|
||||||
(pl <= T0 * (length + EM4X50_TAG_TOLERANCE)))
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void em4x50_send_bit(int bit) {
|
static void em4x50_send_bit(int bit) {
|
||||||
|
@ -443,12 +440,10 @@ static bool find_single_listen_window(void) {
|
||||||
|
|
||||||
// listen window found
|
// listen window found
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
cnt_pulses++;
|
cnt_pulses++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -507,7 +502,6 @@ static bool find_double_listen_window(bool bcommand) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
cnt_pulses++;
|
cnt_pulses++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -519,9 +513,7 @@ static bool find_em4x50_tag(void) {
|
||||||
|
|
||||||
// function is used to check wether a tag on the proxmark is an
|
// function is used to check wether a tag on the proxmark is an
|
||||||
// EM4x50 tag or not -> speed up "lf search" process
|
// EM4x50 tag or not -> speed up "lf search" process
|
||||||
|
return find_single_listen_window();
|
||||||
return (find_single_listen_window());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool request_receive_mode(void) {
|
static bool request_receive_mode(void) {
|
||||||
|
@ -529,9 +521,7 @@ static bool request_receive_mode(void) {
|
||||||
// To issue a command we have to find a listen window first.
|
// To issue a command we have to find a listen window first.
|
||||||
// Because identification and sychronization at the same time is not
|
// Because identification and sychronization at the same time is not
|
||||||
// possible when using pulse lengths a double listen window is used.
|
// possible when using pulse lengths a double listen window is used.
|
||||||
|
|
||||||
bool bcommand = true;
|
bool bcommand = true;
|
||||||
|
|
||||||
return find_double_listen_window(bcommand);
|
return find_double_listen_window(bcommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue