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.
This commit is contained in:
iceman1001 2015-12-01 22:38:37 +01:00
commit 3f26796673
3 changed files with 21 additions and 22 deletions

View file

@ -271,7 +271,7 @@ void doT55x7Acquisition(size_t sample_size) {
uint8_t curSample = 0; uint8_t curSample = 0;
uint8_t lastSample = 0; uint8_t lastSample = 0;
uint16_t skipCnt = 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(); WDT_HIT();
if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) { if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
AT91C_BASE_SSC->SSC_THR = 0x43; AT91C_BASE_SSC->SSC_THR = 0x43;
@ -306,11 +306,10 @@ void doT55x7Acquisition(size_t sample_size) {
// if just found start - recover last sample // if just found start - recover last sample
if (!startFound) { if (!startFound) {
dest[i++] = lastSample; dest[i++] = lastSample;
startFound = true; startFound = true;
} }
// collect samples // collect samples
dest[i++] = curSample; dest[i++] = curSample;
if (i >= bufsize-1) break;
} }
} }
} }

View file

@ -934,14 +934,14 @@ char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
int FSKrawDemod(const char *Cmd, bool verbose) 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
//set defaults uint8_t rfLen, invert, fchigh, fclow;
int rfLen = 0;
int invert = 0;
int fchigh = 0;
int fclow = 0;
//set defaults
//set options from parameters entered with the command //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 (strlen(Cmd)>0 && strlen(Cmd)<=2) {
if (rfLen==1){ if (rfLen==1){
@ -958,31 +958,31 @@ int FSKrawDemod(const char *Cmd, bool verbose)
if (fchigh==0 || fclow == 0){ if (fchigh==0 || fclow == 0){
fcs = countFC(BitStream, BitLen, 1); fcs = countFC(BitStream, BitLen, 1);
if (fcs==0){ if (fcs==0){
fchigh=10; fchigh = 10;
fclow=8; fclow = 8;
}else{ } else {
fchigh = (fcs >> 8) & 0xFF; fchigh = (fcs >> 8) & 0xFF;
fclow = fcs & 0xFF; fclow = fcs & 0xFF;
} }
} }
//get bit clock length //get bit clock length
if (rfLen==0){ if (rfLen == 0){
rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow); rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
if (rfLen == 0) rfLen = 50; if (rfLen == 0) rfLen = 50;
} }
int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow); int size = fskdemod(BitStream, BitLen, rfLen, invert, fchigh, fclow);
if (size>0){ if (size > 0){
setDemodBuf(BitStream,size,0); setDemodBuf(BitStream, size, 0);
// 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:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow); PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%u", rfLen, invert, fchigh, fclow);
PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert)); PrintAndLog("%s decoded bitstream:", GetFSKType(fchigh, fclow, invert));
printDemodBuff(); printDemodBuff();
} }
return 1; return 1;
} else{ } else {
if (g_debugMode) PrintAndLog("no FSK data found"); if (g_debugMode) PrintAndLog("no FSK data found");
} }
return 0; return 0;

View file

@ -1407,7 +1407,7 @@ int CmdT55xxBruteForce(const char *Cmd) {
found = tryDetectModulation(); found = tryDetectModulation();
if ( found ) { if ( found ) {
PrintAndLog("Found valid password:[%08X]", testpwd); PrintAndLog("Found valid password: [%08X]", testpwd);
return 0; return 0;
} }
} }