From: drowe67 Date: Thu, 12 Jun 2014 03:35:45 +0000 (+0000) Subject: made ok-cancel-apply order consistent across dialogs, converted short varicode to... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=619bd9a11f8f096a75763f4d039912a7867e2e2f;p=freetel-svn-tracking.git made ok-cancel-apply order consistent across dialogs, converted short varicode to use 2 bits/frame git-svn-id: https://svn.code.sf.net/p/freetel/code@1646 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/src/dlg_audiooptions.cpp b/fdmdv2/src/dlg_audiooptions.cpp index 994cc51c..1c312ef7 100644 --- a/fdmdv2/src/dlg_audiooptions.cpp +++ b/fdmdv2/src/dlg_audiooptions.cpp @@ -282,12 +282,16 @@ AudioOptsDialog::AudioOptsDialog(wxWindow* parent, wxWindowID id, const wxString bSizer6->Add(m_btnRefresh, 0, wxALIGN_CENTER|wxALL, 2); m_sdbSizer1 = new wxStdDialogButtonSizer(); + m_sdbSizer1OK = new wxButton(this, wxID_OK); m_sdbSizer1->AddButton(m_sdbSizer1OK); - m_sdbSizer1Apply = new wxButton(this, wxID_APPLY); - m_sdbSizer1->AddButton(m_sdbSizer1Apply); + m_sdbSizer1Cancel = new wxButton(this, wxID_CANCEL); m_sdbSizer1->AddButton(m_sdbSizer1Cancel); + + m_sdbSizer1Apply = new wxButton(this, wxID_APPLY); + m_sdbSizer1->AddButton(m_sdbSizer1Apply); + m_sdbSizer1->Realize(); bSizer6->Add(m_sdbSizer1, 1, wxALIGN_CENTER_VERTICAL, 2); diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp index 38913099..879373dd 100644 --- a/fdmdv2/src/dlg_filter.cpp +++ b/fdmdv2/src/dlg_filter.cpp @@ -140,14 +140,16 @@ FilterDlg::FilterDlg(wxWindow* parent, bool running, bool *newMicInFilter, bool m_SpkOutFreqRespPlot = new PlotSpectrum((wxFrame*)m_auiNotebook, m_SpkOutMagdB, F_MAG_N, FILTER_MIN_MAG_DB, FILTER_MAX_MAG_DB); m_auiNotebook->AddPage(m_SpkOutFreqRespPlot, _("Speaker Out Equaliser")); - // Default - Cancel - OK Buttons at the bottom -------------------------- + // OK - Cancel buttons at the bottom -------------------------- wxBoxSizer* bSizer31 = new wxBoxSizer(wxHORIZONTAL); - m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); - bSizer31->Add(m_sdbSizer5Cancel, 0, wxALL, 2); + m_sdbSizer5OK = new wxButton(this, wxID_OK); bSizer31->Add(m_sdbSizer5OK, 0, wxALL, 2); + m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); + bSizer31->Add(m_sdbSizer5Cancel, 0, wxALL, 2); + bSizer30->Add(bSizer31, 0, wxALIGN_RIGHT|wxALL, 0); this->SetSizer(bSizer30); diff --git a/fdmdv2/src/dlg_options.cpp b/fdmdv2/src/dlg_options.cpp index 51d9ed4f..192e2687 100644 --- a/fdmdv2/src/dlg_options.cpp +++ b/fdmdv2/src/dlg_options.cpp @@ -121,15 +121,20 @@ OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, c bSizer30->Add(sbSizer_udp,0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 3); //------------------------------ - // Cancel - OK Buttons + // OK - Cancel - Apply Buttons //------------------------------ wxBoxSizer* bSizer31 = new wxBoxSizer(wxHORIZONTAL); - m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); - bSizer31->Add(m_sdbSizer5Cancel, 0, wxALL, 2); + m_sdbSizer5OK = new wxButton(this, wxID_OK); bSizer31->Add(m_sdbSizer5OK, 0, wxALL, 2); + m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); + bSizer31->Add(m_sdbSizer5Cancel, 0, wxALL, 2); + + m_sdbSizer5Apply = new wxButton(this, wxID_APPLY); + bSizer31->Add(m_sdbSizer5Apply, 0, wxALL, 2); + bSizer30->Add(bSizer31, 0, wxALIGN_RIGHT|wxALL, 0); this->SetSizer(bSizer30); @@ -141,8 +146,9 @@ OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, c this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(OptionsDlg::OnInitDialog)); - m_sdbSizer5Cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnCancel), NULL, this); m_sdbSizer5OK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnOK), NULL, this); + m_sdbSizer5Cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnCancel), NULL, this); + m_sdbSizer5Apply->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnApply), NULL, this); event_in_serial = 0; event_out_serial = 0; @@ -157,8 +163,9 @@ OptionsDlg::~OptionsDlg() this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(OptionsDlg::OnInitDialog)); - m_sdbSizer5Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnCancel), NULL, this); m_sdbSizer5OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnOK), NULL, this); + m_sdbSizer5Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnCancel), NULL, this); + m_sdbSizer5Apply->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(OptionsDlg::OnApply), NULL, this); } @@ -193,6 +200,15 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) wxGetApp().m_testFrames = m_ckboxTestFrame->GetValue(); wxGetApp().m_events = m_ckbox_events->GetValue(); + + // make sure regexp lists are terminated by a \n + + if (m_txt_events_regexp_match->GetValue().Last() != '\n') { + m_txt_events_regexp_match->SetValue(m_txt_events_regexp_match->GetValue()+'\n'); + } + if (m_txt_events_regexp_replace->GetValue().Last() != '\n') { + m_txt_events_regexp_replace->SetValue(m_txt_events_regexp_replace->GetValue()+'\n'); + } wxGetApp().m_events_regexp_match = m_txt_events_regexp_match->GetValue(); wxGetApp().m_events_regexp_replace = m_txt_events_regexp_replace->GetValue(); @@ -223,31 +239,30 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) } //------------------------------------------------------------------------- -// OnCancel() +// OnOK() //------------------------------------------------------------------------- -void OptionsDlg::OnCancel(wxCommandEvent& event) +void OptionsDlg::OnOK(wxCommandEvent& event) { - //this->EndModal(wxID_CANCEL); + ExchangeData(EXCHANGE_DATA_OUT, true); + //this->EndModal(wxID_OK); this->Show(false); } //------------------------------------------------------------------------- -// OnOK() +// OnCancel() //------------------------------------------------------------------------- -void OptionsDlg::OnOK(wxCommandEvent& event) +void OptionsDlg::OnCancel(wxCommandEvent& event) { - ExchangeData(EXCHANGE_DATA_OUT, true); - //this->EndModal(wxID_OK); + //this->EndModal(wxID_CANCEL); this->Show(false); } //------------------------------------------------------------------------- -// OnClose() +// OnApply() //------------------------------------------------------------------------- -void OptionsDlg::OnClose(wxCloseEvent& event) +void OptionsDlg::OnApply(wxCommandEvent& event) { - //this->EndModal(wxID_OK); - this->Show(false); + ExchangeData(EXCHANGE_DATA_OUT, true); } //------------------------------------------------------------------------- diff --git a/fdmdv2/src/dlg_options.h b/fdmdv2/src/dlg_options.h index 45d62351..ff5d708d 100644 --- a/fdmdv2/src/dlg_options.h +++ b/fdmdv2/src/dlg_options.h @@ -44,8 +44,9 @@ class OptionsDlg : public wxDialog protected: // Handlers for events. - void OnCancel(wxCommandEvent& event); void OnOK(wxCommandEvent& event); + void OnCancel(wxCommandEvent& event); + void OnApply(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnInitDialog(wxInitDialogEvent& event); @@ -66,6 +67,7 @@ class OptionsDlg : public wxDialog wxButton* m_sdbSizer5OK; wxButton* m_sdbSizer5Cancel; + wxButton* m_sdbSizer5Apply; unsigned int event_in_serial, event_out_serial; diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index da98a433..9c1133a6 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -375,6 +375,14 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) wxGetApp().m_events_regexp_match = pConfig->Read("/Events/regexp_match", wxT("s=(.*)")); wxGetApp().m_events_regexp_replace = pConfig->Read("/Events/regexp_replace", wxT("curl http://qso.freedv.org/cgi-bin/onspot.cgi?s=\\1")); + // make sure regexp lists are terminated by a \n + + if (wxGetApp().m_events_regexp_match.Last() != '\n') { + wxGetApp().m_events_regexp_match = wxGetApp().m_events_regexp_match+'\n'; + } + if (wxGetApp().m_events_regexp_replace.Last() != '\n') { + wxGetApp().m_events_regexp_replace = wxGetApp().m_events_regexp_replace+'\n'; + } wxGetApp().m_udp_enable = (float)pConfig->Read(wxT("/UDP/enable"), f); wxGetApp().m_udp_port = (float)pConfig->Read(wxT("/UDP/port"), 3000); @@ -466,9 +474,7 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) // Start UDP listener thread m_UDPThread = NULL; - if (wxGetApp().m_udp_enable) { - startUDPThread(wxGetApp().m_udp_port); - } + startUDPThread(); optionsDlg = new OptionsDlg(NULL); m_schedule_restore = false; @@ -970,9 +976,12 @@ void MainFrame::OnTimer(wxTimerEvent &evt) wxString s; if (ret && (checksum_tx == checksum_rx)) { m_callsign[strlen(m_callsign)-2] = 0; - s.Printf("rx_txtmsg %s", m_callsign); + s.Printf("%s", m_callsign); m_txtCtrlCallSign->SetValue(s); - processTxtEvent(m_callsign); + + char s1[MAX_CALLSIGN]; + sprintf(s1,"rx_txtmsg %s", m_callsign); + processTxtEvent(s1); m_checksumGood++; s.Printf("%d", m_checksumGood); @@ -1045,10 +1054,11 @@ void MainFrame::OnTimer(wxTimerEvent &evt) delete error_pattern; } - // command from UDP thread best processed in main thread + // command from UDP thread that is best processed in main thread to avoid seg faults if (m_schedule_restore) { - Restore(); + if (IsIconized()) + Restore(); m_schedule_restore = false; } } @@ -1314,6 +1324,9 @@ void MainFrame::OnCallSignReset(wxCommandEvent& event) wxString s; s.Printf("%s", m_callsign); m_txtCtrlCallSign->SetValue(s); + m_checksumGood = m_checksumBad = 0; + m_txtChecksumGood->SetLabel(_("0")); + m_txtChecksumBad->SetLabel(_("0")); } void MainFrame::OnBerReset(wxCommandEvent& event) @@ -1712,16 +1725,6 @@ void MainFrame::OnToolsOptions(wxCommandEvent& event) m_modal=true; optionsDlg->Show(); m_modal=false; - - // start/stop UDP thread - - if (!wxGetApp().m_udp_enable) { - stopUDPThread(); - } - - if (wxGetApp().m_udp_enable && (m_UDPThread == NULL)) { - startUDPThread(wxGetApp().m_udp_port); - } } //------------------------------------------------------------------------- @@ -2580,7 +2583,7 @@ void MainFrame::processTxtEvent(char event[]) { wxString regexp_replace = regexp_replace_list.SubString(0, replace_end-1); //printf("match: %s replace: %s\n", (const char *)regexp_match.c_str(), (const char *)regexp_replace.c_str()); wxRegEx re(regexp_match); - printf(" checking for match against: %s\n", (const char *)regexp_match.c_str()); + printf(" checking for match against: %s\n", (const char *)regexp_match.c_str()); // if we found a match, lets run the replace regexp and issue the system command @@ -2594,21 +2597,12 @@ void MainFrame::processTxtEvent(char event[]) { if (wxGetApp().m_events) enableSystem = true; - // If options dialog is up current value of events checkbox overrides wxGetApp().m_events - - if (optionsDlg != NULL) { - if (optionsDlg->enableEventsChecked()) - enableSystem = true; - else - enableSystem = false; - } - const char *event_out = event_str_rep.ToUTF8(); wxString event_out_with_return_code; if (enableSystem) { - int ret = wxExecute(event_str_rep); - event_out_with_return_code.Printf(_T("%s -> process ID %d"), event_out, ret); + int ret = wxShell(event_str_rep); + event_out_with_return_code.Printf(_T("%s -> returned %d"), event_out, ret); } else event_out_with_return_code.Printf(_T("%s)"), event_out); @@ -3341,10 +3335,13 @@ void per_frame_rx_processing( //printf("data_flag_index: %d\n", data_flag_index); assert(data_flag_index != -1); // not supported for all rates - short abit = codec_bits[data_flag_index]; + short abit[2]; + abit[0] = codec_bits[data_flag_index]; + abit[1] = codec_bits[bits_per_codec_frame+11]; // use spare bit, note not FEC protected char ascii_out; - int n_ascii = varicode_decode(&g_varicode_dec_states, &ascii_out, &abit, 1, 1); + //printf("rx bits %d %d %d\n", abit[0], abit[1], bits_per_codec_frame+11); + int n_ascii = varicode_decode(&g_varicode_dec_states, &ascii_out, abit, 1, wxGetApp().m_textEncoding); assert((n_ascii == 0) || (n_ascii == 1)); if (n_ascii) { short ashort = ascii_out; @@ -3399,7 +3396,7 @@ void per_frame_tx_processing( COMP tx_fdm_offset[2*FDMDV_NOM_SAMPLES_PER_FRAME]; int sync_bit; int i, j, bit, byte, data_flag_index; - short abit; + short abit[2]; int bits_per_fdmdv_frame, bits_per_codec_frame, bytes_per_codec_frame; bits_per_fdmdv_frame = fdmdv_bits_per_frame(g_pFDMDV); @@ -3431,11 +3428,16 @@ void per_frame_tx_processing( data_flag_index = codec2_get_spare_bit_index(c2); assert(data_flag_index != -1); // not supported for all rates - if (fifo_read(g_txDataInFifo, &abit, 1) == 0) - bits[data_flag_index] = abit; + abit[0] = abit[1] = 0; + if (fifo_read(g_txDataInFifo, abit, wxGetApp().m_textEncoding) == 0) { + bits[data_flag_index] = abit[0]; + bits[bits_per_codec_frame+11] = abit[1]; // spare bit that was unused in 1600 mode + // note fast varicode must be sent two bits at a time + } else { bits[data_flag_index] = 0; - //printf("tx fifle empty - sending a 0!"); + bits[bits_per_codec_frame+11] = 0; + printf("tx fifo empty - sending a 00!\n"); } /* add FEC ---------------------------------------*/ @@ -3512,8 +3514,6 @@ void per_frame_tx_processing( for(j=0,i=bits_per_codec_frame; i> (10-j)) & 0x1; } - - bits[i] = 0; /* spare bit */ } @@ -3752,10 +3752,8 @@ int MainFrame::PollUDP(void) return n; } -void MainFrame::startUDPThread(int port) { +void MainFrame::startUDPThread(void) { printf("starting UDP thread!\n"); - m_udp_addr.Service(port); - m_udp_sock = new wxDatagramSocket(m_udp_addr, wxSOCKET_NOWAIT); m_UDPThread = new UDPThread; m_UDPThread->mf = this; if (m_UDPThread->Create() != wxTHREAD_NO_ERROR ) { @@ -3764,7 +3762,6 @@ void MainFrame::startUDPThread(int port) { if (m_UDPThread->Run() != wxTHREAD_NO_ERROR ) { wxLogError(wxT("Can't start thread!")); delete m_UDPThread; - delete m_udp_sock; } } @@ -3773,8 +3770,27 @@ void MainFrame::stopUDPThread(void) { if ((m_UDPThread != NULL) && m_UDPThread->m_run) { m_UDPThread->m_run = 0; m_UDPThread->Wait(); - delete m_UDPThread; - delete m_udp_sock; m_UDPThread = NULL; } } + +void *UDPThread::Entry() { + printf("UDP thread started!\n"); + while (m_run) { + if (wxGetApp().m_udp_enable) { + printf("m_udp_enable\n"); + mf->m_udp_addr.Service(wxGetApp().m_udp_port); + mf->m_udp_sock = new wxDatagramSocket(mf->m_udp_addr, wxSOCKET_NOWAIT); + + while (m_run && wxGetApp().m_udp_enable) { + if (mf->PollUDP() == 0) { + wxThread::Sleep(20); + } + } + + delete mf->m_udp_sock; + } + wxThread::Sleep(20); + } + return NULL; +} diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index b33e8ca8..6fe1acce 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -409,7 +409,7 @@ class MainFrame : public TopFrame wxIPV4address m_udp_addr; wxDatagramSocket *m_udp_sock; UDPThread *m_UDPThread; - void startUDPThread(int port); + void startUDPThread(void); void stopUDPThread(void); int PollUDP(); bool m_schedule_restore; @@ -558,16 +558,7 @@ public: UDPThread(void) : wxThread(wxTHREAD_JOINABLE) { m_run = 1; } // thread execution starts here - void *Entry() - { - while (m_run) - { - if (mf->PollUDP() == 0) { - wxThread::Sleep(20); - } - } - return NULL; - } + void *Entry(); // called when the thread exits - whether it terminates normally or is // stopped with Delete() (but not when it is Kill()ed!) diff --git a/fdmdv2/src/topFrame.cpp b/fdmdv2/src/topFrame.cpp index 9174c89f..807f9515 100644 --- a/fdmdv2/src/topFrame.cpp +++ b/fdmdv2/src/topFrame.cpp @@ -219,10 +219,12 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const bSizer15->Add(m_txtCtrlCallSign, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5); lowerSizer->Add(bSizer15, 1, wxEXPAND, 5); - m_txtChecksumGood = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); - lowerSizer->Add(m_txtChecksumGood, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); - m_txtChecksumBad = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); - lowerSizer->Add(m_txtChecksumBad, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + wxStaticBoxSizer* sbSizer_Checksum = new wxStaticBoxSizer(new wxStaticBox(this, wxID_ANY, _("Good/Bad Checksums")), wxHORIZONTAL); + m_txtChecksumGood = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(100,-1), wxALIGN_CENTRE); + sbSizer_Checksum->Add(m_txtChecksumGood, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_txtChecksumBad = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxSize(100,-1), wxALIGN_CENTRE); + sbSizer_Checksum->Add(m_txtChecksumBad, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + lowerSizer->Add(sbSizer_Checksum, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); //===================================================== // These are the buttons that autosend the userid (?)