Integrate more soapy device params

- Check current sample/frequency ranges when switching devices to keep
them in bounds.
This commit is contained in:
Charles J. Cliffe
2015-10-04 19:55:52 -04:00
parent bf9695ecd3
commit 3bf0439c56
5 changed files with 151 additions and 32 deletions
+39 -7
View File
@@ -276,24 +276,56 @@ void CubicSDR::setSampleRate(long long rate_in) {
}
void CubicSDR::setDevice(SDRDeviceInfo *dev) {
if (!sdrThread->isTerminated()) {
sdrThread->terminate();
if (t_SDR) {
t_SDR->join();
delete t_SDR;
}
}
sdrThread->setDevice(dev);
DeviceConfig *devConfig = config.getDevice(dev->getDeviceId());
setPPM(devConfig->getPPM());
setDirectSampling(devConfig->getDirectSampling());
setSwapIQ(devConfig->getIQSwap());
setOffset(devConfig->getOffset());
t_SDR = new std::thread(&SDRThread::threadMain, sdrThread);
SDRDeviceChannel *chan = dev->getRxChannel();
if (chan) {
long long freqHigh, freqLow;
freqHigh = chan->getRFRange().getHigh();
freqLow = chan->getRFRange().getLow();
if (frequency > freqHigh) {
frequency = freqHigh;
} else if (frequency < freqLow) {
frequency = freqLow;
}
int rateHigh, rateLow;
rateLow = chan->getSampleRates()[0];
rateHigh = chan->getSampleRates()[chan->getSampleRates().size()-1];
if (sampleRate > rateHigh) {
sampleRate = rateHigh;
} else if (sampleRate < rateLow) {
sampleRate = rateLow;
}
if (frequency < sampleRate/2) {
frequency = sampleRate/2;
}
setFrequency(frequency);
setSampleRate(sampleRate);
setPPM(devConfig->getPPM());
setDirectSampling(devConfig->getDirectSampling());
setSwapIQ(devConfig->getIQSwap());
setOffset(devConfig->getOffset());
t_SDR = new std::thread(&SDRThread::threadMain, sdrThread);
}
}
SDRDeviceInfo *CubicSDR::getDevice() {