diff --git a/src/sdr/SDRDeviceInfo.cpp b/src/sdr/SDRDeviceInfo.cpp index 2dbaf03..677a8c9 100644 --- a/src/sdr/SDRDeviceInfo.cpp +++ b/src/sdr/SDRDeviceInfo.cpp @@ -168,6 +168,12 @@ SoapySDR::Device *SDRDeviceInfo::getSoapyDevice() { return soapyDevice; } +/** + * @deprecated + * @param direction + * @param channel + * @return + */ bool SDRDeviceInfo::hasCORR(int direction, size_t channel) { SoapySDR::Device *dev = getSoapyDevice(); diff --git a/src/sdr/SoapySDRThread.cpp b/src/sdr/SoapySDRThread.cpp index e8e476f..2143bf0 100644 --- a/src/sdr/SoapySDRThread.cpp +++ b/src/sdr/SoapySDRThread.cpp @@ -111,12 +111,16 @@ bool SDRThread::init() { //4. Apply other settings: Frequency, PPM correction, Gains, Device-specific settings: device->setFrequency(SOAPY_SDR_RX,0,"RF",frequency - offset.load()); - if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) { + if (device->hasFrequencyCorrection(SOAPY_SDR_RX, 0)) { + hasPPM.store(true); + device->setFrequencyCorrection(SOAPY_SDR_RX, 0, ppm.load()); + } else if (devInfo->hasCORR(SOAPY_SDR_RX, 0)) { hasPPM.store(true); device->setFrequency(SOAPY_SDR_RX,0,"CORR",ppm.load()); } else { hasPPM.store(false); } + if (device->hasDCOffsetMode(SOAPY_SDR_RX, 0)) { hasHardwareDC.store(true); // wxGetApp().sdrEnumThreadNotify(SDREnumerator::SDR_ENUM_MESSAGE, std::string("Found hardware DC offset correction support, internal disabled.")); @@ -518,7 +522,11 @@ void SDRThread::updateSettings() { } if (ppm_changed.load() && hasPPM.load()) { - device->setFrequency(SOAPY_SDR_RX,0,"CORR",ppm.load()); + if (device->hasFrequencyCorrection(SOAPY_SDR_RX, 0)) { + device->setFrequencyCorrection(SOAPY_SDR_RX, 0, ppm.load()); + } else { + device->setFrequency(SOAPY_SDR_RX, 0, "CORR", ppm.load()); + } ppm_changed.store(false); } diff --git a/src/visual/TuningCanvas.cpp b/src/visual/TuningCanvas.cpp index 1fef0fc..eb370bf 100644 --- a/src/visual/TuningCanvas.cpp +++ b/src/visual/TuningCanvas.cpp @@ -176,7 +176,11 @@ void TuningCanvas::StepTuner(ActiveState state, int exponent, bool up) { long long freq = activeDemod->getFrequency(); long long diff = abs(wxGetApp().getFrequency() - freq); - if (shiftDown) { + if (ctrlDown) { // Zero digits to right + double intpart; + modf(freq / (exp * 10), &intpart); + freq = intpart * exp * 10; + } else if (shiftDown) { // Prevent digit from carrying bool carried = (long long)((freq) / (exp * 10)) != (long long)((freq + amount) / (exp * 10)) || (bottom && freq < exp); freq += carried?(9*-amount):amount; } else { @@ -199,7 +203,11 @@ void TuningCanvas::StepTuner(ActiveState state, int exponent, bool up) { if (state == TUNING_HOVER_BW) { long bw = wxGetApp().getDemodMgr().getLastBandwidth(); - if (shiftDown) { + if (ctrlDown) { // Zero digits to right + double intpart; + modf(bw / (exp * 10), &intpart); + bw = intpart * exp * 10; + } else if (shiftDown) { // Prevent digit from carrying bool carried = (long)((bw) / (exp * 10)) != (long)((bw + amount) / (exp * 10)) || (bottom && bw < exp); bw += carried?(9*-amount):amount; } else { @@ -219,7 +227,11 @@ void TuningCanvas::StepTuner(ActiveState state, int exponent, bool up) { if (state == TUNING_HOVER_CENTER) { long long ctr = wxGetApp().getFrequency(); - if (shiftDown) { + if (ctrlDown) { // Zero digits to right + double intpart; + modf(ctr / (exp * 10), &intpart); + ctr = intpart * exp * 10; + } else if (shiftDown) { // Prevent digit from carrying bool carried = (long long)((ctr) / (exp * 10)) != (long long)((ctr + amount) / (exp * 10)) || (bottom && ctr < exp); ctr += carried?(9*-amount):amount; } else { @@ -310,16 +322,16 @@ void TuningCanvas::OnMouseMoved(wxMouseEvent& event) { } else { switch (hoverState) { case TUNING_HOVER_FREQ: - setStatusText("Click, wheel or drag a digit to change frequency; SPACE or numeric key for direct input. Right click to set/clear snap. Hold ALT to change PPM. Hold SHIFT to disable carry."); + setStatusText("Click, wheel or drag(left/right) a digit to change frequency; SPACE or numeric key for direct input. Right click to set/clear snap. Hold ALT to change PPM. Hold SHIFT to disable carry. Hold CTRL to Zero Right."); break; case TUNING_HOVER_BW: - setStatusText("Click, wheel or drag a digit to change bandwidth; SPACE or numeric key for direct input. Hold SHIFT to disable carry."); + setStatusText("Click, wheel or drag(left/right) a digit to change bandwidth; SPACE or numeric key for direct input. Hold SHIFT to disable carry. Hold CTRL to Zero Right."); break; case TUNING_HOVER_CENTER: - setStatusText("Click, wheel or drag a digit to change center frequency; SPACE or numeric key for direct input. Hold SHIFT to disable carry."); + setStatusText("Click, wheel or drag(left/right) a digit to change center frequency; SPACE or numeric key for direct input. Hold SHIFT to disable carry. Hold CTRL to Zero Right."); break; case TUNING_HOVER_PPM: - setStatusText("Click, wheel or drag a digit to change device PPM offset. Hold SHIFT to disable carry."); + setStatusText("Click, wheel or drag(left/right) a digit to change device PPM offset. Hold SHIFT to disable carry."); break; case TUNING_HOVER_NONE: setStatusText("");