From 16e4304c6cc25065b572440d0d892a9d427f3f0b Mon Sep 17 00:00:00 2001 From: drowe67 Date: Wed, 21 Nov 2012 23:28:54 +0000 Subject: [PATCH] click tune with split and tx logic, works OK on Linux git-svn-id: https://svn.code.sf.net/p/freetel/code@1045 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/fdmdv2_main.cpp | 68 +++++++++++++--------- fdmdv2/src/fdmdv2_main.h | 2 - fdmdv2/src/fdmdv2_plot_spectrum.cpp | 3 +- fdmdv2/src/fdmdv2_plot_spectrum.h | 3 +- fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp | 14 +---- fdmdv2/src/fdmdv2_plot_waterfall_linux.h | 3 +- 6 files changed, 44 insertions(+), 49 deletions(-) diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 2791bd04..890a5cee 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -45,6 +45,8 @@ float g_avmag[FDMDV_NSPEC]; 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; @@ -313,8 +315,6 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) m_togBtnAnalog->Disable(); //m_togBtnALC->Disable(); m_btnTogTX->Disable(); - //m_togBtnLoopRx->Disable(); - //m_togBtnLoopTx->Disable(); // m_menuItemPlayAudioFile->Enable(false); @@ -358,7 +358,9 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) g_TxFreqOffsetFreqRect.imag = sin(g_TxFreqOffsetHz); g_TxFreqOffsetPhaseRect.real = cos(0.0); g_TxFreqOffsetPhaseRect.imag = sin(0.0); - + + g_tx = 0; + g_split = 0; } //------------------------------------------------------------------------- @@ -644,9 +646,12 @@ void MainFrame::OnCheckSQClick(wxCommandEvent& event) //------------------------------------------------------------------------- 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(); } //------------------------------------------------------------------------- @@ -666,6 +671,10 @@ void MainFrame::OnTogBtnTxID(wxCommandEvent& event) } void MainFrame::OnTogBtnSplitClick(wxCommandEvent& event) { + if (g_split) + g_split = 0; + else + g_split = 1; event.Skip(); } @@ -932,8 +941,6 @@ void MainFrame::OnClose(wxCommandEvent& event) m_togBtnAnalog->Disable(); //m_togBtnALC->Disable(); m_btnTogTX->Disable(); - //m_togBtnLoopRx->Disable(); - //m_togBtnLoopTx->Disable(); } @@ -1205,8 +1212,6 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) 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 @@ -1246,8 +1251,6 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) m_togTxID->Disable(); m_togBtnAnalog->Disable(); m_btnTogTX->Disable(); - //m_togBtnLoopRx->Disable(); - //m_togBtnLoopTx->Disable(); m_togBtnOnOff->SetLabel(wxT("Start")); } } @@ -1282,23 +1285,6 @@ void MainFrame::stopRxStream() } } -//---------------------------------------------------------- -// 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) { @@ -2181,3 +2167,27 @@ int MainFrame::txCallback( 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; + } +} + diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index 1b3ec7ce..3b0dfb63 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -324,8 +324,6 @@ class MainFrame : public TopFrame void OnTogBtnTxID( wxCommandEvent& event ); void OnTogBtnTXClick( wxCommandEvent& event ); void OnTogBtnOnOff( wxCommandEvent& event ); - void OnTogBtnLoopRx( wxCommandEvent& event ); - void OnTogBtnLoopTx( wxCommandEvent& event ); // void OnTogBtnSplitClickUI(wxUpdateUIEvent& event); // void OnTogBtnAnalogClickUI(wxUpdateUIEvent& event); diff --git a/fdmdv2/src/fdmdv2_plot_spectrum.cpp b/fdmdv2/src/fdmdv2_plot_spectrum.cpp index c2bfd0c7..61ac9f77 100644 --- a/fdmdv2/src/fdmdv2_plot_spectrum.cpp +++ b/fdmdv2/src/fdmdv2_plot_spectrum.cpp @@ -221,7 +221,6 @@ void PlotSpectrum::OnMouseDown(wxMouseEvent& event) // see PlotWaterfall::OnMouseDown() - g_RxFreqOffsetHz = FDMDV_FCENTRE - clickFreq; - g_TxFreqOffsetHz = clickFreq - FDMDV_FCENTRE; + fdmdv2_clickTune(clickFreq); } } diff --git a/fdmdv2/src/fdmdv2_plot_spectrum.h b/fdmdv2/src/fdmdv2_plot_spectrum.h index bd173301..49fce6bf 100644 --- a/fdmdv2/src/fdmdv2_plot_spectrum.h +++ b/fdmdv2/src/fdmdv2_plot_spectrum.h @@ -46,7 +46,6 @@ class PlotSpectrum : public PlotPanel DECLARE_EVENT_TABLE() }; -extern float g_RxFreqOffsetHz; -extern float g_TxFreqOffsetHz; +void fdmdv2_clickTune(float frequency); #endif //__FDMDV2_PLOT_SPECTRUM__ diff --git a/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp b/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp index 9bd4e2b7..eb0fe94c 100644 --- a/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp +++ b/fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp @@ -375,17 +375,7 @@ void PlotWaterfall::OnMouseDown(wxMouseEvent& event) 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); } } diff --git a/fdmdv2/src/fdmdv2_plot_waterfall_linux.h b/fdmdv2/src/fdmdv2_plot_waterfall_linux.h index 32af9220..55534560 100644 --- a/fdmdv2/src/fdmdv2_plot_waterfall_linux.h +++ b/fdmdv2/src/fdmdv2_plot_waterfall_linux.h @@ -58,7 +58,6 @@ class PlotWaterfall : public PlotPanel DECLARE_EVENT_TABLE() }; -extern float g_RxFreqOffsetHz; -extern float g_TxFreqOffsetHz; +void fdmdv2_clickTune(float frequency); #endif //__FDMDV2_PLOT_WATERFALL__ -- 2.25.1