param_getstr(Cmd, cmdp+1, modulation);\r
cmdp += 2;\r
\r
- if ( strcmp(modulation, "FSK" ) == 0)\r
+ if ( strcmp(modulation, "FSK" ) == 0) {\r
config.modulation = DEMOD_FSK;\r
- else if ( strcmp(modulation, "FSK1" ) == 0)\r
+ } else if ( strcmp(modulation, "FSK1" ) == 0) {\r
config.modulation = DEMOD_FSK1;\r
- else if ( strcmp(modulation, "FSK1a" ) == 0)\r
+ config.inverted=1;\r
+ } else if ( strcmp(modulation, "FSK1a" ) == 0) {\r
config.modulation = DEMOD_FSK1a;\r
- else if ( strcmp(modulation, "FSK2" ) == 0)\r
+ config.inverted=0;\r
+ } else if ( strcmp(modulation, "FSK2" ) == 0) {\r
config.modulation = DEMOD_FSK2;\r
- else if ( strcmp(modulation, "FSK2a" ) == 0)\r
+ config.inverted=0;\r
+ } else if ( strcmp(modulation, "FSK2a" ) == 0) {\r
config.modulation = DEMOD_FSK2a;\r
- else if ( strcmp(modulation, "ASK" ) == 0)\r
+ config.inverted=1;\r
+ } else if ( strcmp(modulation, "ASK" ) == 0) {\r
config.modulation = DEMOD_ASK;\r
- else if ( strcmp(modulation, "NRZ" ) == 0)\r
+ } else if ( strcmp(modulation, "NRZ" ) == 0) {\r
config.modulation = DEMOD_NRZ;\r
- else if ( strcmp(modulation, "PSK1" ) == 0)\r
+ } else if ( strcmp(modulation, "PSK1" ) == 0) {\r
config.modulation = DEMOD_PSK1;\r
- else if ( strcmp(modulation, "PSK2" ) == 0)\r
+ } else if ( strcmp(modulation, "PSK2" ) == 0) {\r
config.modulation = DEMOD_PSK2;\r
- else if ( strcmp(modulation, "PSK3" ) == 0)\r
+ } else if ( strcmp(modulation, "PSK3" ) == 0) {\r
config.modulation = DEMOD_PSK3;\r
- else if ( strcmp(modulation, "BIa" ) == 0)\r
+ } else if ( strcmp(modulation, "BIa" ) == 0) {\r
config.modulation = DEMOD_BIa;\r
- else if ( strcmp(modulation, "BI" ) == 0)\r
+ config.inverted=1;\r
+ } else if ( strcmp(modulation, "BI" ) == 0) {\r
config.modulation = DEMOD_BI;\r
- else {\r
+ config.inverted=0;\r
+ } else {\r
PrintAndLog("Unknown modulation '%s'", modulation);\r
errors = TRUE;\r
}\r
\r
switch( config.modulation ){\r
case DEMOD_FSK:\r
- //CmdLtrim("26");\r
sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
CmdLtrim(cmdStr); \r
sprintf(cmdStr,"%d %d", bitRate[config.bitrate], config.inverted );\r
ans = FSKrawDemod(cmdStr, FALSE);\r
break;\r
case DEMOD_FSK1:\r
- //CmdLtrim("26");\r
- sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
- CmdLtrim(cmdStr); \r
- sprintf(cmdStr,"%d 1 8 5", bitRate[config.bitrate] );\r
- ans = FSKrawDemod(cmdStr, FALSE);\r
- break;\r
case DEMOD_FSK1a:\r
- //CmdLtrim("26");\r
sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
CmdLtrim(cmdStr); \r
- sprintf(cmdStr,"%d 0 8 5", bitRate[config.bitrate] );\r
+ sprintf(cmdStr,"%d %d 8 5", bitRate[config.bitrate], config.inverted );\r
ans = FSKrawDemod(cmdStr, FALSE);\r
break;\r
case DEMOD_FSK2:\r
- //CmdLtrim("26");\r
- sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
- CmdLtrim(cmdStr); \r
- sprintf(cmdStr,"%d 0 10 8", bitRate[config.bitrate] );\r
- ans = FSKrawDemod(cmdStr, FALSE);\r
- break;\r
case DEMOD_FSK2a:\r
- //CmdLtrim("26");\r
sprintf(cmdStr,"%d", bitRate[config.bitrate]/2 );\r
CmdLtrim(cmdStr); \r
- sprintf(cmdStr,"%d 1 10 8", bitRate[config.bitrate] );\r
+ sprintf(cmdStr,"%d %d 10 8", bitRate[config.bitrate], config.inverted );\r
ans = FSKrawDemod(cmdStr, FALSE);\r
break;\r
case DEMOD_ASK:\r
- sprintf(cmdStr,"%d %d 1", bitRate[config.bitrate], config.inverted );\r
+ sprintf(cmdStr,"%d %d 0", bitRate[config.bitrate], config.inverted );\r
ans = ASKmanDemod(cmdStr, FALSE, FALSE);\r
break;\r
case DEMOD_PSK1:\r
- sprintf(cmdStr,"%d %d 1", bitRate[config.bitrate], config.inverted );\r
- ans = PSKDemod(cmdStr, FALSE);\r
- break;\r
- case DEMOD_PSK2:\r
- sprintf(cmdStr,"%d 1", bitRate[config.bitrate] );\r
+ sprintf(cmdStr,"%d %d 0", bitRate[config.bitrate], config.inverted );\r
ans = PSKDemod(cmdStr, FALSE);\r
- psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
break;\r
- case DEMOD_PSK3:\r
- sprintf(cmdStr,"%d %d 1", bitRate[config.bitrate], config.inverted );\r
+ case DEMOD_PSK2: //inverted won't affect this\r
+ case DEMOD_PSK3: //not fully implemented\r
+ sprintf(cmdStr,"%d 0 1", bitRate[config.bitrate] );\r
ans = PSKDemod(cmdStr, FALSE);\r
psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
break;\r
ans = NRZrawDemod(cmdStr, FALSE);\r
break;\r
case DEMOD_BI:\r
- sprintf(cmdStr,"0 %d 0 1", bitRate[config.bitrate] );\r
- ans = ASKbiphaseDemod(cmdStr, FALSE);\r
- break;\r
case DEMOD_BIa:\r
- sprintf(cmdStr,"0 %d 1 1", bitRate[config.bitrate] );\r
+ sprintf(cmdStr,"0 %d %d 0", bitRate[config.bitrate], config.inverted );\r
ans = ASKbiphaseDemod(cmdStr, FALSE);\r
break;\r
default:\r
uint8_t detRate = 0;\r
switch( mod ){\r
case DEMOD_FSK:\r
- detRate = GetFskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_FSK1:\r
- detRate = GetFskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_FSK1a:\r
- detRate = GetFskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_FSK2:\r
- detRate = GetFskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_FSK2a:\r
detRate = GetFskClock("",FALSE, FALSE); \r
if (expected[readRate] == detRate) {\r
}\r
break;\r
case DEMOD_ASK:\r
+ case DEMOD_BI:\r
+ case DEMOD_BIa:\r
detRate = GetAskClock("",FALSE, FALSE); \r
if (expected[readRate] == detRate) {\r
config.bitrate = readRate;\r
}\r
break;\r
case DEMOD_PSK1:\r
- detRate = GetPskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_PSK2:\r
- detRate = GetPskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
case DEMOD_PSK3:\r
detRate = GetPskClock("",FALSE, FALSE); \r
if (expected[readRate] == detRate) {\r
return TRUE;\r
}\r
break;\r
- case DEMOD_BI:\r
- detRate = GetAskClock("",FALSE, FALSE); \r
- if (expected[readRate] == detRate) {\r
- config.bitrate = readRate;\r
- return TRUE;\r
- }\r
- break;\r
default:\r
return FALSE;\r
}\r
si = idx;\r
if ( PackBits(si, 32, DemodBuffer) == 0x00 ) continue;\r
\r
- uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4; //master key\r
+ uint8_t safer = PackBits(si, 4, DemodBuffer); si += 4; //master key\r
uint8_t resv = PackBits(si, 4, DemodBuffer); si += 4; //was 7 & +=7+3 //should be only 4 bits if extended mode\r
// 2nibble must be zeroed.\r
// moved test to here, since this gets most faults first.\r
if ( resv > 0x00) continue;\r
\r
- uint8_t xtRate = PackBits(si, 3, DemodBuffer); si += 3; //new\r
- uint8_t bitRate = PackBits(si, 3, DemodBuffer); si += 3; //new could check bit rate\r
+ uint8_t xtRate = PackBits(si, 3, DemodBuffer); si += 3; //extended mode part of rate\r
+ uint8_t bitRate = PackBits(si, 3, DemodBuffer); si += 3; //bit rate\r
uint8_t extend = PackBits(si, 1, DemodBuffer); si += 1; //bit 15 extended mode\r
- uint8_t modread = PackBits(si, 5, DemodBuffer); si += 5+2+1; //new\r
- //uint8_t pskcr = PackBits(si, 2, DemodBuffer); si += 2+1; //new could check psk cr\r
- uint8_t nml01 = PackBits(si, 1, DemodBuffer); si += 1+5; //bit 24 , 30, 31 could be tested for 0 if not extended mode\r
+ uint8_t modread = PackBits(si, 5, DemodBuffer); si += 5+2+1; \r
+ //uint8_t pskcr = PackBits(si, 2, DemodBuffer); si += 2+1; //could check psk cr\r
+ uint8_t nml01 = PackBits(si, 1, DemodBuffer); si += 1+5; //bit 24, 30, 31 could be tested for 0 if not extended mode\r
uint8_t nml02 = PackBits(si, 2, DemodBuffer); si += 2;\r
\r
//if extended mode\r
}\r
//test modulation\r
if (!testModulation(mode, modread)) continue;\r
-\r
- *offset = idx;\r
if (!testBitRate(bitRate, mode)) continue;\r
+ *offset = idx;\r
return TRUE;\r
}\r
return FALSE;\r
}\r
\r
char * GetBitRateStr(uint32_t id){\r
- static char buf[40];\r
+ static char buf[20];\r
char *retStr = buf;\r
switch (id){\r
case 0: \r
return buf;\r
}\r
\r
-\r
char * GetSaferStr(uint32_t id){\r
static char buf[40];\r
char *retStr = buf;\r
}\r
\r
char * GetModulationStr( uint32_t id){\r
- static char buf[40];\r
+ static char buf[60];\r
char *retStr = buf;\r
\r
switch (id){\r