-// FSK, PSK, ASK/MANCHESTER, ASK/BIPHASE, ASK/DIPHASE
-// should cover 90% of known used configs
-// the rest will need to be manually demoded for now...
-int demodEM4x05resp(uint8_t bitsNeeded) {
- int ans = 0;
- bool demodFound = false;
- DemodBufferLen = 0x00;
- // skip first two 0 bits as they might have been missed in the demod
- uint8_t preamble[6] = {0,0,1,0,1,0};
-
- // test for FSK wave (easiest to 99% ID)
- if (GetFskClock("", FALSE, FALSE)) {
- //valid fsk clocks found
- ans = FSKrawDemod("0 0", false);
- if (!ans) {
- if (g_debugMode) PrintAndLog("DEBUG: Error - EM4305: FSK Demod failed");
- } else {
- // set size to 10 to only test first 4 positions for the preamble
- size_t size = (10 > DemodBufferLen) ? DemodBufferLen : 10;
- size_t startIdx = 0;
-
- if (g_debugMode) PrintAndLog("ANS: %d | %u | %u", ans, startIdx, size);
-
- uint8_t errChk = !EMpreambleSearch(DemodBuffer, preamble, sizeof(preamble), size, &startIdx);
- if ( errChk == 0) {
- if (g_debugMode) PrintAndLog("DEBUG: Error - EM4305 preamble not found :: %d", startIdx);
- } else {
- //can't test size because the preamble doesn't repeat :(
- //meaning chances of false positives are high.
- demodFound = true;
- }
- }
- }
- // PSK clocks should be easy to detect ( but difficult to demod a non-repeating pattern... )
- if (!demodFound) {
- ans = GetPskClock("", FALSE, FALSE);
- if (ans>0) {
- PrintAndLog("PSK response possibly found, run `data rawd p1` to attempt to demod");