2015-10-03 21:35:11 -04:00
# include "SDRDevices.h"
2015-10-05 02:21:08 -04:00
# include <wx/textdlg.h>
# include <wx/msgdlg.h>
2015-10-04 16:07:14 -04:00
# include "CubicSDR.h"
SDRDevicesDialog : : SDRDevicesDialog ( wxWindow * parent ) : devFrame ( parent ) {
2015-10-05 02:21:08 -04:00
refresh = true ;
2016-01-13 21:59:47 -05:00
failed = false ;
2016-01-17 21:54:22 -05:00
m_refreshButton - > Disable ( ) ;
2015-10-05 02:21:08 -04:00
m_addRemoteButton - > Disable ( ) ;
m_useSelectedButton - > Disable ( ) ;
m_deviceTimer . Start ( 250 ) ;
2016-01-19 18:38:18 -05:00
selId = nullptr ;
editId = nullptr ;
2016-01-22 00:40:00 -05:00
removeId = nullptr ;
2016-01-20 00:43:31 -05:00
devAddDialog = nullptr ;
2016-01-24 10:38:14 -05:00
dev = nullptr ;
2016-01-17 21:54:22 -05:00
}
2015-10-04 16:07:14 -04:00
2016-01-26 19:20:14 -05:00
void SDRDevicesDialog : : OnClose ( wxCloseEvent & /* event */ ) {
2015-10-05 02:21:08 -04:00
wxGetApp ( ) . setDeviceSelectorClosed ( ) ;
Destroy ( ) ;
}
2015-10-04 16:07:14 -04:00
void SDRDevicesDialog : : OnDeleteItem ( wxTreeEvent & event ) {
event . Skip ( ) ;
}
2015-11-03 00:53:39 -05:00
wxPGProperty * SDRDevicesDialog : : addArgInfoProperty ( wxPropertyGrid * pg , SoapySDR : : ArgInfo arg ) {
wxPGProperty * prop = NULL ;
int intVal ;
double floatVal ;
std : : vector < std : : string > : : iterator stringIter ;
switch ( arg . type ) {
case SoapySDR : : ArgInfo : : INT :
try {
intVal = std : : stoi ( arg . value ) ;
} catch ( std : : invalid_argument e ) {
intVal = 0 ;
}
prop = pg - > Append ( new wxIntProperty ( arg . name , wxPG_LABEL , intVal ) ) ;
if ( arg . range . minimum ( ) ! = arg . range . maximum ( ) ) {
pg - > SetPropertyAttribute ( prop , wxPG_ATTR_MIN , arg . range . minimum ( ) ) ;
pg - > SetPropertyAttribute ( prop , wxPG_ATTR_MAX , arg . range . maximum ( ) ) ;
}
break ;
case SoapySDR : : ArgInfo : : FLOAT :
try {
floatVal = std : : stod ( arg . value ) ;
} catch ( std : : invalid_argument e ) {
floatVal = 0 ;
}
prop = pg - > Append ( new wxFloatProperty ( arg . name , wxPG_LABEL , floatVal ) ) ;
if ( arg . range . minimum ( ) ! = arg . range . maximum ( ) ) {
pg - > SetPropertyAttribute ( prop , wxPG_ATTR_MIN , arg . range . minimum ( ) ) ;
pg - > SetPropertyAttribute ( prop , wxPG_ATTR_MAX , arg . range . maximum ( ) ) ;
}
break ;
case SoapySDR : : ArgInfo : : BOOL :
prop = pg - > Append ( new wxBoolProperty ( arg . name , wxPG_LABEL , ( arg . value = = " true " ) ) ) ;
break ;
case SoapySDR : : ArgInfo : : STRING :
if ( arg . options . size ( ) ) {
intVal = 0 ;
prop = pg - > Append ( new wxEnumProperty ( arg . name , wxPG_LABEL ) ) ;
for ( stringIter = arg . options . begin ( ) ; stringIter ! = arg . options . end ( ) ; stringIter + + ) {
2015-11-03 19:58:42 -05:00
std : : string optName = ( * stringIter ) ;
std : : string displayName = optName ;
if ( arg . optionNames . size ( ) ) {
displayName = arg . optionNames [ intVal ] ;
}
prop - > AddChoice ( displayName ) ;
2015-11-03 00:53:39 -05:00
if ( ( * stringIter ) = = arg . value ) {
prop - > SetChoiceSelection ( intVal ) ;
}
2015-11-03 19:58:42 -05:00
2015-11-03 00:53:39 -05:00
intVal + + ;
}
} else {
prop = pg - > Append ( new wxStringProperty ( arg . name , wxPG_LABEL , arg . value ) ) ;
}
break ;
}
if ( prop ! = NULL ) {
prop - > SetHelpString ( arg . key + " : " + arg . description ) ;
}
return prop ;
}
2016-02-01 20:30:48 -05:00
void SDRDevicesDialog : : refreshDeviceProperties ( ) {
2016-01-18 20:46:56 -05:00
SDRDeviceInfo * selDev = getSelectedDevice ( devTree - > GetSelection ( ) ) ;
2016-01-20 00:43:31 -05:00
if ( selDev & & selDev - > isAvailable ( ) ) {
2016-01-18 20:46:56 -05:00
dev = selDev ;
selId = devTree - > GetSelection ( ) ;
DeviceConfig * devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( dev - > getName ( ) ) ;
2015-11-03 00:53:39 -05:00
m_propertyGrid - > Clear ( ) ;
2016-02-01 20:30:48 -05:00
SoapySDR : : Device * soapyDev = dev - > getSoapyDevice ( ) ;
SoapySDR : : ArgInfoList args = soapyDev - > getSettingInfo ( ) ;
2016-01-18 20:46:56 -05:00
SoapySDR : : ArgInfoList : : const_iterator args_i ;
2016-02-01 20:30:48 -05:00
2016-01-18 20:46:56 -05:00
m_propertyGrid - > Append ( new wxPropertyCategory ( " General Settings " ) ) ;
2015-11-03 00:53:39 -05:00
2016-01-18 20:46:56 -05:00
devSettings . erase ( devSettings . begin ( ) , devSettings . end ( ) ) ;
devSettings [ " name " ] = m_propertyGrid - > Append ( new wxStringProperty ( " Name " , wxPG_LABEL , devConfig - > getDeviceName ( ) ) ) ;
devSettings [ " offset " ] = m_propertyGrid - > Append ( new wxIntProperty ( " Offset (Hz) " , wxPG_LABEL , devConfig - > getOffset ( ) ) ) ;
2016-02-01 20:30:48 -05:00
runtimeProps . erase ( runtimeProps . begin ( ) , runtimeProps . end ( ) ) ;
streamProps . erase ( streamProps . begin ( ) , streamProps . end ( ) ) ;
2016-01-18 20:46:56 -05:00
if ( args . size ( ) ) {
m_propertyGrid - > Append ( new wxPropertyCategory ( " Run-time Settings " ) ) ;
for ( args_i = args . begin ( ) ; args_i ! = args . end ( ) ; args_i + + ) {
SoapySDR : : ArgInfo arg = ( * args_i ) ;
2016-02-01 20:30:48 -05:00
arg . value = soapyDev - > readSetting ( arg . key ) ;
runtimeProps [ arg . key ] = addArgInfoProperty ( m_propertyGrid , arg ) ;
2016-01-18 20:46:56 -05:00
}
2015-11-03 00:53:39 -05:00
}
2016-01-31 15:11:54 -05:00
if ( dev ) {
args = dev - > getSoapyDevice ( ) - > getStreamArgsInfo ( SOAPY_SDR_RX , 0 ) ;
2015-12-06 00:32:32 -05:00
DeviceConfig * devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( dev - > getDeviceId ( ) ) ;
ConfigSettings devStreamOpts = devConfig - > getStreamOpts ( ) ;
if ( devStreamOpts . size ( ) ) {
for ( int j = 0 , jMax = args . size ( ) ; j < jMax ; j + + ) {
if ( devStreamOpts . find ( args [ j ] . key ) ! = devStreamOpts . end ( ) ) {
args [ j ] . value = devStreamOpts [ args [ j ] . key ] ;
}
}
}
2016-02-01 20:30:48 -05:00
2015-11-03 00:53:39 -05:00
if ( args . size ( ) ) {
m_propertyGrid - > Append ( new wxPropertyCategory ( " Stream Settings " ) ) ;
2016-02-01 20:30:48 -05:00
2015-11-03 00:53:39 -05:00
for ( args_i = args . begin ( ) ; args_i ! = args . end ( ) ; args_i + + ) {
SoapySDR : : ArgInfo arg = ( * args_i ) ;
2016-02-01 20:30:48 -05:00
streamProps [ arg . key ] = addArgInfoProperty ( m_propertyGrid , arg ) ;
2015-11-03 00:53:39 -05:00
}
}
}
2016-01-20 00:43:31 -05:00
if ( selDev - > isManual ( ) ) {
2016-01-22 00:40:00 -05:00
m_addRemoteButton - > SetLabel ( " Remove " ) ;
removeId = selId ;
} else {
m_addRemoteButton - > SetLabel ( " Add " ) ;
removeId = nullptr ;
2016-01-20 00:43:31 -05:00
}
} else if ( selDev & & ! selDev - > isAvailable ( ) & & selDev - > isManual ( ) ) {
m_propertyGrid - > Clear ( ) ;
devSettings . erase ( devSettings . begin ( ) , devSettings . end ( ) ) ;
2016-02-01 20:30:48 -05:00
runtimeProps . erase ( runtimeProps . begin ( ) , runtimeProps . end ( ) ) ;
streamProps . erase ( streamProps . begin ( ) , streamProps . end ( ) ) ;
2016-01-22 00:40:00 -05:00
removeId = devTree - > GetSelection ( ) ;
2016-01-20 00:43:31 -05:00
dev = nullptr ;
selId = nullptr ;
editId = nullptr ;
2016-01-22 00:40:00 -05:00
m_addRemoteButton - > SetLabel ( " Remove " ) ;
} else if ( ! selDev ) {
m_addRemoteButton - > SetLabel ( " Add " ) ;
removeId = nullptr ;
2015-11-03 00:53:39 -05:00
}
2016-02-01 20:30:48 -05:00
}
void SDRDevicesDialog : : OnSelectionChanged ( wxTreeEvent & event ) {
refreshDeviceProperties ( ) ;
2015-10-04 16:07:14 -04:00
event . Skip ( ) ;
}
2016-01-26 19:20:14 -05:00
void SDRDevicesDialog : : OnAddRemote ( wxMouseEvent & /* event */ ) {
2016-01-22 00:40:00 -05:00
if ( removeId ! = nullptr ) {
SDRDeviceInfo * selDev = getSelectedDevice ( removeId ) ;
if ( selDev ) {
SDREnumerator : : removeManual ( selDev - > getDriver ( ) , selDev - > getManualParams ( ) ) ;
m_propertyGrid - > Clear ( ) ;
devSettings . erase ( devSettings . begin ( ) , devSettings . end ( ) ) ;
2016-02-01 20:30:48 -05:00
runtimeProps . erase ( runtimeProps . begin ( ) , runtimeProps . end ( ) ) ;
streamProps . erase ( streamProps . begin ( ) , streamProps . end ( ) ) ;
2016-01-22 00:40:00 -05:00
dev = nullptr ;
selId = nullptr ;
editId = nullptr ;
devTree - > Delete ( removeId ) ;
removeId = nullptr ;
m_addRemoteButton - > SetLabel ( " Add " ) ;
}
return ;
}
2016-01-20 00:43:31 -05:00
devAddDialog = new SDRDeviceAddDialog ( this ) ;
devAddDialog - > ShowModal ( ) ;
2015-10-05 02:21:08 -04:00
2016-01-20 00:43:31 -05:00
if ( devAddDialog - > wasOkPressed ( ) ) {
std : : string module = devAddDialog - > getSelectedModule ( ) ;
if ( module = = " SoapyRemote " ) {
if ( ! SDREnumerator : : hasRemoteModule ( ) ) {
wxMessageDialog * info ;
info = new wxMessageDialog ( NULL , wxT ( " Install SoapyRemote module to add remote servers. \n \n https://github.com/pothosware/SoapyRemote " ) , wxT ( " SoapyRemote not found. " ) , wxOK | wxICON_ERROR ) ;
info - > ShowModal ( ) ;
return ;
}
2015-10-05 02:21:08 -04:00
2016-01-20 00:43:31 -05:00
wxString remoteAddr = devAddDialog - > getModuleParam ( ) ;
if ( ! remoteAddr . Trim ( ) . empty ( ) ) {
wxGetApp ( ) . addRemote ( remoteAddr . Trim ( ) . ToStdString ( ) ) ;
}
devTree - > Disable ( ) ;
m_addRemoteButton - > Disable ( ) ;
m_useSelectedButton - > Disable ( ) ;
refresh = true ;
} else {
std : : string mod = devAddDialog - > getSelectedModule ( ) ;
std : : string param = devAddDialog - > getModuleParam ( ) ;
SDREnumerator : : addManual ( mod , param ) ;
doRefreshDevices ( ) ;
}
2015-10-05 02:21:08 -04:00
}
2015-10-04 16:07:14 -04:00
}
2015-11-03 00:53:39 -05:00
SDRDeviceInfo * SDRDevicesDialog : : getSelectedDevice ( wxTreeItemId selId ) {
devItems_i = devItems . find ( selId ) ;
if ( devItems_i ! = devItems . end ( ) ) {
return devItems [ selId ] ;
}
return NULL ;
}
2016-02-01 20:30:48 -05:00
void SDRDevicesDialog : : OnUseSelected ( wxMouseEvent & event ) {
2015-11-03 00:53:39 -05:00
if ( dev ! = NULL ) {
2015-11-04 02:04:52 -05:00
SoapySDR : : ArgInfoList : : const_iterator args_i ;
2016-01-31 15:11:54 -05:00
SoapySDR : : ArgInfoList args = dev - > getSoapyDevice ( ) - > getSettingInfo ( ) ;
2015-11-04 02:04:52 -05:00
SoapySDR : : Kwargs settingArgs ;
SoapySDR : : Kwargs streamArgs ;
for ( args_i = args . begin ( ) ; args_i ! = args . end ( ) ; args_i + + ) {
SoapySDR : : ArgInfo arg = ( * args_i ) ;
2016-02-01 20:30:48 -05:00
wxPGProperty * prop = runtimeProps [ arg . key ] ;
2015-11-04 02:04:52 -05:00
if ( arg . type = = SoapySDR : : ArgInfo : : STRING & & arg . options . size ( ) ) {
settingArgs [ arg . key ] = arg . options [ prop - > GetChoiceSelection ( ) ] ;
} else if ( arg . type = = SoapySDR : : ArgInfo : : BOOL ) {
settingArgs [ arg . key ] = ( prop - > GetValueAsString ( ) = = " True " ) ? " true " : " false " ;
} else {
settingArgs [ arg . key ] = prop - > GetValueAsString ( ) ;
}
}
2016-01-31 15:11:54 -05:00
if ( dev ) {
args = dev - > getSoapyDevice ( ) - > getStreamArgsInfo ( SOAPY_SDR_RX , 0 ) ;
2015-11-04 02:04:52 -05:00
if ( args . size ( ) ) {
for ( args_i = args . begin ( ) ; args_i ! = args . end ( ) ; args_i + + ) {
SoapySDR : : ArgInfo arg = ( * args_i ) ;
2016-02-01 20:30:48 -05:00
wxPGProperty * prop = streamProps [ arg . key ] ;
2015-11-04 02:04:52 -05:00
if ( arg . type = = SoapySDR : : ArgInfo : : STRING & & arg . options . size ( ) ) {
streamArgs [ arg . key ] = arg . options [ prop - > GetChoiceSelection ( ) ] ;
} else if ( arg . type = = SoapySDR : : ArgInfo : : BOOL ) {
streamArgs [ arg . key ] = ( prop - > GetValueAsString ( ) = = " True " ) ? " true " : " false " ;
} else {
streamArgs [ arg . key ] = prop - > GetValueAsString ( ) ;
}
}
}
}
2015-12-06 00:32:32 -05:00
AppConfig * cfg = wxGetApp ( ) . getConfig ( ) ;
DeviceConfig * devConfig = cfg - > getDevice ( dev - > getDeviceId ( ) ) ;
devConfig - > setSettings ( settingArgs ) ;
devConfig - > setStreamOpts ( streamArgs ) ;
2015-11-04 02:04:52 -05:00
wxGetApp ( ) . setDeviceArgs ( settingArgs ) ;
wxGetApp ( ) . setStreamArgs ( streamArgs ) ;
2015-10-04 16:07:14 -04:00
wxGetApp ( ) . setDevice ( dev ) ;
Close ( ) ;
}
2016-02-01 20:30:48 -05:00
event . Skip ( ) ;
2015-10-04 16:07:14 -04:00
}
2015-10-03 21:35:11 -04:00
2015-10-05 02:21:08 -04:00
void SDRDevicesDialog : : OnTreeDoubleClick ( wxMouseEvent & event ) {
OnUseSelected ( event ) ;
}
void SDRDevicesDialog : : OnDeviceTimer ( wxTimerEvent & event ) {
if ( refresh ) {
2016-01-13 21:59:47 -05:00
if ( wxGetApp ( ) . areModulesMissing ( ) ) {
if ( ! failed ) {
wxMessageDialog * info ;
info = new wxMessageDialog ( NULL , wxT ( " \n No SoapySDR modules were found. \n \n CubicSDR requires at least one SoapySDR device support module to be installed. \n \n Please visit https://github.com/cjcliffe/CubicSDR/wiki and in the build instructions for your platform read the 'Support Modules' section for more information. " ) , wxT ( " \x28 \u256F \xB0 \u25A1 \xB0 \uFF09 \u256F \uFE35 \x20 \u253B \u2501 \u253B " ) , wxOK | wxICON_ERROR ) ;
info - > ShowModal ( ) ;
failed = true ;
}
return ;
}
2015-10-05 02:21:08 -04:00
if ( wxGetApp ( ) . areDevicesEnumerating ( ) | | ! wxGetApp ( ) . areDevicesReady ( ) ) {
std : : string msg = wxGetApp ( ) . getNotification ( ) ;
devStatusBar - > SetStatusText ( msg ) ;
devTree - > DeleteAllItems ( ) ;
devTree - > AddRoot ( msg ) ;
event . Skip ( ) ;
return ;
}
2016-01-13 21:59:47 -05:00
2015-10-05 02:21:08 -04:00
devTree - > DeleteAllItems ( ) ;
wxTreeItemId devRoot = devTree - > AddRoot ( " Devices " ) ;
wxTreeItemId localBranch = devTree - > AppendItem ( devRoot , " Local " ) ;
2015-11-11 00:16:26 -05:00
wxTreeItemId dsBranch = devTree - > AppendItem ( devRoot , " Local Net " ) ;
2015-10-05 02:21:08 -04:00
wxTreeItemId remoteBranch = devTree - > AppendItem ( devRoot , " Remote " ) ;
2016-01-20 00:43:31 -05:00
wxTreeItemId manualBranch = devTree - > AppendItem ( devRoot , " Manual " ) ;
2015-10-05 02:21:08 -04:00
devs [ " " ] = SDREnumerator : : enumerate_devices ( " " , true ) ;
if ( devs [ " " ] ! = NULL ) {
for ( devs_i = devs [ " " ] - > begin ( ) ; devs_i ! = devs [ " " ] - > end ( ) ; devs_i + + ) {
2016-01-20 01:15:12 -05:00
DeviceConfig * devConfig = nullptr ;
2016-01-20 00:43:31 -05:00
if ( ( * devs_i ) - > isManual ( ) ) {
2016-01-20 01:15:12 -05:00
std : : string devName = " Unknown " ;
if ( ( * devs_i ) - > isAvailable ( ) ) {
devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( ( * devs_i ) - > getDeviceId ( ) ) ;
devName = devConfig - > getDeviceName ( ) ;
} else {
devName = ( * devs_i ) - > getDeviceId ( ) ;
}
devItems [ devTree - > AppendItem ( manualBranch , devName ) ] = ( * devs_i ) ;
2016-01-20 00:43:31 -05:00
} else if ( ( * devs_i ) - > isRemote ( ) ) {
2016-01-20 01:15:12 -05:00
devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( ( * devs_i ) - > getDeviceId ( ) ) ;
2016-01-18 20:46:56 -05:00
devItems [ devTree - > AppendItem ( dsBranch , devConfig - > getDeviceName ( ) ) ] = ( * devs_i ) ;
2015-11-11 00:16:26 -05:00
} else {
2016-01-20 01:15:12 -05:00
devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( ( * devs_i ) - > getDeviceId ( ) ) ;
2016-01-18 20:46:56 -05:00
devItems [ devTree - > AppendItem ( localBranch , devConfig - > getDeviceName ( ) ) ] = ( * devs_i ) ;
2015-11-11 00:16:26 -05:00
}
2015-10-05 02:21:08 -04:00
}
}
std : : vector < std : : string > remotes = SDREnumerator : : getRemotes ( ) ;
std : : vector < std : : string > : : iterator remotes_i ;
std : : vector < SDRDeviceInfo * > : : iterator remoteDevs_i ;
if ( remotes . size ( ) ) {
for ( remotes_i = remotes . begin ( ) ; remotes_i ! = remotes . end ( ) ; remotes_i + + ) {
devs [ * remotes_i ] = SDREnumerator : : enumerate_devices ( * remotes_i , true ) ;
2016-01-18 20:46:56 -05:00
DeviceConfig * devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( * remotes_i ) ;
wxTreeItemId remoteNode = devTree - > AppendItem ( remoteBranch , devConfig - > getDeviceName ( ) ) ;
2015-10-05 02:21:08 -04:00
if ( devs [ * remotes_i ] ! = NULL ) {
for ( remoteDevs_i = devs [ * remotes_i ] - > begin ( ) ; remoteDevs_i ! = devs [ * remotes_i ] - > end ( ) ; remoteDevs_i + + ) {
devItems [ devTree - > AppendItem ( remoteNode , ( * remoteDevs_i ) - > getName ( ) ) ] = ( * remoteDevs_i ) ;
}
}
}
}
2016-01-17 21:54:22 -05:00
m_refreshButton - > Enable ( ) ;
2015-10-05 02:21:08 -04:00
m_addRemoteButton - > Enable ( ) ;
m_useSelectedButton - > Enable ( ) ;
devTree - > Enable ( ) ;
devTree - > ExpandAll ( ) ;
devStatusBar - > SetStatusText ( " Ready. " ) ;
refresh = false ;
}
2016-01-17 21:54:22 -05:00
}
2016-01-26 19:20:14 -05:00
void SDRDevicesDialog : : OnRefreshDevices ( wxMouseEvent & /* event */ ) {
2016-01-20 00:43:31 -05:00
doRefreshDevices ( ) ;
2016-01-18 20:46:56 -05:00
}
void SDRDevicesDialog : : OnPropGridChanged ( wxPropertyGridEvent & event ) {
2016-01-19 18:38:18 -05:00
if ( editId & & event . GetProperty ( ) = = devSettings [ " name " ] ) {
2016-01-18 20:46:56 -05:00
DeviceConfig * devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( dev - > getDeviceId ( ) ) ;
wxString devName = event . GetPropertyValue ( ) . GetString ( ) ;
devConfig - > setDeviceName ( devName . ToStdString ( ) ) ;
2016-01-19 18:38:18 -05:00
if ( editId ) {
devTree - > SetItemText ( editId , devConfig - > getDeviceName ( ) ) ;
2016-01-18 20:46:56 -05:00
}
if ( devName = = " " ) {
event . GetProperty ( ) - > SetValueFromString ( devConfig - > getDeviceName ( ) ) ;
}
2016-02-01 20:30:48 -05:00
} else if ( dev & & event . GetProperty ( ) = = devSettings [ " offset " ] ) {
2016-01-18 20:46:56 -05:00
DeviceConfig * devConfig = wxGetApp ( ) . getConfig ( ) - > getDevice ( dev - > getDeviceId ( ) ) ;
long offset = event . GetPropertyValue ( ) . GetInteger ( ) ;
devConfig - > setOffset ( offset ) ;
2016-02-01 20:30:48 -05:00
} else if ( editId & & dev ) {
wxPGProperty * prop = event . GetProperty ( ) ;
for ( std : : map < std : : string , wxPGProperty * > : : iterator rtp = runtimeProps . begin ( ) ; rtp ! = runtimeProps . end ( ) ; rtp + + ) {
if ( rtp - > second = = prop ) {
SoapySDR : : Device * soapyDev = dev - > getSoapyDevice ( ) ;
2016-02-02 20:05:32 -05:00
std : : string settingValue = prop - > GetValueAsString ( ) . ToStdString ( ) ;
soapyDev - > writeSetting ( rtp - > first , settingValue ) ;
if ( dev - > isActive ( ) ) {
wxGetApp ( ) . getSDRThread ( ) - > writeSetting ( rtp - > first , settingValue ) ;
}
2016-02-01 20:30:48 -05:00
refreshDeviceProperties ( ) ;
return ;
}
}
2016-01-18 20:46:56 -05:00
}
}
2016-01-19 18:38:18 -05:00
2016-01-26 19:20:14 -05:00
void SDRDevicesDialog : : OnPropGridFocus ( wxFocusEvent & /* event */ ) {
2016-01-19 18:38:18 -05:00
editId = selId ;
}
2016-01-20 00:43:31 -05:00
void SDRDevicesDialog : : doRefreshDevices ( ) {
2016-02-02 20:05:32 -05:00
selId = nullptr ;
editId = nullptr ;
removeId = nullptr ;
dev = nullptr ;
2016-01-20 00:43:31 -05:00
wxGetApp ( ) . stopDevice ( ) ;
devTree - > DeleteAllItems ( ) ;
devTree - > Disable ( ) ;
m_propertyGrid - > Clear ( ) ;
2016-02-01 20:30:48 -05:00
runtimeProps . erase ( runtimeProps . begin ( ) , runtimeProps . end ( ) ) ;
streamProps . erase ( streamProps . begin ( ) , streamProps . end ( ) ) ;
2016-01-20 00:43:31 -05:00
devSettings . erase ( devSettings . begin ( ) , devSettings . end ( ) ) ;
m_refreshButton - > Disable ( ) ;
m_addRemoteButton - > Disable ( ) ;
m_useSelectedButton - > Disable ( ) ;
wxGetApp ( ) . reEnumerateDevices ( ) ;
refresh = true ;
2016-01-22 00:40:00 -05:00
m_addRemoteButton - > SetLabel ( " Add " ) ;
2016-01-26 19:20:14 -05:00
}