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.

This commit is contained in:
iceman1001 2021-07-29 10:51:31 +02:00
commit 765d2acbb0
5 changed files with 27 additions and 35 deletions

View file

@ -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: {

View file

@ -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);
}

View file

@ -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.

View file

@ -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);

View file

@ -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;
}