diff --git a/.github/workflows/cmake-linux.yml b/.github/workflows/cmake-linux.yml index 011ce307..3d70d25f 100644 --- a/.github/workflows/cmake-linux.yml +++ b/.github/workflows/cmake-linux.yml @@ -256,17 +256,22 @@ jobs: sudo sed -i 's/no/yes/g' /usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy sudo systemctl restart polkit + - name: Install common packages + shell: bash + run: | + sudo apt-get install sox xvfb at-spi2-core + - name: Install required packages for audio/display shell: bash if: ${{ matrix.os == 'ubuntu-24.04' || matrix.os == 'ubuntu-24.04-arm' }} run: | - sudo apt-get install sox xvfb pipewire pulseaudio-utils pipewire-pulse wireplumber metacity + sudo apt-get install pipewire pulseaudio-utils pipewire-pulse wireplumber metacity - name: Install required packages for audio/display shell: bash if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'ubuntu-22.04-arm' }} run: | - sudo apt-get install sox xvfb pulseaudio pulseaudio-utils metacity + sudo apt-get install pulseaudio pulseaudio-utils metacity systemctl --user --now enable pulseaudio.service pulseaudio.socket - name: Create Python venv diff --git a/USER_MANUAL.md b/USER_MANUAL.md index 31df691c..01239124 100644 --- a/USER_MANUAL.md +++ b/USER_MANUAL.md @@ -855,6 +855,9 @@ LDPC | Low Density Parity Check Codes - a family of powerful FEC codes 2. Enhancements: * Upgrade Python to 3.14.2. (PR #1109, #1118, #1124) +*Note: Legacy modes (700D, 700E, 1600) are now hidden by default. (PR #1108) You can show them +again by going to Tools->Options->Modem and selecting "Enable Legacy Modes".* + ## V2.1.1 TBD 2025 1. Bugfixes: diff --git a/src/config/FreeDVConfiguration.cpp b/src/config/FreeDVConfiguration.cpp index fe2e8a82..6158e874 100644 --- a/src/config/FreeDVConfiguration.cpp +++ b/src/config/FreeDVConfiguration.cpp @@ -115,6 +115,7 @@ FreeDVConfiguration::FreeDVConfiguration() , reportingUserMsgColWidth("/Windows/FreeDVReporter/reportingUserMsgColWidth", 130) , showDecodeStats("/Debug/showDecodeStats", false) + , enableLegacyModes("/Modem/enableLegacyModes", false) { // empty } @@ -243,6 +244,7 @@ void FreeDVConfiguration::load(wxConfigBase* config) load_(config, reportingUserMsgColWidth); load_(config, showDecodeStats); + load_(config, enableLegacyModes); } void FreeDVConfiguration::save(wxConfigBase* config) @@ -332,6 +334,7 @@ void FreeDVConfiguration::save(wxConfigBase* config) save_(config, reportingUserMsgColWidth); save_(config, showDecodeStats); + save_(config, enableLegacyModes); config->Flush(); } diff --git a/src/config/FreeDVConfiguration.h b/src/config/FreeDVConfiguration.h index a940d052..6c4c82dc 100644 --- a/src/config/FreeDVConfiguration.h +++ b/src/config/FreeDVConfiguration.h @@ -122,6 +122,8 @@ public: ConfigurationDataElement showDecodeStats; + ConfigurationDataElement enableLegacyModes; + virtual void load(wxConfigBase* config) override; virtual void save(wxConfigBase* config) override; }; diff --git a/src/entitlements.plist b/src/entitlements.plist index 454e8fbb..d4a94346 100644 --- a/src/entitlements.plist +++ b/src/entitlements.plist @@ -6,5 +6,15 @@ com.apple.security.cs.disable-library-validation + com.apple.security.automation.apple-events + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.allow-jit + + com.apple.security.cs.disable-executable-page-protection + + com.apple.security.get-task-allow + diff --git a/src/gui/dialogs/dlg_options.cpp b/src/gui/dialogs/dlg_options.cpp index b4538b56..5e4c8064 100644 --- a/src/gui/dialogs/dlg_options.cpp +++ b/src/gui/dialogs/dlg_options.cpp @@ -453,6 +453,9 @@ OptionsDlg::OptionsDlg(wxWindow* parent, wxWindowID id, const wxString& title, c m_ckboxFreeDV700txBPF = new wxCheckBox(sb_freedv700, wxID_ANY, _("TX Band Pass Filter"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); sbSizer_freedv700->Add(m_ckboxFreeDV700txBPF, 0, wxALL | wxALIGN_LEFT, 5); + m_ckboxEnableLegacyModes = new wxCheckBox(sb_freedv700, wxID_ANY, _("Enable Legacy Modes"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE); + sbSizer_freedv700->Add(m_ckboxEnableLegacyModes, 0, wxALL | wxALIGN_LEFT, 5); + sizerModem->Add(sbSizer_freedv700, 0, wxALL|wxEXPAND, 5); //------------------------------ @@ -915,7 +918,8 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) m_ckboxFreeDV700txClip->SetValue(wxGetApp().appConfiguration.freedv700Clip); m_ckboxFreeDV700txBPF->SetValue(wxGetApp().appConfiguration.freedv700TxBPF); - + m_ckboxEnableLegacyModes->SetValue(wxGetApp().appConfiguration.enableLegacyModes); + #ifdef __WXMSW__ m_ckboxDebugConsole->SetValue(wxGetApp().appConfiguration.debugConsoleEnabled); #endif @@ -1097,7 +1101,8 @@ void OptionsDlg::ExchangeData(int inout, bool storePersistent) wxGetApp().appConfiguration.showDecodeStats = m_showDecodeStats->GetValue(); wxGetApp().appConfiguration.freedv700Clip = m_ckboxFreeDV700txClip->GetValue(); wxGetApp().appConfiguration.freedv700TxBPF = m_ckboxFreeDV700txBPF->GetValue(); - + wxGetApp().appConfiguration.enableLegacyModes = m_ckboxEnableLegacyModes->GetValue(); + #ifdef __WXMSW__ wxGetApp().appConfiguration.debugConsoleEnabled = m_ckboxDebugConsole->GetValue(); #endif diff --git a/src/gui/dialogs/dlg_options.h b/src/gui/dialogs/dlg_options.h index a4755c1a..afcee1c9 100644 --- a/src/gui/dialogs/dlg_options.h +++ b/src/gui/dialogs/dlg_options.h @@ -136,6 +136,7 @@ class OptionsDlg : public wxDialog wxCheckBox *m_ckboxFreeDV700txClip; wxCheckBox *m_ckboxFreeDV700txBPF; + wxCheckBox *m_ckboxEnableLegacyModes; wxRadioButton *m_rb_textEncoding1; wxRadioButton *m_rb_textEncoding2; diff --git a/src/gui/dialogs/freedv_reporter.cpp b/src/gui/dialogs/freedv_reporter.cpp index a2dfeb2a..742c3212 100644 --- a/src/gui/dialogs/freedv_reporter.cpp +++ b/src/gui/dialogs/freedv_reporter.cpp @@ -561,6 +561,10 @@ void FreeDVReporterDialog::refreshLayout() item->SetTitle("Hdg"); item->SetAlignment(wxALIGN_RIGHT); } + + // Hide RX Mode column if legacy modes aren't enabled + auto rxModeColumn = m_listSpots->GetColumn(LAST_RX_MODE_COL); + rxModeColumn->SetHidden(!wxGetApp().appConfiguration.enableLegacyModes); // Refresh all data based on current settings and filters. FreeDVReporterDataModel* model = (FreeDVReporterDataModel*)spotsDataModel_.get(); diff --git a/src/main.cpp b/src/main.cpp index efdef0f2..409e5f01 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -852,11 +852,13 @@ setDefaultMode: } // Disable controls not supported by RADE. - bool isEnabled = mode != FREEDV_MODE_RADE; + bool isEnabled = wxGetApp().appConfiguration.enableLegacyModes && mode != FREEDV_MODE_RADE; + squelchBox->Show(wxGetApp().appConfiguration.enableLegacyModes); m_sliderSQ->Enable(isEnabled); m_ckboxSQ->Enable(isEnabled); m_textSQ->Enable(isEnabled); m_btnCenterRx->Enable(isEnabled); + m_btnCenterRx->Show(wxGetApp().appConfiguration.enableLegacyModes); if (!isEnabled) { @@ -948,6 +950,7 @@ setDefaultMode: } statsBox->Show(wxGetApp().appConfiguration.showDecodeStats); + modeBox->Show(wxGetApp().appConfiguration.enableLegacyModes); // Initialize FreeDV Reporter as required CallAfter(&MainFrame::initializeFreeDVReporter_); @@ -985,7 +988,7 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent, wxID_ANY, _("FreeDV ") SYNC_UNK_LABEL("Sync: unk"), VAR_UNK_LABEL("Var: unk"), CLK_OFF_UNK_LABEL("ClkOff: unk"), - TOO_HIGH_LABEL("Too High"), + TOO_HIGH_LABEL("Clip"), MIC_SPKR_LEVEL_FORMAT_STR("%s%s"), DECIBEL_STR("dB"), CURRENT_TIME_FORMAT_STR("%s %s"), @@ -1059,28 +1062,6 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent, wxID_ANY, _("FreeDV ") // Add Speech Output window m_panelSpeechOut = new PlotScalar(m_auiNbookCtrl, 1, WAVEFORM_PLOT_TIME, 1.0/WAVEFORM_PLOT_FS, -1, 1, 1, 0.2, "%2.1f", 0); m_auiNbookCtrl->AddPage(m_panelSpeechOut, _("Frm Decoder"), false, wxNullBitmap); - - // Add Scatter Plot window - m_panelScatter = new PlotScatter(m_auiNbookCtrl); - m_auiNbookCtrl->AddPage(m_panelScatter, _("Scatter"), false, wxNullBitmap); - - // Add Timing Offset window - m_panelTimeOffset = new PlotScalar(m_auiNbookCtrl, 1, 5.0, DT, -0.5, 0.5, 1, 0.1, "%2.1f", 0); - m_auiNbookCtrl->AddPage(m_panelTimeOffset, L"Timing \u0394", false, wxNullBitmap); - - // Add Frequency Offset window - m_panelFreqOffset = new PlotScalar(m_auiNbookCtrl, 1, 5.0, DT, -200, 200, 1, 50, "%3.0fHz", 0); - m_auiNbookCtrl->AddPage(m_panelFreqOffset, L"Frequency \u0394", false, wxNullBitmap); - - // Add Test Frame Errors window - m_panelTestFrameErrors = new PlotScalar(m_auiNbookCtrl, 2*MODEM_STATS_NC_MAX, 30.0, DT, 0, 2*MODEM_STATS_NC_MAX+2, 1, 1, "", 1); - m_auiNbookCtrl->AddPage(m_panelTestFrameErrors, L"Test Frame Errors", false, wxNullBitmap); - - // Add Test Frame Histogram window. 1 column for every bit, 2 bits per carrier - m_panelTestFrameErrorsHist = new PlotScalar(m_auiNbookCtrl, 1, 1.0, 1.0/(2*MODEM_STATS_NC_MAX), 0.001, 0.1, 1.0/MODEM_STATS_NC_MAX, 0.1, "%0.0E", 0); - m_auiNbookCtrl->AddPage(m_panelTestFrameErrorsHist, L"Test Frame Histogram", false, wxNullBitmap); - m_panelTestFrameErrorsHist->setBarGraph(1); - m_panelTestFrameErrorsHist->setLogY(1); // this->Connect(m_menuItemHelpUpdates->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnHelpCheckUpdatesUI)); m_togBtnOnOff->Connect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MainFrame::OnTogBtnOnOffUI), NULL, this); @@ -1093,12 +1074,9 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent, wxID_ANY, _("FreeDV ") Bind(wxEVT_TIMER, &MainFrame::OnTimer, this); // ID_MY_WINDOW); m_plotWaterfallTimer.SetOwner(this, ID_TIMER_WATERFALL); m_plotSpectrumTimer.SetOwner(this, ID_TIMER_SPECTRUM); - m_plotScatterTimer.SetOwner(this, ID_TIMER_SCATTER); m_plotSpeechInTimer.SetOwner(this, ID_TIMER_SPEECH_IN); m_plotSpeechOutTimer.SetOwner(this, ID_TIMER_SPEECH_OUT); m_plotDemodInTimer.SetOwner(this, ID_TIMER_DEMOD_IN); - m_plotTimeOffsetTimer.SetOwner(this, ID_TIMER_TIME_OFFSET); - m_plotFreqOffsetTimer.SetOwner(this, ID_TIMER_FREQ_OFFSET); m_plotTimer.SetOwner(this, ID_TIMER_UPDATE_OTHER); m_pskReporterTimer.SetOwner(this, ID_TIMER_PSKREPORTER); @@ -1388,12 +1366,9 @@ MainFrame::~MainFrame() m_plotTimer.Stop(); m_plotWaterfallTimer.Stop(); m_plotSpectrumTimer.Stop(); - m_plotScatterTimer.Stop(); m_plotSpeechInTimer.Stop(); m_plotSpeechOutTimer.Stop(); m_plotDemodInTimer.Stop(); - m_plotTimeOffsetTimer.Stop(); - m_plotFreqOffsetTimer.Stop(); Unbind(wxEVT_TIMER, &MainFrame::OnTimer, this); } #endif //_USE_TIMER @@ -1510,49 +1485,6 @@ void MainFrame::OnTimer(wxTimerEvent &evt) m_panelSpectrum->m_newdata = true; m_panelSpectrum->refreshData(); } - else if (timerId == ID_TIMER_SCATTER) - { - if (freedvInterface.isRunning()) { - int currentMode = freedvInterface.getCurrentMode(); - if (currentMode != wxGetApp().m_prevMode) - { - // Force recreation of EQ filters. - m_newMicInFilter = true; - m_newSpkOutFilter = true; - - // The receive mode changed, so the previous samples are no longer valid. - m_panelScatter->clearCurrentSamples(); - } - wxGetApp().m_prevMode = currentMode; - - // Reset g_Nc accordingly. - switch(currentMode) - { - case FREEDV_MODE_1600: - g_Nc = 16; - m_panelScatter->setNc(g_Nc+1); /* +1 for BPSK pilot */ - break; - case FREEDV_MODE_700D: - case FREEDV_MODE_700E: - g_Nc = 17; - m_panelScatter->setNc(g_Nc); - break; - } - - /* PSK Modes - scatter plot -------------------------------------------------------*/ - for (int r=0; rnr; r++) { - - if ((currentMode == FREEDV_MODE_1600) || - (currentMode == FREEDV_MODE_700D) || - (currentMode == FREEDV_MODE_700E) - ) { - m_panelScatter->add_new_samples_scatter(&freedvInterface.getCurrentRxModemStats()->rx_symbols[r][0]); - } - } - } - - m_panelScatter->refreshData(); - } else if (timerId == ID_TIMER_SPEECH_IN) { if (g_plotSpeechInFifo.read(speechInPlotSamples, WAVEFORM_PLOT_BUF)) { @@ -1576,18 +1508,8 @@ void MainFrame::OnTimer(wxTimerEvent &evt) m_panelDemodIn->add_new_short_samples(0,demodInPlotSamples, WAVEFORM_PLOT_BUF, 32767); m_panelDemodIn->refreshData(); } - else if (timerId == ID_TIMER_TIME_OFFSET) + else { - m_panelTimeOffset->add_new_sample(0, (float)freedvInterface.getCurrentRxModemStats()->rx_timing/FDMDV_NOM_SAMPLES_PER_FRAME); - m_panelTimeOffset->refreshData(); - } - else if (timerId == ID_TIMER_FREQ_OFFSET) - { - m_panelFreqOffset->add_new_sample(0, freedvInterface.getCurrentRxModemStats()->foff); - m_panelFreqOffset->refreshData(); - } - else - { // Update average magnitudes float rxSpectrum[MODEM_STATS_NSPEC]; memset(rxSpectrum, 0, sizeof(float) * MODEM_STATS_NSPEC); @@ -2011,44 +1933,6 @@ void MainFrame::OnTimer(wxTimerEvent &evt) wxString clockOffset = wxString::Format(CLK_OFF_FMT, (int)round(freedvInterface.getCurrentRxModemStats()->clock_offset*1E6) % 10000); m_textClockOffset->SetLabel(clockOffset); } - - // update error pattern plots if supported - short* error_pattern = nullptr; - int sz_error_pattern = freedvInterface.getErrorPattern(&error_pattern); - if (sz_error_pattern) { - int i,b; - - /* both modes map IQ to alternate bits, but on same carrier */ - - if (freedvInterface.getCurrentMode() == FREEDV_MODE_1600) { - /* FreeDV 1600 mapping from error pattern to two bits on each carrier */ - - for(b=0; badd_new_sample(b, b + 0.8*error_pattern[i]); - g_error_hist[b] += error_pattern[i]; - g_error_histn[b]++; - } - } - - /* calculate BERs and send to plot */ - - float ber[2*MODEM_STATS_NC_MAX]; - for(b=0; b<2*MODEM_STATS_NC_MAX; b++) { - ber[b] = 0.0; - } - for(b=0; badd_new_samples(0, ber, 2*MODEM_STATS_NC_MAX); - } - - m_panelTestFrameErrors->Refresh(); - m_panelTestFrameErrorsHist->Refresh(); - - delete[] error_pattern; - } } /* FIFO and PortAudio under/overflow debug counters */ @@ -2283,12 +2167,18 @@ void MainFrame::performFreeDVOn_() wxCommandEvent tmpEvent; OnChangeTxMode(tmpEvent); - if (!wxGetApp().appConfiguration.multipleReceiveEnabled || m_rbRADE->GetValue()) + if (!wxGetApp().appConfiguration.enableLegacyModes || !wxGetApp().appConfiguration.multipleReceiveEnabled || m_rbRADE->GetValue()) { m_rb1600->Disable(); m_rbRADE->Disable(); m_rb700d->Disable(); m_rb700e->Disable(); + + if (!wxGetApp().appConfiguration.enableLegacyModes) + { + // If legacy modes are not enabled, RADE is the only option. + g_mode = FREEDV_MODE_RADE; + } freedvInterface.addRxMode(g_mode); } else @@ -2371,8 +2261,6 @@ void MainFrame::performFreeDVOn_() // Init text msg decoding if (!wxGetApp().appConfiguration.reportingConfiguration.reportingEnabled) freedvInterface.setTextVaricodeNum(1); - - m_panelScatter->setEyeScatter(PLOT_SCATTER_MODE_SCATTER); }); g_State.store(0, std::memory_order_release); @@ -2511,12 +2399,9 @@ void MainFrame::performFreeDVOn_() m_plotTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_plotWaterfallTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_plotSpectrumTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); - m_plotScatterTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_plotSpeechInTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_plotSpeechOutTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_plotDemodInTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); - m_plotTimeOffsetTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); - m_plotFreqOffsetTimer.Start(_REFRESH_TIMER_PERIOD, wxTIMER_CONTINUOUS); m_updFreqStatusTimer.Start(1000); // every 1 second[UP] #endif // _USE_TIMER }); @@ -2552,12 +2437,9 @@ void MainFrame::performFreeDVOff_() m_plotTimer.Stop(); m_plotWaterfallTimer.Stop(); m_plotSpectrumTimer.Stop(); - m_plotScatterTimer.Stop(); m_plotSpeechInTimer.Stop(); m_plotSpeechOutTimer.Stop(); m_plotDemodInTimer.Stop(); - m_plotTimeOffsetTimer.Stop(); - m_plotFreqOffsetTimer.Stop(); m_pskReporterTimer.Stop(); m_updFreqStatusTimer.Stop(); // [UP] }); diff --git a/src/main.h b/src/main.h index d46f06eb..a7a34dfb 100644 --- a/src/main.h +++ b/src/main.h @@ -106,12 +106,9 @@ enum { ID_START = wxID_HIGHEST, ID_TIMER_WATERFALL, ID_TIMER_SPECTRUM, - ID_TIMER_SCATTER, ID_TIMER_SPEECH_IN, ID_TIMER_SPEECH_OUT, ID_TIMER_DEMOD_IN, - ID_TIMER_TIME_OFFSET, - ID_TIMER_FREQ_OFFSET, ID_TIMER_UPDATE_OTHER, ID_TIMER_PSKREPORTER, ID_TIMER_UPD_FREQ, @@ -296,14 +293,9 @@ class MainFrame : public TopFrame FreeDVReporterDialog* m_reporterDialog; PlotSpectrum* m_panelSpectrum; PlotWaterfall* m_panelWaterfall; - PlotScatter* m_panelScatter; - PlotScalar* m_panelTimeOffset; - PlotScalar* m_panelFreqOffset; PlotScalar* m_panelSpeechIn; PlotScalar* m_panelSpeechOut; PlotScalar* m_panelDemodIn; - PlotScalar* m_panelTestFrameErrors; - PlotScalar* m_panelTestFrameErrorsHist; bool m_RxRunning; @@ -333,8 +325,6 @@ class MainFrame : public TopFrame wxTimer m_plotSpeechInTimer; wxTimer m_plotSpeechOutTimer; wxTimer m_plotDemodInTimer; - wxTimer m_plotTimeOffsetTimer; - wxTimer m_plotFreqOffsetTimer; #endif void destroy_fifos(void); diff --git a/src/ongui.cpp b/src/ongui.cpp index 9cbc27bc..7c8d6425 100644 --- a/src/ongui.cpp +++ b/src/ongui.cpp @@ -212,6 +212,17 @@ void MainFrame::OnToolsOptions(wxCommandEvent& event) // Show/hide stats box statsBox->Show(wxGetApp().appConfiguration.showDecodeStats); + + // Show/hide legacy modes + modeBox->Show(wxGetApp().appConfiguration.enableLegacyModes); + + bool isEnabled = wxGetApp().appConfiguration.enableLegacyModes && !m_rbRADE->GetValue(); + squelchBox->Show(wxGetApp().appConfiguration.enableLegacyModes); + m_sliderSQ->Enable(isEnabled); + m_ckboxSQ->Enable(isEnabled); + m_textSQ->Enable(isEnabled); + m_btnCenterRx->Enable(isEnabled); + m_btnCenterRx->Show(wxGetApp().appConfiguration.enableLegacyModes); // XXX - with really short windows, wxWidgets sometimes doesn't size // the components properly until the user resizes the window (even if only diff --git a/src/topFrame.cpp b/src/topFrame.cpp index ff93d3e3..28666d08 100644 --- a/src/topFrame.cpp +++ b/src/topFrame.cpp @@ -462,15 +462,15 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const //------------------------------ wxStaticBoxSizer* levelSizer; wxStaticBox* levelBox = new wxStaticBox(m_panel, wxID_ANY, _("Level"), wxDefaultPosition, wxSize(100,-1)); - levelSizer = new wxStaticBoxSizer(levelBox, wxVERTICAL); - - m_textLevel = new wxStaticText(levelBox, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); - m_textLevel->SetForegroundColour(wxColour(255,0,0)); - levelSizer->Add(m_textLevel, 0, wxALIGN_CENTER_HORIZONTAL, 1); + levelSizer = new wxStaticBoxSizer(levelBox, wxHORIZONTAL); - m_gaugeLevel = new wxGauge(levelBox, wxID_ANY, 100, wxDefaultPosition, wxSize(135,15), wxGA_SMOOTH); + m_gaugeLevel = new wxGauge(levelBox, wxID_ANY, 100, wxDefaultPosition, wxSize(100,15), wxGA_SMOOTH); m_gaugeLevel->SetToolTip(_("Peak of From Radio in Rx, or peak of From Mic in Tx mode. If Red you should reduce your levels")); - levelSizer->Add(m_gaugeLevel, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 10); + levelSizer->Add(m_gaugeLevel, 1, wxALIGN_CENTER_VERTICAL|wxALL, 10); + + m_textLevel = new wxStaticText(levelBox, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(35,-1), wxALIGN_CENTRE); + m_textLevel->SetForegroundColour(wxColour(255,0,0)); + levelSizer->Add(m_textLevel, 0, wxALIGN_CENTER_VERTICAL, 1); leftSizer->Add(levelSizer, 0, wxALL|wxEXPAND, 2); @@ -629,7 +629,7 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const // Squelch Slider Control //===================================================== wxStaticBoxSizer* sbSizer3; - wxStaticBox* squelchBox = new wxStaticBox(m_panel, wxID_ANY, _("S&quelch"), wxDefaultPosition, wxSize(100,-1)); + squelchBox = new wxStaticBox(m_panel, wxID_ANY, _("S&quelch"), wxDefaultPosition, wxSize(100,-1)); sbSizer3 = new wxStaticBoxSizer(squelchBox, wxVERTICAL); m_sliderSQ = new wxSlider(squelchBox, wxID_ANY, 0, 0, 40, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS); @@ -711,6 +711,23 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const rightSizer->Add(micSpeakerLevelSizer, 0, wxALL | wxEXPAND, 2); + // Frequency text field (PSK Reporter) + m_freqBox = new wxStaticBox(m_panel, wxID_ANY, _("Radio Freq. (MHz)"), wxDefaultPosition, wxSize(100,-1)); + + wxBoxSizer* reportFrequencySizer = new wxStaticBoxSizer(m_freqBox, wxHORIZONTAL); + + //wxStaticText* reportFrequencyUnits = new wxStaticText(m_freqBox, wxID_ANY, wxT(" MHz"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + wxBoxSizer* txtReportFreqSizer = new wxBoxSizer(wxVERTICAL); + + m_cboReportFrequency = new wxComboBox(m_freqBox, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN | wxTE_PROCESS_ENTER); + m_cboReportFrequency->SetMinSize(wxSize(150,-1)); + txtReportFreqSizer->Add(m_cboReportFrequency, 1, wxALL, 5); + + reportFrequencySizer->Add(txtReportFreqSizer, 1, wxEXPAND, 1); + //reportFrequencySizer->Add(reportFrequencyUnits, 0, wxALIGN_CENTER_VERTICAL, 1); + + rightSizer->Add(reportFrequencySizer, 0, wxALL, 2); + /* new --- */ //------------------------------ @@ -766,23 +783,6 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const sbSizer5->Add(m_btnTogPTT, 0, wxALL | wxEXPAND, 5); rightSizer->Add(sbSizer5, 0, wxALL|wxEXPAND, 2); - - // Frequency text field (PSK Reporter) - m_freqBox = new wxStaticBox(m_panel, wxID_ANY, _("Radio Freq. (MHz)"), wxDefaultPosition, wxSize(100,-1)); - - wxBoxSizer* reportFrequencySizer = new wxStaticBoxSizer(m_freqBox, wxHORIZONTAL); - - //wxStaticText* reportFrequencyUnits = new wxStaticText(m_freqBox, wxID_ANY, wxT(" MHz"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); - wxBoxSizer* txtReportFreqSizer = new wxBoxSizer(wxVERTICAL); - - m_cboReportFrequency = new wxComboBox(m_freqBox, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN | wxTE_PROCESS_ENTER); - m_cboReportFrequency->SetMinSize(wxSize(150,-1)); - txtReportFreqSizer->Add(m_cboReportFrequency, 1, wxALL, 5); - - reportFrequencySizer->Add(txtReportFreqSizer, 1, wxEXPAND, 1); - //reportFrequencySizer->Add(reportFrequencyUnits, 0, wxALIGN_CENTER_VERTICAL, 1); - - rightSizer->Add(reportFrequencySizer, 0, wxALL, 2); bSizer1->Add(rightSizer, 0, wxALL|wxEXPAND, 3); diff --git a/src/topFrame.h b/src/topFrame.h index e2a0cd44..71803a92 100644 --- a/src/topFrame.h +++ b/src/topFrame.h @@ -232,6 +232,7 @@ class TopFrame : public wxFrame wxAuiNotebook* m_auiNbookCtrl; wxComboBox* m_cboReportFrequency; wxStaticBox* m_freqBox; + wxStaticBox* squelchBox; TopFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeDV "), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(561,300 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER ); diff --git a/test/freedv-ctest-fullduplex.conf.tmpl b/test/freedv-ctest-fullduplex.conf.tmpl index b6411e5b..0360141e 100644 --- a/test/freedv-ctest-fullduplex.conf.tmpl +++ b/test/freedv-ctest-fullduplex.conf.tmpl @@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0 TransmitAudioVol=0 [QuickRecord] SavePath=/home/mooneer/Documents +[Modem] +enableLegacyModes=1 diff --git a/test/freedv-ctest-loss.conf.tmpl b/test/freedv-ctest-loss.conf.tmpl index 5eebb866..e93c04e4 100644 --- a/test/freedv-ctest-loss.conf.tmpl +++ b/test/freedv-ctest-loss.conf.tmpl @@ -188,3 +188,5 @@ VoiceKeyerAudioVol=0 TransmitAudioVol=0 [QuickRecord] SavePath=/home/mooneer/Documents +[Modem] +enableLegacyModes=1 diff --git a/test/freedv-ctest-reporting-mpp.conf.tmpl b/test/freedv-ctest-reporting-mpp.conf.tmpl index 4233fd41..072c0bb9 100644 --- a/test/freedv-ctest-reporting-mpp.conf.tmpl +++ b/test/freedv-ctest-reporting-mpp.conf.tmpl @@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0 TransmitAudioVol=0 [QuickRecord] SavePath=/home/mooneer/Documents +[Modem] +enableLegacyModes=1 diff --git a/test/freedv-ctest-reporting.conf.tmpl b/test/freedv-ctest-reporting.conf.tmpl index f2c5e4fd..c8ee41d9 100644 --- a/test/freedv-ctest-reporting.conf.tmpl +++ b/test/freedv-ctest-reporting.conf.tmpl @@ -188,3 +188,5 @@ VoiceKeyerAudioVol=0 TransmitAudioVol=0 [QuickRecord] SavePath=/home/mooneer/Documents +[Modem] +enableLegacyModes=1 diff --git a/test/freedv-ctest.conf.tmpl b/test/freedv-ctest.conf.tmpl index 1af74494..e381d942 100644 --- a/test/freedv-ctest.conf.tmpl +++ b/test/freedv-ctest.conf.tmpl @@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0 TransmitAudioVol=0 [QuickRecord] SavePath=/home/mooneer/Documents +[Modem] +enableLegacyModes=1