mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-15 09:43:00 -07:00
fix occasional strange printed clock value with...
...fskdemod Fix Q5 tag detection in lf t55xx detect Fix param_get8 reversed parameters
This commit is contained in:
parent
2c7928874b
commit
6ca1477c74
3 changed files with 19 additions and 22 deletions
|
@ -944,35 +944,32 @@ int FSKrawDemod(const char *Cmd, bool verbose)
|
||||||
{
|
{
|
||||||
//raw fsk demod no manchester decoding no start bit finding just get binary from wave
|
//raw fsk demod no manchester decoding no start bit finding just get binary from wave
|
||||||
uint8_t rfLen, invert, fchigh, fclow;
|
uint8_t rfLen, invert, fchigh, fclow;
|
||||||
|
|
||||||
//set defaults
|
//set defaults
|
||||||
//set options from parameters entered with the command
|
//set options from parameters entered with the command
|
||||||
rfLen = param_get8ex(Cmd, 0, 0, 10);
|
rfLen = param_get8(Cmd, 0);
|
||||||
invert = param_get8ex(Cmd, 1, 0, 10);
|
invert = param_get8(Cmd, 1);
|
||||||
fchigh = param_get8ex(Cmd, 2, 0, 10);
|
fchigh = param_get8(Cmd, 2);
|
||||||
fclow = param_get8ex(Cmd, 3, 0, 10);
|
fclow = param_get8(Cmd, 3);
|
||||||
|
|
||||||
if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
|
if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
|
||||||
if (rfLen==1){
|
if (rfLen==1){
|
||||||
invert = 1; //if invert option only is used
|
invert = 1; //if invert option only is used
|
||||||
rfLen = 0;
|
rfLen = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
|
uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
|
||||||
size_t BitLen = getFromGraphBuf(BitStream);
|
size_t BitLen = getFromGraphBuf(BitStream);
|
||||||
if (BitLen==0) return 0;
|
if (BitLen==0) return 0;
|
||||||
//get field clock lengths
|
//get field clock lengths
|
||||||
uint16_t fcs=0;
|
uint8_t fc1=0, fc2=0, rf1=0;
|
||||||
if (!fchigh || !fclow) {
|
if (!fchigh || !fclow) {
|
||||||
fcs = countFC(BitStream, BitLen, 1);
|
uint8_t ans = fskClocks(&fc1, &fc2, &rf1, false);
|
||||||
if (!fcs) {
|
if (ans == 0) {
|
||||||
fchigh = 10;
|
if (g_debugMode) PrintAndLog("\nError: cannot detect valid fsk field clocks");
|
||||||
fclow = 8;
|
return 0; // can't detect field clock
|
||||||
} else {
|
|
||||||
fchigh = (fcs >> 8) & 0x00FF;
|
|
||||||
fclow = fcs & 0x00FF;
|
|
||||||
}
|
}
|
||||||
|
fchigh = fc1;
|
||||||
|
fclow = fc2;
|
||||||
|
if (rfLen == 0) rfLen = rf1;
|
||||||
}
|
}
|
||||||
//get bit clock length
|
//get bit clock length
|
||||||
if (!rfLen){
|
if (!rfLen){
|
||||||
|
@ -985,7 +982,7 @@ int FSKrawDemod(const char *Cmd, bool verbose)
|
||||||
|
|
||||||
// Now output the bitstream to the scrollback by line of 16 bits
|
// Now output the bitstream to the scrollback by line of 16 bits
|
||||||
if (verbose || g_debugMode) {
|
if (verbose || g_debugMode) {
|
||||||
PrintAndLog("\nUsing Clock:%u, invert:%u, fchigh:%u, fclow:%u", rfLen, invert, fchigh, fclow);
|
PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow);
|
||||||
PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert));
|
PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert));
|
||||||
printDemodBuff();
|
printDemodBuff();
|
||||||
}
|
}
|
||||||
|
|
|
@ -486,7 +486,6 @@ bool tryDetectModulation(){
|
||||||
tests[hits].modulation = DEMOD_FSK1;
|
tests[hits].modulation = DEMOD_FSK1;
|
||||||
else if (fc1 == 10 && fc2 == 8)
|
else if (fc1 == 10 && fc2 == 8)
|
||||||
tests[hits].modulation = DEMOD_FSK2a;
|
tests[hits].modulation = DEMOD_FSK2a;
|
||||||
|
|
||||||
tests[hits].bitrate = bitRate;
|
tests[hits].bitrate = bitRate;
|
||||||
tests[hits].inverted = TRUE;
|
tests[hits].inverted = TRUE;
|
||||||
tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);
|
tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);
|
||||||
|
@ -597,6 +596,7 @@ bool tryDetectModulation(){
|
||||||
config.inverted = tests[0].inverted;
|
config.inverted = tests[0].inverted;
|
||||||
config.offset = tests[0].offset;
|
config.offset = tests[0].offset;
|
||||||
config.block0 = tests[0].block0;
|
config.block0 = tests[0].block0;
|
||||||
|
config.Q5 = tests[0].Q5;
|
||||||
printConfiguration( config );
|
printConfiguration( config );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -683,12 +683,12 @@ bool testQ5(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk){
|
||||||
uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4; //master key
|
uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4; //master key
|
||||||
uint8_t resv = PackBits(si, 8, DemodBuffer); si += 8;
|
uint8_t resv = PackBits(si, 8, DemodBuffer); si += 8;
|
||||||
// 2nibble must be zeroed.
|
// 2nibble must be zeroed.
|
||||||
if (safer != 0x6) continue;
|
if (safer != 0x6 && safer != 0x9) continue;
|
||||||
if ( resv > 0x00) continue;
|
if ( resv > 0x00) continue;
|
||||||
//uint8_t pageSel = PackBits(si, 1, DemodBuffer); si += 1;
|
//uint8_t pageSel = PackBits(si, 1, DemodBuffer); si += 1;
|
||||||
//uint8_t fastWrite = PackBits(si, 1, DemodBuffer); si += 1;
|
//uint8_t fastWrite = PackBits(si, 1, DemodBuffer); si += 1;
|
||||||
si += 1+1;
|
si += 1+1;
|
||||||
int bitRate = PackBits(si, 5, DemodBuffer)*2 + 2; si += 5; //bit rate
|
int bitRate = PackBits(si, 6, DemodBuffer)*2 + 2; si += 6; //bit rate
|
||||||
if (bitRate > 128 || bitRate < 8) continue;
|
if (bitRate > 128 || bitRate < 8) continue;
|
||||||
|
|
||||||
//uint8_t AOR = PackBits(si, 1, DemodBuffer); si += 1;
|
//uint8_t AOR = PackBits(si, 1, DemodBuffer); si += 1;
|
||||||
|
|
|
@ -142,7 +142,7 @@ char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t brea
|
||||||
for (size_t out_index=0; out_index < max_len; out_index++) {
|
for (size_t out_index=0; out_index < max_len; out_index++) {
|
||||||
// set character
|
// set character
|
||||||
sprintf(tmp++, "%u", data[in_index]);
|
sprintf(tmp++, "%u", data[in_index]);
|
||||||
// check if a line break is needed
|
// check if a line break is needed and we have room to print it in our array
|
||||||
if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
|
if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
|
||||||
// increment and print line break
|
// increment and print line break
|
||||||
out_index++;
|
out_index++;
|
||||||
|
@ -271,7 +271,7 @@ char param_getchar(const char *line, int paramnum)
|
||||||
|
|
||||||
uint8_t param_get8(const char *line, int paramnum)
|
uint8_t param_get8(const char *line, int paramnum)
|
||||||
{
|
{
|
||||||
return param_get8ex(line, paramnum, 10, 0);
|
return param_get8ex(line, paramnum, 0, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue