coloured modem and interleaver sync, hooked up and tested resync button
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 4 May 2018 10:55:14 +0000 (10:55 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 4 May 2018 10:55:14 +0000 (10:55 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3573 01035d8c-6547-0410-b346-abe4f91aad63

freedv-dev/src/fdmdv2_main.cpp
freedv-dev/src/fdmdv2_main.h
freedv-dev/src/topFrame.cpp
freedv-dev/src/topFrame.h

index edea1b9477fffca4d4cf86dcf983c2de9b3bc3f1..faed0576db00c054dd27e6e3cf1387d2ced2cbbe 100644 (file)
@@ -73,7 +73,7 @@ struct FIFO         *g_txDataInFifo;
 struct FIFO         *g_rxDataOutFifo;
 
 // tx/rx processing states
-int                 g_State, g_prev_State;
+int                 g_State, g_prev_State, g_interleaverSyncState;
 paCallBackData     *g_rxUserdata;
 
 // FIFOs used for plotting waveforms
@@ -1005,15 +1005,18 @@ void MainFrame::OnTimer(wxTimerEvent &evt)
         if (g_prev_State == 0) {
             g_resyncs++;
         }
-        //m_rbSync->SetForegroundColour( wxColour( 0, 255, 0 ) ); // green
-        m_rbSync->SetValue(true);        
-    }
+        m_textSync->SetForegroundColour( wxColour( 0, 255, 0 ) ); // green
+     }
     else {
-        //m_rbSync->SetForegroundColour( wxColour( 255, 0, 0 ) ); // red
-        m_rbSync->SetValue(false);
-    }
+        m_textSync->SetForegroundColour( wxColour( 255, 0, 0 ) ); // red
+     }
     g_prev_State = g_State;
-
+    if (g_interleaverSyncState) {
+        m_textInterleaverSync->SetForegroundColour( wxColour( 0, 255, 0 ) ); // green
+    } else {
+        m_textInterleaverSync->SetForegroundColour( wxColour( 255, 0, 0 ) ); // red
+    }
+    
     // send Callsign ----------------------------------------------------
 
     char callsign[MAX_CALLSIGN];
@@ -1712,7 +1715,7 @@ void MainFrame::OnTogBtnAnalogClick (wxCommandEvent& event)
         m_panelWaterfall->setFs(freedv_get_modem_sample_rate(g_pfreedv));
     }
 
-    g_State = g_prev_State = 0;
+    g_State = g_prev_State = g_interleaverSyncState = 0;
     g_stats.snr_est = 0;
 
     event.Skip();
@@ -1732,6 +1735,18 @@ void MainFrame::OnCallSignReset(wxCommandEvent& event)
 #endif
 }
 
+
+// Force manual resync, just in case demod gets stuck on false sync
+
+void MainFrame::OnReSync(wxCommandEvent& event)
+{
+    if (m_RxRunning)  {
+        fprintf(stderr,"OnReSync\n");
+        freedv_set_sync(g_pfreedv, FREEDV_SYNC_UNSYNC);
+    }  
+}
+
+
 void MainFrame::OnBerReset(wxCommandEvent& event)
 {
     if (m_RxRunning)  {
@@ -1743,9 +1758,7 @@ void MainFrame::OnBerReset(wxCommandEvent& event)
             g_error_hist[i] = 0;
             g_error_histn[i] = 0;
         }
-    }
-
-    
+    }  
 }
 
 #ifdef ALC
@@ -2345,9 +2358,11 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event)
                 struct freedv_advanced adv;
                 adv.interleave_frames = wxGetApp().m_FreeDV700Interleave;
                 g_pfreedv = freedv_open_advanced(g_mode, &adv);
+                m_textInterleaverSync->SetLabel("Interleaver");
             } else {
                 g_pfreedv = freedv_open(g_mode);
-            }
+                m_textInterleaverSync->SetLabel("");
+           }
             
             freedv_set_callback_txt(g_pfreedv, &my_put_next_rx_char, &my_get_next_tx_char, NULL);
 
