click tune with split and tx logic, works OK on Linux
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 21 Nov 2012 23:28:54 +0000 (23:28 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 21 Nov 2012 23:28:54 +0000 (23:28 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1045 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_main.h
fdmdv2/src/fdmdv2_plot_spectrum.cpp
fdmdv2/src/fdmdv2_plot_spectrum.h
fdmdv2/src/fdmdv2_plot_waterfall_linux.cpp
fdmdv2/src/fdmdv2_plot_waterfall_linux.h

index 2791bd043ee7f6d43e478602d4cf02faa41dcba6..890a5cee4dd630c91675ab8833f5d47dcffe155b 100644 (file)
@@ -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;
+    }
+}
+
index 1b3ec7ceeb809438d6dfb896045d122d31be223f..3b0dfb63b7b817fbb9d8fd1244b5872354f22495 100644 (file)
@@ -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);
index c2bfd0c729a0a191d054f4e99249279e0f8241bc..61ac9f7708ce509a40a585ad036ead2491884812 100644 (file)
@@ -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);
     }
 }
index bd173301e9da3fe4db16643eb0f3a67102357f0e..49fce6bf989b60e5666f504719511b63f2d8898e 100644 (file)
@@ -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__
index 9bd4e2b7ab38260263c0d388b81a7a743e8abedb..eb0fe94c793bfc456b19cd45c400d17d5859d2c5 100644 (file)
@@ -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);
     }
 }
index 32af9220a0f9fd437859a130a1c93b0ec6278af9..5553456031364b0a68b7fd9486b1b52c7980b49a 100644 (file)
@@ -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__