chg: lf cmdread - now uses NG

This commit is contained in:
iceman1001 2019-05-20 09:15:45 -04:00
parent ce4198f5f2
commit d7f1ab2175
4 changed files with 52 additions and 25 deletions

View file

@ -755,9 +755,17 @@ static void PacketReceived(PacketCommandNG *packet) {
reply_old(CMD_ACK, bits, 0, 0, 0, 0);
break;
}
case CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K:
ModThenAcquireRawAdcSamples125k(packet->oldarg[0], packet->oldarg[1], packet->oldarg[2], packet->data.asBytes);
case CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K: {
struct p {
uint32_t delay;
uint16_t ones;
uint16_t zeros;
} PACKED;
struct p *payload;
payload = (struct p*)packet->data.asBytes;
ModThenAcquireRawAdcSamples125k(payload->delay, payload->zeros, payload->ones, packet->data.asBytes+8);
break;
}
case CMD_LF_SNIFF_RAW_ADC_SAMPLES: {
uint32_t bits = SniffLF();
reply_old(CMD_ACK, bits, 0, 0, 0, 0);

View file

@ -242,7 +242,7 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t period_0, uint
// Turn off antenna
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
// tell client we are done
reply_old(CMD_ACK, 0, 0, 0, 0, 0);
reply_ng(CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K, PM3_SUCCESS, NULL, 0);
}
/* blank r/w tag data stream
@ -1409,7 +1409,7 @@ void T55xxWriteBlockExt(uint32_t data, uint8_t blockno, uint32_t pwd, uint8_t fl
// make sure tag is fully powered up...
WaitMS(4);
// Trigger T55x7 in mode.
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
WaitUS(t_config.start_gap);
@ -1423,7 +1423,7 @@ void T55xxWriteBlockExt(uint32_t data, uint8_t blockno, uint32_t pwd, uint8_t fl
// std opcode 10 == page 0
// std opcode 11 == page 1
T55xxWriteBit(1);
T55xxWriteBit(page);
T55xxWriteBit(page);
}
if (pwd_mode) {
@ -1479,8 +1479,8 @@ void T55xxWriteBlockExt(uint32_t data, uint8_t blockno, uint32_t pwd, uint8_t fl
// Write one card block in page 0, no lock
// uses NG format
void T55xxWriteBlock(uint8_t *data) {
t55xx_write_block_t *c = (t55xx_write_block_t *)data;
T55xxWriteBlockExt(c->data, c->blockno, c->pwd, c->flags);
t55xx_write_block_t *c = (t55xx_write_block_t *)data;
T55xxWriteBlockExt(c->data, c->blockno, c->pwd, c->flags);
reply_ng(CMD_T55XX_WRITE_BLOCK, PM3_SUCCESS, NULL, 0);
}

View file

@ -199,7 +199,7 @@ uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averag
}
if (!silent) {
Dbprintf("Done, saved %d out of %d seen samples at %d bits/sample", sample_total_saved, sample_total_numbers, bits_per_sample);
Dbprintf("Done, saved " _YELLOW_("%d")"out of " _YELLOW_("%d")"seen samples at " _YELLOW_("%d")"bits/sample", sample_total_saved, sample_total_numbers, bits_per_sample);
Dbprintf("buffer samples: %02x %02x %02x %02x %02x %02x %02x %02x ...",
dest[0], dest[1], dest[2], dest[3], dest[4], dest[5], dest[6], dest[7]);
}

View file

@ -145,32 +145,37 @@ static int usage_lf_find(void) {
int CmdLFCommandRead(const char *Cmd) {
bool errors = false;
uint32_t arg0 = 0;
uint32_t arg1 = 0;
uint32_t arg2 = 0;
uint8_t data[PM3_CMD_DATA_SIZE];
uint16_t datalen = 0;
struct p {
uint32_t delay;
uint16_t ones;
uint16_t zeros;
uint8_t data[PM3_CMD_DATA_SIZE - 8];
} PACKED;
struct p payload;
uint8_t cmdp = 0;
while (param_getchar(Cmd, cmdp) != 0x00 && !errors) {
switch (tolower(param_getchar(Cmd, cmdp))) {
case 'h':
return usage_lf_cmdread();
case 'c':
datalen = param_getstr(Cmd, cmdp + 1, (char *)&data, sizeof(data));
case 'c': // cmd bytes 1010
datalen = param_getstr(Cmd, cmdp + 1, (char *)&payload.data, sizeof(payload.data));
cmdp += 2;
break;
case 'd':
arg0 = param_get32ex(Cmd, cmdp + 1, 0, 10);
case 'd': // delay
payload.delay = param_get32ex(Cmd, cmdp + 1, 0, 10);
cmdp += 2;
break;
case 'z':
arg1 = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF;
case 'z': // zero
payload.zeros = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF;
cmdp += 2;
break;
case 'o':
arg2 = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF;
case 'o': // ones
payload.ones = param_get32ex(Cmd, cmdp + 1, 0, 10) & 0xFFFF;
cmdp += 2;
break;
default:
@ -183,12 +188,26 @@ int CmdLFCommandRead(const char *Cmd) {
//Validations
if (errors || cmdp == 0) return usage_lf_cmdread();
PrintAndLogEx(SUCCESS, "Sending");
clearCommandBuffer();
SendCommandOLD(CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K, arg0, arg1, arg2, data, datalen);
SendCommandNG(CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K, (uint8_t*)&payload, 8 + datalen );
WaitForResponse(CMD_ACK, NULL);
getSamples(0, true);
return 0;
printf("\n");
uint8_t i = 10;
while ( !WaitForResponseTimeout(CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K, NULL, 2000 ) && i != 0) {
printf(".");
fflush(stdout);
i--;
}
printf("\n");
if ( i ) {
PrintAndLogEx(SUCCESS, "Downloading response signal data");
getSamples(0, true);
return PM3_SUCCESS;
}
PrintAndLogEx(WARNING, "timeout while waiting for reply.");
return PM3_EOPABORTED;
}
int CmdFlexdemod(const char *Cmd) {