qtsoundmodem/Calibrate.c

160 lines
3.1 KiB
C
Raw Permalink Normal View History

2023-09-04 19:06:44 +01:00
#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;
}
}
}