From 7a8db2f67821d2e55c98a9a4b7badcd17947777d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 4 Oct 2016 21:26:19 +0200 Subject: [PATCH 1/1] CHG: "hf legic read" - increased timeout values client side, reading MIM1024 takes a bit of time --- armsrc/legicrf.c | 6 ++---- client/cmdhflegic.c | 16 +++++++--------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index 4e0bc240..2d02b636 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -72,7 +72,7 @@ static void setup_timer(void) { #define RWD_TIME_1 120 // READER_TIME_PAUSE 20us off, 80us on = 100us 80 * 1.5 == 120ticks #define RWD_TIME_0 60 // READER_TIME_PAUSE 20us off, 40us on = 60us 40 * 1.5 == 60ticks #define RWD_TIME_PAUSE 30 // 20us == 20 * 1.5 == 30ticks */ -#define TAG_BIT_PERIOD 143 // 100us == 100 * 1.5 == 150ticks +#define TAG_BIT_PERIOD 142 // 100us == 100 * 1.5 == 150ticks #define TAG_FRAME_WAIT 495 // 330us from READER frame end to TAG frame start. 330 * 1.5 == 495 #define RWD_TIME_FUZZ 20 // rather generous 13us, since the peak detector + hysteresis fuzz quite a bit @@ -486,8 +486,6 @@ int legic_write_byte(uint8_t byte, uint16_t addr, uint8_t addr_sz) { int LegicRfReader(uint16_t offset, uint16_t len, uint8_t iv) { - len &= 0x3FF; - uint16_t i = 0; uint8_t isOK = 1; legic_card_select_t card; @@ -507,7 +505,7 @@ int LegicRfReader(uint16_t offset, uint16_t len, uint8_t iv) { setup_phase_reader(iv); LED_B_ON(); - while (i < len) { + while (i <= len) { int r = legic_read_byte(offset + i, card.cmdsize); if (r == -1 || BUTTON_PRESS()) { diff --git a/client/cmdhflegic.c b/client/cmdhflegic.c index ae67dd76..13313866 100644 --- a/client/cmdhflegic.c +++ b/client/cmdhflegic.c @@ -400,7 +400,7 @@ int CmdLegicRFRead(const char *Cmd) { // OUT-OF-BOUNDS check if ( len + offset > MAX_LENGTH ) { len = MAX_LENGTH - offset; - PrintAndLog("Out-of-bound, shorten len to %d", len); + PrintAndLog("Out-of-bound, shorten len to %d (0x%02X)", len); } if ( (IV & 0x7F) != IV ){ @@ -412,16 +412,14 @@ int CmdLegicRFRead(const char *Cmd) { IV |= 0x01; PrintAndLog("LSB of IV must be SET"); } - - //PrintAndLog("Using IV: 0x%02x", IV); UsbCommand c = {CMD_READER_LEGIC_RF, {offset, len, IV}}; clearCommandBuffer(); SendCommand(&c); UsbCommand resp; - if (WaitForResponseTimeout(CMD_ACK, &resp, 2000)) { + if (WaitForResponseTimeout(CMD_ACK, &resp, 2500)) { uint8_t isOK = resp.arg[0] & 0xFF; - uint16_t readlen = resp.arg[1] & 0x3FF; + uint16_t readlen = resp.arg[1]; if ( isOK ) { uint8_t *data = malloc(readlen); @@ -435,7 +433,7 @@ int CmdLegicRFRead(const char *Cmd) { // copy data from device GetEMLFromBigBuf(data, readlen, 0); - if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2000)){ + if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2500)){ PrintAndLog("Command execute timeout"); if ( data ) free(data); @@ -616,7 +614,7 @@ int CmdLegicRfWrite(const char *Cmd) { // OUT-OF-BOUNDS check if ( len + offset > MAX_LENGTH ) { len = MAX_LENGTH - offset; - PrintAndLog("Out-of-bound, shorten len to %d", len); + PrintAndLog("Out-of-bound, shorten len to %d (0x%02X)", len); } if ( (IV & 0x7F) != IV ){ IV &= 0x7F; @@ -659,8 +657,8 @@ int CmdLegicRfRawWrite(const char *Cmd) { // OUT-OF-BOUNDS check if ( offset > MAX_LENGTH ) { - offset = MAX_LENGTH; - PrintAndLog("Out-of-bound, shorten len to %d", offset); + PrintAndLog("Out-of-bound, offset"); + return 1; } if ( (IV & 0x7F) != IV ){ -- 2.39.5