mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-04-14 16:30:18 +08:00
adjust pskdemod
add skipped bits before first phase back in PSKDemod now returns 1 for success or 0 for fail like other demods
This commit is contained in:
parent
e74fc2ecba
commit
7a8a982bde
2 changed files with 31 additions and 32 deletions
|
@ -1700,7 +1700,7 @@ int PSKDemod(const char *Cmd, bool verbose)
|
||||||
}
|
}
|
||||||
if (invert != 0 && invert != 1) {
|
if (invert != 0 && invert != 1) {
|
||||||
if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
|
if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
|
||||||
return -1;
|
return 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);
|
||||||
|
@ -1708,22 +1708,27 @@ int PSKDemod(const char *Cmd, bool verbose)
|
||||||
uint8_t carrier=countPSK_FC(BitStream, BitLen);
|
uint8_t carrier=countPSK_FC(BitStream, BitLen);
|
||||||
if (carrier!=2 && carrier!=4 && carrier!=8){
|
if (carrier!=2 && carrier!=4 && carrier!=8){
|
||||||
//invalid carrier
|
//invalid carrier
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
int errCnt=0;
|
int errCnt=0;
|
||||||
errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
|
errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
|
||||||
if (errCnt > maxErr){
|
if (errCnt > maxErr){
|
||||||
if (g_debugMode==1 && verbose) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
|
if (g_debugMode==1 && verbose) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
if (errCnt<0|| BitLen<16){ //throw away static - allow 1 and -1 (in case of threshold command first)
|
if (errCnt<0|| BitLen<16){ //throw away static - allow 1 and -1 (in case of threshold command first)
|
||||||
if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
|
if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
|
||||||
return -1;
|
return 0;
|
||||||
|
}
|
||||||
|
if (verbose){
|
||||||
|
PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
|
||||||
|
if (errCnt>0){
|
||||||
|
PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (verbose) PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
|
|
||||||
//prime demod buffer for output
|
//prime demod buffer for output
|
||||||
setDemodBuf(BitStream,BitLen,0);
|
setDemodBuf(BitStream,BitLen,0);
|
||||||
return errCnt;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indala 26 bit decode
|
// Indala 26 bit decode
|
||||||
|
@ -1738,7 +1743,7 @@ int CmdIndalaDecode(const char *Cmd)
|
||||||
ans = PSKDemod("32", 0);
|
ans = PSKDemod("32", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ans < 0){
|
if (!ans){
|
||||||
if (g_debugMode==1)
|
if (g_debugMode==1)
|
||||||
PrintAndLog("Error1: %d",ans);
|
PrintAndLog("Error1: %d",ans);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1879,7 +1884,7 @@ int CmdNRZrawDemod(const char *Cmd)
|
||||||
// prints binary found and saves in demodbuffer for further commands
|
// prints binary found and saves in demodbuffer for further commands
|
||||||
int CmdPSK1rawDemod(const char *Cmd)
|
int CmdPSK1rawDemod(const char *Cmd)
|
||||||
{
|
{
|
||||||
int errCnt;
|
int ans;
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
|
if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
|
||||||
PrintAndLog("Usage: data rawdemod p1 [clock] <0|1> [maxError]");
|
PrintAndLog("Usage: data rawdemod p1 [clock] <0|1> [maxError]");
|
||||||
|
@ -1894,15 +1899,13 @@ int CmdPSK1rawDemod(const char *Cmd)
|
||||||
PrintAndLog(" : data rawdemod p1 64 1 0 = demod a psk1 tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
|
PrintAndLog(" : data rawdemod p1 64 1 0 = demod a psk1 tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
errCnt = PSKDemod(Cmd, TRUE);
|
ans = PSKDemod(Cmd, TRUE);
|
||||||
//output
|
//output
|
||||||
if (errCnt<0){
|
if (!ans){
|
||||||
if (g_debugMode) PrintAndLog("Error demoding: %d",errCnt);
|
if (g_debugMode) PrintAndLog("Error demoding: %d",ans);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (errCnt>0){
|
|
||||||
PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
|
|
||||||
}
|
|
||||||
PrintAndLog("PSK demoded bitstream:");
|
PrintAndLog("PSK demoded bitstream:");
|
||||||
// Now output the bitstream to the scrollback by line of 16 bits
|
// Now output the bitstream to the scrollback by line of 16 bits
|
||||||
printDemodBuff();
|
printDemodBuff();
|
||||||
|
@ -1913,7 +1916,7 @@ int CmdPSK1rawDemod(const char *Cmd)
|
||||||
// takes same args as cmdpsk1rawdemod
|
// takes same args as cmdpsk1rawdemod
|
||||||
int CmdPSK2rawDemod(const char *Cmd)
|
int CmdPSK2rawDemod(const char *Cmd)
|
||||||
{
|
{
|
||||||
int errCnt=0;
|
int ans=0;
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
|
if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
|
||||||
PrintAndLog("Usage: data rawdemod p2 [clock] <0|1> [maxError]");
|
PrintAndLog("Usage: data rawdemod p2 [clock] <0|1> [maxError]");
|
||||||
|
@ -1928,24 +1931,15 @@ int CmdPSK2rawDemod(const char *Cmd)
|
||||||
PrintAndLog(" : data rawdemod p2 64 1 0 = demod a psk2 tag from GraphBuffer using a clock of RF/64, inverting output and allowing 0 demod errors");
|
PrintAndLog(" : data rawdemod p2 64 1 0 = demod a psk2 tag from GraphBuffer using a clock of RF/64, inverting output and allowing 0 demod errors");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
errCnt=PSKDemod(Cmd, TRUE);
|
ans=PSKDemod(Cmd, TRUE);
|
||||||
if (errCnt<0){
|
if (!ans){
|
||||||
if (g_debugMode) PrintAndLog("Error demoding: %d",errCnt);
|
if (g_debugMode) PrintAndLog("Error demoding: %d",ans);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
psk1TOpsk2(DemodBuffer, DemodBufferLen);
|
psk1TOpsk2(DemodBuffer, DemodBufferLen);
|
||||||
if (errCnt>0){
|
|
||||||
if (g_debugMode){
|
|
||||||
PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
|
|
||||||
PrintAndLog("PSK2 demoded bitstream:");
|
PrintAndLog("PSK2 demoded bitstream:");
|
||||||
// Now output the bitstream to the scrollback by line of 16 bits
|
// Now output the bitstream to the scrollback by line of 16 bits
|
||||||
printDemodBuff();
|
printDemodBuff();
|
||||||
}
|
|
||||||
}else{
|
|
||||||
PrintAndLog("PSK2 demoded bitstream:");
|
|
||||||
// Now output the bitstream to the scrollback by line of 16 bits
|
|
||||||
printDemodBuff();
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1079,7 +1079,9 @@ void psk1TOpsk2(uint8_t *BitStream, size_t size)
|
||||||
size_t i=1;
|
size_t i=1;
|
||||||
uint8_t lastBit=BitStream[0];
|
uint8_t lastBit=BitStream[0];
|
||||||
for (; i<size; i++){
|
for (; i<size; i++){
|
||||||
if (lastBit!=BitStream[i]){
|
if (BitStream[i]==77){
|
||||||
|
//ignore errors
|
||||||
|
} else if (lastBit!=BitStream[i]){
|
||||||
lastBit=BitStream[i];
|
lastBit=BitStream[i];
|
||||||
BitStream[i]=1;
|
BitStream[i]=1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1619,10 +1621,13 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
|
||||||
}
|
}
|
||||||
//PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
|
//PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
|
||||||
lastClkBit = firstFullWave; //set start of wave as clock align
|
lastClkBit = firstFullWave; //set start of wave as clock align
|
||||||
|
//PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit);
|
||||||
waveStart = 0;
|
waveStart = 0;
|
||||||
errCnt=0;
|
errCnt=0;
|
||||||
size_t numBits=0;
|
size_t numBits=0;
|
||||||
//PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit);
|
//set skipped bits
|
||||||
|
memset(dest+numBits,curPhase^1,firstFullWave / *clock);
|
||||||
|
numBits += (firstFullWave / *clock);
|
||||||
dest[numBits++] = curPhase; //set first read bit
|
dest[numBits++] = curPhase; //set first read bit
|
||||||
for (i = firstFullWave+fullWaveLen-1; i < *size-3; i++){
|
for (i = firstFullWave+fullWaveLen-1; i < *size-3; i++){
|
||||||
//top edge of wave = start of new wave
|
//top edge of wave = start of new wave
|
||||||
|
|
Loading…
Add table
Reference in a new issue