commit
5eef39e1ca
|
@ -651,6 +651,11 @@ On Linux, using the Alsa loopback module:
|
|||
- Transmit Tab - To Radio select -> Loopback: Loopback PCM (hw:1,1)
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
1. The space-bar can be used to toggle PTT.
|
||||
1. You can left click on the main window to adjust tuning, the vertical red line on the frequency scale will show the current centre frequency. FreeDV will automatically track any drift once it syncs.
|
||||
|
||||
## Glossary
|
||||
|
||||
Term | Notes
|
||||
|
|
|
@ -49,6 +49,7 @@ struct MODEM_STATS g_stats;
|
|||
float g_pwr_scale;
|
||||
int g_clip;
|
||||
int g_freedv_verbose;
|
||||
bool g_queueResync;
|
||||
|
||||
// test Frames
|
||||
int g_testFrames;
|
||||
|
@ -379,7 +380,7 @@ MainFrame::MainFrame(wxString plugInName, wxWindow *parent) : TopFrame(plugInNam
|
|||
{
|
||||
// Add Waterfall Plot window
|
||||
m_panelWaterfall = new PlotWaterfall((wxFrame*) m_auiNbookCtrl, false, 0);
|
||||
m_panelWaterfall->SetToolTip(_("Left click to tune, Right click to toggle mono/colour"));
|
||||
m_panelWaterfall->SetToolTip(_("Left click to tune"));
|
||||
m_auiNbookCtrl->AddPage(m_panelWaterfall, _("Waterfall"), true, wxNullBitmap);
|
||||
}
|
||||
if(wxGetApp().m_show_spect)
|
||||
|
@ -1334,7 +1335,7 @@ void MainFrame::OnTimer(wxTimerEvent &evt)
|
|||
|
||||
if (g_State) {
|
||||
|
||||
sprintf(clockoffset, "ClkOff: %5d", (int)round(g_stats.clock_offset*1E6));
|
||||
sprintf(clockoffset, "ClkOff: %+-d", (int)round(g_stats.clock_offset*1E6) % 10000);
|
||||
wxString clockoffset_string(clockoffset); m_textClockOffset->SetLabel(clockoffset_string);
|
||||
|
||||
// update error pattern plots if supported
|
||||
|
@ -1986,8 +1987,9 @@ void MainFrame::OnReSync(wxCommandEvent& event)
|
|||
if (m_RxRunning) {
|
||||
fprintf(stderr,"OnReSync\n");
|
||||
if (g_mode != -1) {
|
||||
freedv_set_sync(g_pfreedv, FREEDV_SYNC_UNSYNC);
|
||||
g_resyncs++;
|
||||
// Resync must be triggered from the TX/RX thread, so pushing the button queues it until
|
||||
// the next execution of the TX/RX loop.
|
||||
g_queueResync = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2829,6 +2831,8 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event)
|
|||
if (startStop.IsSameAs("Start"))
|
||||
{
|
||||
fprintf(stderr, "Start .....\n");
|
||||
g_queueResync = false;
|
||||
|
||||
//
|
||||
// Start Running -------------------------------------------------
|
||||
//
|
||||
|
@ -4039,6 +4043,14 @@ void txRxProcessing()
|
|||
// RX side processing --------------------------------------------
|
||||
//
|
||||
|
||||
if (g_queueResync)
|
||||
{
|
||||
fprintf(stderr, "Unsyncing per user request.\n");
|
||||
g_queueResync = false;
|
||||
freedv_set_sync(g_pfreedv, FREEDV_SYNC_UNSYNC);
|
||||
g_resyncs++;
|
||||
}
|
||||
|
||||
// while we have enough input samples available ...
|
||||
|
||||
// attempt to read one processing buffer of receive samples
|
||||
|
|
|
@ -118,14 +118,15 @@ void PlotScatter::draw(wxAutoBufferedPaintDC& dc)
|
|||
// automatically scale, first measure the maximum value
|
||||
|
||||
float max_xy = 1E-12;
|
||||
float real,imag;
|
||||
float real,imag,mag;
|
||||
for(i=0; i< scatterMemSyms; i++) {
|
||||
real = fabs(m_mem[i].real);
|
||||
imag = fabs(m_mem[i].imag);
|
||||
if (real > max_xy)
|
||||
max_xy = real;
|
||||
if (imag > max_xy)
|
||||
max_xy = imag;
|
||||
mag = sqrt(pow(real,2) + pow(imag, 2));
|
||||
if (mag > max_xy)
|
||||
{
|
||||
max_xy = mag;
|
||||
}
|
||||
}
|
||||
|
||||
// smooth it out and set a lower limit to prevent divide by 0 issues
|
||||
|
@ -150,9 +151,13 @@ void PlotScatter::draw(wxAutoBufferedPaintDC& dc)
|
|||
y = y_scale * m_mem[i].imag + m_rGrid.GetHeight()/2;
|
||||
x += PLOT_BORDER + XLEFT_OFFSET;
|
||||
y += PLOT_BORDER;
|
||||
pen.SetColour(DARK_GREEN_COLOR);
|
||||
dc.SetPen(pen);
|
||||
dc.DrawPoint(x, y);
|
||||
|
||||
if (pointsInBounds_(x, y))
|
||||
{
|
||||
pen.SetColour(DARK_GREEN_COLOR);
|
||||
dc.SetPen(pen);
|
||||
dc.DrawPoint(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -206,8 +211,12 @@ void PlotScatter::draw(wxAutoBufferedPaintDC& dc)
|
|||
//printf("%4d,%4d ", x, y);
|
||||
x += PLOT_BORDER + XLEFT_OFFSET;
|
||||
y += PLOT_BORDER;
|
||||
if (j)
|
||||
dc.DrawLine(x, y, prev_x, prev_y);
|
||||
|
||||
if (pointsInBounds_(x,y) && pointsInBounds_(prev_x, prev_y))
|
||||
{
|
||||
if (j)
|
||||
dc.DrawLine(x, y, prev_x, prev_y);
|
||||
}
|
||||
prev_x = x; prev_y = y;
|
||||
}
|
||||
//printf("\n");
|
||||
|
@ -286,3 +295,17 @@ void PlotScatter::OnSize(wxSizeEvent& event)
|
|||
void PlotScatter::OnShow(wxShowEvent& event)
|
||||
{
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// Ensures that points stay within the bounding box.
|
||||
//----------------------------------------------------------------
|
||||
bool PlotScatter::pointsInBounds_(int x, int y)
|
||||
{
|
||||
bool inBounds = true;
|
||||
inBounds = !(x <= (PLOT_BORDER + XLEFT_OFFSET));
|
||||
inBounds = inBounds && !(x >= m_rGrid.GetWidth());
|
||||
inBounds = inBounds && !(y <= PLOT_BORDER);
|
||||
inBounds = inBounds && !(y >= m_rGrid.GetHeight());
|
||||
|
||||
return inBounds;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,8 @@ class PlotScatter : public PlotPanel
|
|||
int Ncol;
|
||||
int scatterMemSyms;
|
||||
float m_filter_max_xy, m_filter_max_y;
|
||||
|
||||
bool pointsInBounds_(int x, int y);
|
||||
};
|
||||
|
||||
#endif //__FDMDV2_PLOT_SCATTER__
|
||||
|
|
|
@ -173,6 +173,7 @@ TopFrame::TopFrame(wxString plugInName, wxWindow* parent, wxWindowID id, const w
|
|||
m_textResyncs = new wxStaticText(this, wxID_ANY, wxT("Resyncs: 0"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
|
||||
sbSizer_ber->Add(m_textResyncs, 0, wxALIGN_LEFT, 1);
|
||||
m_textClockOffset = new wxStaticText(this, wxID_ANY, wxT("ClkOff: 0"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
|
||||
m_textClockOffset->SetMinSize(wxSize(125,-1));
|
||||
sbSizer_ber->Add(m_textClockOffset, 0, wxALIGN_LEFT, 1);
|
||||
m_textFreqOffset = new wxStaticText(this, wxID_ANY, wxT("FreqOff: 0"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
|
||||
sbSizer_ber->Add(m_textFreqOffset, 0, wxALIGN_LEFT, 1);
|
||||
|
|
Loading…
Reference in New Issue