2017-04-15 11:45:01 +02:00
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2017 Edouard Griffiths, F4EXB //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation as version 3 of the License, or //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License V3 for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include "limesdrinputgui.h"
#include <QDebug>
#include <QMessageBox>
2017-08-04 09:33:25 +02:00
#include <algorithm>
2017-04-15 11:45:01 +02:00
#include "ui_limesdrinputgui.h"
#include "gui/colormapper.h"
#include "gui/glspectrum.h"
#include "dsp/dspengine.h"
#include "dsp/dspcommands.h"
#include "device/devicesourceapi.h"
#include "dsp/filerecord.h"
LimeSDRInputGUI :: LimeSDRInputGUI ( DeviceSourceAPI * deviceAPI , QWidget * parent ) :
QWidget ( parent ),
2017-04-16 04:58:52 +02:00
ui ( new Ui :: LimeSDRInputGUI ),
2017-04-15 11:45:01 +02:00
m_deviceAPI ( deviceAPI ),
m_settings (),
m_sampleSource ( 0 ),
m_sampleRate ( 0 ),
2017-04-17 01:10:32 +02:00
m_lastEngineState (( DSPDeviceSourceEngine :: State ) - 1 ),
2017-04-19 18:41:55 +02:00
m_doApplySettings ( true ),
2017-07-03 13:42:11 +02:00
m_statusCounter ( 0 ),
m_deviceStatusCounter ( 0 )
2017-04-15 11:45:01 +02:00
{
m_limeSDRInput = new LimeSDRInput ( m_deviceAPI );
m_sampleSource = ( DeviceSampleSource * ) m_limeSDRInput ;
m_deviceAPI -> setSource ( m_sampleSource );
ui -> setupUi ( this );
float minF , maxF , stepF ;
m_limeSDRInput -> getLORange ( minF , maxF , stepF );
2017-05-16 17:48:12 +02:00
ui -> centerFrequency -> setColorMapper ( ColorMapper ( ColorMapper :: GrayGold ));
2017-04-15 11:45:01 +02:00
ui -> centerFrequency -> setValueRange ( 7 , (( uint32_t ) minF ) / 1000 , (( uint32_t ) maxF ) / 1000 ); // frequency dial is in kHz
m_limeSDRInput -> getSRRange ( minF , maxF , stepF );
2017-05-16 17:48:12 +02:00
ui -> sampleRate -> setColorMapper ( ColorMapper ( ColorMapper :: GrayGreenYellow ));
2017-04-15 11:45:01 +02:00
ui -> sampleRate -> setValueRange ( 8 , ( uint32_t ) minF , ( uint32_t ) maxF );
m_limeSDRInput -> getLPRange ( minF , maxF , stepF );
2017-05-16 21:24:25 +02:00
ui -> lpf -> setColorMapper ( ColorMapper ( ColorMapper :: GrayYellow ));
2017-04-18 01:16:39 +02:00
ui -> lpf -> setValueRange ( 6 , ( minF / 1000 ) + 1 , maxF / 1000 );
2017-04-15 11:45:01 +02:00
2017-05-16 21:24:25 +02:00
ui -> lpFIR -> setColorMapper ( ColorMapper ( ColorMapper :: GrayYellow ));
2017-04-18 00:50:03 +02:00
ui -> lpFIR -> setValueRange ( 5 , 1U , 56000U );
2017-05-16 17:48:12 +02:00
ui -> ncoFrequency -> setColorMapper ( ColorMapper ( ColorMapper :: GrayGold ));
2017-04-20 18:21:01 +02:00
2017-04-16 04:58:52 +02:00
ui -> channelNumberText -> setText ( tr ( "#%1" ). arg ( m_limeSDRInput -> getChannelIndex ()));
2017-04-20 20:18:50 +02:00
ui -> hwDecimLabel -> setText ( QString :: fromUtf8 ( "H \u2193 " ));
ui -> swDecimLabel -> setText ( QString :: fromUtf8 ( "S \u2193 " ));
2017-04-15 11:45:01 +02:00
connect ( & m_updateTimer , SIGNAL ( timeout ()), this , SLOT ( updateHardware ()));
connect ( & m_statusTimer , SIGNAL ( timeout ()), this , SLOT ( updateStatus ()));
m_statusTimer . start ( 500 );
displaySettings ();
char recFileNameCStr [ 30 ];
sprintf ( recFileNameCStr , "test_%d.sdriq" , m_deviceAPI -> getDeviceUID ());
m_fileSink = new FileRecord ( std :: string ( recFileNameCStr ));
m_deviceAPI -> addSink ( m_fileSink );
2017-04-16 19:30:46 +02:00
connect ( m_deviceAPI -> getDeviceOutputMessageQueue (), SIGNAL ( messageEnqueued ()), this , SLOT ( handleMessagesToGUI ()), Qt :: QueuedConnection );
2017-04-15 11:45:01 +02:00
}
LimeSDRInputGUI ::~ LimeSDRInputGUI ()
{
m_deviceAPI -> removeSink ( m_fileSink );
delete m_fileSink ;
delete m_sampleSource ; // Valgrind memcheck
delete ui ;
}
2017-04-16 04:58:52 +02:00
void LimeSDRInputGUI :: destroy ()
{
delete this ;
}
void LimeSDRInputGUI :: setName ( const QString & name )
{
setObjectName ( name );
}
QString LimeSDRInputGUI :: getName () const
{
return objectName ();
}
void LimeSDRInputGUI :: resetToDefaults ()
{
m_settings . resetToDefaults ();
displaySettings ();
sendSettings ();
}
qint64 LimeSDRInputGUI :: getCenterFrequency () const
{
return m_settings . m_centerFrequency ;
}
void LimeSDRInputGUI :: setCenterFrequency ( qint64 centerFrequency )
{
m_settings . m_centerFrequency = centerFrequency ;
displaySettings ();
sendSettings ();
}
QByteArray LimeSDRInputGUI :: serialize () const
{
return m_settings . serialize ();
}
bool LimeSDRInputGUI :: deserialize ( const QByteArray & data )
{
2017-04-17 01:10:32 +02:00
if ( m_settings . deserialize ( data ))
{
2017-04-16 04:58:52 +02:00
displaySettings ();
sendSettings ();
return true ;
2017-04-17 01:10:32 +02:00
}
else
{
2017-04-16 04:58:52 +02:00
resetToDefaults ();
return false ;
}
}
2017-05-25 20:13:34 +02:00
bool LimeSDRInputGUI :: handleMessage ( const Message & message __attribute__ (( unused ))) // TODO: does not seem to be really useful in any of the source (+sink?) plugins
2017-04-17 01:10:32 +02:00
{
return false ;
}
2017-04-16 19:30:46 +02:00
void LimeSDRInputGUI :: handleMessagesToGUI ()
2017-04-16 04:58:52 +02:00
{
Message * message ;
while (( message = m_deviceAPI -> getDeviceOutputMessageQueue () -> pop ()) != 0 )
{
if ( DSPSignalNotification :: match ( * message ))
{
2017-04-20 00:48:00 +02:00
qDebug ( "LimeSDRInputGUI::handleMessagesToGUI: message: %s" , message -> getIdentifier ());
2017-04-16 04:58:52 +02:00
DSPSignalNotification * notif = ( DSPSignalNotification * ) message ;
m_sampleRate = notif -> getSampleRate ();
m_deviceCenterFrequency = notif -> getCenterFrequency ();
2017-04-19 00:00:47 +02:00
qDebug ( "LimeSDRInputGUI::handleMessagesToGUI: SampleRate: %d, CenterFrequency: %llu" , notif -> getSampleRate (), notif -> getCenterFrequency ());
2017-04-16 04:58:52 +02:00
updateSampleRateAndFrequency ();
m_fileSink -> handleMessage ( * notif ); // forward to file sink
2017-04-17 01:10:32 +02:00
delete message ;
}
else if ( LimeSDRInput :: MsgReportLimeSDRToGUI :: match ( * message ))
{
2017-04-20 00:48:00 +02:00
qDebug ( "LimeSDRInputGUI::handleMessagesToGUI: message: %s" , message -> getIdentifier ());
2017-04-17 01:10:32 +02:00
LimeSDRInput :: MsgReportLimeSDRToGUI * report = ( LimeSDRInput :: MsgReportLimeSDRToGUI * ) message ;
2017-04-19 01:04:57 +02:00
m_settings . m_centerFrequency = report -> getCenterFrequency ();
2017-04-17 01:10:32 +02:00
m_settings . m_devSampleRate = report -> getSampleRate ();
m_settings . m_log2HardDecim = report -> getLog2HardDecim ();
blockApplySettings ( true );
displaySettings ();
blockApplySettings ( false );
2017-04-19 01:04:57 +02:00
LimeSDRInput :: MsgSetReferenceConfig * conf = LimeSDRInput :: MsgSetReferenceConfig :: create ( m_settings );
m_sampleSource -> getInputMessageQueue () -> push ( conf );
2017-04-17 01:10:32 +02:00
2017-04-16 04:58:52 +02:00
delete message ;
}
2017-04-23 03:36:10 +02:00
else if ( DeviceLimeSDRShared :: MsgCrossReportToGUI :: match ( * message ))
{
DeviceLimeSDRShared :: MsgCrossReportToGUI * report = ( DeviceLimeSDRShared :: MsgCrossReportToGUI * ) message ;
m_settings . m_devSampleRate = report -> getSampleRate ();
blockApplySettings ( true );
displaySettings ();
blockApplySettings ( false );
LimeSDRInput :: MsgSetReferenceConfig * conf = LimeSDRInput :: MsgSetReferenceConfig :: create ( m_settings );
m_sampleSource -> getInputMessageQueue () -> push ( conf );
delete message ;
}
2017-04-19 18:41:55 +02:00
else if ( LimeSDRInput :: MsgReportStreamInfo :: match ( * message ))
{
LimeSDRInput :: MsgReportStreamInfo * report = ( LimeSDRInput :: MsgReportStreamInfo * ) message ;
if ( report -> getSuccess ())
{
2017-04-19 22:43:18 +02:00
ui -> streamStatusLabel -> setStyleSheet ( "QLabel { background-color : green; }" );
ui -> streamLinkRateText -> setText ( tr ( "%1 MB/s" ). arg ( QString :: number ( report -> getLinkRate () / 1000000.0f , 'f' , 3 )));
if ( report -> getUnderrun () > 0 ) {
ui -> underrunLabel -> setStyleSheet ( "QLabel { background-color : red; }" );
} else {
ui -> underrunLabel -> setStyleSheet ( "QLabel { background:rgb(79,79,79); }" );
}
if ( report -> getOverrun () > 0 ) {
ui -> overrunLabel -> setStyleSheet ( "QLabel { background-color : red; }" );
} else {
ui -> overrunLabel -> setStyleSheet ( "QLabel { background:rgb(79,79,79); }" );
2017-04-19 18:41:55 +02:00
}
2017-04-19 22:43:18 +02:00
if ( report -> getDroppedPackets () > 0 ) {
ui -> droppedLabel -> setStyleSheet ( "QLabel { background-color : red; }" );
} else {
ui -> droppedLabel -> setStyleSheet ( "QLabel { background:rgb(79,79,79); }" );
2017-04-19 18:41:55 +02:00
}
2017-04-19 22:43:18 +02:00
ui -> fifoBar -> setMaximum ( report -> getFifoSize ());
ui -> fifoBar -> setValue ( report -> getFifoFilledCount ());
2017-04-24 03:12:02 +02:00
ui -> fifoBar -> setToolTip ( tr ( "FIFO fill %1/%2 samples" ). arg ( QString :: number ( report -> getFifoFilledCount ())). arg ( QString :: number ( report -> getFifoSize ())));
2017-04-19 18:41:55 +02:00
}
else
{
2017-04-19 22:43:18 +02:00
ui -> streamStatusLabel -> setStyleSheet ( "QLabel { background:rgb(79,79,79); }" );
2017-04-19 18:41:55 +02:00
}
}
2017-07-03 14:12:51 +02:00
else if ( DeviceLimeSDRShared :: MsgReportDeviceInfo :: match ( * message ))
2017-07-03 13:42:11 +02:00
{
2017-07-03 14:12:51 +02:00
DeviceLimeSDRShared :: MsgReportDeviceInfo * report = ( DeviceLimeSDRShared :: MsgReportDeviceInfo * ) message ;
2017-07-03 13:42:11 +02:00
ui -> temperatureText -> setText ( tr ( "%1C" ). arg ( QString :: number ( report -> getTemperature (), 'f' , 0 )));
}
2017-04-16 04:58:52 +02:00
}
}
2017-07-07 00:01:01 +02:00
void LimeSDRInputGUI :: updateADCRate ()
{
uint32_t adcRate = m_settings . m_devSampleRate * ( 1 << m_settings . m_log2HardDecim );
if ( adcRate < 100000000 ) {
ui -> adcRateLabel -> setText ( tr ( "%1k" ). arg ( QString :: number ( adcRate / 1000.0f , 'g' , 5 )));
} else {
ui -> adcRateLabel -> setText ( tr ( "%1M" ). arg ( QString :: number ( adcRate / 1000000.0f , 'g' , 5 )));
}
}
2017-04-16 04:58:52 +02:00
void LimeSDRInputGUI :: updateSampleRateAndFrequency ()
{
m_deviceAPI -> getSpectrum () -> setSampleRate ( m_sampleRate );
m_deviceAPI -> getSpectrum () -> setCenterFrequency ( m_deviceCenterFrequency );
ui -> deviceRateLabel -> setText ( tr ( "%1k" ). arg ( QString :: number ( m_sampleRate / 1000.0f , 'g' , 5 )));
}
void LimeSDRInputGUI :: displaySettings ()
{
ui -> centerFrequency -> setValue ( m_settings . m_centerFrequency / 1000 );
ui -> sampleRate -> setValue ( m_settings . m_devSampleRate );
ui -> dcOffset -> setChecked ( m_settings . m_dcBlock );
ui -> iqImbalance -> setChecked ( m_settings . m_iqCorrection );
ui -> hwDecim -> setCurrentIndex ( m_settings . m_log2HardDecim );
ui -> swDecim -> setCurrentIndex ( m_settings . m_log2SoftDecim );
2017-04-15 11:45:01 +02:00
2017-07-07 00:01:01 +02:00
updateADCRate ();
2017-04-18 01:16:39 +02:00
ui -> lpf -> setValue ( m_settings . m_lpfBW / 1000 );
2017-04-16 04:58:52 +02:00
ui -> lpFIREnable -> setChecked ( m_settings . m_lpfFIREnable );
2017-04-18 00:50:03 +02:00
ui -> lpFIR -> setValue ( m_settings . m_lpfFIRBW / 1000 );
2017-04-16 04:58:52 +02:00
ui -> gain -> setValue ( m_settings . m_gain );
2017-07-04 23:48:24 +02:00
ui -> gainText -> setText ( tr ( "%1" ). arg ( m_settings . m_gain ));
2017-04-20 18:21:01 +02:00
2017-05-07 01:47:31 +02:00
ui -> antenna -> setCurrentIndex (( int ) m_settings . m_antennaPath );
2017-07-04 23:48:24 +02:00
ui -> gainMode -> setCurrentIndex (( int ) m_settings . m_gainMode );
ui -> lnaGain -> setValue ( m_settings . m_lnaGain );
ui -> tiaGain -> setCurrentIndex ( m_settings . m_tiaGain - 1 );
ui -> pgaGain -> setValue ( m_settings . m_pgaGain );
if ( m_settings . m_gainMode == LimeSDRInputSettings :: GAIN_AUTO )
{
ui -> gain -> setEnabled ( true );
ui -> lnaGain -> setEnabled ( false );
ui -> tiaGain -> setEnabled ( false );
ui -> pgaGain -> setEnabled ( false );
}
else
{
ui -> gain -> setEnabled ( false );
ui -> lnaGain -> setEnabled ( true );
ui -> tiaGain -> setEnabled ( true );
ui -> pgaGain -> setEnabled ( true );
}
2017-04-20 23:02:06 +02:00
setNCODisplay ();
2017-05-12 03:31:42 +02:00
ui -> ncoEnable -> setChecked ( m_settings . m_ncoEnable );
2017-04-20 23:02:06 +02:00
}
void LimeSDRInputGUI :: setNCODisplay ()
{
2017-04-20 18:21:01 +02:00
int ncoHalfRange = ( m_settings . m_devSampleRate * ( 1 << ( m_settings . m_log2HardDecim ))) / 2 ;
2017-08-04 09:33:25 +02:00
int lowBoundary = std :: max ( 0 , ( int ) m_settings . m_centerFrequency - ncoHalfRange );
2017-04-20 18:21:01 +02:00
ui -> ncoFrequency -> setValueRange ( 7 ,
2017-08-04 09:33:25 +02:00
lowBoundary / 1000 ,
2017-04-20 18:21:01 +02:00
( m_settings . m_centerFrequency + ncoHalfRange ) / 1000 ); // frequency dial is in kHz
2017-04-20 20:18:50 +02:00
ui -> ncoFrequency -> setValue (( m_settings . m_centerFrequency + m_settings . m_ncoFrequency ) / 1000 );
2017-04-16 04:58:52 +02:00
}
void LimeSDRInputGUI :: sendSettings ()
{
if ( ! m_updateTimer . isActive ())
m_updateTimer . start ( 100 );
}
void LimeSDRInputGUI :: updateHardware ()
{
2017-04-17 01:10:32 +02:00
if ( m_doApplySettings )
{
2017-04-18 01:16:39 +02:00
qDebug () << "LimeSDRInputGUI::updateHardware" ;
2017-04-17 01:10:32 +02:00
LimeSDRInput :: MsgConfigureLimeSDR * message = LimeSDRInput :: MsgConfigureLimeSDR :: create ( m_settings );
m_sampleSource -> getInputMessageQueue () -> push ( message );
m_updateTimer . stop ();
}
2017-04-16 04:58:52 +02:00
}
void LimeSDRInputGUI :: updateStatus ()
{
int state = m_deviceAPI -> state ();
if ( m_lastEngineState != state )
{
switch ( state )
{
case DSPDeviceSourceEngine :: StNotStarted :
ui -> startStop -> setStyleSheet ( "QToolButton { background:rgb(79,79,79); }" );
break ;
case DSPDeviceSourceEngine :: StIdle :
ui -> startStop -> setStyleSheet ( "QToolButton { background-color : blue; }" );
break ;
case DSPDeviceSourceEngine :: StRunning :
ui -> startStop -> setStyleSheet ( "QToolButton { background-color : green; }" );
break ;
case DSPDeviceSourceEngine :: StError :
ui -> startStop -> setStyleSheet ( "QToolButton { background-color : red; }" );
QMessageBox :: information ( this , tr ( "Message" ), m_deviceAPI -> errorMessage ());
break ;
default :
break ;
}
m_lastEngineState = state ;
}
2017-04-19 18:41:55 +02:00
if ( m_statusCounter < 1 )
{
m_statusCounter ++ ;
}
else
{
LimeSDRInput :: MsgGetStreamInfo * message = LimeSDRInput :: MsgGetStreamInfo :: create ();
m_sampleSource -> getInputMessageQueue () -> push ( message );
m_statusCounter = 0 ;
2017-07-03 13:42:11 +02:00
}
if ( m_deviceStatusCounter < 10 )
{
m_deviceStatusCounter ++ ;
}
else
{
2017-07-03 23:26:06 +02:00
if ( m_deviceAPI -> isBuddyLeader ())
{
LimeSDRInput :: MsgGetDeviceInfo * message = LimeSDRInput :: MsgGetDeviceInfo :: create ();
m_sampleSource -> getInputMessageQueue () -> push ( message );
}
2017-07-03 13:42:11 +02:00
m_deviceStatusCounter = 0 ;
2017-04-19 18:41:55 +02:00
}
2017-04-16 04:58:52 +02:00
}
2017-04-15 11:45:01 +02:00
2017-04-17 01:10:32 +02:00
void LimeSDRInputGUI :: blockApplySettings ( bool block )
{
m_doApplySettings = ! block ;
}
void LimeSDRInputGUI :: on_startStop_toggled ( bool checked )
{
2017-04-17 10:05:05 +02:00
if ( checked )
{
if ( m_deviceAPI -> initAcquisition ())
{
m_deviceAPI -> startAcquisition ();
DSPEngine :: instance () -> startAudioOutput ();
}
}
else
{
m_deviceAPI -> stopAcquisition ();
DSPEngine :: instance () -> stopAudioOutput ();
}
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_record_toggled ( bool checked )
{
2017-04-17 10:05:05 +02:00
if ( checked )
{
ui -> record -> setStyleSheet ( "QToolButton { background-color : red; }" );
m_fileSink -> startRecording ();
}
else
{
ui -> record -> setStyleSheet ( "QToolButton { background:rgb(79,79,79); }" );
m_fileSink -> stopRecording ();
}
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_centerFrequency_changed ( quint64 value )
{
2017-04-17 10:05:05 +02:00
m_settings . m_centerFrequency = value * 1000 ;
2017-04-20 23:02:06 +02:00
setNCODisplay ();
2017-04-17 10:05:05 +02:00
sendSettings ();
2017-04-17 01:10:32 +02:00
}
2017-04-20 18:21:01 +02:00
void LimeSDRInputGUI :: on_ncoFrequency_changed ( quint64 value )
{
2017-04-20 20:18:50 +02:00
m_settings . m_ncoFrequency = ( int64_t ) value - ( int64_t ) m_settings . m_centerFrequency / 1000 ;
m_settings . m_ncoFrequency *= 1000 ;
2017-04-20 18:21:01 +02:00
sendSettings ();
}
void LimeSDRInputGUI :: on_ncoEnable_toggled ( bool checked )
{
m_settings . m_ncoEnable = checked ;
sendSettings ();
}
2017-05-25 20:13:34 +02:00
void LimeSDRInputGUI :: on_ncoReset_clicked ( bool checked __attribute__ (( unused )))
2017-04-20 18:21:01 +02:00
{
m_settings . m_ncoFrequency = 0 ;
2017-04-20 20:18:50 +02:00
ui -> ncoFrequency -> setValue ( m_settings . m_centerFrequency / 1000 );
2017-04-20 18:21:01 +02:00
sendSettings ();
}
2017-04-17 01:10:32 +02:00
void LimeSDRInputGUI :: on_dcOffset_toggled ( bool checked )
{
2017-04-17 10:05:05 +02:00
m_settings . m_dcBlock = checked ;
sendSettings ();
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_iqImbalance_toggled ( bool checked )
{
2017-04-17 10:05:05 +02:00
m_settings . m_iqCorrection = checked ;
sendSettings ();
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_sampleRate_changed ( quint64 value )
{
2017-04-17 10:05:05 +02:00
m_settings . m_devSampleRate = value ;
2017-07-07 00:01:01 +02:00
updateADCRate ();
2017-04-20 23:02:06 +02:00
setNCODisplay ();
2017-04-17 10:05:05 +02:00
sendSettings ();}
2017-04-17 01:10:32 +02:00
void LimeSDRInputGUI :: on_hwDecim_currentIndexChanged ( int index )
{
2017-04-17 10:05:05 +02:00
if (( index < 0 ) || ( index > 5 ))
return ;
m_settings . m_log2HardDecim = index ;
2017-07-07 00:01:01 +02:00
updateADCRate ();
2017-04-20 23:02:06 +02:00
setNCODisplay ();
2017-04-17 10:05:05 +02:00
sendSettings ();
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_swDecim_currentIndexChanged ( int index )
{
2017-05-08 17:30:08 +02:00
if (( index < 0 ) || ( index > 6 ))
2017-04-17 10:05:05 +02:00
return ;
m_settings . m_log2SoftDecim = index ;
sendSettings ();
2017-04-17 01:10:32 +02:00
}
2017-04-18 02:01:30 +02:00
void LimeSDRInputGUI :: on_lpf_changed ( quint64 value )
2017-04-17 01:10:32 +02:00
{
2017-04-18 01:16:39 +02:00
m_settings . m_lpfBW = value * 1000 ;
2017-04-17 10:05:05 +02:00
sendSettings ();
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_lpFIREnable_toggled ( bool checked )
{
2017-04-17 10:05:05 +02:00
m_settings . m_lpfFIREnable = checked ;
sendSettings ();
2017-04-17 01:10:32 +02:00
}
void LimeSDRInputGUI :: on_lpFIR_changed ( quint64 value )
{
2017-04-18 00:50:03 +02:00
m_settings . m_lpfFIRBW = value * 1000 ;
2017-04-20 18:21:01 +02:00
if ( m_settings . m_lpfFIREnable ) { // do not send the update if the FIR is disabled
sendSettings ();
}
2017-04-17 01:10:32 +02:00
}
2017-07-04 23:48:24 +02:00
void LimeSDRInputGUI :: on_gainMode_currentIndexChanged ( int index )
{
m_settings . m_gainMode = ( LimeSDRInputSettings :: GainMode ) index ;
if ( index == 0 )
{
ui -> gain -> setEnabled ( true );
ui -> lnaGain -> setEnabled ( false );
ui -> tiaGain -> setEnabled ( false );
ui -> pgaGain -> setEnabled ( false );
}
else
{
ui -> gain -> setEnabled ( false );
ui -> lnaGain -> setEnabled ( true );
ui -> tiaGain -> setEnabled ( true );
ui -> pgaGain -> setEnabled ( true );
}
sendSettings ();
}
2017-04-17 01:10:32 +02:00
void LimeSDRInputGUI :: on_gain_valueChanged ( int value )
{
2017-04-17 10:05:05 +02:00
m_settings . m_gain = value ;
2017-07-04 23:48:24 +02:00
ui -> gainText -> setText ( tr ( "%1" ). arg ( m_settings . m_gain ));
sendSettings ();
}
void LimeSDRInputGUI :: on_lnaGain_valueChanged ( int value )
{
m_settings . m_lnaGain = value ;
ui -> lnaGainText -> setText ( tr ( "%1" ). arg ( m_settings . m_lnaGain ));
sendSettings ();
}
void LimeSDRInputGUI :: on_tiaGain_currentIndexChanged ( int index )
{
m_settings . m_tiaGain = index + 1 ;
sendSettings ();
}
void LimeSDRInputGUI :: on_pgaGain_valueChanged ( int value )
{
m_settings . m_pgaGain = value ;
ui -> pgaGainText -> setText ( tr ( "%1" ). arg ( m_settings . m_pgaGain ));
2017-04-17 10:05:05 +02:00
sendSettings ();
2017-04-17 01:10:32 +02:00
}
2017-04-23 16:23:01 +02:00
void LimeSDRInputGUI :: on_antenna_currentIndexChanged ( int index )
{
m_settings . m_antennaPath = ( LimeSDRInputSettings :: PathRFE ) index ;
sendSettings ();
}