From 05a3e746458ff413ccd2e8b2c434417e6061a5a3 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Sun, 28 Feb 2016 23:16:56 -0500 Subject: [PATCH] Add start/stop device to menu --- src/AppFrame.cpp | 17 ++++++++++++++++- src/AppFrame.h | 1 + src/CubicSDR.cpp | 14 +++++++++++++- src/CubicSDR.h | 3 ++- src/forms/SDRDevices/SDRDevices.cpp | 2 +- 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index cb969b4..cfd89cf 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -321,6 +321,8 @@ AppFrame::AppFrame() : menu->Append(wxID_SDR_DEVICES, "SDR Devices"); menu->AppendSeparator(); + menu->Append(wxID_SDR_START_STOP, "Stop / Start Device"); + menu->AppendSeparator(); menu->Append(wxID_OPEN, "&Open Session"); menu->Append(wxID_SAVE, "&Save Session"); menu->Append(wxID_SAVEAS, "Save Session &As.."); @@ -755,9 +757,22 @@ void AppFrame::OnMenu(wxCommandEvent& event) { activeDemodulator->setOutputDevice(event.GetId() - wxID_RT_AUDIO_DEVICE); activeDemodulator = NULL; } - } else if (event.GetId() == wxApp::s_macAboutMenuItemId) { + } +#ifdef __APPLE__ + else if (event.GetId() == wxApp::s_macAboutMenuItemId) { wxMessageDialog *aboutDlg = new wxMessageDialog(NULL, wxT("CubicSDR v" CUBICSDR_VERSION "\nby Charles J. Cliffe (@ccliffe)\nwww.cubicsdr.com"), wxT("CubicSDR v" CUBICSDR_VERSION), wxOK); aboutDlg->ShowModal(); + } +#endif + else if (event.GetId() == wxID_SDR_START_STOP) { + if (!wxGetApp().getSDRThread()->isTerminated()) { + wxGetApp().stopDevice(true); + } else { + SDRDeviceInfo *dev = wxGetApp().getDevice(); + if (dev != nullptr) { + wxGetApp().setDevice(dev); + } + } } else if (event.GetId() == wxID_SET_TIPS ) { if (wxGetApp().getConfig()->getShowTips()) { wxGetApp().getConfig()->setShowTips(false); diff --git a/src/AppFrame.h b/src/AppFrame.h index a61562c..977817e 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -30,6 +30,7 @@ #define wxID_SET_IQSWAP 2005 #define wxID_SDR_DEVICES 2008 #define wxID_AGC_CONTROL 2009 +#define wxID_SDR_START_STOP 2010 #define wxID_MAIN_SPLITTER 2050 #define wxID_VIS_SPLITTER 2051 diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index 584b7ad..ee38442 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -136,6 +136,7 @@ CubicSDR::CubicSDR() : appframe(NULL), m_glContext(NULL), frequency(0), offset(0 agcMode.store(true); soloMode.store(false); fdlgTarget = FrequencyDialog::FDIALOG_TARGET_DEFAULT; + stoppedDev = nullptr; } bool CubicSDR::OnInit() { @@ -498,7 +499,12 @@ void CubicSDR::setSampleRate(long long rate_in) { } } -void CubicSDR::stopDevice() { +void CubicSDR::stopDevice(bool store) { + if (store) { + stoppedDev = sdrThread->getDevice(); + } else { + stoppedDev = nullptr; + } sdrThread->setDevice(nullptr); if (!sdrThread->isTerminated()) { @@ -565,9 +571,15 @@ void CubicSDR::setDevice(SDRDeviceInfo *dev) { t_SDR = new std::thread(&SDRThread::threadMain, sdrThread); } + + stoppedDev = nullptr; } SDRDeviceInfo *CubicSDR::getDevice() { + if (!sdrThread->getDevice() && stoppedDev) { + return stoppedDev; + } + return sdrThread->getDevice(); } diff --git a/src/CubicSDR.h b/src/CubicSDR.h index c36f3d8..6cfc00a 100644 --- a/src/CubicSDR.h +++ b/src/CubicSDR.h @@ -97,7 +97,7 @@ public: std::vector *getDevices(); void setDevice(SDRDeviceInfo *dev); - void stopDevice(); + void stopDevice(bool store); SDRDeviceInfo * getDevice(); ScopeVisualProcessor *getScopeProcessor(); @@ -216,6 +216,7 @@ private: FrequencyDialog::FrequencyDialogTarget fdlgTarget; std::string activeGain; std::atomic_bool soloMode; + SDRDeviceInfo *stoppedDev; #ifdef USE_HAMLIB RigThread *rigThread; std::thread *t_Rig; diff --git a/src/forms/SDRDevices/SDRDevices.cpp b/src/forms/SDRDevices/SDRDevices.cpp index c683337..8bcec51 100644 --- a/src/forms/SDRDevices/SDRDevices.cpp +++ b/src/forms/SDRDevices/SDRDevices.cpp @@ -443,7 +443,7 @@ void SDRDevicesDialog::doRefreshDevices() { editId = nullptr; removeId = nullptr; dev = nullptr; - wxGetApp().stopDevice(); + wxGetApp().stopDevice(false); devTree->DeleteAllItems(); devTree->Disable(); m_propertyGrid->Clear();