#include "UZ7HOStuff.h" // if in Satellite Mode look for a Tuning signal // As a first try, use ardop leader pattern then single tone static short rawSamples[2400]; // Get Frame Type need 2400 and we may add 1200 static int rawSamplesLength = 0; static int maxrawSamplesLength; static float dblOffsetHz = 0;; static int blnLeaderFound = 0; enum _ReceiveState // used for initial receive testing...later put in correct protocol states { SearchingForLeader, AcquireSymbolSync, AcquireFrameSync, AcquireFrameType, DecodeFrameType, AcquireFrame, DecodeFramestate }; static enum _ReceiveState State; void LookForCalPattern(short * Samples, int nSamples); void doTuning(short * Samples, int nSamples) { short ardopbuff[2][1200]; int i, i1 = 0; if (UsingBothChannels) { for (i = 0; i < rx_bufsize; i++) { ardopbuff[0][i] = Samples[i1]; i1++; ardopbuff[1][i] = Samples[i1]; i1++; } } else if (UsingRight) { // Extract just right i1 = 1; for (i = 0; i < rx_bufsize; i++) { ardopbuff[1][i] = Samples[i1]; i1 += 2; } } else { // Extract just left for (i = 0; i < rx_bufsize; i++) { ardopbuff[0][i] = Samples[i1]; i1 += 2; } } if (UsingLeft) { LookForCalPattern(&ardopbuff[0][0], 0); } if (UsingRight) { LookForCalPattern(&ardopbuff[0][0], 1); } } void LookForCalPattern(short * Samples, int nSamples) { BOOL blnFrameDecodedOK = FALSE; // LookforUZ7HOLeader(Samples, nSamples); // printtick("Start afsk"); // DemodAFSK(Samples, nSamples); // printtick("End afsk"); // return; // Append new data to anything in rawSamples memcpy(&rawSamples[rawSamplesLength], Samples, nSamples * 2); rawSamplesLength += nSamples; if (rawSamplesLength > maxrawSamplesLength) maxrawSamplesLength = rawSamplesLength; if (rawSamplesLength >= 2400) Debugprintf("Corrupt rawSamplesLength %d", rawSamplesLength); nSamples = rawSamplesLength; Samples = rawSamples; rawSamplesLength = 0; // printtick("Start Busy"); if (nSamples >= 1024) UpdateBusyDetector(Samples); // printtick("Done Busy"); // it seems that searchforleader runs on unmixed and unfilered samples // Searching for leader if (State == SearchingForLeader) { // Search for leader as long as 960 samples (8 symbols) available // printtick("Start Leader Search"); while (State == SearchingForLeader && nSamples >= 1200) { int intSN; blnLeaderFound = SearchFor2ToneLeader4(Samples, nSamples, &dblOffsetHz, &intSN); // blnLeaderFound = SearchFor2ToneLeader2(Samples, nSamples, &dblOffsetHz, &intSN); if (blnLeaderFound) { // Debugprintf("Got Leader"); nSamples -= 480; Samples += 480; // !!!! needs attention !!! } else { nSamples -= 240; Samples += 240; // !!!! needs attention !!! } } if (State == SearchingForLeader) { // Save unused samples memmove(rawSamples, Samples, nSamples * 2); rawSamplesLength = nSamples; // printtick("End Leader Search"); return; } } }