int g_SquelchActive;
float g_SquelchLevel;
int g_analog;
+int g_split;
+int g_tx;
// tx/rx processing states
int g_nRxIn = FDMDV_NOM_SAMPLES_PER_FRAME;
m_togBtnAnalog->Disable();
//m_togBtnALC->Disable();
m_btnTogTX->Disable();
- //m_togBtnLoopRx->Disable();
- //m_togBtnLoopTx->Disable();
// m_menuItemPlayAudioFile->Enable(false);
g_TxFreqOffsetFreqRect.imag = sin(g_TxFreqOffsetHz);
g_TxFreqOffsetPhaseRect.real = cos(0.0);
g_TxFreqOffsetPhaseRect.imag = sin(0.0);
-
+
+ g_tx = 0;
+ g_split = 0;
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
void MainFrame::OnTogBtnTXClick(wxCommandEvent& event)
{
-// m_soundFile = wxT("./hts1a.wav");
-// m_sound = new wxSound(m_soundFile, false);
-// m_sound->Play();
+ if (g_tx)
+ g_tx = 0;
+ else
+ g_tx = 1;
+
+ event.Skip();
}
//-------------------------------------------------------------------------
}
void MainFrame::OnTogBtnSplitClick(wxCommandEvent& event) {
+ if (g_split)
+ g_split = 0;
+ else
+ g_split = 1;
event.Skip();
}
m_togBtnAnalog->Disable();
//m_togBtnALC->Disable();
m_btnTogTX->Disable();
- //m_togBtnLoopRx->Disable();
- //m_togBtnLoopTx->Disable();
}
m_togTxID->Enable();
m_togBtnAnalog->Enable();
m_btnTogTX->Enable();
- //m_togBtnLoopRx->Enable();
- //m_togBtnLoopTx->Enable();
m_togBtnOnOff->SetLabel(wxT("Stop"));
// init modem and codec states
m_togTxID->Disable();
m_togBtnAnalog->Disable();
m_btnTogTX->Disable();
- //m_togBtnLoopRx->Disable();
- //m_togBtnLoopTx->Disable();
m_togBtnOnOff->SetLabel(wxT("Start"));
}
}
}
}
-//----------------------------------------------------------
-// OnTogBtnLoopRx()
-//----------------------------------------------------------
-void MainFrame::OnTogBtnLoopRx( wxCommandEvent& event )
-{
- if (mute_mic == 0)
- mute_mic = 1;
- else
- mute_mic = 0;
-}
-
-//----------------------------------------------------------
-// OnTogBtnLoopTx()
-//----------------------------------------------------------
-void MainFrame::OnTogBtnLoopTx( wxCommandEvent& event )
-{
-}
void MainFrame::destroy_fifos(void)
{
return paContinue;
}
+// Callback from plot_spectrum & plot_waterfall. would be nice to
+// work out a way to do this without globals.
+
+void fdmdv2_clickTune(float freq) {
+
+ // The demod is hard-wired to expect a centre frequency of
+ // FDMDV_FCENTRE. So we want to take the signal centered on the
+ // click tune freq and re-centre it on FDMDV_FCENTRE. For example
+ // if the click tune freq is 1500Hz, and FDMDV_CENTRE is 1200 Hz,
+ // we need to shift the input signal centred on 1500Hz down to
+ // 1200Hz, an offset of -300Hz.
+
+ if (g_split) {
+ if (g_tx)
+ g_TxFreqOffsetHz = freq - FDMDV_FCENTRE;
+ else
+ g_RxFreqOffsetHz = FDMDV_FCENTRE - freq;
+ }
+ else {
+ g_TxFreqOffsetHz = freq - FDMDV_FCENTRE;
+ g_RxFreqOffsetHz = FDMDV_FCENTRE - freq;
+ }
+}
+
float freq_hz_to_px = (float)m_rGrid.GetWidth()/(MAX_F_HZ-MIN_F_HZ);
float clickFreq = (float)pt.x/freq_hz_to_px;
- // The demod is hard-wired to expect a centre frequency of
- // FDMDV_FCENTRE. So we want to take the signal centered on the
- // click tune freq and re-centre it on FDMDV_FCENTRE. For example
- // if the click tune freq is 1500Hz, and FDMDV_CENTRE is 1200 Hz,
- // we need to shift the input signal centred on 1500Hz down to
- // 1200Hz, an offset of -300Hz.
-
- // modifying a global is messy but an easy way to communicate
- // to the tx/rx thread
-
- g_RxFreqOffsetHz = FDMDV_FCENTRE - clickFreq;
- g_TxFreqOffsetHz = clickFreq - FDMDV_FCENTRE;
+ // communicate back to other threads
+ fdmdv2_clickTune(clickFreq);
}
}