+uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose)
+{
+ uint8_t BitStream[MAX_GRAPH_TRACE_LEN] = {0};
+ size_t size = getFromGraphBuf(BitStream);
+ if (size == 0) return 0;
+ uint16_t ans = countFC(BitStream, size, 1);
+ if (ans == 0) {
+ if (verbose || g_debugMode) PrintAndLog("DEBUG: No data found");
+ return 0;
+ }
+ *fc1 = (ans >> 8) & 0xFF;
+ *fc2 = ans & 0xFF;
+
+ int start = 0;
+ *rf1 = detectFSKClk_ext(BitStream, size, *fc1, *fc2, &start);
+ if (*rf1 == 0) {
+ if (verbose || g_debugMode) PrintAndLog("DEBUG: Clock detect error");
+ return 0;
+ }
+ if (verbose || g_debugMode)
+ PrintAndLog("Detected Field Clocks: FC/%d, FC/%d - Bit Clock: RF/%d | Best Starting Position: %d", *fc1, *fc2, *rf1, start);
+ SetGraphClock(*rf1, start);
+ return 1;
+}
+
+// test samples are not just noise
+bool graphJustNoise(int *BitStream, int size)
+{
+ //might not be high enough for noisy environments
+ #define THRESHOLD 15;
+ bool isNoise = TRUE;
+ for(int i=0; i < size && isNoise; i++){
+ isNoise = BitStream[i] < THRESHOLD;
+ }
+ return isNoise;
+}