2022-05-21 11:20:38 +02:00
///////////////////////////////////////////////////////////////////////////////////
2023-11-18 13:12:18 +01:00
// Copyright (C) 2022-2023 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
2022-05-21 11:20:38 +02:00
// //
// 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 //
// (at your option) any later version. //
// //
// 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 <QNetworkAccessManager>
#include <QNetworkReply>
#include "SWGDeviceState.h"
#include "SWGErrorResponse.h"
2022-05-22 11:59:02 +02:00
#include "SWGFeatureSettings.h"
#include "SWGFeatureReport.h"
#include "SWGFeatureActions.h"
2022-05-21 11:20:38 +02:00
#include "util/simpleserializer.h"
#include "util/serialutil.h"
2022-05-22 11:59:02 +02:00
#include "settings/serializable.h"
2022-05-21 11:20:38 +02:00
#include "webapi/webapiadapterinterface.h"
#include "limerfe.h"
MESSAGE_CLASS_DEFINITION ( LimeRFE :: MsgConfigureLimeRFE , Message )
2022-05-22 11:59:02 +02:00
MESSAGE_CLASS_DEFINITION ( LimeRFE :: MsgReportSetRx , Message )
MESSAGE_CLASS_DEFINITION ( LimeRFE :: MsgReportSetTx , Message )
2022-05-21 11:20:38 +02:00
const char * const LimeRFE :: m_featureIdURI = "sdrangel.feature.limerfe" ;
const char * const LimeRFE :: m_featureId = "LimeRFE" ;
const std :: map < int , std :: string > LimeRFE :: m_errorCodesMap = {
{ 0 , "OK" },
{ - 4 , "Error synchronizing communication" },
{ - 3 , "Non-configurable GPIO pin specified. Only pins 4 and 5 are configurable." },
{ - 2 , "Problem with .ini configuration file" },
{ - 1 , "Communication error" },
2024-07-10 22:59:13 +02:00
{ 1 , "Wrong TX connector - not possible to route TX of the selected channel to the specified port" },
{ 2 , "Wrong RX connector - not possible to route RX of the selected channel to the specified port" },
2022-05-21 11:20:38 +02:00
{ 3 , "Mode TXRX not allowed - when the same port is selected for RX and TX, it is not allowed to use mode RX & TX" },
{ 4 , "Wrong mode for cellular channel - Cellular FDD bands (1, 2, 3, and 7) are only allowed mode RX & TX, while TDD band 38 is allowed only RX or TX mode" },
{ 5 , "Cellular channels must be the same both for RX and TX" },
{ 6 , "Requested channel code is wrong" }
};
LimeRFE :: LimeRFE ( WebAPIAdapterInterface * webAPIAdapterInterface ) :
Feature ( m_featureIdURI , webAPIAdapterInterface ),
m_webAPIAdapterInterface ( webAPIAdapterInterface ),
m_rfeDevice ( nullptr )
{
setObjectName ( m_featureId );
m_state = StIdle ;
m_errorMessage = "LimeRFE error" ;
m_networkManager = new QNetworkAccessManager ();
QObject :: connect (
m_networkManager ,
& QNetworkAccessManager :: finished ,
this ,
& LimeRFE :: networkManagerFinished
);
listComPorts ();
}
LimeRFE ::~ LimeRFE ()
{
QObject :: disconnect (
m_networkManager ,
& QNetworkAccessManager :: finished ,
this ,
& LimeRFE :: networkManagerFinished
);
delete m_networkManager ;
closeDevice ();
}
void LimeRFE :: start ()
{
qDebug ( "LimeRFE::start" );
m_state = StRunning ;
}
void LimeRFE :: stop ()
{
qDebug ( "LimeRFE::stop" );
m_state = StIdle ;
}
void LimeRFE :: listComPorts ()
{
m_comPorts . clear ();
std :: vector < std :: string > comPorts ;
SerialUtil :: getComPorts ( comPorts , "ttyUSB[0-9]+" ); // regex is for Linux only
for ( std :: vector < std :: string >:: const_iterator it = comPorts . begin (); it != comPorts . end (); ++ it ) {
m_comPorts . push_back ( QString ( it -> c_str ()));
}
}
2022-11-24 22:48:02 +01:00
void LimeRFE :: applySettings ( const LimeRFESettings & settings , const QList < QString >& settingsKeys , bool force )
2022-05-22 11:59:02 +02:00
{
2022-11-24 22:48:02 +01:00
qDebug () << "LimeRFE::applySettings:" << settings . getDebugString ( settingsKeys , force ) << " force:" << force ;
if ( force ) {
m_settings = settings ;
} else {
m_settings . applySettings ( settingsKeys , settings );
}
2022-05-22 11:59:02 +02:00
}
2022-05-21 11:20:38 +02:00
bool LimeRFE :: handleMessage ( const Message & cmd )
{
2022-05-22 11:59:02 +02:00
if ( MsgConfigureLimeRFE :: match ( cmd ))
{
MsgConfigureLimeRFE & cfg = ( MsgConfigureLimeRFE & ) cmd ;
qDebug () << "LimeRFE::handleMessage: MsgConfigureLimeRFE" ;
2022-11-24 22:48:02 +01:00
applySettings ( cfg . getSettings (), cfg . getSettingsKeys (), cfg . getForce ());
2022-05-22 11:59:02 +02:00
return true ;
}
2022-05-21 11:20:38 +02:00
return false ;
}
QByteArray LimeRFE :: serialize () const
{
SimpleSerializer s ( 1 );
s . writeBlob ( 1 , m_settings . serialize ());
return s . final ();
}
bool LimeRFE :: deserialize ( const QByteArray & data )
{
SimpleDeserializer d ( data );
if ( ! d . isValid ())
{
m_settings . resetToDefaults ();
return false ;
}
if ( d . getVersion () == 1 )
{
QByteArray bytetmp ;
d . readBlob ( 1 , & bytetmp );
if ( m_settings . deserialize ( bytetmp ))
{
2022-11-24 22:48:02 +01:00
MsgConfigureLimeRFE * msg = MsgConfigureLimeRFE :: create ( m_settings , QList < QString > (), true );
2022-05-21 11:20:38 +02:00
m_inputMessageQueue . push ( msg );
2022-05-22 23:13:04 +02:00
return true ;
2022-05-21 11:20:38 +02:00
}
else
{
m_settings . resetToDefaults ();
2022-11-24 22:48:02 +01:00
MsgConfigureLimeRFE * msg = MsgConfigureLimeRFE :: create ( m_settings , QList < QString > (), true );
2022-05-21 11:20:38 +02:00
m_inputMessageQueue . push ( msg );
2022-05-22 23:13:04 +02:00
return false ;
2022-05-21 11:20:38 +02:00
}
}
else
{
return false ;
}
}
int LimeRFE :: openDevice ( const std :: string & serialDeviceName )
{
closeDevice ();
rfe_dev_t * rfeDevice = RFE_Open ( serialDeviceName . c_str (), nullptr );
if ( rfeDevice != ( void * ) - 1 )
{
m_rfeDevice = rfeDevice ;
return 0 ;
}
else
{
return - 1 ;
}
}
void LimeRFE :: closeDevice ()
{
if ( m_rfeDevice )
{
RFE_Close ( m_rfeDevice );
m_rfeDevice = nullptr ;
}
}
int LimeRFE :: configure ()
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
qDebug () << "LimeRFE::configure: "
<< "attValue: " << ( int ) m_rfeBoardState . attValue
<< "channelIDRX: " << ( int ) m_rfeBoardState . channelIDRX
<< "channelIDTX: " << ( int ) m_rfeBoardState . channelIDTX
<< "mode: " << ( int ) m_rfeBoardState . mode
<< "notchOnOff: " << ( int ) m_rfeBoardState . notchOnOff
<< "selPortRX: " << ( int ) m_rfeBoardState . selPortRX
<< "selPortTX: " << ( int ) m_rfeBoardState . selPortTX
<< "enableSWR: " << ( int ) m_rfeBoardState . enableSWR
<< "sourceSWR: " << ( int ) m_rfeBoardState . sourceSWR ;
int rc = RFE_ConfigureState ( m_rfeDevice , m_rfeBoardState );
if ( rc != 0 ) {
qInfo ( "LimeRFE::configure: %s" , getError ( rc ). c_str ());
} else {
qDebug () << "LimeRFE::configure: done" ;
}
return rc ;
}
int LimeRFE :: getState ()
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
int rc = RFE_GetState ( m_rfeDevice , & m_rfeBoardState );
qDebug () << "LimeRFE::getState: "
<< "attValue: " << ( int ) m_rfeBoardState . attValue
<< "channelIDRX: " << ( int ) m_rfeBoardState . channelIDRX
<< "channelIDTX: " << ( int ) m_rfeBoardState . channelIDTX
<< "mode: " << ( int ) m_rfeBoardState . mode
<< "notchOnOff: " << ( int ) m_rfeBoardState . notchOnOff
<< "selPortRX: " << ( int ) m_rfeBoardState . selPortRX
<< "selPortTX: " << ( int ) m_rfeBoardState . selPortTX
<< "enableSWR: " << ( int ) m_rfeBoardState . enableSWR
<< "sourceSWR: " << ( int ) m_rfeBoardState . sourceSWR ;
if ( rc != 0 ) {
qInfo ( "LimeRFE::getState: %s" , getError ( rc ). c_str ());
}
2022-05-22 19:53:57 +02:00
if ( m_rfeBoardState . mode == RFE_MODE_RX )
{
m_rxOn = true ;
m_txOn = false ;
}
else if ( m_rfeBoardState . mode == RFE_MODE_TX )
{
m_rxOn = false ;
m_txOn = true ;
}
else if ( m_rfeBoardState . mode == RFE_MODE_NONE )
{
m_rxOn = false ;
m_txOn = false ;
}
else if ( m_rfeBoardState . mode == RFE_MODE_TXRX )
{
m_rxOn = true ;
m_txOn = true ;
}
2022-05-21 11:20:38 +02:00
return rc ;
}
std :: string LimeRFE :: getError ( int errorCode )
{
std :: map < int , std :: string >:: const_iterator it = m_errorCodesMap . find ( errorCode );
if ( it == m_errorCodesMap . end ()) {
return "Unknown error" ;
} else {
return it -> second ;
}
}
2022-05-22 19:53:57 +02:00
int LimeRFE :: setRx ( bool rxOn )
2022-05-21 11:20:38 +02:00
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
2022-05-22 11:59:02 +02:00
int mode = RFE_MODE_NONE ;
2022-05-21 11:20:38 +02:00
2022-05-22 11:59:02 +02:00
if ( rxOn )
{
2022-05-22 19:53:57 +02:00
if ( m_txOn ) {
2022-05-22 11:59:02 +02:00
mode = RFE_MODE_TXRX ;
} else {
mode = RFE_MODE_RX ;
}
}
else
{
2022-05-22 19:53:57 +02:00
if ( m_txOn ) {
2022-05-22 11:59:02 +02:00
mode = RFE_MODE_TX ;
}
}
2022-05-21 11:20:38 +02:00
int rc = RFE_Mode ( m_rfeDevice , mode );
2022-08-17 11:40:22 +02:00
if ( rc == 0 )
{
2022-05-22 19:53:57 +02:00
m_rxOn = rxOn ;
2023-01-14 20:42:31 +01:00
m_rfeBoardState . mode = mode ;
2022-08-17 11:40:22 +02:00
qDebug ( "LimeRFE::setRx: switch %s mode: %d" , rxOn ? "on" : "off" , mode );
}
else
{
qInfo ( "LimeRFE::setRx %s: %s" , rxOn ? "on" : "off" , getError ( rc ). c_str ());
2022-05-21 11:20:38 +02:00
}
return rc ;
}
2022-05-22 19:53:57 +02:00
int LimeRFE :: setTx ( bool txOn )
2022-05-21 11:20:38 +02:00
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
2022-05-22 11:59:02 +02:00
int mode = RFE_MODE_NONE ;
if ( txOn )
{
2022-05-22 19:53:57 +02:00
if ( m_rxOn ) {
2022-05-22 11:59:02 +02:00
mode = RFE_MODE_TXRX ;
} else {
mode = RFE_MODE_TX ;
}
}
else
{
2022-05-22 19:53:57 +02:00
if ( m_rxOn ) {
2022-05-22 11:59:02 +02:00
mode = RFE_MODE_RX ;
}
}
2022-05-21 11:20:38 +02:00
int rc = RFE_Mode ( m_rfeDevice , mode );
2022-08-17 11:40:22 +02:00
if ( rc == 0 )
{
2022-05-22 19:53:57 +02:00
m_txOn = txOn ;
2023-01-14 20:42:31 +01:00
m_rfeBoardState . mode = mode ;
2022-08-17 11:40:22 +02:00
qDebug ( "LimeRFE::setTx: switch %s mode: %d" , txOn ? "on" : "off" , mode );
}
else
{
qInfo ( "LimeRFE::setTx %s: %s" , txOn ? "on" : "off" , getError ( rc ). c_str ());
2022-05-21 11:20:38 +02:00
}
return rc ;
}
bool LimeRFE :: turnDevice ( int deviceSetIndex , bool on )
{
qDebug ( "LimeRFE::turnDevice %d: %s" , deviceSetIndex , on ? "on" : "off" );
SWGSDRangel :: SWGDeviceState response ;
SWGSDRangel :: SWGErrorResponse error ;
int httpCode ;
if ( on ) {
httpCode = m_webAPIAdapterInterface -> devicesetDeviceRunPost ( deviceSetIndex , response , error );
} else {
httpCode = m_webAPIAdapterInterface -> devicesetDeviceRunDelete ( deviceSetIndex , response , error );
}
if ( httpCode / 100 == 2 )
{
qDebug ( "LimeRFE::turnDevice: %s success" , on ? "on" : "off" );
return true ;
}
else
{
qWarning ( "LimeRFE::turnDevice: error: %s" , qPrintable ( * error . getMessage ()));
return false ;
}
}
int LimeRFE :: getFwdPower ( int & powerDB )
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
int power ;
int rc = RFE_ReadADC ( m_rfeDevice , RFE_ADC1 , & power );
if ( rc == 0 ) {
powerDB = power ;
}
return rc ;
}
int LimeRFE :: getRefPower ( int & powerDB )
{
if ( ! m_rfeDevice ) {
return - 1 ;
}
int power ;
int rc = RFE_ReadADC ( m_rfeDevice , RFE_ADC2 , & power );
if ( rc == 0 ) {
powerDB = power ;
}
return rc ;
}
void LimeRFE :: settingsToState ( const LimeRFESettings & settings )
{
if ( settings . m_rxChannels == LimeRFESettings :: ChannelGroups :: ChannelsCellular )
{
if ( settings . m_rxCellularChannel == LimeRFESettings :: CellularChannel :: CellularBand1 )
{
m_rfeBoardState . channelIDRX = RFE_CID_CELL_BAND01 ;
m_rfeBoardState . mode = RFE_MODE_TXRX ;
}
else if ( settings . m_rxCellularChannel == LimeRFESettings :: CellularChannel :: CellularBand2 )
{
m_rfeBoardState . channelIDRX = RFE_CID_CELL_BAND02 ;
m_rfeBoardState . mode = RFE_MODE_TXRX ;
}
else if ( settings . m_rxCellularChannel == LimeRFESettings :: CellularChannel :: CellularBand3 )
{
m_rfeBoardState . channelIDRX = RFE_CID_CELL_BAND03 ;
m_rfeBoardState . mode = RFE_MODE_TXRX ;
}
else if ( settings . m_rxCellularChannel == LimeRFESettings :: CellularChannel :: CellularBand38 )
{
m_rfeBoardState . channelIDRX = RFE_CID_CELL_BAND38 ;
}
else if ( settings . m_rxCellularChannel == LimeRFESettings :: CellularChannel :: CellularBand7 )
{
m_rfeBoardState . channelIDRX = RFE_CID_CELL_BAND07 ;
m_rfeBoardState . mode = RFE_MODE_TXRX ;
}
m_rfeBoardState . selPortRX = RFE_PORT_1 ;
m_rfeBoardState . selPortTX = RFE_PORT_1 ;
m_rfeBoardState . channelIDTX = m_rfeBoardState . channelIDRX ;
}
else
{
if ( settings . m_rxChannels == LimeRFESettings :: ChannelGroups :: ChannelsWideband )
{
if ( settings . m_rxWidebandChannel == LimeRFESettings :: WidebandChannel :: WidebandLow ) {
m_rfeBoardState . channelIDRX = RFE_CID_WB_1000 ;
} else if ( settings . m_rxWidebandChannel == LimeRFESettings :: WidebandChannel :: WidebandHigh ) {
m_rfeBoardState . channelIDRX = RFE_CID_WB_4000 ;
}
}
else if ( settings . m_rxChannels == LimeRFESettings :: ChannelGroups :: ChannelsHAM )
{
if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_30M ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0030 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_50_70MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0070 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_144_146MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0145 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_220_225MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0220 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_430_440MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0435 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_902_928MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_0920 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_1240_1325MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_1280 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_2300_2450MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_2400 ;
} else if ( settings . m_rxHAMChannel == LimeRFESettings :: HAMChannel :: HAM_3300_3500MHz ) {
m_rfeBoardState . channelIDRX = RFE_CID_HAM_3500 ;
}
}
if ( settings . m_rxPort == LimeRFESettings :: RxPort :: RxPortJ3 ) {
m_rfeBoardState . selPortRX = RFE_PORT_1 ;
} else if ( settings . m_rxPort == LimeRFESettings :: RxPort :: RxPortJ5 ) {
m_rfeBoardState . selPortRX = RFE_PORT_3 ;
}
if ( settings . m_txRxDriven )
{
m_rfeBoardState . channelIDTX = m_rfeBoardState . channelIDRX ;
}
else
{
if ( settings . m_txChannels == LimeRFESettings :: ChannelGroups :: ChannelsWideband )
{
if ( settings . m_txWidebandChannel == LimeRFESettings :: WidebandChannel :: WidebandLow ) {
m_rfeBoardState . channelIDTX = RFE_CID_WB_1000 ;
} else if ( settings . m_txWidebandChannel == LimeRFESettings :: WidebandChannel :: WidebandHigh ) {
m_rfeBoardState . channelIDTX = RFE_CID_WB_4000 ;
}
}
else if ( settings . m_txChannels == LimeRFESettings :: ChannelGroups :: ChannelsHAM )
{
if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_30M ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0030 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_50_70MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0070 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_144_146MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0145 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_220_225MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0220 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_430_440MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0435 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_902_928MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_0920 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_1240_1325MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_1280 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_2300_2450MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_2400 ;
} else if ( settings . m_txHAMChannel == LimeRFESettings :: HAMChannel :: HAM_3300_3500MHz ) {
m_rfeBoardState . channelIDTX = RFE_CID_HAM_3500 ;
}
}
}
if ( settings . m_txPort == LimeRFESettings :: TxPort :: TxPortJ3 ) {
m_rfeBoardState . selPortTX = RFE_PORT_1 ;
} else if ( settings . m_txPort == LimeRFESettings :: TxPort :: TxPortJ4 ) {
m_rfeBoardState . selPortTX = RFE_PORT_2 ;
} else if ( settings . m_txPort == LimeRFESettings :: TxPort :: TxPortJ5 ) {
m_rfeBoardState . selPortTX = RFE_PORT_3 ;
}
}
m_rfeBoardState . attValue = settings . m_attenuationFactor > 7 ? 7 : settings . m_attenuationFactor ;
m_rfeBoardState . notchOnOff = settings . m_amfmNotch ;
m_rfeBoardState . enableSWR = settings . m_swrEnable ? RFE_SWR_ENABLE : RFE_SWR_DISABLE ;
if ( settings . m_swrSource == LimeRFESettings :: SWRSource :: SWRExternal ) {
m_rfeBoardState . sourceSWR = RFE_SWR_SRC_EXT ;
} else if ( settings . m_swrSource == LimeRFESettings :: SWRSource :: SWRCellular ) {
m_rfeBoardState . sourceSWR = RFE_SWR_SRC_CELL ;
}
}
2022-11-24 22:48:02 +01:00
void LimeRFE :: stateToSettings ( LimeRFESettings & settings , QList < QString >& settingsKeys )
2022-05-21 11:20:38 +02:00
{
if ( m_rfeBoardState . channelIDRX == RFE_CID_CELL_BAND01 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_rxCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand1 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_CELL_BAND02 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_rxCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand2 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_CELL_BAND03 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_rxCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand3 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_CELL_BAND07 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_rxCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand7 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_CELL_BAND38 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_rxCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand38 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_WB_1000 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsWideband ;
settings . m_rxWidebandChannel = LimeRFESettings :: WidebandChannel :: WidebandLow ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxWidebandChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_WB_4000 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsWideband ;
settings . m_rxWidebandChannel = LimeRFESettings :: WidebandChannel :: WidebandHigh ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxWidebandChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0030 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_30M ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0070 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_50_70MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0145 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_144_146MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0220 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_220_225MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0435 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_430_440MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_0920 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_902_928MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_1280 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_1240_1325MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_2400 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_2300_2450MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDRX == RFE_CID_HAM_3500 )
{
settings . m_rxChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_rxHAMChannel = LimeRFESettings :: HAMChannel :: HAM_3300_3500MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxChannels" );
settingsKeys . append ( "rxHAMChannel" );
2022-05-21 11:20:38 +02:00
}
if ( m_rfeBoardState . selPortRX == RFE_PORT_1 ) {
settings . m_rxPort = LimeRFESettings :: RxPort :: RxPortJ3 ;
} else if ( m_rfeBoardState . selPortRX == RFE_PORT_3 ) {
settings . m_rxPort = LimeRFESettings :: RxPort :: RxPortJ5 ;
}
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "rxPort" );
2022-05-21 11:20:38 +02:00
if ( m_rfeBoardState . channelIDTX == RFE_CID_CELL_BAND01 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_txCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand1 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_CELL_BAND02 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_txCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand2 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_CELL_BAND03 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_txCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand3 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_CELL_BAND07 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_txCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand7 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_CELL_BAND38 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsCellular ;
settings . m_txCellularChannel = LimeRFESettings :: CellularChannel :: CellularBand38 ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txCellularChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_WB_1000 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsWideband ;
settings . m_txWidebandChannel = LimeRFESettings :: WidebandChannel :: WidebandLow ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txWidebandChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_WB_4000 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsWideband ;
settings . m_txWidebandChannel = LimeRFESettings :: WidebandChannel :: WidebandHigh ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txWidebandChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0030 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_30M ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0070 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_50_70MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0145 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_144_146MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0220 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_220_225MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0435 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_430_440MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_0920 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_902_928MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_1280 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_1240_1325MHz ;
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_2400 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_2300_2450MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
else if ( m_rfeBoardState . channelIDTX == RFE_CID_HAM_3500 )
{
settings . m_txChannels = LimeRFESettings :: ChannelGroups :: ChannelsHAM ;
settings . m_txHAMChannel = LimeRFESettings :: HAMChannel :: HAM_3300_3500MHz ;
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txChannels" );
settingsKeys . append ( "txHAMChannel" );
2022-05-21 11:20:38 +02:00
}
if ( m_rfeBoardState . selPortTX == RFE_PORT_1 ) {
settings . m_txPort = LimeRFESettings :: TxPort :: TxPortJ3 ;
} else if ( m_rfeBoardState . selPortTX == RFE_PORT_2 ) {
settings . m_txPort = LimeRFESettings :: TxPort :: TxPortJ4 ;
} else if ( m_rfeBoardState . selPortTX == RFE_PORT_3 ) {
settings . m_txPort = LimeRFESettings :: TxPort :: TxPortJ5 ;
}
2022-11-24 22:48:02 +01:00
settingsKeys . append ( "txPort" );
settingsKeys . append ( "attenuationFactor" );
settingsKeys . append ( "amfmNotch" );
settingsKeys . append ( "swrEnable" );
settingsKeys . append ( "swrSource" );
2022-05-21 11:20:38 +02:00
settings . m_attenuationFactor = m_rfeBoardState . attValue ;
settings . m_amfmNotch = m_rfeBoardState . notchOnOff == RFE_NOTCH_ON ;
settings . m_swrEnable = m_rfeBoardState . enableSWR == RFE_SWR_ENABLE ;
settings . m_swrSource = m_rfeBoardState . sourceSWR == RFE_SWR_SRC_CELL ?
LimeRFESettings :: SWRSource :: SWRCellular :
LimeRFESettings :: SWRSource :: SWRExternal ;
}
void LimeRFE :: networkManagerFinished ( QNetworkReply * reply )
{
QNetworkReply :: NetworkError replyError = reply -> error ();
if ( replyError )
{
qWarning () << "LimeRFE::networkManagerFinished:"
<< " error(" << ( int ) replyError
<< "): " << replyError
<< ": " << reply -> errorString ();
}
else
{
QString answer = reply -> readAll ();
answer . chop ( 1 ); // remove last \n
qDebug ( "LimeRFE::networkManagerFinished: reply: \n %s" , answer . toStdString (). c_str ());
}
reply -> deleteLater ();
}
2022-05-22 11:59:02 +02:00
int LimeRFE :: webapiSettingsGet (
SWGSDRangel :: SWGFeatureSettings & response ,
QString & errorMessage )
{
( void ) errorMessage ;
response . setLimeRfeSettings ( new SWGSDRangel :: SWGLimeRFESettings ());
response . getLimeRfeSettings () -> init ();
webapiFormatFeatureSettings ( response , m_settings );
return 200 ;
}
int LimeRFE :: webapiSettingsPutPatch (
bool force ,
const QStringList & featureSettingsKeys ,
SWGSDRangel :: SWGFeatureSettings & response ,
QString & errorMessage )
{
( void ) errorMessage ;
LimeRFESettings settings = m_settings ;
webapiUpdateFeatureSettings ( settings , featureSettingsKeys , response );
2022-11-24 22:48:02 +01:00
MsgConfigureLimeRFE * msg = MsgConfigureLimeRFE :: create ( settings , featureSettingsKeys , force );
2022-05-22 11:59:02 +02:00
m_inputMessageQueue . push ( msg );
qDebug ( "LimeRFE::webapiSettingsPutPatch: forward to GUI: %p" , m_guiMessageQueue );
if ( m_guiMessageQueue ) // forward to GUI if any
{
2022-11-24 22:48:02 +01:00
MsgConfigureLimeRFE * msgToGUI = MsgConfigureLimeRFE :: create ( settings , featureSettingsKeys , true );
2022-05-22 11:59:02 +02:00
m_guiMessageQueue -> push ( msgToGUI );
}
webapiFormatFeatureSettings ( response , settings );
return 200 ;
}
int LimeRFE :: webapiReportGet (
SWGSDRangel :: SWGFeatureReport & response ,
QString & errorMessage )
{
response . setLimeRfeReport ( new SWGSDRangel :: SWGLimeRFEReport ());
response . getLimeRfeReport () -> init ();
return webapiFormatFeatureReport ( response , errorMessage );
}
int LimeRFE :: webapiActionsPost (
const QStringList & featureActionsKeys ,
SWGSDRangel :: SWGFeatureActions & query ,
QString & errorMessage )
{
SWGSDRangel :: SWGLimeRFEActions * swgLimeRFEActions = query . getLimeRfeActions ();
if ( swgLimeRFEActions )
{
bool unknownAction = true ;
int channel = - 1 ;
int deviceSetIndex = - 1 ;
if ( featureActionsKeys . contains ( "selectChannel" ))
{
channel = swgLimeRFEActions -> getSelectChannel ();
unknownAction = false ;
}
if ( featureActionsKeys . contains ( "deviceSetIndex" ))
{
deviceSetIndex = swgLimeRFEActions -> getDeviceSetIndex ();
unknownAction = false ;
}
if ( featureActionsKeys . contains ( "openCloseDevice" ) && ( swgLimeRFEActions -> getOpenCloseDevice () != 0 ))
{
int rc = openDevice ( m_settings . m_devicePath . toStdString ());
unknownAction = false ;
if ( rc != 0 )
{
errorMessage = QString ( "Open %1: %2" ). arg ( m_settings . m_devicePath ). arg ( getError ( rc ). c_str ());
return 500 ;
}
}
2022-05-22 19:53:57 +02:00
if ( featureActionsKeys . contains ( "getState" ) && ( swgLimeRFEActions -> getGetState () != 0 ))
{
int rc = getState ();
unknownAction = false ;
if ( rc != 0 )
{
errorMessage = QString ( "Get state %1: %2" ). arg ( m_settings . m_devicePath ). arg ( getError ( rc ). c_str ());
return 500 ;
}
}
2022-05-22 11:59:02 +02:00
if ( featureActionsKeys . contains ( "fromToSettings" ) && ( swgLimeRFEActions -> getFromToSettings () != 0 ))
{
settingsToState ( m_settings );
unknownAction = false ;
}
if (( channel >= 0 ) && featureActionsKeys . contains ( "switchChannel" ))
{
if ( channel == 0 )
{
bool on = swgLimeRFEActions -> getSwitchChannel () != 0 ;
2022-05-22 19:53:57 +02:00
int rc = setRx ( on );
2022-05-22 11:59:02 +02:00
if ( rc != 0 )
{
errorMessage = QString ( "Set Rx %1 %2: %3" ). arg ( m_settings . m_devicePath ). arg ( on ). arg ( getError ( rc ). c_str ());
return 500 ;
}
if ( getMessageQueueToGUI ())
{
2022-05-22 19:53:57 +02:00
MsgReportSetRx * msg = MsgReportSetRx :: create ( on );
2022-05-22 11:59:02 +02:00
getMessageQueueToGUI () -> push ( msg );
}
}
else
{
bool on = swgLimeRFEActions -> getSwitchChannel () != 0 ;
2022-05-22 19:53:57 +02:00
int rc = setTx ( on );
2022-05-22 11:59:02 +02:00
if ( rc != 0 )
{
errorMessage = QString ( "Set Tx %1 %2: %3" ). arg ( m_settings . m_devicePath ). arg ( on ). arg ( getError ( rc ). c_str ());
return 500 ;
}
if ( getMessageQueueToGUI ())
{
2022-05-22 19:53:57 +02:00
MsgReportSetTx * msg = MsgReportSetTx :: create ( on );
2022-05-22 11:59:02 +02:00
getMessageQueueToGUI () -> push ( msg );
}
}
if ( deviceSetIndex >= 0 ) {
turnDevice ( deviceSetIndex , swgLimeRFEActions -> getSwitchChannel () != 0 );
}
unknownAction = false ;
}
if ( featureActionsKeys . contains ( "fromToSettings" ) && ( swgLimeRFEActions -> getFromToSettings () == 0 ))
{
2022-11-24 22:48:02 +01:00
QList < QString > settingsKeys ;
stateToSettings ( m_settings , settingsKeys );
2022-05-22 11:59:02 +02:00
unknownAction = false ;
if ( getMessageQueueToGUI ())
{
2022-11-24 22:48:02 +01:00
MsgConfigureLimeRFE * msg = MsgConfigureLimeRFE :: create ( m_settings , settingsKeys , false );
2022-05-22 11:59:02 +02:00
getMessageQueueToGUI () -> push ( msg );
}
}
if ( featureActionsKeys . contains ( "openCloseDevice" ) && ( swgLimeRFEActions -> getOpenCloseDevice () == 0 ))
{
closeDevice ();
unknownAction = false ;
}
2022-08-17 11:40:22 +02:00
if ( featureActionsKeys . contains ( "setRx" ))
{
int rc = setRx ( swgLimeRFEActions -> getSetRx () != 0 );
unknownAction = false ;
if ( rc == 0 )
{
if ( getMessageQueueToGUI ())
{
MsgReportSetRx * msg = MsgReportSetRx :: create ( swgLimeRFEActions -> getSetRx () != 0 );
getMessageQueueToGUI () -> push ( msg );
}
}
else
{
errorMessage = QString ( "Cannot switch Rx" );
return 500 ;
}
}
if ( featureActionsKeys . contains ( "setTx" ))
{
int rc = setTx ( swgLimeRFEActions -> getSetTx () != 0 );
unknownAction = false ;
if ( rc == 0 )
{
if ( getMessageQueueToGUI ())
{
MsgReportSetTx * msg = MsgReportSetTx :: create ( swgLimeRFEActions -> getSetTx () != 0 );
getMessageQueueToGUI () -> push ( msg );
}
}
else
{
errorMessage = QString ( "Cannot switch Tx" );
return 500 ;
}
}
2022-05-22 11:59:02 +02:00
if ( unknownAction )
{
errorMessage = "Unknown action" ;
return 400 ;
}
else
{
return 202 ;
}
}
else
{
errorMessage = "Missing SimplePTTActions in query" ;
return 400 ;
}
}
void LimeRFE :: webapiFormatFeatureSettings (
SWGSDRangel :: SWGFeatureSettings & response ,
const LimeRFESettings & settings )
{
if ( response . getLimeRfeSettings () -> getTitle ()) {
* response . getLimeRfeSettings () -> getTitle () = settings . m_title ;
} else {
response . getLimeRfeSettings () -> setTitle ( new QString ( settings . m_title ));
}
response . getLimeRfeSettings () -> setRgbColor ( settings . m_rgbColor );
response . getLimeRfeSettings () -> setDevicePath ( new QString ( settings . m_devicePath ));
response . getLimeRfeSettings () -> setRxChannels (( int ) settings . m_rxChannels );
response . getLimeRfeSettings () -> setRxWidebandChannel (( int ) settings . m_rxWidebandChannel );
response . getLimeRfeSettings () -> setRxHamChannel (( int ) settings . m_rxHAMChannel );
response . getLimeRfeSettings () -> setRxCellularChannel (( int ) settings . m_rxCellularChannel );
response . getLimeRfeSettings () -> setRxPort (( int ) settings . m_rxPort );
response . getLimeRfeSettings () -> setAmfmNotch ( settings . m_amfmNotch ? 1 : 0 );
response . getLimeRfeSettings () -> setAttenuationFactor ( settings . m_attenuationFactor );
response . getLimeRfeSettings () -> setTxChannels (( int ) settings . m_txChannels );
response . getLimeRfeSettings () -> setTxWidebandChannel (( int ) settings . m_txWidebandChannel );
response . getLimeRfeSettings () -> setTxHamChannel (( int ) settings . m_txHAMChannel );
response . getLimeRfeSettings () -> setTxCellularChannel (( int ) settings . m_txCellularChannel );
response . getLimeRfeSettings () -> setTxPort (( int ) settings . m_txPort );
response . getLimeRfeSettings () -> setSwrEnable ( settings . m_swrEnable ? 1 : 0 );
response . getLimeRfeSettings () -> setSwrSource (( int ) settings . m_swrSource );
response . getLimeRfeSettings () -> setTxRxDriven ( settings . m_txRxDriven ? 1 : 0 );
response . getLimeRfeSettings () -> setUseReverseApi ( settings . m_useReverseAPI ? 1 : 0 );
if ( response . getLimeRfeSettings () -> getReverseApiAddress ()) {
* response . getLimeRfeSettings () -> getReverseApiAddress () = settings . m_reverseAPIAddress ;
} else {
response . getLimeRfeSettings () -> setReverseApiAddress ( new QString ( settings . m_reverseAPIAddress ));
}
response . getLimeRfeSettings () -> setReverseApiPort ( settings . m_reverseAPIPort );
response . getLimeRfeSettings () -> setReverseApiFeatureSetIndex ( settings . m_reverseAPIFeatureSetIndex );
response . getLimeRfeSettings () -> setReverseApiFeatureIndex ( settings . m_reverseAPIFeatureIndex );
if ( settings . m_rollupState )
{
if ( response . getLimeRfeSettings () -> getRollupState ())
{
settings . m_rollupState -> formatTo ( response . getLimeRfeSettings () -> getRollupState ());
}
else
{
SWGSDRangel :: SWGRollupState * swgRollupState = new SWGSDRangel :: SWGRollupState ();
settings . m_rollupState -> formatTo ( swgRollupState );
response . getLimeRfeSettings () -> setRollupState ( swgRollupState );
}
}
}
void LimeRFE :: webapiUpdateFeatureSettings (
LimeRFESettings & settings ,
const QStringList & featureSettingsKeys ,
SWGSDRangel :: SWGFeatureSettings & response )
{
if ( featureSettingsKeys . contains ( "title" )) {
settings . m_title = * response . getLimeRfeSettings () -> getTitle ();
}
if ( featureSettingsKeys . contains ( "rgbColor" )) {
settings . m_rgbColor = response . getLimeRfeSettings () -> getRgbColor ();
}
if ( featureSettingsKeys . contains ( "devicePath" )) {
settings . m_devicePath = * response . getLimeRfeSettings () -> getDevicePath ();
}
if ( featureSettingsKeys . contains ( "rxChannels" )) {
settings . m_rxChannels = ( LimeRFESettings :: ChannelGroups ) response . getLimeRfeSettings () -> getRxChannels ();
}
if ( featureSettingsKeys . contains ( "rxWidebandChannel" )) {
settings . m_rxWidebandChannel = ( LimeRFESettings :: WidebandChannel ) response . getLimeRfeSettings () -> getRxWidebandChannel ();
}
if ( featureSettingsKeys . contains ( "rxHAMChannel" )) {
settings . m_rxHAMChannel = ( LimeRFESettings :: HAMChannel ) response . getLimeRfeSettings () -> getRxHamChannel ();
}
if ( featureSettingsKeys . contains ( "rxCellularChannel" )) {
settings . m_rxCellularChannel = ( LimeRFESettings :: CellularChannel ) response . getLimeRfeSettings () -> getRxCellularChannel ();
}
if ( featureSettingsKeys . contains ( "rxPort" )) {
settings . m_rxPort = ( LimeRFESettings :: RxPort ) response . getLimeRfeSettings () -> getRxPort ();
}
if ( featureSettingsKeys . contains ( "amfmNotch" )) {
settings . m_amfmNotch = response . getLimeRfeSettings () -> getAmfmNotch () != 0 ;
}
if ( featureSettingsKeys . contains ( "attenuationFactor" )) {
settings . m_attenuationFactor = response . getLimeRfeSettings () -> getAttenuationFactor ();
}
if ( featureSettingsKeys . contains ( "txChannels" )) {
settings . m_txChannels = ( LimeRFESettings :: ChannelGroups ) response . getLimeRfeSettings () -> getTxChannels ();
}
if ( featureSettingsKeys . contains ( "txWidebandChannel" )) {
settings . m_txWidebandChannel = ( LimeRFESettings :: WidebandChannel ) response . getLimeRfeSettings () -> getTxWidebandChannel ();
}
if ( featureSettingsKeys . contains ( "txHAMChannel" )) {
settings . m_txHAMChannel = ( LimeRFESettings :: HAMChannel ) response . getLimeRfeSettings () -> getTxHamChannel ();
}
if ( featureSettingsKeys . contains ( "txCellularChannel" )) {
settings . m_txCellularChannel = ( LimeRFESettings :: CellularChannel ) response . getLimeRfeSettings () -> getTxCellularChannel ();
}
if ( featureSettingsKeys . contains ( "txPort" )) {
settings . m_txPort = ( LimeRFESettings :: TxPort ) response . getLimeRfeSettings () -> getTxPort ();
}
if ( featureSettingsKeys . contains ( "swrEnable" )) {
settings . m_swrEnable = response . getLimeRfeSettings () -> getSwrEnable () != 0 ;
}
if ( featureSettingsKeys . contains ( "swrSource" )) {
settings . m_swrSource = ( LimeRFESettings :: SWRSource ) response . getLimeRfeSettings () -> getSwrSource ();
}
if ( featureSettingsKeys . contains ( "txRxDriven" )) {
settings . m_txRxDriven = response . getLimeRfeSettings () -> getTxRxDriven () != 0 ;
}
if ( featureSettingsKeys . contains ( "useReverseAPI" )) {
settings . m_useReverseAPI = response . getLimeRfeSettings () -> getUseReverseApi () != 0 ;
}
if ( featureSettingsKeys . contains ( "reverseAPIAddress" )) {
settings . m_reverseAPIAddress = * response . getLimeRfeSettings () -> getReverseApiAddress ();
}
if ( featureSettingsKeys . contains ( "reverseAPIPort" )) {
settings . m_reverseAPIPort = response . getLimeRfeSettings () -> getReverseApiPort ();
}
if ( featureSettingsKeys . contains ( "reverseAPIFeatureSetIndex" )) {
settings . m_reverseAPIFeatureSetIndex = response . getLimeRfeSettings () -> getReverseApiFeatureSetIndex ();
}
if ( featureSettingsKeys . contains ( "reverseAPIFeatureIndex" )) {
settings . m_reverseAPIFeatureIndex = response . getLimeRfeSettings () -> getReverseApiFeatureIndex ();
}
if ( settings . m_rollupState && featureSettingsKeys . contains ( "rollupState" )) {
settings . m_rollupState -> updateFrom ( featureSettingsKeys , response . getLimeRfeSettings () -> getRollupState ());
}
}
int LimeRFE :: webapiFormatFeatureReport ( SWGSDRangel :: SWGFeatureReport & response , QString & errorMessage )
{
2022-05-22 19:53:57 +02:00
response . getLimeRfeReport () -> setRxOn ( m_rxOn ? 1 : 0 );
response . getLimeRfeReport () -> setTxOn ( m_txOn ? 1 : 0 );
2022-05-22 11:59:02 +02:00
int fwdPower ;
int rc = getFwdPower ( fwdPower );
if ( rc != 0 )
{
errorMessage = QString ( "Error getting forward power from LimeRFE device %1: %2" )
. arg ( m_settings . m_devicePath ). arg ( getError ( rc ). c_str ());
return 500 ;
}
int refPower ;
rc = getRefPower ( refPower );
if ( rc != 0 )
{
errorMessage = QString ( "Error getting reflected power from LimeRFE device %1: %2" )
. arg ( m_settings . m_devicePath ). arg ( getError ( rc ). c_str ());
return 500 ;
}
response . getLimeRfeReport () -> setForwardPower ( fwdPower );
response . getLimeRfeReport () -> setReflectedPower ( refPower );
return 200 ;
}