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
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];
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();
#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) {
g_error_hist[i] = 0;
g_error_histn[i] = 0;
}
- }
-
-
+ }
}
#ifdef ALC
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);
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);
void OnCallSignReset( wxCommandEvent& event );
void OnBerReset( wxCommandEvent& event );
+ void OnReSync( wxCommandEvent& event );
//System Events
void OnPaint(wxPaintEvent& event);
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);
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()
wxStaticText *m_textBER;
wxStaticText *m_textResyncs;
- wxRadioButton *m_rbSync;
- wxRadioButton *m_rbInterleaverSync;
+ wxStaticText *m_textSync;
+ wxStaticText *m_textInterleaverSync;
wxButton *m_BtnReSync;
wxRadioButton *m_rb1400old;
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;