Add 'Reduced CPU Usage' menu option and config entry.

This commit is contained in:
Charles J. Cliffe 2016-03-31 21:32:50 -04:00
parent cd41a8197e
commit b828b3636f
6 changed files with 66 additions and 4 deletions

View File

@ -199,6 +199,7 @@ AppConfig::AppConfig() : configName("") {
winH.store(0); winH.store(0);
winMax.store(false); winMax.store(false);
showTips.store(true); showTips.store(true);
lowPerfMode.store(false);
themeId.store(0); themeId.store(0);
snap.store(1); snap.store(1);
centerFreq.store(100000000); centerFreq.store(100000000);
@ -265,6 +266,14 @@ bool AppConfig::getShowTips() {
return showTips.load(); return showTips.load();
} }
void AppConfig::setLowPerfMode(bool show) {
lowPerfMode.store(show);
}
bool AppConfig::getLowPerfMode() {
return lowPerfMode.load();
}
wxRect *AppConfig::getWindow() { wxRect *AppConfig::getWindow() {
wxRect *r = NULL; wxRect *r = NULL;
if (winH.load() && winW.load()) { if (winH.load() && winW.load()) {
@ -360,6 +369,7 @@ bool AppConfig::save() {
*window_node->newChild("max") = winMax.load(); *window_node->newChild("max") = winMax.load();
*window_node->newChild("tips") = showTips.load(); *window_node->newChild("tips") = showTips.load();
*window_node->newChild("low_perf_mode") = lowPerfMode.load();
*window_node->newChild("theme") = themeId.load(); *window_node->newChild("theme") = themeId.load();
*window_node->newChild("snap") = snap.load(); *window_node->newChild("snap") = snap.load();
*window_node->newChild("center_freq") = centerFreq.load(); *window_node->newChild("center_freq") = centerFreq.load();
@ -444,7 +454,7 @@ bool AppConfig::load() {
if (cfg.rootNode()->hasAnother("window")) { if (cfg.rootNode()->hasAnother("window")) {
int x,y,w,h; int x,y,w,h;
int max,tips; int max,tips,lpm;
DataNode *win_node = cfg.rootNode()->getNext("window"); DataNode *win_node = cfg.rootNode()->getNext("window");
@ -470,6 +480,11 @@ bool AppConfig::load() {
showTips.store(tips?true:false); showTips.store(tips?true:false);
} }
if (win_node->hasAnother("low_perf_mode")) {
win_node->getNext("low_perf_mode")->element()->get(lpm);
lowPerfMode.store(lpm?true:false);
}
if (win_node->hasAnother("theme")) { if (win_node->hasAnother("theme")) {
int theme; int theme;
win_node->getNext("theme")->element()->get(theme); win_node->getNext("theme")->element()->get(theme);

View File

@ -73,6 +73,9 @@ public:
void setShowTips(bool show); void setShowTips(bool show);
bool getShowTips(); bool getShowTips();
void setLowPerfMode(bool lpm);
bool getLowPerfMode();
void setTheme(int themeId); void setTheme(int themeId);
int getTheme(); int getTheme();
@ -127,7 +130,7 @@ private:
std::string configName; std::string configName;
std::map<std::string, DeviceConfig *> deviceConfig; std::map<std::string, DeviceConfig *> deviceConfig;
std::atomic_int winX,winY,winW,winH; std::atomic_int winX,winY,winW,winH;
std::atomic_bool winMax, showTips; std::atomic_bool winMax, showTips, lowPerfMode;
std::atomic_int themeId; std::atomic_int themeId;
std::atomic_llong snap; std::atomic_llong snap;
std::atomic_llong centerFreq; std::atomic_llong centerFreq;

View File

@ -605,6 +605,14 @@ void AppFrame::updateDeviceParams() {
showTipMenuItem = newSettingsMenu->AppendCheckItem(wxID_SET_TIPS, "Show Hover Tips"); showTipMenuItem = newSettingsMenu->AppendCheckItem(wxID_SET_TIPS, "Show Hover Tips");
showTipMenuItem->Check(wxGetApp().getConfig()->getShowTips()); showTipMenuItem->Check(wxGetApp().getConfig()->getShowTips());
lowPerfMode = wxGetApp().getConfig()->getLowPerfMode();
lowPerfMenuItem = newSettingsMenu->AppendCheckItem(wxID_LOW_PERF, "Reduce CPU Usage");
if (lowPerfMode) {
lowPerfMenuItem->Check(true);
}
newSettingsMenu->AppendSeparator();
newSettingsMenu->Append(wxID_SET_FREQ_OFFSET, "Frequency Offset"); newSettingsMenu->Append(wxID_SET_FREQ_OFFSET, "Frequency Offset");
if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) { if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) {
@ -627,6 +635,10 @@ void AppFrame::updateDeviceParams() {
SoapySDR::ArgInfoList::const_iterator args_i; SoapySDR::ArgInfoList::const_iterator args_i;
settingArgs = soapyDev->getSettingInfo(); settingArgs = soapyDev->getSettingInfo();
if (settingArgs.size()) {
newSettingsMenu->AppendSeparator();
}
for (args_i = settingArgs.begin(); args_i != settingArgs.end(); args_i++) { for (args_i = settingArgs.begin(); args_i != settingArgs.end(); args_i++) {
SoapySDR::ArgInfo arg = (*args_i); SoapySDR::ArgInfo arg = (*args_i);
std::string currentVal = soapyDev->readSetting(arg.key); std::string currentVal = soapyDev->readSetting(arg.key);
@ -781,6 +793,21 @@ void AppFrame::OnMenu(wxCommandEvent& event) {
wxGetApp().setDevice(dev); wxGetApp().setDevice(dev);
} }
} }
} else if (event.GetId() == wxID_LOW_PERF) {
lowPerfMode = lowPerfMenuItem->IsChecked();
wxGetApp().getConfig()->setLowPerfMode(lowPerfMode);
// long srate = wxGetApp().getSampleRate();
// if (srate > CHANNELIZER_RATE_MAX && lowPerfMode) {
// if (wxGetApp().getSpectrumProcessor()->getFFTSize() != 1024) {
// setMainWaterfallFFTSize(1024);
// }
// } else if (srate > CHANNELIZER_RATE_MAX) {
// if (wxGetApp().getSpectrumProcessor()->getFFTSize() != 2048) {
// setMainWaterfallFFTSize(2048);
// }
// }
} else if (event.GetId() == wxID_SET_TIPS ) { } else if (event.GetId() == wxID_SET_TIPS ) {
if (wxGetApp().getConfig()->getShowTips()) { if (wxGetApp().getConfig()->getShowTips()) {
wxGetApp().getConfig()->setShowTips(false); wxGetApp().getConfig()->setShowTips(false);
@ -1462,10 +1489,14 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
#endif #endif
if (!this->IsActive()) { if (!this->IsActive()) {
std::this_thread::sleep_for(std::chrono::milliseconds(25)); std::this_thread::sleep_for(std::chrono::milliseconds(30));
} else {
if (lowPerfMode) {
std::this_thread::sleep_for(std::chrono::milliseconds(30));
} else { } else {
std::this_thread::sleep_for(std::chrono::milliseconds(1)); std::this_thread::sleep_for(std::chrono::milliseconds(1));
} }
}
event.RequestMore(); event.RequestMore();
} }

View File

@ -31,6 +31,7 @@
#define wxID_SDR_DEVICES 2008 #define wxID_SDR_DEVICES 2008
#define wxID_AGC_CONTROL 2009 #define wxID_AGC_CONTROL 2009
#define wxID_SDR_START_STOP 2010 #define wxID_SDR_START_STOP 2010
#define wxID_LOW_PERF 2011
#define wxID_MAIN_SPLITTER 2050 #define wxID_MAIN_SPLITTER 2050
#define wxID_VIS_SPLITTER 2051 #define wxID_VIS_SPLITTER 2051
@ -134,6 +135,7 @@ private:
wxMenu *sampleRateMenu; wxMenu *sampleRateMenu;
wxMenuItem *agcMenuItem; wxMenuItem *agcMenuItem;
wxMenuItem *iqSwapMenuItem; wxMenuItem *iqSwapMenuItem;
wxMenuItem *lowPerfMenuItem;
wxMenu *settingsMenu; wxMenu *settingsMenu;
SoapySDR::ArgInfoList settingArgs; SoapySDR::ArgInfoList settingArgs;
int settingsIdMax; int settingsIdMax;
@ -152,6 +154,8 @@ private:
ModemArgInfoList newModemArgs; ModemArgInfoList newModemArgs;
wxMenuItem *showTipMenuItem; wxMenuItem *showTipMenuItem;
bool lowPerfMode;
#ifdef USE_HAMLIB #ifdef USE_HAMLIB
void enableRig(); void enableRig();
void disableRig(); void disableRig();

View File

@ -201,6 +201,14 @@ void SpectrumVisualProcessor::setFFTSize(unsigned int fftSize_in) {
fftSizeChanged.store(true); fftSizeChanged.store(true);
} }
unsigned int SpectrumVisualProcessor::getFFTSize() {
if (fftSizeChanged.load()) {
return newFFTSize;
}
return fftSize.load();
}
void SpectrumVisualProcessor::setHideDC(bool hideDC) { void SpectrumVisualProcessor::setHideDC(bool hideDC) {
this->hideDC.store(hideDC); this->hideDC.store(hideDC);
} }

View File

@ -47,6 +47,7 @@ public:
void setup(unsigned int fftSize); void setup(unsigned int fftSize);
void setFFTSize(unsigned int fftSize); void setFFTSize(unsigned int fftSize);
unsigned int getFFTSize();
void setHideDC(bool hideDC); void setHideDC(bool hideDC);
void setScaleFactor(float sf); void setScaleFactor(float sf);