Internal frequency locking support
This commit is contained in:
parent
6471287045
commit
1699c50676
|
@ -449,6 +449,25 @@ long long CubicSDR::getFrequency() {
|
|||
return frequency;
|
||||
}
|
||||
|
||||
|
||||
void CubicSDR::lockFrequency(long long freq) {
|
||||
frequency_locked.store(true);
|
||||
lock_freq.store(freq);
|
||||
|
||||
if (sdrThread && !sdrThread->isTerminated()) {
|
||||
sdrThread->lockFrequency(freq);
|
||||
}
|
||||
}
|
||||
|
||||
bool CubicSDR::isFrequencyLocked() {
|
||||
return frequency_locked.load();
|
||||
}
|
||||
|
||||
void CubicSDR::unlockFrequency() {
|
||||
frequency_locked.store(false);
|
||||
sdrThread->unlockFrequency();
|
||||
}
|
||||
|
||||
void CubicSDR::setSampleRate(long long rate_in) {
|
||||
sampleRate = rate_in;
|
||||
sdrThread->setSampleRate(sampleRate);
|
||||
|
|
|
@ -84,6 +84,10 @@ public:
|
|||
|
||||
void setFrequency(long long freq);
|
||||
long long getFrequency();
|
||||
|
||||
void lockFrequency(long long freq);
|
||||
bool isFrequencyLocked();
|
||||
void unlockFrequency();
|
||||
|
||||
void setOffset(long long ofs);
|
||||
long long getOffset();
|
||||
|
@ -195,6 +199,8 @@ private:
|
|||
std::string notifyMessage;
|
||||
std::string modulePath;
|
||||
std::mutex notify_busy;
|
||||
std::atomic_bool frequency_locked;
|
||||
std::atomic_llong lock_freq;
|
||||
#ifdef USE_HAMLIB
|
||||
RigThread *rigThread;
|
||||
std::thread *t_Rig;
|
||||
|
|
|
@ -33,6 +33,9 @@ SDRThread::SDRThread() : IOThread(), buffers("SDRThreadBuffers") {
|
|||
agc_mode_changed.store(false);
|
||||
gain_value_changed.store(false);
|
||||
setting_value_changed.store(false);
|
||||
frequency_lock_init.store(false);
|
||||
frequency_locked.store(false);
|
||||
lock_freq.store(0);
|
||||
}
|
||||
|
||||
SDRThread::~SDRThread() {
|
||||
|
@ -241,7 +244,12 @@ void SDRThread::updateSettings() {
|
|||
}
|
||||
|
||||
if (freq_changed.load()) {
|
||||
device->setFrequency(SOAPY_SDR_RX,0,"RF",frequency.load() - offset.load());
|
||||
if (frequency_locked.load() && !frequency_lock_init.load()) {
|
||||
device->setFrequency(SOAPY_SDR_RX,0,"RF",lock_freq.load());
|
||||
frequency_lock_init.store(true);
|
||||
} else if (!frequency_locked.load()) {
|
||||
device->setFrequency(SOAPY_SDR_RX,0,"RF",frequency.load() - offset.load());
|
||||
}
|
||||
freq_changed.store(false);
|
||||
}
|
||||
|
||||
|
@ -372,6 +380,23 @@ long long SDRThread::getFrequency() {
|
|||
return frequency.load();
|
||||
}
|
||||
|
||||
void SDRThread::lockFrequency(long long freq) {
|
||||
lock_freq.store(freq);
|
||||
frequency_locked.store(true);
|
||||
frequency_lock_init.store(false);
|
||||
setFrequency(freq);
|
||||
}
|
||||
|
||||
bool SDRThread::isFrequencyLocked() {
|
||||
return frequency_locked.load();
|
||||
}
|
||||
|
||||
void SDRThread::unlockFrequency() {
|
||||
frequency_locked.store(false);
|
||||
frequency_lock_init.store(false);
|
||||
freq_changed.store(true);
|
||||
}
|
||||
|
||||
void SDRThread::setOffset(long long ofs) {
|
||||
offset.store(ofs);
|
||||
offset_changed.store(true);
|
||||
|
|
|
@ -60,6 +60,10 @@ public:
|
|||
void setFrequency(long long freq);
|
||||
long long getFrequency();
|
||||
|
||||
void lockFrequency(long long freq);
|
||||
bool isFrequencyLocked();
|
||||
void unlockFrequency();
|
||||
|
||||
void setOffset(long long ofs);
|
||||
long long getOffset();
|
||||
|
||||
|
@ -98,11 +102,11 @@ protected:
|
|||
std::map<std::string, bool> settingChanged;
|
||||
|
||||
std::atomic<uint32_t> sampleRate;
|
||||
std::atomic_llong frequency, offset;
|
||||
std::atomic_llong frequency, offset, lock_freq;
|
||||
std::atomic_int ppm, numElems, numChannels;
|
||||
std::atomic_bool hasPPM, hasHardwareDC;
|
||||
std::atomic_bool agc_mode, rate_changed, freq_changed, offset_changed,
|
||||
ppm_changed, device_changed, agc_mode_changed, gain_value_changed, setting_value_changed;
|
||||
ppm_changed, device_changed, agc_mode_changed, gain_value_changed, setting_value_changed, frequency_locked, frequency_lock_init;
|
||||
|
||||
std::mutex gain_busy;
|
||||
std::map<std::string, float> gainValues;
|
||||
|
|
Loading…
Reference in New Issue