21 #include <QMutexLocker> 23 #include <QNetworkReply> 26 #include "lime/LimeSuite.h" 52 m_deviceAPI(deviceAPI),
54 m_limeSDRInputThread(0),
57 m_channelAcquired(false)
59 m_streamId.handle = 0;
66 m_fileSink =
new FileRecord(QString(
"test_%1.sdriq").
arg(m_deviceAPI->getDeviceUID()));
67 m_deviceAPI->setNbSourceStreams(1);
68 m_deviceAPI->addAncillarySink(m_fileSink);
70 m_networkManager =
new QNetworkAccessManager();
71 connect(m_networkManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(networkManagerFinished(QNetworkReply*)));
101 qCritical(
"LimeSDRInput::openDevice: could not allocate SampleFifo");
106 qDebug(
"LimeSDRInput::openDevice: allocated SampleFifo");
115 qDebug(
"LimeSDRInput::openDevice: look in Rx buddies");
121 if (deviceLimeSDRShared == 0)
123 qCritical(
"LimeSDRInput::openDevice: the source buddy shared pointer is null");
131 if (deviceParams == 0)
133 qCritical(
"LimeSDRInput::openDevice: cannot get device parameters from Rx buddy");
138 qDebug(
"LimeSDRInput::openDevice: getting device parameters from Rx buddy");
143 qCritical(
"LimeSDRInput::openDevice: no more Rx channels available in device");
148 qDebug(
"LimeSDRInput::openDevice: at least one more Rx channel is available in device");
158 if (buddyShared->
m_channel == requestedChannel)
160 qCritical(
"LimeSDRInput::openDevice: cannot open busy channel %u", requestedChannel);
171 qDebug(
"LimeSDRInput::openDevice: look in Tx buddies");
177 if (deviceLimeSDRShared == 0)
179 qCritical(
"LimeSDRInput::openDevice: the sink buddy shared pointer is null");
187 qCritical(
"LimeSDRInput::openDevice: cannot get device parameters from Tx buddy");
192 qDebug(
"LimeSDRInput::openDevice: getting device parameters from Tx buddy");
202 qDebug(
"LimeSDRInput::openDevice: open device here");
219 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
221 qDebug(
"LimeSDRInput::suspendRxBuddies (%lu)", sourceBuddies.size());
223 for (; itSource != sourceBuddies.end(); ++itSource)
242 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
244 qDebug(
"LimeSDRInput::suspendTxBuddies (%lu)", sinkBuddies.size());
246 for (; itSink != sinkBuddies.end(); ++itSink)
265 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
267 qDebug(
"LimeSDRInput::resumeRxBuddies (%lu)", sourceBuddies.size());
269 for (; itSource != sourceBuddies.end(); ++itSource)
282 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
284 qDebug(
"LimeSDRInput::resumeTxBuddies (%lu)", sinkBuddies.size());
286 for (; itSink != sinkBuddies.end(); ++itSink)
339 m_streamId.dataFmt = lms_stream_t::LMS_FMT_I12;
369 qWarning(
"LimeSDRInput::releaseChannel: cannot destroy the stream on Rx channel %d",
m_deviceShared.
m_channel);
418 qDebug(
"LimeSDRInput::start: thread created");
434 qDebug(
"LimeSDRInput::stop");
517 qDebug(
"LimeSDRInput::getLORange: min: %f max: %f", range.min, range.max);
525 qDebug(
"LimeSDRInput::getSRRange: min: %f max: %f", range.min, range.max);
533 qDebug(
"LimeSDRInput::getLPRange: min: %f max: %f", range.min, range.max);
555 qDebug() <<
"LimeSDRInput::handleMessage: MsgConfigureLimeSDR";
559 qDebug(
"LimeSDRInput::handleMessage config error");
585 qDebug(
"LimeSDRInput::handleMessage: MsgReportBuddyChange: LMS_GetSampleRate() failed");
593 qDebug() <<
"LimeSDRInput::handleMessage: MsgReportBuddyChange:" 594 <<
" host_Hz: " << host_Hz
595 <<
" rf_Hz: " << rf_Hz
597 <<
" log2Hard: " << hard
655 lms_stream_status_t status;
664 status.fifoFilledCount,
668 status.droppedPackets,
700 qDebug(
"LimeSDRInput::handleMessage: MsgGetDeviceInfo: cannot get temperature");
707 qDebug(
"LimeSDROutput::handleMessage: MsgGetDeviceInfo: cannot get GPIO pins values");
720 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
722 for (; itSource != sourceBuddies.end(); ++itSource)
724 if ((*itSource)->getSamplingDeviceGUIMessageQueue())
727 (*itSource)->getSamplingDeviceGUIMessageQueue()->push(report);
733 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
735 for (; itSink != sinkBuddies.end(); ++itSink)
737 if ((*itSink)->getSamplingDeviceGUIMessageQueue())
740 (*itSink)->getSamplingDeviceGUIMessageQueue()->push(report);
749 qDebug() <<
"LimeSDRInput::handleMessage: MsgFileRecord: " << conf.
getStartStop();
771 qDebug() <<
"LimeSDRInput::handleMessage: MsgStartStop: " << (cmd.
getStartStop() ?
"start" :
"stop");
799 bool forwardChangeOwnDSP =
false;
800 bool forwardChangeRxDSP =
false;
801 bool forwardChangeAllDSP =
false;
802 bool forwardClockSource =
false;
803 bool forwardGPIOChange =
false;
804 bool ownThreadWasRunning =
false;
805 bool doCalibration =
false;
806 bool doLPCalibration =
false;
807 bool setAntennaAuto =
false;
808 double clockGenFreq = 0.0;
809 QList<QString> reverseAPIKeys;
815 deviceCenterFrequency = deviceCenterFrequency < 0 ? 0 : deviceCenterFrequency;
819 qCritical(
"LimeSDRInput::applySettings: could not get clock gen frequency");
823 qDebug() <<
"LimeSDRInput::applySettings: clock gen frequency: " << clockGenFreq;
830 reverseAPIKeys.append(
"dcBlock");
836 reverseAPIKeys.append(
"iqCorrection");
842 reverseAPIKeys.append(
"gainMode");
853 qDebug(
"LimeSDRInput::applySettings: LMS_SetGaindB() failed");
857 doCalibration =
true;
858 qDebug() <<
"LimeSDRInput::applySettings: Gain (auto) set to " << settings.
m_gain;
870 doCalibration =
true;
871 qDebug() <<
"LimeSDRInput::applySettings: LNA gain (manual) set to " << settings.
m_lnaGain;
875 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRFELNA_dB() failed");
882 doCalibration =
true;
883 qDebug() <<
"LimeSDRInput::applySettings: TIA gain (manual) set to " << settings.
m_tiaGain;
887 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRFETIA_dB() failed");
894 doCalibration =
true;
895 qDebug() <<
"LimeSDRInput::applySettings: PGA gain (manual) set to " << settings.
m_pgaGain;
899 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRBBPGA_dB() failed");
907 reverseAPIKeys.append(
"gain");
916 qDebug(
"LimeSDRInput::applySettings: LMS_SetGaindB() failed");
920 doCalibration =
true;
921 qDebug() <<
"LimeSDRInput::applySettings: Gain (auto) set to " << settings.
m_gain;
928 reverseAPIKeys.append(
"lnaGain");
936 doCalibration =
true;
937 qDebug() <<
"LimeSDRInput::applySettings: LNA gain (manual) set to " << settings.
m_lnaGain;
941 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRFELNA_dB() failed");
948 reverseAPIKeys.append(
"tiaGain");
956 doCalibration =
true;
957 qDebug() <<
"LimeSDRInput::applySettings: TIA gain (manual) set to " << settings.
m_tiaGain;
961 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRFETIA_dB() failed");
968 reverseAPIKeys.append(
"pgaGain");
976 doCalibration =
true;
977 qDebug() <<
"LimeSDRInput::applySettings: PGA gain (manual) set to " << settings.
m_pgaGain;
981 qDebug(
"LimeSDRInput::applySettings: DeviceLimeSDR::SetRBBPGA_dB() failed");
989 reverseAPIKeys.append(
"devSampleRate");
990 reverseAPIKeys.append(
"log2HardDecim");
991 forwardChangeAllDSP =
true;
1000 qCritical(
"LimeSDRInput::applySettings: could not set sample rate to %d with oversampling of %d",
1009 forceNCOFrequency =
true;
1010 qDebug(
"LimeSDRInput::applySettings: set sample rate set to %d with oversampling of %d",
1019 reverseAPIKeys.append(
"lpfBW");
1023 doLPCalibration =
true;
1030 reverseAPIKeys.append(
"lpfFIRBW");
1031 reverseAPIKeys.append(
"lpfFIREnable");
1041 qCritical(
"LimeSDRInput::applySettings: could %s and set LPF FIR to %f Hz",
1048 qDebug(
"LimeSDRInput::applySettings: %sd and set LPF FIR to %f Hz",
1058 reverseAPIKeys.append(
"ncoFrequency");
1059 reverseAPIKeys.append(
"ncoEnable");
1060 forwardChangeOwnDSP =
true;
1072 qDebug(
"LimeSDRInput::applySettings: %sd and set NCO to %d Hz",
1078 qCritical(
"LimeSDRInput::applySettings: could not %s and set NCO to %d Hz",
1087 reverseAPIKeys.append(
"log2SoftDecim");
1088 forwardChangeOwnDSP =
true;
1094 qDebug() <<
"LimeSDRInput::applySettings: set soft decimation to " << (1<<settings.
m_log2SoftDecim);
1100 reverseAPIKeys.append(
"antennaPath");
1108 doCalibration =
true;
1110 qDebug(
"LimeSDRInput::applySettings: set antenna path to %d on channel %d",
1116 qCritical(
"LimeSDRInput::applySettings: could not set antenna path to %d",
1125 || setAntennaAuto || force)
1127 reverseAPIKeys.append(
"centerFrequency");
1128 reverseAPIKeys.append(
"transverterMode");
1129 reverseAPIKeys.append(
"transverterDeltaFrequency");
1130 forwardChangeRxDSP =
true;
1136 qCritical(
"LimeSDRInput::applySettings: could not set frequency to %lld", deviceCenterFrequency);
1140 doCalibration =
true;
1142 qDebug(
"LimeSDRInput::applySettings: frequency set to %lld", deviceCenterFrequency);
1150 reverseAPIKeys.append(
"extClock");
1151 reverseAPIKeys.append(
"extClockFreq");
1157 forwardClockSource =
true;
1158 doCalibration =
true;
1159 qDebug(
"LimeSDRInput::applySettings: clock set to %s (Ext: %d Hz)",
1160 settings.
m_extClock ?
"external" :
"internal",
1165 qCritical(
"LimeSDRInput::applySettings: could not set clock to %s (Ext: %d Hz)",
1166 settings.
m_extClock ?
"external" :
"internal",
1176 reverseAPIKeys.append(
"gpioDir");
1180 qCritical(
"LimeSDROutput::applySettings: could not set GPIO directions to %u", settings.
m_gpioDir);
1184 forwardGPIOChange =
true;
1185 qDebug(
"LimeSDROutput::applySettings: GPIO directions set to %u", settings.
m_gpioDir);
1191 reverseAPIKeys.append(
"gpioPins");
1195 qCritical(
"LimeSDROutput::applySettings: could not set GPIO pins to %u", settings.
m_gpioPins);
1199 forwardGPIOChange =
true;
1200 qDebug(
"LimeSDROutput::applySettings: GPIO pins set to %u", settings.
m_gpioPins);
1215 double clockGenFreqAfter;
1219 qCritical(
"LimeSDRInput::applySettings: could not get clock gen frequency");
1223 qDebug() <<
"LimeSDRInput::applySettings: clock gen frequency after: " << clockGenFreqAfter;
1224 doCalibration = doCalibration || (clockGenFreqAfter != clockGenFreq);
1227 if (doCalibration || doLPCalibration)
1232 ownThreadWasRunning =
true;
1254 if (doLPCalibration)
1261 qCritical(
"LimeSDRInput::applySettings: could not set LPF to %f Hz",
m_settings.
m_lpfBW);
1272 if (ownThreadWasRunning) {
1279 if (forwardChangeAllDSP)
1281 qDebug(
"LimeSDRInput::applySettings: forward change to all buddies");
1293 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
1295 for (; itSource != sourceBuddies.end(); ++itSource)
1299 (*itSource)->getSamplingDeviceInputMessageQueue()->push(report);
1304 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
1306 for (; itSink != sinkBuddies.end(); ++itSink)
1310 (*itSink)->getSamplingDeviceInputMessageQueue()->push(report);
1313 else if (forwardChangeRxDSP)
1315 qDebug(
"LimeSDRInput::applySettings: forward change to Rx buddies");
1326 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
1328 for (; itSource != sourceBuddies.end(); ++itSource)
1332 (*itSource)->getSamplingDeviceInputMessageQueue()->push(report);
1335 else if (forwardChangeOwnDSP)
1337 qDebug(
"LimeSDRInput::applySettings: forward change to self only");
1346 if (forwardClockSource)
1350 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
1352 for (; itSource != sourceBuddies.end(); ++itSource)
1356 (*itSource)->getSamplingDeviceInputMessageQueue()->push(report);
1361 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
1363 for (; itSink != sinkBuddies.end(); ++itSink)
1367 (*itSink)->getSamplingDeviceInputMessageQueue()->push(report);
1371 if (forwardGPIOChange)
1375 std::vector<DeviceAPI*>::const_iterator itSource = sourceBuddies.begin();
1377 for (; itSource != sourceBuddies.end(); ++itSource)
1381 (*itSource)->getSamplingDeviceInputMessageQueue()->push(report);
1386 std::vector<DeviceAPI*>::const_iterator itSink = sinkBuddies.begin();
1388 for (; itSink != sinkBuddies.end(); ++itSink)
1392 (*itSink)->getSamplingDeviceInputMessageQueue()->push(report);
1401 <<
" deviceCenterFrequency: " << deviceCenterFrequency
1418 <<
" force: " << force
1419 <<
" forceNCOFrequency: " << forceNCOFrequency
1420 <<
" doCalibration: " << doCalibration
1421 <<
" doLPCalibration: " << doLPCalibration;
1428 QString& errorMessage)
1430 (void) errorMessage;
1439 const QStringList& deviceSettingsKeys,
1441 QString& errorMessage)
1443 (void) errorMessage;
1446 if (deviceSettingsKeys.contains(
"antennaPath")) {
1449 if (deviceSettingsKeys.contains(
"centerFrequency")) {
1452 if (deviceSettingsKeys.contains(
"dcBlock")) {
1455 if (deviceSettingsKeys.contains(
"devSampleRate")) {
1458 if (deviceSettingsKeys.contains(
"extClock")) {
1461 if (deviceSettingsKeys.contains(
"extClockFreq")) {
1464 if (deviceSettingsKeys.contains(
"gain")) {
1467 if (deviceSettingsKeys.contains(
"gainMode")) {
1470 if (deviceSettingsKeys.contains(
"iqCorrection")) {
1473 if (deviceSettingsKeys.contains(
"lnaGain")) {
1476 if (deviceSettingsKeys.contains(
"log2HardDecim")) {
1479 if (deviceSettingsKeys.contains(
"log2SoftDecim")) {
1482 if (deviceSettingsKeys.contains(
"lpfBW")) {
1485 if (deviceSettingsKeys.contains(
"lpfFIREnable")) {
1488 if (deviceSettingsKeys.contains(
"lpfFIRBW")) {
1491 if (deviceSettingsKeys.contains(
"ncoEnable")) {
1494 if (deviceSettingsKeys.contains(
"ncoFrequency")) {
1497 if (deviceSettingsKeys.contains(
"pgaGain")) {
1500 if (deviceSettingsKeys.contains(
"tiaGain")) {
1503 if (deviceSettingsKeys.contains(
"transverterDeltaFrequency")) {
1506 if (deviceSettingsKeys.contains(
"transverterMode")) {
1509 if (deviceSettingsKeys.contains(
"fileRecordName")) {
1512 if (deviceSettingsKeys.contains(
"gpioDir")) {
1515 if (deviceSettingsKeys.contains(
"gpioPins")) {
1518 if (deviceSettingsKeys.contains(
"useReverseAPI")) {
1521 if (deviceSettingsKeys.contains(
"reverseAPIAddress")) {
1524 if (deviceSettingsKeys.contains(
"reverseAPIPort")) {
1527 if (deviceSettingsKeys.contains(
"reverseAPIDeviceIndex")) {
1590 QString& errorMessage)
1592 (void) errorMessage;
1601 QString& errorMessage)
1603 (void) errorMessage;
1611 QString& errorMessage)
1613 (void) errorMessage;
1629 bool success =
false;
1633 lms_stream_status_t status;
1634 status.active =
false;
1635 status.fifoFilledCount = 0;
1636 status.fifoSize = 1;
1637 status.underrun = 0;
1639 status.droppedPackets = 0;
1640 status.linkRate = 0.0;
1641 status.timestamp = 0;
1678 if (deviceSettingsKeys.contains(
"antennaPath") || force) {
1681 if (deviceSettingsKeys.contains(
"centerFrequency") || force) {
1684 if (deviceSettingsKeys.contains(
"dcBlock") || force) {
1687 if (deviceSettingsKeys.contains(
"devSampleRate") || force) {
1690 if (deviceSettingsKeys.contains(
"extClock") || force) {
1693 if (deviceSettingsKeys.contains(
"extClockFreq") || force) {
1696 if (deviceSettingsKeys.contains(
"gain") || force) {
1699 if (deviceSettingsKeys.contains(
"gainMode") || force) {
1702 if (deviceSettingsKeys.contains(
"iqCorrection") || force) {
1705 if (deviceSettingsKeys.contains(
"lnaGain") || force) {
1708 if (deviceSettingsKeys.contains(
"log2HardDecim") || force) {
1711 if (deviceSettingsKeys.contains(
"log2SoftDecim") || force) {
1714 if (deviceSettingsKeys.contains(
"lpfBW") || force) {
1717 if (deviceSettingsKeys.contains(
"lpfFIREnable") || force) {
1720 if (deviceSettingsKeys.contains(
"lpfFIRBW") || force) {
1723 if (deviceSettingsKeys.contains(
"ncoEnable") || force) {
1726 if (deviceSettingsKeys.contains(
"ncoFrequency") || force) {
1729 if (deviceSettingsKeys.contains(
"pgaGain") || force) {
1732 if (deviceSettingsKeys.contains(
"tiaGain") || force) {
1735 if (deviceSettingsKeys.contains(
"transverterDeltaFrequency") || force) {
1738 if (deviceSettingsKeys.contains(
"transverterMode") || force) {
1741 if (deviceSettingsKeys.contains(
"fileRecordName") || force) {
1744 if (deviceSettingsKeys.contains(
"gpioDir") || force) {
1747 if (deviceSettingsKeys.contains(
"gpioPins") || force) {
1751 QString deviceSettingsURL = QString(
"http://%1:%2/sdrangel/deviceset/%3/device/settings")
1756 m_networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,
"application/json");
1758 QBuffer *buffer=
new QBuffer();
1759 buffer->open((QBuffer::ReadWrite));
1760 buffer->write(swgDeviceSettings->
asJson().toUtf8());
1766 delete swgDeviceSettings;
1776 QString deviceSettingsURL = QString(
"http://%1:%2/sdrangel/deviceset/%3/device/run")
1781 m_networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,
"application/json");
1783 QBuffer *buffer=
new QBuffer();
1784 buffer->open((QBuffer::ReadWrite));
1785 buffer->write(swgDeviceSettings->
asJson().toUtf8());
1794 delete swgDeviceSettings;
1799 QNetworkReply::NetworkError replyError = reply->error();
1803 qWarning() <<
"LimeSDRInput::networkManagerFinished:" 1804 <<
" error(" << (int) replyError
1805 <<
"): " << replyError
1806 <<
": " << reply->errorString();
1810 QString answer = reply->readAll();
1812 qDebug(
"LimeSDRInput::networkManagerFinished: reply:\n%s", answer.toStdString().c_str());
static bool SetRFELNA_dB(lms_device_t *device, std::size_t chan, int value)
uint64_t getCenterFrequency() const
bool startDeviceEngine()
Start the device engine corresponding to the stream type.
int m_channel
logical device channel number (-1 if none)
int m_log2OvSRRx
log2 of Rx oversampling (0..5)
void push(Message *message, bool emitSignal=true)
Push message onto queue.
void stopDeviceEngine()
Stop the device engine corresponding to the stream type.
void setFileName(const QString &filename)
uint getDeviceUID() const
Return the current device engine unique ID.
void setLimeSdrInputSettings(SWGLimeSdrInputSettings *lime_sdr_input_settings)
lms_range_t m_lpfRangeRx
Low pass filter range information (Rx side)
static MsgReportBuddyChange * create(int devSampleRate, int log2HardDecimInterp, uint64_t centerFrequency, bool rxElseTx)
const std::vector< DeviceAPI * > & getSinkBuddies() const
virtual void stopWork()=0
virtual void startWork()=0
MessageQueue m_inputMessageQueue
Input queue to the source.
virtual QString asJson() override
MessageQueue * getDeviceEngineInputMessageQueue()
Device engine message queue.
static bool SetRBBPGA_dB(lms_device_t *device, std::size_t chan, float value)
lms_device_t * getDevice()
uint32_t getDeviceItemIndex() const
lms_range_t m_srRangeRx
ADC sample rate range.
uint32_t m_nbRxChannels
number of Rx channels (normally 2, we'll see if we really use it...)
bool initDeviceEngine()
Init the device engine corresponding to the stream type.
static bool SetRFETIA_dB(lms_device_t *device, std::size_t chan, int value)
void setOriginatorIndex(qint32 originator_index)
SampleSinkFifo m_sampleFifo
MessageQueue * getMessageQueueToGUI()
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
virtual bool handleMessage(const Message &message)
Processing of a message. Returns true if message has actually been processed.
SWGLimeSdrInputReport * getLimeSdrInputReport()
int getLog2HardDecimInterp() const
int getDeviceSetIndex() const
void * getBuddySharedPtr() const
#define MESSAGE_CLASS_DEFINITION(Name, BaseClass)
bool m_threadWasRunning
flag to know if thread needs to be resumed after suspend
void genUniqueFileName(uint deviceUID, int istream=-1)
void setBuddySharedPtr(void *ptr)
static bool match(const Message *message)
void removeAncillarySink(BasebandSampleSink *sink, unsigned int index=0)
Removes it.
static bool setNCOFrequency(lms_device_t *device, bool dir_tx, std::size_t chan, bool enable, float frequency)
MessageQueue * m_guiMessageQueue
Input message queue to the GUI.
uint8_t getGPIODir() const
float m_sampleRate
ADC/DAC sample rate.
void getDeviceEngineStateStr(QString &state)
const QString & getSamplingDeviceSerial() const
LimeType m_type
Hardware type.
uint64_t m_centerFrequency
uint8_t getGPIOPins() const
const std::vector< DeviceAPI * > & getSourceBuddies() const
static bool setClockSource(lms_device_t *device, bool extClock, uint32_t extClockFrequency)
virtual bool isRunning()=0
DeviceLimeSDRParams * m_deviceParams
unique hardware device parameters
uint32_t getExtClockFeq() const
bool open(lms_info_str_t deviceStr)
void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection, int streamIndex=0)
Configure current device engine DSP corrections (Rx)
int getDevSampleRate() const
ThreadInterface * m_thread
holds the thread address if started else 0
SWGLimeSdrInputSettings * getLimeSdrInputSettings()
void setDirection(qint32 direction)
lms_range_t m_loRangeRx
LO range for Rx.
static bool setRxAntennaPath(lms_device_t *device, std::size_t chan, int path)
void setDeviceHwType(QString *device_hw_type)
void setLimeSdrInputReport(SWGLimeSdrInputReport *lime_sdr_input_report)
MessageQueue * getSamplingDeviceGUIMessageQueue()
Sampling device (ex: single Tx) GUI input message queue.
static MsgReportClockSourceChange * create(bool extClock, uint32_t m_extClockFreq)
static MsgReportDeviceInfo * create(float temperature, uint8_t gpioPins)