chg: step two for t55xx commnads

This commit is contained in:
iceman1001 2015-02-13 10:16:21 +01:00
parent 31b3689f0b
commit 4e7af352b4
3 changed files with 77 additions and 44 deletions

View file

@ -430,8 +430,6 @@ int EPA_Setup()
// power up the field
iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
iso14a_set_timeout(10500);
// select the card
return_code = iso14443a_select_card(uid, &card_select_info, NULL);
if (return_code != 1) {

View file

@ -76,29 +76,11 @@ int usage_t55xx_dump(){
static int CmdHelp(const char *Cmd);
/*
FSK1 / FSK1a
size = fskdemod(dest, size, 32, 0, 8, 10); // fsk1 RF/32
size = fskdemod(dest, size, 32, 1, 8, 10); // fsk1a RF/32
FSK2 / FSK2a
size = fskdemod(dest, size, 32, 0, 10, 8); // fsk2 RF/32
size = fskdemod(dest, size, 32, 1, 10, 8); // fsk2a RF/32
size = fskdemod(dest, size, 50, 1, 10, 8); // fsk2a RF/50
size = fskdemod(dest, size, 64, 1, 10, 8); // FSK2a RF/64
*/
int CmdReadBlk(const char *Cmd)
{
int invert = 0;
int clk = 0;
int block = -1;
int password = 0xFFFFFFFF; //default to blank Block 7
int errCnt;
size_t bitlen;
int maxErr = 100;
//uint8_t askAmp = 0;
uint32_t blockData;
uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0x00};
@ -139,32 +121,22 @@ int CmdReadBlk(const char *Cmd)
CmdSamples("12000");
bitlen = getFromGraphBuf(bits);
//errCnt = askrawdemod(bits, &bitlen, &clk, &invert, maxErr, askAmp);
errCnt = askmandemod(bits, &bitlen, &clk, &invert, maxErr);
//throw away static - allow 1 and -1 (in case of threshold command first)
if ( errCnt == -1 || bitlen < 16 ){
PrintAndLog("no data found");
if (g_debugMode)
PrintAndLog("errCnt: %d, bitlen: %d, clk: %d, invert: %d", errCnt, bitlen, clk, invert);
return 3;
}
if (g_debugMode)
PrintAndLog("Using Clock: %d - invert: %d - Bits Found: %d", clk, invert, bitlen);
if ( !tryDemod(bits, bitlen) )
return 3;
//move bits back to DemodBuffer
setDemodBuf(bits, bitlen, 0);
printBitStream(bits,bitlen);
printBitStream(bits, bitlen);
// bits has the manchester encoded data.
errCnt = manrawdecode(bits, &bitlen);
if ( errCnt == -1 || bitlen < 16 ){
PrintAndLog("no data found");
if (g_debugMode)
PrintAndLog("errCnt: %d, bitlen: %d, clk: %d, invert: %d", errCnt, bitlen, clk, invert);
return 4;
}
// // bits has the manchester encoded data.
// errCnt = manrawdecode(bits, &bitlen);
// if ( errCnt == -1 || bitlen < 32 ){
// PrintAndLog("no data found");
// if (g_debugMode)
// PrintAndLog("errCnt: %d, bitlen: %d, clk: %d, invert: %d", errCnt, bitlen, clk, invert);
// return 4;
// }
blockData = PackBits(1, 32, bits);
@ -176,6 +148,69 @@ int CmdReadBlk(const char *Cmd)
return 0;
}
/*
FSK1 / FSK1a
size = fskdemod(dest, size, 32, 0, 8, 10); // fsk1 RF/32
size = fskdemod(dest, size, 32, 1, 8, 10); // fsk1a RF/32
FSK2 / FSK2a
size = fskdemod(dest, size, 32, 0, 10, 8); // fsk2 RF/32
size = fskdemod(dest, size, 32, 1, 10, 8); // fsk2a RF/32
size = fskdemod(dest, size, 50, 1, 10, 8); // fsk2a RF/50
size = fskdemod(dest, size, 64, 1, 10, 8); // FSK2a RF/64
PSK1
errCnt = pskRawDemod(bits, &bitlen, 32, 0);
*/
bool tryDemod(uint8_t bits[], size_t bitlen) {
int invert = 0;
int clk = 0;
int errCnt, size;
int maxErr = 100;
uint8_t rflen, fchigh, fclow, dummy = 0;
uint16_t fcs=0;
// ASK - manchester demod
errCnt = askmandemod(bits, &bitlen, &clk, &invert, maxErr);
if ( analyseDemod(errCnt, bitlen, clk, invert) )
return true;
// FSK demod
fcs = countFC(bits, bitlen, &dummy);
if (fcs == 0){
fchigh = 10;
fclow = 8;
}else{
fchigh = (fcs >> 8) & 0xFF;
fclow = fcs & 0xFF;
}
//get bit clock length
rflen = detectFSKClk(bits, bitlen, fchigh, fclow);
rflen = (rflen == 0) ? 50 : rflen;
size = fskdemod(bits, bitlen, rflen, invert, fchigh, fclow);
if ( analyseDemod(size, bitlen, clk, invert) )
return true;
// PSK demod
return false;
}
bool analyseDemod( int errCnt, size_t bitlen, uint8_t clock, uint8_t invert){
if (g_debugMode)
PrintAndLog("ErrorCount: %d, Bits Found: %d, Clock: %d, invert: %d", errCnt, bitlen, clock, invert);
//PrintAndLog("Args invert: %d - Clock:%d - fchigh:%d - fclow: %d",invert,rfLen,fchigh, fclow);
//throw away static - allow 1 and -1 (in case of threshold command first)
if ( errCnt == -1 || bitlen < 32 ){
PrintAndLog("no success demod");
return false;
}
return true;
}
int CmdWriteBlk(const char *Cmd)
{
int block = 8; //default to invalid block

View file

@ -13,9 +13,7 @@
int CmdLFT55XX(const char *Cmd);
int CmdReadBlk(const char *Cmd);
int CmdReadBlkPWD(const char *Cmd);
int CmdWriteBlk(const char *Cmd);
int CmdWriteBLkPWD(const char *Cmd);
int CmdReadTrace(const char *Cmd);
int CmdInfo(const char *Cmd);
int CmdIceFsk(const char *Cmd);
@ -25,4 +23,6 @@ char * GetBitRateStr(uint32_t id);
char * GetSaferStr(uint32_t id);
char * GetModulationStr( uint32_t id);
uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bitstream);
bool tryDemod(uint8_t bits[], uint32_t bitlen);
bool analyseDemod( int errCnt, size_t bitlen, uint8_t clock, uint8_t invert);
#endif