From 3f267966732831e7567dc7c013fb878dd2333779 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 1 Dec 2015 22:38:37 +0100 Subject: [PATCH 1/1] FIX: the lfsampling.c for t55xx had a tendecy to enter a neverending loop. Moved exit branch into the while statement, which seems to solve it. FIX: Strange int -> uint8_t casting behavior (0x05 gets the 25bit set and becomes 0x10005 instead) in fskdemod, removed int and sscanf. --- armsrc/lfsampling.c | 5 ++--- client/cmddata.c | 36 ++++++++++++++++++------------------ client/cmdlft55xx.c | 2 +- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 8931f41d..7d55fa3c 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -271,7 +271,7 @@ void doT55x7Acquisition(size_t sample_size) { uint8_t curSample = 0; uint8_t lastSample = 0; uint16_t skipCnt = 0; - while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt<1000) { + while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt < 1000 && (i < bufsize) ) { WDT_HIT(); if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { AT91C_BASE_SSC->SSC_THR = 0x43; @@ -306,11 +306,10 @@ void doT55x7Acquisition(size_t sample_size) { // if just found start - recover last sample if (!startFound) { dest[i++] = lastSample; - startFound = true; + startFound = true; } // collect samples dest[i++] = curSample; - if (i >= bufsize-1) break; } } } diff --git a/client/cmddata.c b/client/cmddata.c index aeabd985..3898f28d 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -934,15 +934,15 @@ char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert) int FSKrawDemod(const char *Cmd, bool verbose) { //raw fsk demod no manchester decoding no start bit finding just get binary from wave - //set defaults - int rfLen = 0; - int invert = 0; - int fchigh = 0; - int fclow = 0; + uint8_t rfLen, invert, fchigh, fclow; + //set defaults //set options from parameters entered with the command - sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow); - + rfLen = param_get8ex(Cmd, 0, 0, 10); + invert = param_get8ex(Cmd, 1, 0, 10); + fchigh = param_get8ex(Cmd, 2, 0, 10); + fclow = param_get8ex(Cmd, 3, 0, 10); + if (strlen(Cmd)>0 && strlen(Cmd)<=2) { if (rfLen==1){ invert = 1; //if invert option only is used @@ -958,31 +958,31 @@ int FSKrawDemod(const char *Cmd, bool verbose) if (fchigh==0 || fclow == 0){ fcs = countFC(BitStream, BitLen, 1); if (fcs==0){ - fchigh=10; - fclow=8; - }else{ + fchigh = 10; + fclow = 8; + } else { fchigh = (fcs >> 8) & 0xFF; fclow = fcs & 0xFF; } } + //get bit clock length - if (rfLen==0){ + if (rfLen == 0){ rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow); if (rfLen == 0) rfLen = 50; } - int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow); - if (size>0){ - setDemodBuf(BitStream,size,0); + int size = fskdemod(BitStream, BitLen, rfLen, invert, fchigh, fclow); + if (size > 0){ + setDemodBuf(BitStream, size, 0); // Now output the bitstream to the scrollback by line of 16 bits if (verbose || g_debugMode) { - PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow); - PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert)); + PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%u", rfLen, invert, fchigh, fclow); + PrintAndLog("%s decoded bitstream:", GetFSKType(fchigh, fclow, invert)); printDemodBuff(); } - return 1; - } else{ + } else { if (g_debugMode) PrintAndLog("no FSK data found"); } return 0; diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index f034ce5a..6e8893d5 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -1407,7 +1407,7 @@ int CmdT55xxBruteForce(const char *Cmd) { found = tryDetectModulation(); if ( found ) { - PrintAndLog("Found valid password:[%08X]", testpwd); + PrintAndLog("Found valid password: [%08X]", testpwd); return 0; } } -- 2.39.5