@@ -3667,6 +3682,7 @@ void per_frame_rx_processing(
         
             nin = freedv_nin(g_pfreedv);
             g_State = freedv_get_sync(g_pfreedv);
+            g_interleaverSyncState = freedv_get_sync_interleaver(g_pfreedv);
 
             //fprintf(g_logfile, "g_State: %d g_stats.sync: %d snr: %f \n", g_State, g_stats.sync, f->snr);
 
index 5078ba159207c2a8f5142822fa31ef46003ec00b..0e2ed2dfed75759b0379491baeeb539ecc941a60 100644 (file)
@@ -547,6 +547,7 @@ class MainFrame : public TopFrame
 
         void OnCallSignReset( wxCommandEvent& event );
         void OnBerReset( wxCommandEvent& event );
+        void OnReSync( wxCommandEvent& event );
 
         //System Events
         void OnPaint(wxPaintEvent& event);
index 06da0d2c1f3fdd38f33a0a04f95ac835f538fd55..ba158118a1fae17b9ba4df21a4c9719385ed282a 100644 (file)
@@ -144,13 +144,11 @@ TopFrame::TopFrame(wxString plugInName, wxWindow* parent, wxWindowID id, const w
     wxStaticBoxSizer* sbSizer3_33;
     sbSizer3_33 = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, _("Sync")), wxVERTICAL);
 
-    m_rbSync = new wxRadioButton( this, wxID_ANY, wxT("Modem"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
-    //m_rbSync->SetForegroundColour( wxColour( 255, 0, 0 ) );
-    sbSizer3_33->Add(m_rbSync, 0, wxALIGN_LEFT, 1);
+    m_textSync = new wxStaticText(this, wxID_ANY, wxT("Modem"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
+    sbSizer3_33->Add(m_textSync, 0, wxALIGN_CENTER_HORIZONTAL, 1);
 
-    m_rbInterleaverSync = new wxRadioButton( this, wxID_ANY, wxT("Interleaver"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
-    //m_rbInterleaverSync->SetForegroundColour( wxColour( 255, 0, 0 ) );
-    sbSizer3_33->Add(m_rbInterleaverSync, 0, wxALIGN_LEFT , 1);
+    m_textInterleaverSync = new wxStaticText(this, wxID_ANY, wxT("Interleaver"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
+    sbSizer3_33->Add(m_textInterleaverSync, 0, wxALIGN_CENTER_HORIZONTAL , 1);
 
     m_BtnReSync = new wxButton(this, wxID_ANY, _("ReSync"), wxDefaultPosition, wxDefaultSize, 0);
     sbSizer3_33->Add(m_BtnReSync, 0, wxALIGN_CENTRE , 1);
@@ -545,6 +543,7 @@ TopFrame::TopFrame(wxString plugInName, wxWindow* parent, wxWindowID id, const w
 
     m_BtnCallSignReset->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnCallSignReset), NULL, this);
     m_BtnBerReset->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnBerReset), NULL, this);
+    m_BtnReSync->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TopFrame::OnReSync), NULL, this);
 }
 
 TopFrame::~TopFrame()
index ee49040709e0a9ad6ed8355b5d136b2317e6330f..b5a2d43ff080893dce27097bc43920e9f7e5b575 100644 (file)
@@ -104,8 +104,8 @@ class TopFrame : public wxFrame
         wxStaticText  *m_textBER;
         wxStaticText  *m_textResyncs;
 
-        wxRadioButton *m_rbSync;
-        wxRadioButton *m_rbInterleaverSync;
+        wxStaticText  *m_textSync;
+        wxStaticText  *m_textInterleaverSync;
         wxButton      *m_BtnReSync;
        
         wxRadioButton *m_rb1400old;
@@ -176,6 +176,7 @@ class TopFrame : public wxFrame
 
         virtual void OnCallSignReset( wxCommandEvent& event ) { event.Skip(); }
         virtual void OnBerReset( wxCommandEvent& event ) { event.Skip(); }
+        virtual void OnReSync( wxCommandEvent& event ) { event.Skip(); }
 
     public:
         wxToggleButton* m_togRxID;