From 765d2acbb0d49fc58a9e0fdb5089a8e55710ffba Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 29 Jul 2021 10:51:31 +0200 Subject: [PATCH] t55xx detect/read/write/dump etc will fail if you set lf config to something. Moved the reset / restore of lf config to device side for T55XX readblock. t55xx sniff still obeys lf config since it uses lf sniff beneath. --- armsrc/appmain.c | 1 - armsrc/lfops.c | 9 +++++++++ armsrc/lfsampling.c | 18 +++++++++++++++++- armsrc/lfsampling.h | 2 +- client/src/cmdlft55xx.c | 32 -------------------------------- 5 files changed, 27 insertions(+), 35 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index b6781ac6d..3113dd14f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -818,7 +818,6 @@ static void PacketReceived(PacketCommandNG *packet) { sample_config c; memcpy(&c, packet->data.asBytes, sizeof(sample_config)); setSamplingConfig(&c); -// setSamplingConfig((sample_config *) packet->data.asBytes); break; } case CMD_LF_ACQ_RAW_ADC: { diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 12ef076b2..10ee379cd 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1999,6 +1999,12 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, flags |= (downlink_mode & 3) << 3; if (brute_mem) flags |= 0x0100; + sample_config old_config; + sample_config *curr_config = getSamplingConfig(); + memcpy(&old_config, curr_config, sizeof(sample_config)); + old_config.verbose = false; + + setDefaultSamplingConfig(); size_t samples = 12000; @@ -2037,6 +2043,9 @@ void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, reply_ng(CMD_LF_T55XX_READBL, PM3_SUCCESS, NULL, 0); LED_A_OFF(); } + + // reset back to old / save config + setSamplingConfig(&old_config); } diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 60b25436a..19ea3188d 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -28,7 +28,18 @@ Default LF config is set to: samples_to_skip = 0 verbose = YES */ -static sample_config config = { 1, 8, 1, LF_DIVISOR_125, 0, 0, 1} ; + +static sample_config def_config = { + .decimation = 1, + .bits_per_sample = 8, + .averaging = 1, + .divisor = LF_DIVISOR_125, + .trigger_threshold = 0, + .samples_to_skip = 0, + .verbose = false, + }; + +static sample_config config = { 1, 8, 1, LF_DIVISOR_125, 0, 0, true} ; // Holds bit packed struct of samples. static BitstreamOut data = {0, 0, 0}; @@ -57,6 +68,11 @@ void printSamples(void) { print_stack_usage(); } + +void setDefaultSamplingConfig(void) { + setSamplingConfig(&def_config); +} + /** * Called from the USB-handler to set the sampling configuration * The sampling config is used for standard reading and sniffing. diff --git a/armsrc/lfsampling.h b/armsrc/lfsampling.h index d10f8279e..7a2967f7e 100644 --- a/armsrc/lfsampling.h +++ b/armsrc/lfsampling.h @@ -96,7 +96,7 @@ void LFSetupFPGAForADC(int divisor, bool reader_field); * @param sc */ void setSamplingConfig(sample_config *sc); - +void setDefaultSamplingConfig(void); sample_config *getSamplingConfig(void); void printLFConfig(void); diff --git a/client/src/cmdlft55xx.c b/client/src/cmdlft55xx.c index 67818c266..d6398496d 100644 --- a/client/src/cmdlft55xx.c +++ b/client/src/cmdlft55xx.c @@ -942,27 +942,6 @@ static int CmdT55xxDetect(const char *Cmd) { // detect called so clear data blocks T55x7_ClearAllBlockData(); - // make sure decimate == 1 - sample_config curr_lf_config; - memset(&curr_lf_config, 0, sizeof(sample_config)); - - res = lf_getconfig(&curr_lf_config); - if (res != PM3_SUCCESS) { - PrintAndLogEx(ERR, "failed to get current device LF config"); - return res; - } - int8_t old_decimation = curr_lf_config.decimation; - if (curr_lf_config.decimation != 1) { - curr_lf_config.decimation = 1; - curr_lf_config.verbose = false; - res = lf_config(&curr_lf_config); - if (res != PM3_SUCCESS) { - PrintAndLogEx(ERR, "failed to set LF configuration decimation value to 1"); - return res; - } - } - - // sanity check. if (SanityOfflineCheck(use_gb) != PM3_SUCCESS) return PM3_ESOFT; @@ -1038,17 +1017,6 @@ static int CmdT55xxDetect(const char *Cmd) { PrintAndLogEx(WARNING, "Could not detect modulation automatically. Try setting it manually with " _YELLOW_("\'lf t55xx config\'")); } - - if (old_decimation != curr_lf_config.decimation) { - curr_lf_config.decimation = old_decimation; - curr_lf_config.verbose = false; - res = lf_config(&curr_lf_config); - if (res != PM3_SUCCESS) { - PrintAndLogEx(ERR, "failed to restore LF configuration"); - return res; - } - } - return PM3_SUCCESS; }