Merge branch 'FM' into FM_Ext

This commit is contained in:
Jonathan Naylor 2020-05-09 13:06:32 +01:00
commit 67e0bf02e2
2 changed files with 20 additions and 3 deletions

20
FM.cpp
View File

@ -54,9 +54,11 @@ m_extAudioBoost(1U),
m_downsampler(1200U),// 100 ms of audio
m_extEnabled(false),
m_rxLevel(1),
m_outputRFRB(2400U), // 100ms of audio
m_inputExtRB(2400U) //100ms of Audio
m_inputRFRB(4800U), // 200ms of audio
m_outputRFRB(2400U), // 100ms of audio
m_inputExtRB(2400U) // 100ms of Audio
{
insertDelay(100U);
}
void CFM::samples(bool cos, const q15_t* samples, uint8_t length)
@ -76,6 +78,10 @@ void CFM::samples(bool cos, const q15_t* samples, uint8_t length)
q15_t currentRFSample = q15_t((q31_t(samples[i]) << 8) / m_rxLevel);
uint8_t ctcssState = m_ctcssRX.process(currentRFSample);
// Delay the audio by 100ms to better match the CTCSS detector output
m_inputRFRB.put(currentRFSample);
m_inputRFRB.get(currentRFSample);
q15_t currentExtSample;
bool inputExt = m_inputExtRB.get(currentExtSample);//always consume the external input data so it does not overflow
@ -296,7 +302,7 @@ void CFM::stateMachine(bool validRFSignal, bool validExtSignal)
}
if (m_state == FS_LISTENING && m_modemState == STATE_FM) {
if (!m_callsign.isRunning() && !m_rfAck.isRunning() && !m_extAck.isRunning()) {
if (!m_callsign.isRunning() && !m_rfAck.isRunning() && !m_extAck.isRunning() && m_outputRFRB.getData() == 0U) {
DEBUG1("Change to STATE_IDLE");
m_modemState = STATE_IDLE;
m_callsignTimer.stop();
@ -698,6 +704,14 @@ uint8_t CFM::writeData(const uint8_t* data, uint8_t length)
return 0U;
}
void CFM::insertDelay(uint16_t ms)
{
uint32_t nSamples = ms * 24U;
for (uint32_t i = 0U; i < nSamples; i++)
m_inputRFRB.put(0);
}
void CFM::insertSilence(uint16_t ms)
{
uint32_t nSamples = ms * 24U;

3
FM.h
View File

@ -95,6 +95,7 @@ private:
CFMDownsampler m_downsampler;
bool m_extEnabled;
q15_t m_rxLevel;
CRingBuffer<q15_t> m_inputRFRB;
CRingBuffer<q15_t> m_outputRFRB;
CRingBuffer<q15_t> m_inputExtRB;
@ -116,6 +117,8 @@ private:
void sendCallsign();
void beginRelaying();
void insertDelay(uint16_t ms);
void insertSilence(uint16_t ms);
};