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:
marshmellow42 2015-12-14 16:51:11 -05:00
parent 2c7928874b
commit 6ca1477c74
3 changed files with 19 additions and 22 deletions

View file

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

View file

@ -469,7 +469,7 @@ bool tryDetectModulation(){
if (GetFskClock("", FALSE, FALSE)){ if (GetFskClock("", FALSE, FALSE)){
fskClocks(&fc1, &fc2, &clk, FALSE); fskClocks(&fc1, &fc2, &clk, FALSE);
if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)){ if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate, clk, &tests[hits].Q5)) {
tests[hits].modulation = DEMOD_FSK; tests[hits].modulation = DEMOD_FSK;
if (fc1==8 && fc2 == 5) if (fc1==8 && fc2 == 5)
tests[hits].modulation = DEMOD_FSK1a; tests[hits].modulation = DEMOD_FSK1a;
@ -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;

View file

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