mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-27 06:08:37 -05:00
Improve input response time, balance visuals, fix a bug
This commit is contained in:
parent
8bce632982
commit
33d51b2bff
@ -35,11 +35,10 @@ EVT_CLOSE(AppFrame::OnClose)
|
|||||||
EVT_MENU(wxID_ANY, AppFrame::OnMenu)
|
EVT_MENU(wxID_ANY, AppFrame::OnMenu)
|
||||||
EVT_COMMAND(wxID_ANY, wxEVT_THREAD, AppFrame::OnThread)
|
EVT_COMMAND(wxID_ANY, wxEVT_THREAD, AppFrame::OnThread)
|
||||||
EVT_IDLE(AppFrame::OnIdle)
|
EVT_IDLE(AppFrame::OnIdle)
|
||||||
//EVT_TIMER(FRAME_TIMER_ID, AppFrame::OnTimer)
|
|
||||||
wxEND_EVENT_TABLE()
|
wxEND_EVENT_TABLE()
|
||||||
|
|
||||||
AppFrame::AppFrame() :
|
AppFrame::AppFrame() :
|
||||||
wxFrame(NULL, wxID_ANY, CUBICSDR_TITLE), activeDemodulator(NULL), frame_timer(this, FRAME_TIMER_ID) {
|
wxFrame(NULL, wxID_ANY, CUBICSDR_TITLE), activeDemodulator(NULL) {
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
SetIcon(wxICON(cubicsdr));
|
SetIcon(wxICON(cubicsdr));
|
||||||
@ -261,7 +260,7 @@ AppFrame::AppFrame() :
|
|||||||
// sampleRateMenuItems[wxID_BANDWIDTH_3000M] = menu->AppendRadioItem(wxID_BANDWIDTH_3000M, "3.0M");
|
// sampleRateMenuItems[wxID_BANDWIDTH_3000M] = menu->AppendRadioItem(wxID_BANDWIDTH_3000M, "3.0M");
|
||||||
sampleRateMenuItems[wxID_BANDWIDTH_3200M] = menu->AppendRadioItem(wxID_BANDWIDTH_3200M, "3.2M");
|
sampleRateMenuItems[wxID_BANDWIDTH_3200M] = menu->AppendRadioItem(wxID_BANDWIDTH_3200M, "3.2M");
|
||||||
|
|
||||||
sampleRateMenuItems[wxID_BANDWIDTH_2400M]->Check(true);
|
sampleRateMenuItems[wxID_BANDWIDTH_2048M]->Check(true);
|
||||||
|
|
||||||
menuBar->Append(menu, wxT("&Input Bandwidth"));
|
menuBar->Append(menu, wxT("&Input Bandwidth"));
|
||||||
|
|
||||||
@ -402,18 +401,6 @@ void AppFrame::initDeviceParams(std::string deviceId) {
|
|||||||
if (devConfig->getIQSwap()) {
|
if (devConfig->getIQSwap()) {
|
||||||
iqSwapMenuItem->Check();
|
iqSwapMenuItem->Check();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!frame_timer.IsRunning()) {
|
|
||||||
// frame rate = 1000 / 30 = 33ms
|
|
||||||
|
|
||||||
// windows needs a bit more time or it lags?
|
|
||||||
//#ifdef _WIN32
|
|
||||||
// frame_timer.Start(25);
|
|
||||||
//#else
|
|
||||||
// frame_timer.Start(15);
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -608,10 +595,6 @@ void AppFrame::OnThread(wxCommandEvent& event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AppFrame::OnIdle(wxIdleEvent& event) {
|
void AppFrame::OnIdle(wxIdleEvent& event) {
|
||||||
// event.Skip();
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//void AppFrame::OnTimer(wxTimerEvent& event) {
|
|
||||||
|
|
||||||
DemodulatorInstance *demod = wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
DemodulatorInstance *demod = wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
||||||
|
|
||||||
@ -769,6 +752,9 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
|
|||||||
wproc->run();
|
wproc->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
waterfallCanvas->processInputQueue();
|
||||||
|
demodWaterfallCanvas->processInputQueue();
|
||||||
|
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
/* scopeCanvas->Refresh();
|
/* scopeCanvas->Refresh();
|
||||||
|
|
||||||
|
@ -50,8 +50,6 @@
|
|||||||
#define wxID_AUDIO_BANDWIDTH_BASE 9000
|
#define wxID_AUDIO_BANDWIDTH_BASE 9000
|
||||||
#define wxID_AUDIO_DEVICE_MULTIPLIER 50
|
#define wxID_AUDIO_DEVICE_MULTIPLIER 50
|
||||||
|
|
||||||
#define FRAME_TIMER_ID 1000
|
|
||||||
|
|
||||||
// Define a new frame type
|
// Define a new frame type
|
||||||
class AppFrame: public wxFrame {
|
class AppFrame: public wxFrame {
|
||||||
public:
|
public:
|
||||||
@ -69,7 +67,6 @@ private:
|
|||||||
void OnClose(wxCloseEvent& event);
|
void OnClose(wxCloseEvent& event);
|
||||||
void OnNewWindow(wxCommandEvent& event);
|
void OnNewWindow(wxCommandEvent& event);
|
||||||
void OnIdle(wxIdleEvent& event);
|
void OnIdle(wxIdleEvent& event);
|
||||||
// void OnTimer(wxTimerEvent& event);
|
|
||||||
|
|
||||||
ScopeCanvas *scopeCanvas;
|
ScopeCanvas *scopeCanvas;
|
||||||
SpectrumCanvas *spectrumCanvas;
|
SpectrumCanvas *spectrumCanvas;
|
||||||
@ -96,7 +93,6 @@ private:
|
|||||||
wxMenuItem *iqSwapMenuItem;
|
wxMenuItem *iqSwapMenuItem;
|
||||||
|
|
||||||
std::string currentSessionFile;
|
std::string currentSessionFile;
|
||||||
wxTimer frame_timer;
|
|
||||||
|
|
||||||
FFTDataDistributor fftDistrib;
|
FFTDataDistributor fftDistrib;
|
||||||
DemodulatorThreadInputQueue fftQueue;
|
DemodulatorThreadInputQueue fftQueue;
|
||||||
|
@ -27,7 +27,7 @@ const char filePathSeparator =
|
|||||||
|
|
||||||
#define BUF_SIZE (16384*6)
|
#define BUF_SIZE (16384*6)
|
||||||
|
|
||||||
#define DEFAULT_SAMPLE_RATE 2400000
|
#define DEFAULT_SAMPLE_RATE 2048000
|
||||||
#define DEFAULT_FFT_SIZE 2048
|
#define DEFAULT_FFT_SIZE 2048
|
||||||
|
|
||||||
#define DEFAULT_DEMOD_TYPE 1
|
#define DEFAULT_DEMOD_TYPE 1
|
||||||
|
@ -121,8 +121,8 @@ void SDRPostThread::run() {
|
|||||||
visualDataOut->busy_rw.lock();
|
visualDataOut->busy_rw.lock();
|
||||||
visualDataOut->setRefCount(1);
|
visualDataOut->setRefCount(1);
|
||||||
|
|
||||||
if (num_vis_samples > data_in->data.size()) {
|
if (num_vis_samples > dataOut.size()) {
|
||||||
num_vis_samples = data_in->data.size();
|
num_vis_samples = dataOut.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visualDataOut->data.size() < num_vis_samples) {
|
if (visualDataOut->data.size() < num_vis_samples) {
|
||||||
|
@ -68,6 +68,25 @@ void WaterfallCanvas::attachSpectrumCanvas(SpectrumCanvas *canvas_in) {
|
|||||||
spectrumCanvas = canvas_in;
|
spectrumCanvas = canvas_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WaterfallCanvas::processInputQueue() {
|
||||||
|
if (!glContext) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
glContext->SetCurrent(*this);
|
||||||
|
|
||||||
|
while (!visualDataQueue.empty()) {
|
||||||
|
SpectrumVisualData *vData;
|
||||||
|
|
||||||
|
visualDataQueue.pop(vData);
|
||||||
|
|
||||||
|
if (vData) {
|
||||||
|
waterfallPanel.setPoints(vData->spectrum_points);
|
||||||
|
waterfallPanel.step();
|
||||||
|
vData->decRefCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
|
void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
|
||||||
wxPaintDC dc(this);
|
wxPaintDC dc(this);
|
||||||
|
|
||||||
@ -140,18 +159,6 @@ void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
|
|||||||
initGLExtensions();
|
initGLExtensions();
|
||||||
glViewport(0, 0, ClientSize.x, ClientSize.y);
|
glViewport(0, 0, ClientSize.x, ClientSize.y);
|
||||||
|
|
||||||
while (!visualDataQueue.empty()) {
|
|
||||||
SpectrumVisualData *vData;
|
|
||||||
|
|
||||||
visualDataQueue.pop(vData);
|
|
||||||
|
|
||||||
if (vData) {
|
|
||||||
waterfallPanel.setPoints(vData->spectrum_points);
|
|
||||||
waterfallPanel.step();
|
|
||||||
vData->decRefCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glContext->BeginDraw(0,0,0);
|
glContext->BeginDraw(0,0,0);
|
||||||
|
|
||||||
waterfallPanel.calcTransform(CubicVR::mat4::identity());
|
waterfallPanel.calcTransform(CubicVR::mat4::identity());
|
||||||
|
@ -26,6 +26,7 @@ public:
|
|||||||
DragState getNextDragState();
|
DragState getNextDragState();
|
||||||
|
|
||||||
void attachSpectrumCanvas(SpectrumCanvas *canvas_in);
|
void attachSpectrumCanvas(SpectrumCanvas *canvas_in);
|
||||||
|
void processInputQueue();
|
||||||
SpectrumVisualDataQueue *getVisualDataQueue();
|
SpectrumVisualDataQueue *getVisualDataQueue();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
Reference in New Issue
Block a user