Hide all modes except for RADE by default. (#1108)
* Hide all modes except for RADE by default.
* Enable legacy modes so fullduplex tests still work.
* Add PR #1108 to changelog.
* FreeDV Reporter: Hide RX Mode column if legacy modes are disabled.
* Remove offset and histogram plots due to low legacy mode use.
* Hide Squelch and Center RX if legacy modes are disabledd.
* macOS: Add additional required entitlements for Python 3.14.
* Move Frequency field up on the right hand side.
* Suppress at-spi2 warning in GH AppImage tests.
* Experiment: Try 'pulsing' level gauge when overdriving.
* Revert "Experiment: Try 'pulsing' level gauge when overdriving."
This reverts commit 527dbe2bb7.
* Use shorter label for clipping indicator.
pull/1119/head
parent
4661c26ef4
commit
2622881e61
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,6 +122,8 @@ public:
|
|||
|
||||
ConfigurationDataElement<bool> showDecodeStats;
|
||||
|
||||
ConfigurationDataElement<bool> enableLegacyModes;
|
||||
|
||||
virtual void load(wxConfigBase* config) override;
|
||||
virtual void save(wxConfigBase* config) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,5 +6,15 @@
|
|||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.automation.apple-events</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
<key>com.apple.security.get-task-allow</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
144
src/main.cpp
144
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; r<freedvInterface.getCurrentRxModemStats()->nr; 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; b<g_Nc*2; b++) {
|
||||
for(i=b; i<sz_error_pattern; i+= 2*g_Nc) {
|
||||
m_panelTestFrameErrors->add_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; b<g_Nc*2; b++) {
|
||||
ber[b+1] = (float)g_error_hist[b]/g_error_histn[b];
|
||||
}
|
||||
assert(g_Nc*2 <= 2*MODEM_STATS_NC_MAX);
|
||||
m_panelTestFrameErrorsHist->add_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]
|
||||
});
|
||||
|
|
|
|||
10
src/main.h
10
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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
||||
|
|
|
|||
|
|
@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0
|
|||
TransmitAudioVol=0
|
||||
[QuickRecord]
|
||||
SavePath=/home/mooneer/Documents
|
||||
[Modem]
|
||||
enableLegacyModes=1
|
||||
|
|
|
|||
|
|
@ -188,3 +188,5 @@ VoiceKeyerAudioVol=0
|
|||
TransmitAudioVol=0
|
||||
[QuickRecord]
|
||||
SavePath=/home/mooneer/Documents
|
||||
[Modem]
|
||||
enableLegacyModes=1
|
||||
|
|
|
|||
|
|
@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0
|
|||
TransmitAudioVol=0
|
||||
[QuickRecord]
|
||||
SavePath=/home/mooneer/Documents
|
||||
[Modem]
|
||||
enableLegacyModes=1
|
||||
|
|
|
|||
|
|
@ -188,3 +188,5 @@ VoiceKeyerAudioVol=0
|
|||
TransmitAudioVol=0
|
||||
[QuickRecord]
|
||||
SavePath=/home/mooneer/Documents
|
||||
[Modem]
|
||||
enableLegacyModes=1
|
||||
|
|
|
|||
|
|
@ -187,3 +187,5 @@ VoiceKeyerAudioVol=0
|
|||
TransmitAudioVol=0
|
||||
[QuickRecord]
|
||||
SavePath=/home/mooneer/Documents
|
||||
[Modem]
|
||||
enableLegacyModes=1
|
||||
|
|
|
|||
Loading…
Reference in New Issue