adapt timeout

This commit is contained in:
iceman1001 2020-09-05 23:58:21 +02:00
commit 70ba690c06

View file

@ -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,25 +339,20 @@ 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;
} }
if (timeout == 0) if (timeout == 0)
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,11 +440,9 @@ 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);
} }
@ -846,7 +836,7 @@ void em4x50_read(em4x50_data_t *etd) {
// set gHigh and gLow // set gHigh and gLow
if (get_signalproperties() && find_em4x50_tag()) { if (get_signalproperties() && find_em4x50_tag()) {
if (etd->addr_given) { if (etd->addr_given) {
// selective read mode // selective read mode