mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-09-21 15:56:21 +08:00
FIX: lf t55xx config now handles offsets.
FIX: lf t55xx trace now handles offsets. FIX: lf t55xx info now handles offsets.
This commit is contained in:
parent
db69363840
commit
545158b398
|
@ -33,7 +33,7 @@ int usage_t55xx_config(){
|
||||||
PrintAndLog(" h This help");
|
PrintAndLog(" h This help");
|
||||||
PrintAndLog(" d <FSK|ASK|PSK|NZ|BI> Set demodulation FSK / ASK / PSK / NZ / Biphase");
|
PrintAndLog(" d <FSK|ASK|PSK|NZ|BI> Set demodulation FSK / ASK / PSK / NZ / Biphase");
|
||||||
PrintAndLog(" i [1] Inverse data signal, defaults to normal");
|
PrintAndLog(" i [1] Inverse data signal, defaults to normal");
|
||||||
PrintAndLog(" o [offsett] Set offset, where data should start decode from in bitstream");
|
PrintAndLog(" o [offset] Set offset, where data should start decode in bitstream");
|
||||||
PrintAndLog("");
|
PrintAndLog("");
|
||||||
PrintAndLog("Examples:");
|
PrintAndLog("Examples:");
|
||||||
PrintAndLog(" lf t55xx config d FSK - FSK demodulation");
|
PrintAndLog(" lf t55xx config d FSK - FSK demodulation");
|
||||||
|
@ -109,61 +109,51 @@ static int CmdHelp(const char *Cmd);
|
||||||
|
|
||||||
int CmdT55xxSetConfig(const char *Cmd){
|
int CmdT55xxSetConfig(const char *Cmd){
|
||||||
|
|
||||||
uint8_t data[] = {0x78,0x00,0x00,0x00,0x00,0x00,0x00};
|
|
||||||
uint8_t cmd[] = {0x00,0x00};
|
|
||||||
ComputeCrc14443(CRC_14443_B, data, 7 , &cmd[0], &cmd[1]);
|
|
||||||
PrintAndLog("%02X %02X",cmd[0], cmd[1]);
|
|
||||||
int len = 0;
|
|
||||||
int foundModulation = 2;
|
|
||||||
uint8_t offset = 0;
|
uint8_t offset = 0;
|
||||||
bool inverse = FALSE;
|
|
||||||
bool errors = FALSE;
|
bool errors = FALSE;
|
||||||
uint8_t cmdp = 0;
|
uint8_t cmdp = 0;
|
||||||
char modulation[4] = {0x00};
|
char modulation[4] = {0x00};
|
||||||
|
char tmp = 0x00;
|
||||||
|
|
||||||
while(param_getchar(Cmd, cmdp) != 0x00 && !errors)
|
while(param_getchar(Cmd, cmdp) != 0x00 && !errors)
|
||||||
{
|
{
|
||||||
switch(param_getchar(Cmd, cmdp))
|
tmp = param_getchar(Cmd, cmdp);
|
||||||
|
switch(tmp)
|
||||||
{
|
{
|
||||||
case 'h':
|
case 'h':
|
||||||
case 'H':
|
case 'H':
|
||||||
return usage_t55xx_config();
|
return usage_t55xx_config();
|
||||||
case 'd':
|
case 'd':
|
||||||
len = param_getstr(Cmd, cmdp+1, modulation);
|
param_getstr(Cmd, cmdp+1, modulation);
|
||||||
cmdp+= len+1;
|
cmdp += 2;
|
||||||
//FSK|ASK|PSK|NZ|BI
|
|
||||||
if ( strcmp(modulation, "FSK" ) == 0)
|
if ( strcmp(modulation, "FSK" ) == 0) config.modulation = DEMOD_FSK;
|
||||||
foundModulation = 1;
|
else if ( strcmp(modulation, "ASK" ) == 0) config.modulation = DEMOD_ASK;
|
||||||
else if ( strcmp(modulation, "ASK" ) == 0)
|
else if ( strcmp(modulation, "PSK" ) == 0) config.modulation = DEMOD_PSK;
|
||||||
foundModulation = 2;
|
else if ( strcmp(modulation, "NZ" ) == 0) config.modulation = DEMOD_NZR;
|
||||||
else if ( strcmp(modulation, "PSK" ) == 0)
|
else if ( strcmp(modulation, "BI" ) == 0) config.modulation = DEMOD_BI;
|
||||||
foundModulation = 3;
|
|
||||||
else if ( strcmp(modulation, "NZ" ) == 0)
|
|
||||||
foundModulation = 4;
|
|
||||||
else if ( strcmp(modulation, "BI" ) == 0)
|
|
||||||
foundModulation = 5;
|
|
||||||
else {
|
else {
|
||||||
PrintAndLog("Unknown modulation '%s'", modulation);
|
PrintAndLog("Unknown modulation '%s'", modulation);
|
||||||
errors = TRUE;
|
errors = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
inverse = param_getchar(Cmd,cmdp+1) == '1';
|
config.inversed = param_getchar(Cmd,cmdp+1) == '1';
|
||||||
cmdp+=2;
|
cmdp+=2;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
errors |= param_getdec(Cmd, cmdp+1,&offset);
|
errors |= param_getdec(Cmd, cmdp+1,&offset);
|
||||||
if ( offset >= 32 ){
|
if ( !errors )
|
||||||
PrintAndLog("Offset must be smaller than 32");
|
config.offset = offset;
|
||||||
errors = TRUE;
|
cmdp += 2;
|
||||||
}
|
|
||||||
cmdp+=2;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
||||||
errors = TRUE;
|
errors = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrintAndLog(" %c %d [%d]", param_getchar(Cmd, cmdp) , errors, cmdp);
|
||||||
}
|
}
|
||||||
// No args
|
// No args
|
||||||
if (cmdp == 0) {
|
if (cmdp == 0) {
|
||||||
|
@ -174,10 +164,8 @@ int CmdT55xxSetConfig(const char *Cmd){
|
||||||
if (errors)
|
if (errors)
|
||||||
return usage_t55xx_config();
|
return usage_t55xx_config();
|
||||||
|
|
||||||
config.modulation = foundModulation;
|
|
||||||
config.inversed = inverse;
|
|
||||||
config.offset = offset;
|
|
||||||
config.block0 = 0;
|
config.block0 = 0;
|
||||||
|
printConfiguration( config );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +365,11 @@ bool test(){
|
||||||
if ( !DemodBufferLen)
|
if ( !DemodBufferLen)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
uint8_t si = 1;
|
if ( PackBits(0, 32, DemodBuffer) == 0x00 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
uint8_t si = 0;
|
||||||
|
|
||||||
uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4;
|
uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4;
|
||||||
uint8_t resv = PackBits(si, 7, DemodBuffer); si += 7+3;
|
uint8_t resv = PackBits(si, 7, DemodBuffer); si += 7+3;
|
||||||
uint8_t extend = PackBits(si, 1, DemodBuffer); si += 1;
|
uint8_t extend = PackBits(si, 1, DemodBuffer); si += 1;
|
||||||
|
@ -411,7 +403,7 @@ void printT55xxBlock(const char *demodStr){
|
||||||
int i = config.offset;
|
int i = config.offset;
|
||||||
int pos = 32 + config.offset;
|
int pos = 32 + config.offset;
|
||||||
for (; i < pos; ++i)
|
for (; i < pos; ++i)
|
||||||
bits[i]=DemodBuffer[i];
|
bits[i - config.offset]=DemodBuffer[i];
|
||||||
|
|
||||||
blockData = PackBits(0, 32, bits);
|
blockData = PackBits(0, 32, bits);
|
||||||
PrintAndLog("0x%08X %s [%s]", blockData, sprint_bin(bits,32), demodStr);
|
PrintAndLog("0x%08X %s [%s]", blockData, sprint_bin(bits,32), demodStr);
|
||||||
|
@ -419,12 +411,12 @@ void printT55xxBlock(const char *demodStr){
|
||||||
|
|
||||||
int special(const char *Cmd) {
|
int special(const char *Cmd) {
|
||||||
uint32_t blockData = 0;
|
uint32_t blockData = 0;
|
||||||
uint8_t bits[64] = {0x00};
|
uint8_t bits[32] = {0x00};
|
||||||
|
|
||||||
PrintAndLog("[OFFSET] [DATA] [BINARY]");
|
PrintAndLog("[OFFSET] [DATA] [BINARY]");
|
||||||
PrintAndLog("----------------------------------------------------");
|
PrintAndLog("----------------------------------------------------");
|
||||||
int i,j = 0;
|
int i,j = 0;
|
||||||
for (; j < 32; ++j){
|
for (; j < 128; ++j){
|
||||||
|
|
||||||
for (i = 0; i < 32; ++i)
|
for (i = 0; i < 32; ++i)
|
||||||
bits[i]=DemodBuffer[j+i];
|
bits[i]=DemodBuffer[j+i];
|
||||||
|
@ -514,7 +506,7 @@ int CmdT55xxReadTrace(const char *Cmd)
|
||||||
|
|
||||||
RepaintGraphWindow();
|
RepaintGraphWindow();
|
||||||
|
|
||||||
uint8_t si = 5;
|
uint8_t si = config.offset;
|
||||||
uint32_t bl0 = PackBits(si, 32, DemodBuffer);
|
uint32_t bl0 = PackBits(si, 32, DemodBuffer);
|
||||||
uint32_t bl1 = PackBits(si+32, 32, DemodBuffer);
|
uint32_t bl1 = PackBits(si+32, 32, DemodBuffer);
|
||||||
|
|
||||||
|
@ -608,7 +600,7 @@ int CmdT55xxInfo(const char *Cmd){
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
|
|
||||||
uint8_t si = 1;
|
uint8_t si = config.offset;
|
||||||
uint32_t bl0 = PackBits(si, 32, DemodBuffer);
|
uint32_t bl0 = PackBits(si, 32, DemodBuffer);
|
||||||
|
|
||||||
uint32_t safer = PackBits(si, 4, DemodBuffer); si += 4;
|
uint32_t safer = PackBits(si, 4, DemodBuffer); si += 4;
|
||||||
|
|
Loading…
Reference in a new issue