2018-06-19 19:58:52 +00:00
# include "wfmain.h"
# include "ui_wfmain.h"
# include "commhandler.h"
2018-11-24 08:10:05 +00:00
# include "rigidentities.h"
2021-02-23 21:21:22 +00:00
# include "logcategories.h"
2018-06-19 19:58:52 +00:00
2022-09-15 00:07:23 +00:00
// This code is copyright 2017-2022 Elliott H. Liggett
2019-01-24 01:19:35 +00:00
// All rights reserved
2022-09-15 00:07:23 +00:00
// Log support:
//static void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg);
QScopedPointer < QFile > m_logFile ;
QMutex logMutex ;
QMutex logTextMutex ;
QVector < QString > logStringBuffer ;
# ifdef QT_DEBUG
bool debugModeLogging = true ;
# else
bool debugModeLogging = false ;
# endif
2022-09-23 16:42:36 +00:00
wfmain : : wfmain ( const QString settingsFile , const QString logFile , bool debugMode , QWidget * parent ) :
2018-06-19 19:58:52 +00:00
QMainWindow ( parent ) ,
2022-09-23 16:18:42 +00:00
ui ( new Ui : : wfmain ) ,
logFilename ( logFile )
2018-06-19 19:58:52 +00:00
{
2020-01-05 01:12:35 +00:00
QGuiApplication : : setApplicationDisplayName ( " wfview " ) ;
QGuiApplication : : setApplicationName ( QString ( " wfview " ) ) ;
2019-02-09 00:19:36 +00:00
2020-03-13 03:06:33 +00:00
setWindowIcon ( QIcon ( QString ( " :resources/wfview.png " ) ) ) ;
2022-09-15 00:07:23 +00:00
this - > debugMode = debugMode ;
debugModeLogging = debugMode ;
2022-12-28 03:37:12 +00:00
version = QString ( " wfview version: %1 (Git:%2 on %3 at %4 by %5@%6). Operating System: %7 (%8). Build Qt Version %9. Current Qt Version: %10 " )
2022-09-15 16:33:09 +00:00
. arg ( QString ( WFVIEW_VERSION ) )
. arg ( GITSHORT ) . arg ( __DATE__ ) . arg ( __TIME__ ) . arg ( UNAME ) . arg ( HOST )
. arg ( QSysInfo : : prettyProductName ( ) ) . arg ( QSysInfo : : buildCpuArchitecture ( ) )
. arg ( QT_VERSION_STR ) . arg ( qVersion ( ) ) ;
2018-06-19 19:58:52 +00:00
ui - > setupUi ( this ) ;
2020-01-05 01:12:35 +00:00
setWindowTitle ( QString ( " wfview " ) ) ;
2019-02-09 00:19:36 +00:00
2022-09-23 15:46:33 +00:00
logWindow = new loggingWindow ( logFile ) ;
2022-09-15 00:07:23 +00:00
initLogging ( ) ;
2022-09-15 18:52:08 +00:00
logWindow - > setInitialDebugState ( debugMode ) ;
2022-09-15 16:33:09 +00:00
qInfo ( logSystem ( ) ) < < version ;
2022-09-15 00:07:23 +00:00
2021-02-11 05:22:38 +00:00
cal = new calibrationWindow ( ) ;
2021-03-31 06:37:35 +00:00
rpt = new repeaterSetup ( ) ;
2021-02-13 18:02:45 +00:00
sat = new satelliteSetup ( ) ;
2021-07-06 06:56:24 +00:00
trxadj = new transceiverAdjustments ( ) ;
2023-01-21 06:11:30 +00:00
cw = new cwSender ( ) ;
2022-10-22 19:55:08 +00:00
shut = new controllerSetup ( ) ;
2021-07-08 07:31:59 +00:00
abtBox = new aboutbox ( ) ;
2022-01-21 19:23:32 +00:00
selRad = new selectRadio ( ) ;
2021-02-13 18:02:45 +00:00
2021-03-01 19:53:12 +00:00
qRegisterMetaType < udpPreferences > ( ) ; // Needs to be registered early.
2021-05-29 04:01:29 +00:00
qRegisterMetaType < rigCapabilities > ( ) ;
qRegisterMetaType < duplexMode > ( ) ;
qRegisterMetaType < rptAccessTxRx > ( ) ;
2023-01-27 22:05:50 +00:00
qRegisterMetaType < rptrAccessData_t > ( ) ;
2021-05-29 04:01:29 +00:00
qRegisterMetaType < rigInput > ( ) ;
qRegisterMetaType < meterKind > ( ) ;
qRegisterMetaType < spectrumMode > ( ) ;
qRegisterMetaType < freqt > ( ) ;
2023-01-27 20:44:23 +00:00
qRegisterMetaType < vfo_t > ( ) ;
2023-01-27 22:05:50 +00:00
qRegisterMetaType < rptrTone_t > ( ) ;
2021-06-26 06:56:19 +00:00
qRegisterMetaType < mode_info > ( ) ;
2022-09-26 00:44:49 +00:00
qRegisterMetaType < mode_kind > ( ) ;
2021-05-29 04:01:29 +00:00
qRegisterMetaType < audioPacket > ( ) ;
2021-06-04 07:24:26 +00:00
qRegisterMetaType < audioSetup > ( ) ;
2022-01-04 19:55:48 +00:00
qRegisterMetaType < SERVERCONFIG > ( ) ;
2021-07-09 19:02:50 +00:00
qRegisterMetaType < timekind > ( ) ;
qRegisterMetaType < datekind > ( ) ;
2021-11-23 00:39:10 +00:00
qRegisterMetaType < rigstate * > ( ) ;
2022-01-21 19:23:32 +00:00
qRegisterMetaType < QList < radio_cap_packet > > ( ) ;
2022-04-22 10:11:21 +00:00
qRegisterMetaType < QVector < BUTTON > * > ( ) ;
2022-04-25 16:40:41 +00:00
qRegisterMetaType < QVector < COMMAND > * > ( ) ;
2022-04-27 11:56:54 +00:00
qRegisterMetaType < const COMMAND * > ( ) ;
2022-10-05 10:03:15 +00:00
qRegisterMetaType < QList < radio_cap_packet > > ( ) ;
qRegisterMetaType < QList < spotData > > ( ) ;
2022-01-22 15:12:36 +00:00
qRegisterMetaType < networkStatus > ( ) ;
2022-08-24 05:24:05 +00:00
qRegisterMetaType < networkAudioLevels > ( ) ;
2023-01-01 16:17:48 +00:00
qRegisterMetaType < codecType > ( ) ;
2023-01-05 19:37:53 +00:00
qRegisterMetaType < errorType > ( ) ;
2021-02-11 05:22:38 +00:00
2021-01-25 00:16:38 +00:00
haveRigCaps = false ;
2021-05-29 03:51:19 +00:00
setupKeyShortcuts ( ) ;
2019-02-01 20:21:54 +00:00
2021-05-29 03:51:19 +00:00
setupMainUI ( ) ;
2022-08-22 04:19:08 +00:00
prepareSettingsWindow ( ) ;
2019-02-01 20:21:54 +00:00
2021-05-29 04:01:29 +00:00
setSerialDevicesUI ( ) ;
2019-02-01 20:21:54 +00:00
2021-05-29 04:27:06 +00:00
setDefPrefs ( ) ;
2019-02-01 20:21:54 +00:00
2022-09-18 16:42:41 +00:00
2021-05-29 04:27:06 +00:00
getSettingsFilePath ( settingsFile ) ;
2019-02-01 20:21:54 +00:00
2021-05-29 03:51:19 +00:00
setupPlots ( ) ;
2022-08-22 23:49:35 +00:00
setDefaultColorPresets ( ) ;
2018-11-29 21:41:42 +00:00
loadSettings ( ) ; // Look for saved preferences
2022-05-12 00:46:20 +00:00
2023-01-02 01:11:25 +00:00
audioDev = new audioDevices ( prefs . audioSystem , QFontMetrics ( ui - > audioInputCombo - > font ( ) ) ) ;
connect ( audioDev , SIGNAL ( updated ( ) ) , this , SLOT ( setAudioDevicesUI ( ) ) ) ;
audioDev - > enumerate ( ) ;
//setAudioDevicesUI(); // no need to call this as it will be called by the updated() signal
2022-05-12 00:46:20 +00:00
2021-02-22 07:58:23 +00:00
setTuningSteps ( ) ; // TODO: Combine into preferences
2018-11-28 06:02:37 +00:00
2022-04-08 14:51:59 +00:00
qDebug ( logSystem ( ) ) < < " Running setUIToPrefs() " ;
2021-05-29 03:51:19 +00:00
setUIToPrefs ( ) ;
2019-01-28 23:46:14 +00:00
2022-04-08 14:51:59 +00:00
qDebug ( logSystem ( ) ) < < " Running setInititalTiming() " ;
2021-05-29 04:27:06 +00:00
setInitialTiming ( ) ;
2019-02-04 05:51:30 +00:00
2022-04-08 14:51:59 +00:00
qDebug ( logSystem ( ) ) < < " Running openRig() " ;
2021-01-30 06:09:09 +00:00
openRig ( ) ;
2019-02-04 18:32:16 +00:00
2022-04-08 14:51:59 +00:00
qDebug ( logSystem ( ) ) < < " Running rigConnections() " ;
2021-05-29 03:51:19 +00:00
rigConnections ( ) ;
2019-02-04 18:32:16 +00:00
2022-05-05 17:09:16 +00:00
2022-09-29 16:17:51 +00:00
cluster = new dxClusterClient ( ) ;
clusterThread = new QThread ( this ) ;
2022-09-30 16:05:42 +00:00
clusterThread - > setObjectName ( " dxcluster() " ) ;
2022-09-29 16:17:51 +00:00
cluster - > moveToThread ( clusterThread ) ;
connect ( this , SIGNAL ( setClusterEnableUdp ( bool ) ) , cluster , SLOT ( enableUdp ( bool ) ) ) ;
2022-09-30 16:05:42 +00:00
connect ( this , SIGNAL ( setClusterEnableTcp ( bool ) ) , cluster , SLOT ( enableTcp ( bool ) ) ) ;
2022-09-29 16:17:51 +00:00
connect ( this , SIGNAL ( setClusterUdpPort ( int ) ) , cluster , SLOT ( setUdpPort ( int ) ) ) ;
2022-09-30 16:05:42 +00:00
connect ( this , SIGNAL ( setClusterServerName ( QString ) ) , cluster , SLOT ( setTcpServerName ( QString ) ) ) ;
connect ( this , SIGNAL ( setClusterTcpPort ( int ) ) , cluster , SLOT ( setTcpPort ( int ) ) ) ;
connect ( this , SIGNAL ( setClusterUserName ( QString ) ) , cluster , SLOT ( setTcpUserName ( QString ) ) ) ;
connect ( this , SIGNAL ( setClusterPassword ( QString ) ) , cluster , SLOT ( setTcpPassword ( QString ) ) ) ;
connect ( this , SIGNAL ( setClusterTimeout ( int ) ) , cluster , SLOT ( setTcpTimeout ( int ) ) ) ;
2022-10-05 10:03:15 +00:00
connect ( this , SIGNAL ( setFrequencyRange ( double , double ) ) , cluster , SLOT ( freqRange ( double , double ) ) ) ;
2022-10-31 12:39:27 +00:00
connect ( this , SIGNAL ( setClusterSkimmerSpots ( bool ) ) , cluster , SLOT ( enableSkimmerSpots ( bool ) ) ) ;
2022-09-30 16:05:42 +00:00
2022-10-05 10:03:15 +00:00
connect ( cluster , SIGNAL ( sendSpots ( QList < spotData > ) ) , this , SLOT ( receiveSpots ( QList < spotData > ) ) ) ;
2022-09-30 16:05:42 +00:00
connect ( cluster , SIGNAL ( sendOutput ( QString ) ) , this , SLOT ( receiveClusterOutput ( QString ) ) ) ;
2022-09-29 16:17:51 +00:00
connect ( clusterThread , SIGNAL ( finished ( ) ) , cluster , SLOT ( deleteLater ( ) ) ) ;
2022-09-30 16:05:42 +00:00
2022-09-29 16:17:51 +00:00
clusterThread - > start ( ) ;
2022-09-30 16:05:42 +00:00
emit setClusterUdpPort ( prefs . clusterUdpPort ) ;
emit setClusterEnableUdp ( prefs . clusterUdpEnable ) ;
for ( int f = 0 ; f < clusters . size ( ) ; f + + )
{
2022-09-30 16:26:21 +00:00
if ( clusters [ f ] . isdefault )
2022-09-30 16:05:42 +00:00
{
emit setClusterServerName ( clusters [ f ] . server ) ;
emit setClusterTcpPort ( clusters [ f ] . port ) ;
emit setClusterUserName ( clusters [ f ] . userName ) ;
emit setClusterPassword ( clusters [ f ] . password ) ;
emit setClusterTimeout ( clusters [ f ] . timeout ) ;
}
}
emit setClusterEnableTcp ( prefs . clusterTcpEnable ) ;
2022-01-06 10:08:36 +00:00
setServerToPrefs ( ) ;
2019-02-06 00:11:25 +00:00
2021-05-29 03:51:19 +00:00
amTransmitting = false ;
2021-06-12 07:57:52 +00:00
2023-01-30 12:01:29 +00:00
# if !defined(USB_CONTROLLER)
ui - > enableUsbChk - > setVisible ( false ) ;
2023-01-12 19:20:52 +00:00
ui - > usbControllerBtn - > setVisible ( false ) ;
2023-01-30 16:15:43 +00:00
ui - > usbButtonsResetBtn - > setVisible ( false ) ;
ui - > usbCommandsResetBtn - > setVisible ( false ) ;
ui - > usbResetLbl - > setVisible ( false ) ;
2023-01-12 19:20:52 +00:00
# endif
2022-09-18 16:42:41 +00:00
2021-06-12 07:57:52 +00:00
connect ( ui - > txPowerSlider , & QSlider : : sliderMoved ,
[ & ] ( int value ) {
QToolTip : : showText ( QCursor : : pos ( ) , QString ( " %1 " ) . arg ( value * 100 / 255 ) , nullptr ) ;
} ) ;
2023-01-02 01:11:25 +00:00
2021-05-29 03:51:19 +00:00
}
2019-02-06 00:11:25 +00:00
2021-05-29 03:51:19 +00:00
wfmain : : ~ wfmain ( )
{
rigThread - > quit ( ) ;
rigThread - > wait ( ) ;
if ( serverThread ! = Q_NULLPTR ) {
serverThread - > quit ( ) ;
serverThread - > wait ( ) ;
}
2022-09-29 16:17:51 +00:00
if ( clusterThread ! = Q_NULLPTR ) {
clusterThread - > quit ( ) ;
clusterThread - > wait ( ) ;
}
2021-05-29 03:51:19 +00:00
if ( rigCtl ! = Q_NULLPTR ) {
delete rigCtl ;
}
2022-05-12 00:46:20 +00:00
2023-01-02 12:38:05 +00:00
if ( audioDev ! = Q_NULLPTR ) {
delete audioDev ;
}
2022-05-12 00:46:20 +00:00
if ( prefs . audioSystem = = portAudio ) {
Pa_Terminate ( ) ;
}
2021-05-29 03:51:19 +00:00
delete rpt ;
delete ui ;
delete settings ;
2023-01-12 19:20:52 +00:00
# if defined(USB_CONTROLLER)
2022-04-22 10:11:21 +00:00
if ( usbControllerThread ! = Q_NULLPTR ) {
usbControllerThread - > quit ( ) ;
usbControllerThread - > wait ( ) ;
2021-06-01 16:48:19 +00:00
}
2023-01-12 19:20:52 +00:00
# endif
2021-05-29 03:51:19 +00:00
}
2020-03-10 18:08:36 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : closeEvent ( QCloseEvent * event )
{
// Are you sure?
2021-07-11 16:30:02 +00:00
if ( ! prefs . confirmExit ) {
QApplication : : exit ( ) ;
}
QCheckBox * cb = new QCheckBox ( " Don't ask me again " ) ;
2022-09-23 17:40:01 +00:00
cb - > setToolTip ( " Don't ask me to confirm exit again " ) ;
2021-07-11 16:30:02 +00:00
QMessageBox msgbox ;
msgbox . setText ( " Are you sure you wish to exit? \n " ) ;
msgbox . setIcon ( QMessageBox : : Icon : : Question ) ;
QAbstractButton * yesButton = msgbox . addButton ( QMessageBox : : Yes ) ;
msgbox . addButton ( QMessageBox : : No ) ;
msgbox . setDefaultButton ( QMessageBox : : Yes ) ;
msgbox . setCheckBox ( cb ) ;
QObject : : connect ( cb , & QCheckBox : : stateChanged , [ this ] ( int state ) {
if ( static_cast < Qt : : CheckState > ( state ) = = Qt : : CheckState : : Checked ) {
prefs . confirmExit = false ;
} else {
prefs . confirmExit = true ;
}
settings - > beginGroup ( " Interface " ) ;
settings - > setValue ( " ConfirmExit " , this - > prefs . confirmExit ) ;
settings - > endGroup ( ) ;
settings - > sync ( ) ;
} ) ;
msgbox . exec ( ) ;
if ( msgbox . clickedButton ( ) = = yesButton ) {
2021-05-29 03:51:19 +00:00
QApplication : : exit ( ) ;
} else {
event - > ignore ( ) ;
}
2022-09-23 17:40:01 +00:00
delete cb ;
2021-05-29 03:51:19 +00:00
}
2020-03-17 22:15:01 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : openRig ( )
{
// This function is intended to handle opening a connection to the rig.
// the connection can be either serial or network,
// and this function is also responsible for initiating the search for a rig model and capabilities.
// Any errors, such as unable to open connection or unable to open port, are to be reported to the user.
2020-03-17 22:15:01 +00:00
2021-05-29 03:51:19 +00:00
//TODO: if(hasRunPreviously)
2019-02-06 00:11:25 +00:00
2021-05-29 03:51:19 +00:00
//TODO: if(useNetwork){...
2023-01-02 13:39:59 +00:00
2021-05-29 03:51:19 +00:00
// } else {
2021-05-20 04:36:34 +00:00
2021-05-29 03:51:19 +00:00
// if (prefs.fileWasNotFound) {
// showRigSettings(); // rig setting dialog box for network/serial, CIV, hostname, port, baud rate, serial device, etc
// TODO: How do we know if the setting was loaded?
2021-05-20 04:36:34 +00:00
2022-09-17 20:04:46 +00:00
ui - > audioSystemServerCombo - > setEnabled ( false ) ;
2022-09-17 19:57:49 +00:00
ui - > audioSystemCombo - > setEnabled ( false ) ;
2022-09-17 20:04:46 +00:00
2022-09-17 21:31:43 +00:00
ui - > connectBtn - > setText ( " Cancel connection " ) ; // We are attempting to connect
2021-02-08 16:53:26 +00:00
2021-05-29 03:51:19 +00:00
makeRig ( ) ;
2021-05-05 13:11:00 +00:00
2021-05-29 03:51:19 +00:00
if ( prefs . enableLAN )
2021-05-20 18:24:40 +00:00
{
2021-05-29 03:51:19 +00:00
ui - > lanEnableBtn - > setChecked ( true ) ;
2021-06-15 03:22:15 +00:00
usingLAN = true ;
2021-06-04 07:24:26 +00:00
// We need to setup the tx/rx audio:
2022-04-18 19:29:50 +00:00
udpPrefs . waterfallFormat = prefs . waterfallFormat ;
2022-04-08 13:40:05 +00:00
emit sendCommSetup ( prefs . radioCIVAddr , udpPrefs , rxSetup , txSetup , prefs . virtualSerialPort , prefs . tcpPort ) ;
2021-05-29 03:51:19 +00:00
} else {
ui - > serialEnableBtn - > setChecked ( true ) ;
2022-09-23 16:42:36 +00:00
if ( ( prefs . serialPortRadio . toLower ( ) = = QString ( " auto " ) ) )
2021-05-20 18:24:40 +00:00
{
2021-05-29 03:51:19 +00:00
findSerialPort ( ) ;
} else {
2022-09-23 16:42:36 +00:00
serialPortRig = prefs . serialPortRadio ;
2021-05-20 18:24:40 +00:00
}
2021-06-15 03:22:15 +00:00
usingLAN = false ;
2022-04-18 19:29:50 +00:00
emit sendCommSetup ( prefs . radioCIVAddr , serialPortRig , prefs . serialPortBaud , prefs . virtualSerialPort , prefs . tcpPort , prefs . waterfallFormat ) ;
2021-07-25 05:53:36 +00:00
ui - > statusBar - > showMessage ( QString ( " Connecting to rig using serial port " ) . append ( serialPortRig ) , 1000 ) ;
2021-05-20 18:24:40 +00:00
}
2018-11-29 21:41:42 +00:00
2021-03-01 05:41:27 +00:00
2021-05-20 04:36:34 +00:00
2021-05-29 03:51:19 +00:00
}
2021-05-16 12:34:04 +00:00
2021-12-23 22:30:58 +00:00
void wfmain : : createSettingsListItems ( )
{
// Add items to the settings tab list widget
ui - > settingsList - > addItem ( " Radio Access " ) ; // 0
ui - > settingsList - > addItem ( " User Interface " ) ; // 1
ui - > settingsList - > addItem ( " Radio Settings " ) ; // 2
ui - > settingsList - > addItem ( " Radio Server " ) ; // 3
ui - > settingsList - > addItem ( " External Control " ) ; // 4
2022-09-29 16:17:51 +00:00
ui - > settingsList - > addItem ( " DX Cluster " ) ; // 5
ui - > settingsList - > addItem ( " Experimental " ) ; // 6
//ui->settingsList->addItem("Audio Processing"); // 7
2021-12-24 03:52:56 +00:00
ui - > settingsStack - > setCurrentIndex ( 0 ) ;
2021-12-23 22:30:58 +00:00
}
2021-12-24 03:45:58 +00:00
void wfmain : : on_settingsList_currentRowChanged ( int currentRow )
{
ui - > settingsStack - > setCurrentIndex ( currentRow ) ;
}
2021-12-23 22:30:58 +00:00
void wfmain : : connectSettingsList ( )
{
}
2021-05-29 03:51:19 +00:00
void wfmain : : rigConnections ( )
{
2021-05-30 22:08:22 +00:00
connect ( this , SIGNAL ( setCIVAddr ( unsigned char ) ) , rig , SLOT ( setCIVAddr ( unsigned char ) ) ) ;
2021-05-16 12:34:04 +00:00
2021-05-29 03:51:19 +00:00
connect ( this , SIGNAL ( sendPowerOn ( ) ) , rig , SLOT ( powerOn ( ) ) ) ;
connect ( this , SIGNAL ( sendPowerOff ( ) ) , rig , SLOT ( powerOff ( ) ) ) ;
2021-05-16 12:34:04 +00:00
2021-05-29 03:51:19 +00:00
connect ( rig , SIGNAL ( haveFrequency ( freqt ) ) , this , SLOT ( receiveFreq ( freqt ) ) ) ;
connect ( this , SIGNAL ( getFrequency ( ) ) , rig , SLOT ( getFrequency ( ) ) ) ;
connect ( this , SIGNAL ( getMode ( ) ) , rig , SLOT ( getMode ( ) ) ) ;
connect ( this , SIGNAL ( getDataMode ( ) ) , rig , SLOT ( getDataMode ( ) ) ) ;
connect ( this , SIGNAL ( setDataMode ( bool , unsigned char ) ) , rig , SLOT ( setDataMode ( bool , unsigned char ) ) ) ;
connect ( this , SIGNAL ( getBandStackReg ( char , char ) ) , rig , SLOT ( getBandStackReg ( char , char ) ) ) ;
connect ( rig , SIGNAL ( havePTTStatus ( bool ) ) , this , SLOT ( receivePTTstatus ( bool ) ) ) ;
connect ( this , SIGNAL ( setPTT ( bool ) ) , rig , SLOT ( setPTT ( bool ) ) ) ;
connect ( this , SIGNAL ( getPTT ( ) ) , rig , SLOT ( getPTT ( ) ) ) ;
2023-01-21 06:11:30 +00:00
2023-01-27 20:44:23 +00:00
connect ( this , SIGNAL ( selectVFO ( vfo_t ) ) , rig , SLOT ( selectVFO ( vfo_t ) ) ) ;
connect ( this , SIGNAL ( sendVFOSwap ( ) ) , rig , SLOT ( exchangeVFOs ( ) ) ) ;
connect ( this , SIGNAL ( sendVFOEqualAB ( ) ) , rig , SLOT ( equalizeVFOsAB ( ) ) ) ;
connect ( this , SIGNAL ( sendVFOEqualMS ( ) ) , rig , SLOT ( equalizeVFOsMS ( ) ) ) ;
2023-01-21 06:11:30 +00:00
connect ( this , SIGNAL ( sendCW ( QString ) ) , rig , SLOT ( sendCW ( QString ) ) ) ;
connect ( this , SIGNAL ( stopCW ( ) ) , rig , SLOT ( sendStopCW ( ) ) ) ;
connect ( this , SIGNAL ( setKeySpeed ( unsigned char ) ) , rig , SLOT ( setKeySpeed ( unsigned char ) ) ) ;
2023-01-21 07:23:47 +00:00
connect ( this , SIGNAL ( getKeySpeed ( ) ) , rig , SLOT ( getKeySpeed ( ) ) ) ;
2023-01-25 18:01:24 +00:00
connect ( this , SIGNAL ( setCwPitch ( unsigned char ) ) , rig , SLOT ( setCwPitch ( unsigned char ) ) ) ;
2023-01-21 06:11:30 +00:00
connect ( this , SIGNAL ( setCWBreakMode ( unsigned char ) ) , rig , SLOT ( setBreakIn ( unsigned char ) ) ) ;
2023-01-21 07:23:47 +00:00
connect ( this , SIGNAL ( getCWBreakMode ( ) ) , rig , SLOT ( getBreakIn ( ) ) ) ;
connect ( this - > rig , & rigCommander : : haveKeySpeed ,
2023-01-25 18:01:24 +00:00
[ = ] ( const unsigned char & wpm ) { cw - > handleKeySpeed ( wpm ) ; } ) ;
connect ( this - > rig , & rigCommander : : haveCwPitch ,
[ = ] ( const unsigned char & speed ) { cw - > handlePitch ( speed ) ; } ) ;
2023-01-21 07:23:47 +00:00
connect ( this - > rig , & rigCommander : : haveCWBreakMode ,
[ = ] ( const unsigned char & bm ) { cw - > handleBreakInMode ( bm ) ; } ) ;
2023-01-21 06:11:30 +00:00
2021-05-29 03:51:19 +00:00
connect ( rig , SIGNAL ( haveBandStackReg ( freqt , char , char , bool ) ) , this , SLOT ( receiveBandStackReg ( freqt , char , char , bool ) ) ) ;
connect ( this , SIGNAL ( setRitEnable ( bool ) ) , rig , SLOT ( setRitEnable ( bool ) ) ) ;
connect ( this , SIGNAL ( setRitValue ( int ) ) , rig , SLOT ( setRitValue ( int ) ) ) ;
connect ( rig , SIGNAL ( haveRitEnabled ( bool ) ) , this , SLOT ( receiveRITStatus ( bool ) ) ) ;
connect ( rig , SIGNAL ( haveRitFrequency ( int ) ) , this , SLOT ( receiveRITValue ( int ) ) ) ;
connect ( this , SIGNAL ( getRitEnabled ( ) ) , rig , SLOT ( getRitEnabled ( ) ) ) ;
connect ( this , SIGNAL ( getRitValue ( ) ) , rig , SLOT ( getRitValue ( ) ) ) ;
2021-05-16 12:34:04 +00:00
2021-05-29 03:51:19 +00:00
connect ( this , SIGNAL ( getDebug ( ) ) , rig , SLOT ( getDebug ( ) ) ) ;
2021-05-16 12:34:04 +00:00
2021-05-29 03:51:19 +00:00
connect ( this , SIGNAL ( spectOutputDisable ( ) ) , rig , SLOT ( disableSpectOutput ( ) ) ) ;
connect ( this , SIGNAL ( spectOutputEnable ( ) ) , rig , SLOT ( enableSpectOutput ( ) ) ) ;
connect ( this , SIGNAL ( scopeDisplayDisable ( ) ) , rig , SLOT ( disableSpectrumDisplay ( ) ) ) ;
connect ( this , SIGNAL ( scopeDisplayEnable ( ) ) , rig , SLOT ( enableSpectrumDisplay ( ) ) ) ;
connect ( rig , SIGNAL ( haveMode ( unsigned char , unsigned char ) ) , this , SLOT ( receiveMode ( unsigned char , unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveDataMode ( bool ) ) , this , SLOT ( receiveDataModeStatus ( bool ) ) ) ;
2022-10-28 19:04:14 +00:00
connect ( rig , SIGNAL ( havePassband ( quint16 ) ) , this , SLOT ( receivePassband ( quint16 ) ) ) ;
2023-01-18 18:52:05 +00:00
connect ( rig , SIGNAL ( haveCwPitch ( unsigned char ) ) , this , SLOT ( receiveCwPitch ( unsigned char ) ) ) ;
2021-05-16 12:34:04 +00:00
2023-01-28 05:42:57 +00:00
// Repeater, duplex, and split:
2021-05-29 03:51:19 +00:00
connect ( rpt , SIGNAL ( getDuplexMode ( ) ) , rig , SLOT ( getDuplexMode ( ) ) ) ;
connect ( rpt , SIGNAL ( setDuplexMode ( duplexMode ) ) , rig , SLOT ( setDuplexMode ( duplexMode ) ) ) ;
2021-03-31 07:14:20 +00:00
connect ( rig , SIGNAL ( haveDuplexMode ( duplexMode ) ) , rpt , SLOT ( receiveDuplexMode ( duplexMode ) ) ) ;
2023-01-28 05:42:57 +00:00
connect ( this , SIGNAL ( getRptDuplexOffset ( ) ) , rig , SLOT ( getRptDuplexOffset ( ) ) ) ;
connect ( rig , SIGNAL ( haveRptOffsetFrequency ( freqt ) ) , rpt , SLOT ( handleRptOffsetFrequency ( freqt ) ) ) ;
2023-02-01 05:52:24 +00:00
// These are the current tone frequency or DCS code selected:
2021-04-04 07:36:21 +00:00
connect ( rpt , SIGNAL ( getTone ( ) ) , rig , SLOT ( getTone ( ) ) ) ;
connect ( rpt , SIGNAL ( getTSQL ( ) ) , rig , SLOT ( getTSQL ( ) ) ) ;
connect ( rpt , SIGNAL ( getDTCS ( ) ) , rig , SLOT ( getDTCS ( ) ) ) ;
2023-01-27 22:05:50 +00:00
connect ( this - > rpt , & repeaterSetup : : setTone ,
[ = ] ( const rptrTone_t & t ) { issueCmd ( cmdSetTone , t ) ; } ) ;
connect ( this - > rpt , & repeaterSetup : : setTSQL ,
[ = ] ( const rptrTone_t & t ) { issueCmd ( cmdSetTSQL , t ) ; } ) ;
2023-02-01 02:00:12 +00:00
// TODO: struct with the DCS components and command queue entry
2021-04-05 06:33:56 +00:00
connect ( rpt , SIGNAL ( setDTCS ( quint16 , bool , bool ) ) , rig , SLOT ( setDTCS ( quint16 , bool , bool ) ) ) ;
2023-02-01 02:00:12 +00:00
//connect(rpt, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode()));
connect ( this - > rpt , & repeaterSetup : : getRptAccessMode ,
[ = ] ( ) {
if ( rigCaps . hasAdvancedRptrToneCmds ) {
issueDelayedCommand ( cmdGetRptAccessMode ) ;
} else {
issueDelayedCommand ( cmdGetToneEnabled ) ;
issueDelayedCommand ( cmdGetTSQLEnabled ) ;
}
} ) ;
2023-02-01 17:21:17 +00:00
connect ( this - > rpt , & repeaterSetup : : setQuickSplit ,
[ = ] ( const bool & qsEnabled ) {
issueCmd ( cmdSetQuickSplit , qsEnabled ) ;
} ) ;
2023-01-27 22:05:50 +00:00
2023-02-01 17:21:17 +00:00
connect ( this , SIGNAL ( setQuickSplit ( bool ) ) , rig , SLOT ( setQuickSplit ( bool ) ) ) ;
2023-01-27 22:05:50 +00:00
connect ( this - > rpt , & repeaterSetup : : setRptAccessMode ,
2023-02-01 05:52:24 +00:00
[ = ] ( const rptrAccessData_t & rd ) {
issueCmd ( cmdSetRptAccessMode , rd ) ;
} ) ;
2023-01-27 22:55:35 +00:00
connect ( this , SIGNAL ( setRepeaterAccessMode ( rptrAccessData_t ) ) , rig , SLOT ( setRptAccessMode ( rptrAccessData_t ) ) ) ;
connect ( this , SIGNAL ( setTone ( rptrTone_t ) ) , rig , SLOT ( setTone ( rptrTone_t ) ) ) ;
2023-01-27 22:05:50 +00:00
2021-04-04 07:36:21 +00:00
connect ( rig , SIGNAL ( haveTone ( quint16 ) ) , rpt , SLOT ( handleTone ( quint16 ) ) ) ;
connect ( rig , SIGNAL ( haveTSQL ( quint16 ) ) , rpt , SLOT ( handleTSQL ( quint16 ) ) ) ;
2021-04-08 06:43:18 +00:00
connect ( rig , SIGNAL ( haveDTCS ( quint16 , bool , bool ) ) , rpt , SLOT ( handleDTCS ( quint16 , bool , bool ) ) ) ;
2021-04-04 07:36:21 +00:00
connect ( rig , SIGNAL ( haveRptAccessMode ( rptAccessTxRx ) ) , rpt , SLOT ( handleRptAccessMode ( rptAccessTxRx ) ) ) ;
2023-01-29 18:39:24 +00:00
connect ( this - > rig , & rigCommander : : haveDuplexMode ,
[ = ] ( const duplexMode & dm ) {
if ( dm = = dmSplitOn )
this - > splitModeEnabled = true ;
else
this - > splitModeEnabled = false ;
} ) ;
2023-02-01 02:00:12 +00:00
connect ( this , SIGNAL ( getToneEnabled ( ) ) , rig , SLOT ( getToneEnabled ( ) ) ) ;
connect ( this , SIGNAL ( getTSQLEnabled ( ) ) , rig , SLOT ( getToneSqlEnabled ( ) ) ) ;
2023-01-25 08:15:20 +00:00
connect ( this - > rpt , & repeaterSetup : : setTransmitFrequency ,
2023-02-01 17:21:17 +00:00
[ = ] ( const freqt & transmitFreq ) { issueCmdUniquePriority ( cmdSetFreq , transmitFreq ) ; } ) ;
2023-01-25 08:15:20 +00:00
connect ( this - > rpt , & repeaterSetup : : setTransmitMode ,
[ = ] ( const mode_info & transmitMode ) { issueCmd ( cmdSetMode , transmitMode ) ; } ) ;
2023-01-27 20:44:23 +00:00
connect ( this - > rpt , & repeaterSetup : : selectVFO ,
[ = ] ( const vfo_t & v ) { issueCmd ( cmdSelVFO , v ) ; } ) ;
connect ( this - > rpt , & repeaterSetup : : equalizeVFOsAB ,
[ = ] ( ) { issueDelayedCommand ( cmdVFOEqualAB ) ; } ) ;
connect ( this - > rpt , & repeaterSetup : : equalizeVFOsMS ,
[ = ] ( ) { issueDelayedCommand ( cmdVFOEqualMS ) ; } ) ;
connect ( this - > rpt , & repeaterSetup : : swapVFOs ,
[ = ] ( ) { issueDelayedCommand ( cmdVFOSwap ) ; } ) ;
2023-01-28 05:42:57 +00:00
connect ( this - > rpt , & repeaterSetup : : setRptDuplexOffset ,
[ = ] ( const freqt & fOffset ) { issueCmd ( cmdSetRptDuplexOffset , fOffset ) ; } ) ;
connect ( this - > rpt , & repeaterSetup : : getRptDuplexOffset ,
[ = ] ( ) { issueDelayedCommand ( cmdGetRptDuplexOffset ) ; } ) ;
2021-04-04 07:36:21 +00:00
2023-01-28 05:42:57 +00:00
connect ( this , SIGNAL ( setRptDuplexOffset ( freqt ) ) , rig , SLOT ( setRptDuplexOffset ( freqt ) ) ) ;
2021-03-31 07:29:22 +00:00
connect ( this , SIGNAL ( getDuplexMode ( ) ) , rig , SLOT ( getDuplexMode ( ) ) ) ;
2023-01-28 05:42:57 +00:00
2022-09-26 00:44:49 +00:00
connect ( this , SIGNAL ( getPassband ( ) ) , rig , SLOT ( getPassband ( ) ) ) ;
2023-01-13 18:14:11 +00:00
connect ( this , SIGNAL ( setPassband ( quint16 ) ) , rig , SLOT ( setPassband ( quint16 ) ) ) ;
2023-01-18 18:52:05 +00:00
connect ( this , SIGNAL ( getCwPitch ( ) ) , rig , SLOT ( getCwPitch ( ) ) ) ;
connect ( this , SIGNAL ( getPskTone ( ) ) , rig , SLOT ( getPskTone ( ) ) ) ;
connect ( this , SIGNAL ( getRttyMark ( ) ) , rig , SLOT ( getRttyMark ( ) ) ) ;
2021-04-07 05:06:08 +00:00
connect ( this , SIGNAL ( getTone ( ) ) , rig , SLOT ( getTone ( ) ) ) ;
connect ( this , SIGNAL ( getTSQL ( ) ) , rig , SLOT ( getTSQL ( ) ) ) ;
connect ( this , SIGNAL ( getRptAccessMode ( ) ) , rig , SLOT ( getRptAccessMode ( ) ) ) ;
2021-02-19 05:47:19 +00:00
2021-02-19 08:14:40 +00:00
connect ( this , SIGNAL ( getModInput ( bool ) ) , rig , SLOT ( getModInput ( bool ) ) ) ;
connect ( rig , SIGNAL ( haveModInput ( rigInput , bool ) ) , this , SLOT ( receiveModInput ( rigInput , bool ) ) ) ;
connect ( this , SIGNAL ( setModInput ( rigInput , bool ) ) , rig , SLOT ( setModInput ( rigInput , bool ) ) ) ;
2018-06-19 19:58:52 +00:00
connect ( rig , SIGNAL ( haveSpectrumData ( QByteArray , double , double ) ) , this , SLOT ( receiveSpectrumData ( QByteArray , double , double ) ) ) ;
2021-03-01 05:41:27 +00:00
connect ( rig , SIGNAL ( haveSpectrumMode ( spectrumMode ) ) , this , SLOT ( receiveSpectrumMode ( spectrumMode ) ) ) ;
2023-01-31 17:35:55 +00:00
connect ( rig , SIGNAL ( haveScopeOutOfRange ( bool ) ) , this , SLOT ( handleScopeOutOfRange ( bool ) ) ) ;
2021-03-01 05:41:27 +00:00
connect ( this , SIGNAL ( setScopeMode ( spectrumMode ) ) , rig , SLOT ( setSpectrumMode ( spectrumMode ) ) ) ;
connect ( this , SIGNAL ( getScopeMode ( ) ) , rig , SLOT ( getScopeMode ( ) ) ) ;
2021-08-29 10:51:53 +00:00
connect ( this , SIGNAL ( setFrequency ( unsigned char , freqt ) ) , rig , SLOT ( setFrequency ( unsigned char , freqt ) ) ) ;
2018-06-19 19:58:52 +00:00
connect ( this , SIGNAL ( setScopeEdge ( char ) ) , rig , SLOT ( setScopeEdge ( char ) ) ) ;
connect ( this , SIGNAL ( setScopeSpan ( char ) ) , rig , SLOT ( setScopeSpan ( char ) ) ) ;
2021-04-11 07:42:25 +00:00
//connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode()));
2018-12-18 22:34:04 +00:00
connect ( this , SIGNAL ( getScopeEdge ( ) ) , rig , SLOT ( getScopeEdge ( ) ) ) ;
connect ( this , SIGNAL ( getScopeSpan ( ) ) , rig , SLOT ( getScopeSpan ( ) ) ) ;
2021-04-11 07:42:25 +00:00
connect ( rig , SIGNAL ( haveScopeSpan ( freqt , bool ) ) , this , SLOT ( receiveSpectrumSpan ( freqt , bool ) ) ) ;
2021-02-06 07:58:17 +00:00
connect ( this , SIGNAL ( setScopeFixedEdge ( double , double , unsigned char ) ) , rig , SLOT ( setSpectrumBounds ( double , double , unsigned char ) ) ) ;
2018-12-18 22:34:04 +00:00
2021-02-13 18:02:45 +00:00
connect ( this , SIGNAL ( setMode ( unsigned char , unsigned char ) ) , rig , SLOT ( setMode ( unsigned char , unsigned char ) ) ) ;
2021-06-26 06:56:19 +00:00
connect ( this , SIGNAL ( setMode ( mode_info ) ) , rig , SLOT ( setMode ( mode_info ) ) ) ;
2021-02-16 01:15:28 +00:00
// Levels (read and write)
2021-02-16 04:32:14 +00:00
// Levels: Query:
2021-02-16 01:15:28 +00:00
connect ( this , SIGNAL ( getLevels ( ) ) , rig , SLOT ( getLevels ( ) ) ) ;
2018-11-16 22:08:21 +00:00
connect ( this , SIGNAL ( getRfGain ( ) ) , rig , SLOT ( getRfGain ( ) ) ) ;
2018-11-17 06:19:44 +00:00
connect ( this , SIGNAL ( getAfGain ( ) ) , rig , SLOT ( getAfGain ( ) ) ) ;
2021-02-16 04:32:14 +00:00
connect ( this , SIGNAL ( getSql ( ) ) , rig , SLOT ( getSql ( ) ) ) ;
2021-11-05 17:09:31 +00:00
connect ( this , SIGNAL ( getIfShift ( ) ) , rig , SLOT ( getIFShift ( ) ) ) ;
connect ( this , SIGNAL ( getTPBFInner ( ) ) , rig , SLOT ( getTPBFInner ( ) ) ) ;
connect ( this , SIGNAL ( getTPBFOuter ( ) ) , rig , SLOT ( getTPBFOuter ( ) ) ) ;
2021-02-16 04:32:14 +00:00
connect ( this , SIGNAL ( getTxPower ( ) ) , rig , SLOT ( getTxLevel ( ) ) ) ;
connect ( this , SIGNAL ( getMicGain ( ) ) , rig , SLOT ( getMicGain ( ) ) ) ;
2021-02-16 06:33:21 +00:00
connect ( this , SIGNAL ( getSpectrumRefLevel ( ) ) , rig , SLOT ( getSpectrumRefLevel ( ) ) ) ;
2021-02-20 08:05:23 +00:00
connect ( this , SIGNAL ( getModInputLevel ( rigInput ) ) , rig , SLOT ( getModInputLevel ( rigInput ) ) ) ;
2021-02-16 04:32:14 +00:00
2021-08-06 11:37:03 +00:00
2021-02-16 04:32:14 +00:00
// Levels: Set:
2018-11-17 06:19:44 +00:00
connect ( this , SIGNAL ( setRfGain ( unsigned char ) ) , rig , SLOT ( setRfGain ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setAfGain ( unsigned char ) ) , rig , SLOT ( setAfGain ( unsigned char ) ) ) ;
2021-02-16 04:32:14 +00:00
connect ( this , SIGNAL ( setSql ( unsigned char ) ) , rig , SLOT ( setSquelch ( unsigned char ) ) ) ;
2021-11-05 17:09:31 +00:00
connect ( this , SIGNAL ( setIFShift ( unsigned char ) ) , rig , SLOT ( setIFShift ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setTPBFInner ( unsigned char ) ) , rig , SLOT ( setTPBFInner ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setTPBFOuter ( unsigned char ) ) , rig , SLOT ( setTPBFOuter ( unsigned char ) ) ) ;
2021-02-16 04:32:14 +00:00
connect ( this , SIGNAL ( setTxPower ( unsigned char ) ) , rig , SLOT ( setTxPower ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setMicGain ( unsigned char ) ) , rig , SLOT ( setMicGain ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setMonitorLevel ( unsigned char ) ) , rig , SLOT ( setMonitorLevel ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setVoxGain ( unsigned char ) ) , rig , SLOT ( setVoxGain ( unsigned char ) ) ) ;
connect ( this , SIGNAL ( setAntiVoxGain ( unsigned char ) ) , rig , SLOT ( setAntiVoxGain ( unsigned char ) ) ) ;
2021-02-16 05:40:31 +00:00
connect ( this , SIGNAL ( setSpectrumRefLevel ( int ) ) , rig , SLOT ( setSpectrumRefLevel ( int ) ) ) ;
2021-08-06 11:37:03 +00:00
connect ( this , SIGNAL ( setModLevel ( rigInput , unsigned char ) ) , rig , SLOT ( setModInputLevel ( rigInput , unsigned char ) ) ) ;
2021-02-16 04:32:14 +00:00
// Levels: handle return on query:
2018-11-17 06:19:44 +00:00
connect ( rig , SIGNAL ( haveRfGain ( unsigned char ) ) , this , SLOT ( receiveRfGain ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveAfGain ( unsigned char ) ) , this , SLOT ( receiveAfGain ( unsigned char ) ) ) ;
2018-11-18 08:01:20 +00:00
connect ( rig , SIGNAL ( haveSql ( unsigned char ) ) , this , SLOT ( receiveSql ( unsigned char ) ) ) ;
2021-11-05 17:09:31 +00:00
connect ( rig , SIGNAL ( haveIFShift ( unsigned char ) ) , trxadj , SLOT ( updateIFShift ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveTPBFInner ( unsigned char ) ) , trxadj , SLOT ( updateTPBFInner ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveTPBFOuter ( unsigned char ) ) , trxadj , SLOT ( updateTPBFOuter ( unsigned char ) ) ) ;
2023-01-16 12:24:22 +00:00
connect ( rig , SIGNAL ( haveTPBFInner ( unsigned char ) ) , this , SLOT ( receiveTPBFInner ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveTPBFOuter ( unsigned char ) ) , this , SLOT ( receiveTPBFOuter ( unsigned char ) ) ) ;
2021-02-16 01:15:28 +00:00
connect ( rig , SIGNAL ( haveTxPower ( unsigned char ) ) , this , SLOT ( receiveTxPower ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveMicGain ( unsigned char ) ) , this , SLOT ( receiveMicGain ( unsigned char ) ) ) ;
2021-02-16 06:33:21 +00:00
connect ( rig , SIGNAL ( haveSpectrumRefLevel ( int ) ) , this , SLOT ( receiveSpectrumRefLevel ( int ) ) ) ;
2021-02-20 08:05:23 +00:00
connect ( rig , SIGNAL ( haveACCGain ( unsigned char , unsigned char ) ) , this , SLOT ( receiveACCGain ( unsigned char , unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveUSBGain ( unsigned char ) ) , this , SLOT ( receiveUSBGain ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveLANGain ( unsigned char ) ) , this , SLOT ( receiveLANGain ( unsigned char ) ) ) ;
2021-02-16 01:15:28 +00:00
2021-02-21 04:41:19 +00:00
//Metering:
2021-02-26 07:57:37 +00:00
connect ( this , SIGNAL ( getMeters ( meterKind ) ) , rig , SLOT ( getMeters ( meterKind ) ) ) ;
2021-02-21 04:41:19 +00:00
connect ( rig , SIGNAL ( haveMeter ( meterKind , unsigned char ) ) , this , SLOT ( receiveMeter ( meterKind , unsigned char ) ) ) ;
// Rig and ATU info:
2018-11-17 06:19:44 +00:00
connect ( this , SIGNAL ( startATU ( ) ) , rig , SLOT ( startATU ( ) ) ) ;
2018-11-17 07:13:59 +00:00
connect ( this , SIGNAL ( setATU ( bool ) ) , rig , SLOT ( setATU ( bool ) ) ) ;
2018-12-20 18:56:54 +00:00
connect ( this , SIGNAL ( getATUStatus ( ) ) , rig , SLOT ( getATUStatus ( ) ) ) ;
2018-11-20 07:42:34 +00:00
connect ( this , SIGNAL ( getRigID ( ) ) , rig , SLOT ( getRigID ( ) ) ) ;
2018-12-20 18:56:54 +00:00
connect ( rig , SIGNAL ( haveATUStatus ( unsigned char ) ) , this , SLOT ( receiveATUStatus ( unsigned char ) ) ) ;
2021-01-25 00:16:38 +00:00
connect ( rig , SIGNAL ( haveRigID ( rigCapabilities ) ) , this , SLOT ( receiveRigID ( rigCapabilities ) ) ) ;
2021-04-08 06:35:24 +00:00
connect ( this , SIGNAL ( setAttenuator ( unsigned char ) ) , rig , SLOT ( setAttenuator ( unsigned char ) ) ) ;
2021-04-09 17:04:20 +00:00
connect ( this , SIGNAL ( setPreamp ( unsigned char ) ) , rig , SLOT ( setPreamp ( unsigned char ) ) ) ;
2021-07-16 16:08:55 +00:00
connect ( this , SIGNAL ( setAntenna ( unsigned char , bool ) ) , rig , SLOT ( setAntenna ( unsigned char , bool ) ) ) ;
2021-04-10 07:21:58 +00:00
connect ( this , SIGNAL ( getPreamp ( ) ) , rig , SLOT ( getPreamp ( ) ) ) ;
2021-04-11 05:48:32 +00:00
connect ( rig , SIGNAL ( havePreamp ( unsigned char ) ) , this , SLOT ( receivePreamp ( unsigned char ) ) ) ;
2021-04-10 07:21:58 +00:00
connect ( this , SIGNAL ( getAttenuator ( ) ) , rig , SLOT ( getAttenuator ( ) ) ) ;
2021-04-11 05:48:32 +00:00
connect ( rig , SIGNAL ( haveAttenuator ( unsigned char ) ) , this , SLOT ( receiveAttenuator ( unsigned char ) ) ) ;
2021-04-20 05:18:45 +00:00
connect ( this , SIGNAL ( getAntenna ( ) ) , rig , SLOT ( getAntenna ( ) ) ) ;
2021-07-16 18:33:15 +00:00
connect ( rig , SIGNAL ( haveAntenna ( unsigned char , bool ) ) , this , SLOT ( receiveAntennaSel ( unsigned char , bool ) ) ) ;
2021-04-11 05:48:32 +00:00
2018-11-17 07:13:59 +00:00
2021-01-25 00:16:38 +00:00
// Speech (emitted from rig speaker)
2019-02-01 20:21:54 +00:00
connect ( this , SIGNAL ( sayAll ( ) ) , rig , SLOT ( sayAll ( ) ) ) ;
connect ( this , SIGNAL ( sayFrequency ( ) ) , rig , SLOT ( sayFrequency ( ) ) ) ;
connect ( this , SIGNAL ( sayMode ( ) ) , rig , SLOT ( sayMode ( ) ) ) ;
2018-06-19 19:58:52 +00:00
2021-02-11 08:33:25 +00:00
// calibration window:
connect ( cal , SIGNAL ( requestRefAdjustCourse ( ) ) , rig , SLOT ( getRefAdjustCourse ( ) ) ) ;
connect ( cal , SIGNAL ( requestRefAdjustFine ( ) ) , rig , SLOT ( getRefAdjustFine ( ) ) ) ;
connect ( rig , SIGNAL ( haveRefAdjustCourse ( unsigned char ) ) , cal , SLOT ( handleRefAdjustCourse ( unsigned char ) ) ) ;
connect ( rig , SIGNAL ( haveRefAdjustFine ( unsigned char ) ) , cal , SLOT ( handleRefAdjustFine ( unsigned char ) ) ) ;
connect ( cal , SIGNAL ( setRefAdjustCourse ( unsigned char ) ) , rig , SLOT ( setRefAdjustCourse ( unsigned char ) ) ) ;
connect ( cal , SIGNAL ( setRefAdjustFine ( unsigned char ) ) , rig , SLOT ( setRefAdjustFine ( unsigned char ) ) ) ;
2021-07-09 19:02:50 +00:00
// Date and Time:
connect ( this , SIGNAL ( setTime ( timekind ) ) , rig , SLOT ( setTime ( timekind ) ) ) ;
connect ( this , SIGNAL ( setDate ( datekind ) ) , rig , SLOT ( setDate ( datekind ) ) ) ;
connect ( this , SIGNAL ( setUTCOffset ( timekind ) ) , rig , SLOT ( setUTCOffset ( timekind ) ) ) ;
2021-05-29 03:51:19 +00:00
}
2021-02-11 08:33:25 +00:00
2021-05-29 03:51:19 +00:00
//void wfmain::removeRigConnections()
//{
2021-02-18 09:14:41 +00:00
2021-05-29 03:51:19 +00:00
//}
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : makeRig ( )
{
if ( rigThread = = Q_NULLPTR )
{
rig = new rigCommander ( ) ;
rigThread = new QThread ( this ) ;
2022-05-02 15:11:35 +00:00
rigThread - > setObjectName ( " rigCommander() " ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
// Thread:
rig - > moveToThread ( rigThread ) ;
connect ( rigThread , SIGNAL ( started ( ) ) , rig , SLOT ( process ( ) ) ) ;
connect ( rigThread , SIGNAL ( finished ( ) ) , rig , SLOT ( deleteLater ( ) ) ) ;
rigThread - > start ( ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
// Rig status and Errors:
2023-01-05 19:37:53 +00:00
connect ( rig , SIGNAL ( havePortError ( errorType ) ) , this , SLOT ( receivePortError ( errorType ) ) ) ;
2022-01-22 15:12:36 +00:00
connect ( rig , SIGNAL ( haveStatusUpdate ( networkStatus ) ) , this , SLOT ( receiveStatusUpdate ( networkStatus ) ) ) ;
2022-08-24 05:24:05 +00:00
connect ( rig , SIGNAL ( haveNetworkAudioLevels ( networkAudioLevels ) ) , this , SLOT ( receiveNetworkAudioLevels ( networkAudioLevels ) ) ) ;
2022-01-21 19:23:32 +00:00
connect ( rig , SIGNAL ( requestRadioSelection ( QList < radio_cap_packet > ) ) , this , SLOT ( radioSelection ( QList < radio_cap_packet > ) ) ) ;
2022-01-23 17:54:40 +00:00
connect ( rig , SIGNAL ( setRadioUsage ( quint8 , quint8 , QString , QString ) ) , selRad , SLOT ( setInUse ( quint8 , quint8 , QString , QString ) ) ) ;
connect ( selRad , SIGNAL ( selectedRadio ( quint8 ) ) , rig , SLOT ( setCurrentRadio ( quint8 ) ) ) ;
2021-05-29 03:51:19 +00:00
// Rig comm setup:
2022-04-08 13:40:05 +00:00
connect ( this , SIGNAL ( sendCommSetup ( unsigned char , udpPreferences , audioSetup , audioSetup , QString , quint16 ) ) , rig , SLOT ( commSetup ( unsigned char , udpPreferences , audioSetup , audioSetup , QString , quint16 ) ) ) ;
2022-04-18 19:29:50 +00:00
connect ( this , SIGNAL ( sendCommSetup ( unsigned char , QString , quint32 , QString , quint16 , quint8 ) ) , rig , SLOT ( commSetup ( unsigned char , QString , quint32 , QString , quint16 , quint8 ) ) ) ;
2021-12-30 09:52:23 +00:00
connect ( this , SIGNAL ( setRTSforPTT ( bool ) ) , rig , SLOT ( setRTSforPTT ( bool ) ) ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
connect ( rig , SIGNAL ( haveBaudRate ( quint32 ) ) , this , SLOT ( receiveBaudRate ( quint32 ) ) ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
connect ( this , SIGNAL ( sendCloseComm ( ) ) , rig , SLOT ( closeComm ( ) ) ) ;
connect ( this , SIGNAL ( sendChangeLatency ( quint16 ) ) , rig , SLOT ( changeLatency ( quint16 ) ) ) ;
connect ( this , SIGNAL ( getRigCIV ( ) ) , rig , SLOT ( findRigs ( ) ) ) ;
2021-11-07 06:59:03 +00:00
connect ( this , SIGNAL ( setRigID ( unsigned char ) ) , rig , SLOT ( setRigID ( unsigned char ) ) ) ;
2021-05-29 03:51:19 +00:00
connect ( rig , SIGNAL ( discoveredRigID ( rigCapabilities ) ) , this , SLOT ( receiveFoundRigID ( rigCapabilities ) ) ) ;
connect ( rig , SIGNAL ( commReady ( ) ) , this , SLOT ( receiveCommReady ( ) ) ) ;
2018-06-19 19:58:52 +00:00
2021-12-04 19:21:23 +00:00
connect ( this , SIGNAL ( requestRigState ( ) ) , rig , SLOT ( sendState ( ) ) ) ;
connect ( this , SIGNAL ( stateUpdated ( ) ) , rig , SLOT ( stateUpdated ( ) ) ) ;
connect ( rig , SIGNAL ( stateInfo ( rigstate * ) ) , this , SLOT ( receiveStateInfo ( rigstate * ) ) ) ;
2021-05-29 03:51:19 +00:00
if ( rigCtl ! = Q_NULLPTR ) {
2021-11-23 00:39:10 +00:00
connect ( rig , SIGNAL ( stateInfo ( rigstate * ) ) , rigCtl , SLOT ( receiveStateInfo ( rigstate * ) ) ) ;
connect ( rigCtl , SIGNAL ( stateUpdated ( ) ) , rig , SLOT ( stateUpdated ( ) ) ) ;
2021-05-16 12:34:04 +00:00
}
2022-01-29 22:50:58 +00:00
// Create link for server so it can have easy access to rig.
if ( serverConfig . rigs . first ( ) ! = Q_NULLPTR ) {
serverConfig . rigs . first ( ) - > rig = rig ;
serverConfig . rigs . first ( ) - > rigThread = rigThread ;
2021-03-22 09:10:03 +00:00
}
2021-05-16 12:34:04 +00:00
}
2021-05-29 03:51:19 +00:00
}
2021-02-16 16:16:46 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : removeRig ( )
{
if ( rigThread ! = Q_NULLPTR )
2021-05-05 13:11:00 +00:00
{
2021-05-29 03:51:19 +00:00
if ( rigCtl ! = Q_NULLPTR ) {
rigCtl - > disconnect ( ) ;
}
rigThread - > disconnect ( ) ;
2021-02-24 08:18:19 +00:00
2021-05-29 03:51:19 +00:00
rig - > disconnect ( ) ;
2022-05-12 14:53:48 +00:00
2021-05-29 03:51:19 +00:00
delete rigThread ;
delete rig ;
2021-08-04 19:49:32 +00:00
rig = Q_NULLPTR ;
2021-05-05 13:11:00 +00:00
}
2021-05-29 03:51:19 +00:00
}
2021-05-11 08:38:05 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : findSerialPort ( )
{
// Find the ICOM radio connected, or, if none, fall back to OS default.
// qInfo(logSystem()) << "Searching for serial port...";
2022-04-08 13:40:05 +00:00
bool found = false ;
// First try to find first Icom port:
foreach ( const QSerialPortInfo & serialPortInfo , QSerialPortInfo : : availablePorts ( ) )
2021-05-29 03:51:19 +00:00
{
2022-04-08 13:40:05 +00:00
if ( serialPortInfo . serialNumber ( ) . left ( 3 ) = = " IC- " ) {
qInfo ( logSystem ( ) ) < < " Serial Port found: " < < serialPortInfo . portName ( ) < < " Manufacturer: " < < serialPortInfo . manufacturer ( ) < < " Product ID " < < serialPortInfo . description ( ) < < " S/N " < < serialPortInfo . serialNumber ( ) ;
# if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
serialPortRig = ( QString ( " /dev/ " ) + serialPortInfo . portName ( ) ) ;
# else
serialPortRig = serialPortInfo . portName ( ) ;
# endif
found = true ;
break ;
}
}
if ( ! found ) {
QDirIterator it73 ( " /dev/serial/by-id " , QStringList ( ) < < " *IC-7300* " , QDir : : Files , QDirIterator : : Subdirectories ) ;
QDirIterator it97 ( " /dev/serial " , QStringList ( ) < < " *IC-9700*A* " , QDir : : Files , QDirIterator : : Subdirectories ) ;
QDirIterator it785x ( " /dev/serial " , QStringList ( ) < < " *IC-785*A* " , QDir : : Files , QDirIterator : : Subdirectories ) ;
QDirIterator it705 ( " /dev/serial " , QStringList ( ) < < " *IC-705*A " , QDir : : Files , QDirIterator : : Subdirectories ) ;
QDirIterator it7610 ( " /dev/serial " , QStringList ( ) < < " *IC-7610*A " , QDir : : Files , QDirIterator : : Subdirectories ) ;
QDirIterator itR8600 ( " /dev/serial " , QStringList ( ) < < " *IC-R8600*A " , QDir : : Files , QDirIterator : : Subdirectories ) ;
if ( ! it73 . filePath ( ) . isEmpty ( ) )
{
// IC-7300
serialPortRig = it73 . filePath ( ) ; // first
} else if ( ! it97 . filePath ( ) . isEmpty ( ) )
{
// IC-9700
serialPortRig = it97 . filePath ( ) ;
} else if ( ! it785x . filePath ( ) . isEmpty ( ) )
{
// IC-785x
serialPortRig = it785x . filePath ( ) ;
} else if ( ! it705 . filePath ( ) . isEmpty ( ) )
{
// IC-705
serialPortRig = it705 . filePath ( ) ;
} else if ( ! it7610 . filePath ( ) . isEmpty ( ) )
{
// IC-7610
serialPortRig = it7610 . filePath ( ) ;
} else if ( ! itR8600 . filePath ( ) . isEmpty ( ) )
{
// IC-R8600
serialPortRig = itR8600 . filePath ( ) ;
}
else {
//fall back:
qInfo ( logSystem ( ) ) < < " Could not find Icom serial port. Falling back to OS default. Use --port to specify, or modify preferences. " ;
2021-05-17 16:05:19 +00:00
# ifdef Q_OS_MAC
2022-04-08 13:40:05 +00:00
serialPortRig = QString ( " /dev/tty.SLAB_USBtoUART " ) ;
2021-05-17 16:05:19 +00:00
# endif
2021-05-29 03:51:19 +00:00
# ifdef Q_OS_LINUX
2022-04-08 13:40:05 +00:00
serialPortRig = QString ( " /dev/ttyUSB0 " ) ;
2021-05-29 03:51:19 +00:00
# endif
# ifdef Q_OS_WIN
2022-04-08 13:40:05 +00:00
serialPortRig = QString ( " COM1 " ) ;
2021-05-29 03:51:19 +00:00
# endif
2022-04-08 13:40:05 +00:00
}
2021-05-29 03:51:19 +00:00
}
}
2021-05-11 08:38:05 +00:00
2021-02-07 09:03:02 +00:00
void wfmain : : receiveCommReady ( )
{
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Received CommReady!! " ;
2021-06-15 03:22:15 +00:00
if ( ! usingLAN )
{
// usingLAN gets set when we emit the sendCommSetup signal.
// If we're not using the LAN, then we're on serial, and
// we already know the baud rate and can calculate the timing parameters.
calculateTimingParameters ( ) ;
}
2021-02-07 09:03:02 +00:00
if ( prefs . radioCIVAddr = = 0 )
{
// tell rigCommander to broadcast a request for all rig IDs.
2021-05-15 17:53:16 +00:00
// qInfo(logSystem()) << "Beginning search from wfview for rigCIV (auto-detection broadcast)";
2021-05-18 07:29:06 +00:00
ui - > statusBar - > showMessage ( QString ( " Searching CI-V bus for connected radios. " ) , 1000 ) ;
2021-02-07 09:03:02 +00:00
emit getRigCIV ( ) ;
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetRigCIV ) ;
2021-02-07 09:03:02 +00:00
delayedCommand - > start ( ) ;
} else {
// don't bother, they told us the CIV they want, stick with it.
// We still query the rigID to find the model, but at least we know the CIV.
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Skipping automatic CIV, using user-supplied value of " < < prefs . radioCIVAddr ;
2021-05-18 07:29:06 +00:00
showStatusBarText ( QString ( " Using user-supplied radio CI-V address of 0x%1 " ) . arg ( prefs . radioCIVAddr , 2 , 16 ) ) ;
2021-11-07 06:59:03 +00:00
if ( prefs . CIVisRadioModel )
{
qInfo ( logSystem ( ) ) < < " Skipping Rig ID query, using user-supplied model from CI-V address: " < < prefs . radioCIVAddr ;
2022-11-24 07:26:11 +00:00
emit setCIVAddr ( prefs . radioCIVAddr ) ;
2021-11-07 06:59:03 +00:00
emit setRigID ( prefs . radioCIVAddr ) ;
} else {
2022-11-24 07:26:11 +00:00
emit setCIVAddr ( prefs . radioCIVAddr ) ;
2021-11-07 06:59:03 +00:00
emit getRigID ( ) ;
2022-11-24 07:26:11 +00:00
issueDelayedCommand ( cmdGetRigID ) ;
delayedCommand - > start ( ) ;
2021-11-07 06:59:03 +00:00
}
2021-05-11 08:38:05 +00:00
}
2021-02-07 09:03:02 +00:00
}
2021-05-05 13:11:00 +00:00
2021-01-30 06:09:09 +00:00
void wfmain : : receiveFoundRigID ( rigCapabilities rigCaps )
{
// Entry point for unknown rig being identified at the start of the program.
//now we know what the rig ID is:
2021-05-15 17:53:16 +00:00
//qInfo(logSystem()) << "In wfview, we now have a reply to our request for rig identity sent to CIV BROADCAST.";
2021-05-05 13:11:00 +00:00
2021-05-01 05:15:30 +00:00
if ( rig - > usingLAN ( ) )
{
usingLAN = true ;
} else {
usingLAN = false ;
2021-05-20 18:24:40 +00:00
}
2018-11-29 21:41:42 +00:00
2021-01-30 06:09:09 +00:00
receiveRigID ( rigCaps ) ;
getInitialRigState ( ) ;
2021-03-01 05:41:27 +00:00
2021-01-30 06:09:09 +00:00
return ;
}
2021-02-16 16:16:46 +00:00
2023-01-05 19:37:53 +00:00
void wfmain : : receivePortError ( errorType err )
2021-02-02 09:05:59 +00:00
{
2023-01-05 19:37:53 +00:00
if ( err . alert ) {
2023-01-05 20:00:31 +00:00
connectionHandler ( false ) ; // Force disconnect
2023-01-05 19:37:53 +00:00
QMessageBox : : critical ( this , err . device , err . message , QMessageBox : : Ok ) ;
}
else
{
qInfo ( logSystem ( ) ) < < " wfmain: received error for device: " < < err . device < < " with message: " < < err . message ;
ui - > statusBar - > showMessage ( QString ( " ERROR: using device " ) . append ( err . device ) . append ( " : " ) . append ( err . message ) , 10000 ) ;
}
2021-02-02 09:05:59 +00:00
// TODO: Dialog box, exit, etc
}
2021-02-16 16:16:46 +00:00
2022-01-22 15:12:36 +00:00
void wfmain : : receiveStatusUpdate ( networkStatus status )
2021-02-05 20:26:18 +00:00
{
2022-01-22 15:12:36 +00:00
this - > rigStatus - > setText ( status . message ) ;
selRad - > audioOutputLevel ( status . rxAudioLevel ) ;
selRad - > audioInputLevel ( status . txAudioLevel ) ;
//qInfo(logSystem()) << "Got Status Update" << status.rxAudioLevel;
2021-02-05 20:26:18 +00:00
}
2021-02-18 09:14:41 +00:00
2022-08-24 05:24:05 +00:00
void wfmain : : receiveNetworkAudioLevels ( networkAudioLevels l )
2021-05-29 03:51:19 +00:00
{
2022-08-25 04:52:36 +00:00
/*
2022-08-24 23:06:41 +00:00
meterKind m2mtr = ui - > meter2Widget - > getMeterType ( ) ;
2022-08-25 04:52:36 +00:00
2022-08-24 23:06:41 +00:00
if ( m2mtr = = meterAudio )
{
if ( amTransmitting )
{
if ( l . haveTxLevels )
ui - > meter2Widget - > setLevels ( l . txAudioRMS , l . txAudioPeak ) ;
} else {
if ( l . haveRxLevels )
ui - > meter2Widget - > setLevels ( l . rxAudioRMS , l . rxAudioPeak ) ;
}
} else if ( m2mtr = = meterTxMod ) {
if ( l . haveTxLevels )
ui - > meter2Widget - > setLevels ( l . txAudioRMS , l . txAudioPeak ) ;
} else if ( m2mtr = = meterRxAudio ) {
if ( l . haveRxLevels )
ui - > meter2Widget - > setLevels ( l . rxAudioRMS , l . rxAudioPeak ) ;
}
2022-08-25 04:52:36 +00:00
*/
2022-08-24 23:06:41 +00:00
2022-08-24 05:24:05 +00:00
meterKind m = meterNone ;
if ( l . haveRxLevels )
{
m = meterRxAudio ;
2022-08-25 04:52:36 +00:00
receiveMeter ( m , l . rxAudioPeak ) ;
2022-08-24 05:24:05 +00:00
}
if ( l . haveTxLevels )
{
m = meterTxMod ;
2022-08-25 04:52:36 +00:00
receiveMeter ( m , l . txAudioPeak ) ;
2022-08-24 05:24:05 +00:00
}
2021-02-18 09:14:41 +00:00
2022-08-24 05:24:05 +00:00
}
2021-05-29 03:51:19 +00:00
void wfmain : : setupPlots ( )
{
2021-05-31 06:26:36 +00:00
spectrumDrawLock = true ;
2022-08-17 22:51:26 +00:00
plot = ui - > plot ;
2021-06-08 07:03:00 +00:00
2021-05-29 03:51:19 +00:00
wf = ui - > waterfall ;
2022-09-26 00:44:49 +00:00
passbandIndicator = new QCPItemRect ( plot ) ;
passbandIndicator - > setAntialiased ( true ) ;
passbandIndicator - > setPen ( QPen ( Qt : : red ) ) ;
passbandIndicator - > setBrush ( QBrush ( Qt : : red ) ) ;
2022-10-28 23:18:04 +00:00
passbandIndicator - > setSelectable ( true ) ;
2022-09-26 00:44:49 +00:00
2023-01-19 16:16:47 +00:00
pbtIndicator = new QCPItemRect ( plot ) ;
pbtIndicator - > setAntialiased ( true ) ;
pbtIndicator - > setPen ( QPen ( Qt : : red ) ) ;
pbtIndicator - > setBrush ( QBrush ( Qt : : red ) ) ;
pbtIndicator - > setSelectable ( true ) ;
pbtIndicator - > setVisible ( false ) ;
2021-05-29 03:51:19 +00:00
freqIndicatorLine = new QCPItemLine ( plot ) ;
freqIndicatorLine - > setAntialiased ( true ) ;
freqIndicatorLine - > setPen ( QPen ( Qt : : blue ) ) ;
2022-09-29 16:17:51 +00:00
/*
text = new QCPItemText ( plot ) ;
text - > setAntialiased ( true ) ;
text - > setColor ( QColor ( Qt : : red ) ) ;
text - > setText ( " TEST " ) ;
text - > position - > setCoords ( 14.195 , rigCaps . spectAmpMax ) ;
text - > setFont ( QFont ( font ( ) . family ( ) , 12 ) ) ;
*/
2022-09-26 00:44:49 +00:00
2021-05-29 03:51:19 +00:00
ui - > plot - > addGraph ( ) ; // primary
2022-08-17 22:51:26 +00:00
ui - > plot - > addGraph ( 0 , 0 ) ; // secondary, peaks, same axis as first.
ui - > plot - > addLayer ( " Top Layer " , ui - > plot - > layer ( " main " ) ) ;
ui - > plot - > graph ( 0 ) - > setLayer ( " Top Layer " ) ;
2021-05-29 03:51:19 +00:00
ui - > waterfall - > addGraph ( ) ;
2021-02-16 16:16:46 +00:00
2021-05-29 03:51:19 +00:00
colorMap = new QCPColorMap ( wf - > xAxis , wf - > yAxis ) ;
colorMapData = NULL ;
2021-02-16 16:16:46 +00:00
2021-05-29 03:51:19 +00:00
# if QCUSTOMPLOT_VERSION < 0x020001
wf - > addPlottable ( colorMap ) ;
# endif
2021-02-18 09:14:41 +00:00
2021-05-29 03:51:19 +00:00
colorScale = new QCPColorScale ( wf ) ;
2021-02-18 09:14:41 +00:00
2021-05-29 03:51:19 +00:00
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2021-02-16 16:16:46 +00:00
2021-05-29 03:51:19 +00:00
QColor color ( 20 + 200 / 4.0 * 1 , 70 * ( 1.6 - 1 / 4.0 ) , 150 , 150 ) ;
plot - > graph ( 1 ) - > setLineStyle ( QCPGraph : : lsLine ) ;
plot - > graph ( 1 ) - > setPen ( QPen ( color . lighter ( 200 ) ) ) ;
plot - > graph ( 1 ) - > setBrush ( QBrush ( color ) ) ;
2021-02-28 20:10:07 +00:00
2022-09-26 00:44:49 +00:00
freqIndicatorLine - > start - > setCoords ( 0.5 , 0 ) ;
freqIndicatorLine - > end - > setCoords ( 0.5 , 160 ) ;
passbandIndicator - > topLeft - > setCoords ( 0.5 , 0 ) ;
passbandIndicator - > bottomRight - > setCoords ( 0.5 , 160 ) ;
2021-02-28 20:10:07 +00:00
2023-01-19 16:16:47 +00:00
pbtIndicator - > topLeft - > setCoords ( 0.5 , 0 ) ;
pbtIndicator - > bottomRight - > setCoords ( 0.5 , 160 ) ;
2021-05-29 04:27:06 +00:00
// Plot user interaction
connect ( plot , SIGNAL ( mouseDoubleClick ( QMouseEvent * ) ) , this , SLOT ( handlePlotDoubleClick ( QMouseEvent * ) ) ) ;
connect ( wf , SIGNAL ( mouseDoubleClick ( QMouseEvent * ) ) , this , SLOT ( handleWFDoubleClick ( QMouseEvent * ) ) ) ;
connect ( plot , SIGNAL ( mousePress ( QMouseEvent * ) ) , this , SLOT ( handlePlotClick ( QMouseEvent * ) ) ) ;
connect ( wf , SIGNAL ( mousePress ( QMouseEvent * ) ) , this , SLOT ( handleWFClick ( QMouseEvent * ) ) ) ;
2022-09-26 18:53:56 +00:00
connect ( plot , SIGNAL ( mouseRelease ( QMouseEvent * ) ) , this , SLOT ( handlePlotMouseRelease ( QMouseEvent * ) ) ) ;
connect ( plot , SIGNAL ( mouseMove ( QMouseEvent * ) ) , this , SLOT ( handlePlotMouseMove ( QMouseEvent * ) ) ) ;
2021-05-29 04:27:06 +00:00
connect ( wf , SIGNAL ( mouseWheel ( QWheelEvent * ) ) , this , SLOT ( handleWFScroll ( QWheelEvent * ) ) ) ;
connect ( plot , SIGNAL ( mouseWheel ( QWheelEvent * ) ) , this , SLOT ( handlePlotScroll ( QWheelEvent * ) ) ) ;
2021-05-31 06:26:36 +00:00
spectrumDrawLock = false ;
2021-05-29 03:51:19 +00:00
}
2018-11-29 21:41:42 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : setupMainUI ( )
{
2021-12-24 03:45:58 +00:00
createSettingsListItems ( ) ;
2021-05-29 03:51:19 +00:00
ui - > bandStkLastUsedBtn - > setVisible ( false ) ;
ui - > bandStkVoiceBtn - > setVisible ( false ) ;
ui - > bandStkDataBtn - > setVisible ( false ) ;
ui - > bandStkCWBtn - > setVisible ( false ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
ui - > baudRateCombo - > insertItem ( 0 , QString ( " 115200 " ) , 115200 ) ;
ui - > baudRateCombo - > insertItem ( 1 , QString ( " 57600 " ) , 57600 ) ;
ui - > baudRateCombo - > insertItem ( 2 , QString ( " 38400 " ) , 38400 ) ;
ui - > baudRateCombo - > insertItem ( 3 , QString ( " 28800 " ) , 28800 ) ;
ui - > baudRateCombo - > insertItem ( 4 , QString ( " 19200 " ) , 19200 ) ;
ui - > baudRateCombo - > insertItem ( 5 , QString ( " 9600 " ) , 9600 ) ;
ui - > baudRateCombo - > insertItem ( 6 , QString ( " 4800 " ) , 4800 ) ;
ui - > baudRateCombo - > insertItem ( 7 , QString ( " 2400 " ) , 2400 ) ;
ui - > baudRateCombo - > insertItem ( 8 , QString ( " 1200 " ) , 1200 ) ;
ui - > baudRateCombo - > insertItem ( 9 , QString ( " 300 " ) , 300 ) ;
2021-04-10 22:34:35 +00:00
2021-05-29 03:51:19 +00:00
ui - > spectrumModeCombo - > addItem ( " Center " , ( spectrumMode ) spectModeCenter ) ;
ui - > spectrumModeCombo - > addItem ( " Fixed " , ( spectrumMode ) spectModeFixed ) ;
ui - > spectrumModeCombo - > addItem ( " Scroll-C " , ( spectrumMode ) spectModeScrollC ) ;
ui - > spectrumModeCombo - > addItem ( " Scroll-F " , ( spectrumMode ) spectModeScrollF ) ;
2021-04-10 22:34:35 +00:00
2021-02-13 06:42:34 +00:00
ui - > modeSelectCombo - > addItem ( " LSB " , 0x00 ) ;
ui - > modeSelectCombo - > addItem ( " USB " , 0x01 ) ;
2021-04-27 08:08:28 +00:00
ui - > modeSelectCombo - > addItem ( " FM " , 0x05 ) ;
2021-02-13 06:42:34 +00:00
ui - > modeSelectCombo - > addItem ( " AM " , 0x02 ) ;
ui - > modeSelectCombo - > addItem ( " CW " , 0x03 ) ;
ui - > modeSelectCombo - > addItem ( " CW-R " , 0x07 ) ;
2021-04-27 08:08:28 +00:00
ui - > modeSelectCombo - > addItem ( " RTTY " , 0x04 ) ;
2021-02-13 06:42:34 +00:00
ui - > modeSelectCombo - > addItem ( " RTTY-R " , 0x08 ) ;
ui - > modeFilterCombo - > addItem ( " 1 " , 1 ) ;
ui - > modeFilterCombo - > addItem ( " 2 " , 2 ) ;
ui - > modeFilterCombo - > addItem ( " 3 " , 3 ) ;
2021-02-13 18:02:45 +00:00
ui - > modeFilterCombo - > addItem ( " Setup... " , 99 ) ;
2021-02-13 06:42:34 +00:00
2021-03-04 08:02:53 +00:00
ui - > tuningStepCombo - > blockSignals ( true ) ;
2021-03-22 07:11:43 +00:00
2021-04-12 16:54:09 +00:00
ui - > tuningStepCombo - > addItem ( " 1 Hz " , ( unsigned int ) 1 ) ;
ui - > tuningStepCombo - > addItem ( " 10 Hz " , ( unsigned int ) 10 ) ;
ui - > tuningStepCombo - > addItem ( " 100 Hz " , ( unsigned int ) 100 ) ;
2021-12-11 09:49:06 +00:00
ui - > tuningStepCombo - > addItem ( " 500 Hz " , ( unsigned int ) 500 ) ;
2021-04-12 16:54:09 +00:00
ui - > tuningStepCombo - > addItem ( " 1 kHz " , ( unsigned int ) 1000 ) ;
ui - > tuningStepCombo - > addItem ( " 2.5 kHz " , ( unsigned int ) 2500 ) ;
ui - > tuningStepCombo - > addItem ( " 5 kHz " , ( unsigned int ) 5000 ) ;
2021-05-29 03:51:19 +00:00
ui - > tuningStepCombo - > addItem ( " 6.125 kHz " , ( unsigned int ) 6125 ) ; // PMR
2021-04-12 16:54:09 +00:00
ui - > tuningStepCombo - > addItem ( " 8.333 kHz " , ( unsigned int ) 8333 ) ; // airband stepsize
ui - > tuningStepCombo - > addItem ( " 9 kHz " , ( unsigned int ) 9000 ) ; // European medium wave stepsize
ui - > tuningStepCombo - > addItem ( " 10 kHz " , ( unsigned int ) 10000 ) ;
ui - > tuningStepCombo - > addItem ( " 12.5 kHz " , ( unsigned int ) 12500 ) ;
2021-08-31 07:21:02 +00:00
ui - > tuningStepCombo - > addItem ( " 25 kHz " , ( unsigned int ) 25000 ) ;
2021-04-12 16:54:09 +00:00
ui - > tuningStepCombo - > addItem ( " 100 kHz " , ( unsigned int ) 100000 ) ;
ui - > tuningStepCombo - > addItem ( " 250 kHz " , ( unsigned int ) 250000 ) ;
2021-05-29 03:51:19 +00:00
ui - > tuningStepCombo - > addItem ( " 1 MHz " , ( unsigned int ) 1000000 ) ; //for 23 cm and HF
2021-03-22 07:11:43 +00:00
2021-03-04 08:02:53 +00:00
ui - > tuningStepCombo - > setCurrentIndex ( 2 ) ;
ui - > tuningStepCombo - > blockSignals ( false ) ;
2021-02-11 17:21:17 +00:00
2021-04-10 06:38:36 +00:00
ui - > wfthemeCombo - > addItem ( " Jet " , QCPColorGradient : : gpJet ) ;
ui - > wfthemeCombo - > addItem ( " Cold " , QCPColorGradient : : gpCold ) ;
ui - > wfthemeCombo - > addItem ( " Hot " , QCPColorGradient : : gpHot ) ;
ui - > wfthemeCombo - > addItem ( " Thermal " , QCPColorGradient : : gpThermal ) ;
ui - > wfthemeCombo - > addItem ( " Night " , QCPColorGradient : : gpNight ) ;
ui - > wfthemeCombo - > addItem ( " Ion " , QCPColorGradient : : gpIon ) ;
ui - > wfthemeCombo - > addItem ( " Gray " , QCPColorGradient : : gpGrayscale ) ;
ui - > wfthemeCombo - > addItem ( " Geography " , QCPColorGradient : : gpGeography ) ;
ui - > wfthemeCombo - > addItem ( " Hues " , QCPColorGradient : : gpHues ) ;
ui - > wfthemeCombo - > addItem ( " Polar " , QCPColorGradient : : gpPolar ) ;
ui - > wfthemeCombo - > addItem ( " Spectrum " , QCPColorGradient : : gpSpectrum ) ;
ui - > wfthemeCombo - > addItem ( " Candy " , QCPColorGradient : : gpCandy ) ;
2021-07-18 06:39:40 +00:00
ui - > meter2selectionCombo - > addItem ( " None " , meterNone ) ;
ui - > meter2selectionCombo - > addItem ( " SWR " , meterSWR ) ;
ui - > meter2selectionCombo - > addItem ( " ALC " , meterALC ) ;
ui - > meter2selectionCombo - > addItem ( " Compression " , meterComp ) ;
ui - > meter2selectionCombo - > addItem ( " Voltage " , meterVoltage ) ;
ui - > meter2selectionCombo - > addItem ( " Current " , meterCurrent ) ;
2021-07-18 21:27:21 +00:00
ui - > meter2selectionCombo - > addItem ( " Center " , meterCenter ) ;
2022-08-24 05:24:05 +00:00
ui - > meter2selectionCombo - > addItem ( " TxRxAudio " , meterAudio ) ;
ui - > meter2selectionCombo - > addItem ( " RxAudio " , meterRxAudio ) ;
ui - > meter2selectionCombo - > addItem ( " TxAudio " , meterTxMod ) ;
2021-07-18 06:39:40 +00:00
ui - > meter2Widget - > hide ( ) ;
2021-07-25 05:53:36 +00:00
ui - > meter2selectionCombo - > show ( ) ;
2021-08-27 17:06:09 +00:00
ui - > meter2selectionCombo - > setCurrentIndex ( ( int ) prefs . meter2Type ) ;
2021-07-25 05:53:36 +00:00
ui - > secondaryMeterSelectionLabel - > show ( ) ;
2021-08-23 21:40:36 +00:00
2021-07-25 05:53:36 +00:00
2021-07-18 06:39:40 +00:00
// Future ideas:
//ui->meter2selectionCombo->addItem("Transmit Audio", meterTxMod);
//ui->meter2selectionCombo->addItem("Receive Audio", meterRxAudio);
//ui->meter2selectionCombo->addItem("Latency", meterLatency);
2018-06-19 19:58:52 +00:00
spans < < " 2.5k " < < " 5.0k " < < " 10k " < < " 25k " ;
spans < < " 50k " < < " 100k " < < " 250k " < < " 500k " ;
ui - > scopeBWCombo - > insertItems ( 0 , spans ) ;
2021-03-07 08:05:13 +00:00
edges < < " 1 " < < " 2 " < < " 3 " < < " 4 " ;
2021-02-22 00:24:48 +00:00
ui - > scopeEdgeCombo - > insertItems ( 0 , edges ) ;
2021-02-11 08:33:25 +00:00
2018-06-20 06:45:56 +00:00
ui - > splitter - > setHandleWidth ( 5 ) ;
2021-02-11 08:33:25 +00:00
2021-03-07 08:05:13 +00:00
// Set scroll wheel response (tick interval)
// and set arrow key response (single step)
2020-04-23 22:22:23 +00:00
ui - > rfGainSlider - > setTickInterval ( 100 ) ;
2021-03-07 08:05:13 +00:00
ui - > rfGainSlider - > setSingleStep ( 10 ) ;
2020-04-21 04:10:20 +00:00
2021-03-07 08:05:13 +00:00
ui - > afGainSlider - > setTickInterval ( 100 ) ;
ui - > afGainSlider - > setSingleStep ( 10 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
ui - > sqlSlider - > setTickInterval ( 100 ) ;
ui - > sqlSlider - > setSingleStep ( 10 ) ;
2021-02-18 09:14:41 +00:00
2021-05-29 03:51:19 +00:00
ui - > txPowerSlider - > setTickInterval ( 100 ) ;
ui - > txPowerSlider - > setSingleStep ( 10 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
ui - > micGainSlider - > setTickInterval ( 100 ) ;
ui - > micGainSlider - > setSingleStep ( 10 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
ui - > scopeRefLevelSlider - > setTickInterval ( 50 ) ;
ui - > scopeRefLevelSlider - > setSingleStep ( 20 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 03:51:19 +00:00
ui - > freqMhzLineEdit - > setValidator ( new QDoubleValidator ( 0 , 100 , 6 , this ) ) ;
ui - > controlPortTxt - > setValidator ( new QIntValidator ( this ) ) ;
2020-03-27 23:34:32 +00:00
2021-05-29 03:51:19 +00:00
qDebug ( logSystem ( ) ) < < " Running with debugging options enabled. " ;
# ifdef QT_DEBUG
ui - > debugBtn - > setVisible ( true ) ;
ui - > satOpsBtn - > setVisible ( true ) ;
# else
ui - > debugBtn - > setVisible ( false ) ;
ui - > satOpsBtn - > setVisible ( false ) ;
2020-03-27 23:34:32 +00:00
# endif
2021-05-29 04:01:29 +00:00
rigStatus = new QLabel ( this ) ;
ui - > statusBar - > addPermanentWidget ( rigStatus ) ;
ui - > statusBar - > showMessage ( " Connecting to rig... " , 1000 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 04:01:29 +00:00
pttLed = new QLedLabel ( this ) ;
ui - > statusBar - > addPermanentWidget ( pttLed ) ;
pttLed - > setState ( QLedLabel : : State : : StateOk ) ;
2023-01-29 18:39:24 +00:00
pttLed - > setToolTip ( " Receiving " ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 04:01:29 +00:00
connectedLed = new QLedLabel ( this ) ;
ui - > statusBar - > addPermanentWidget ( connectedLed ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 04:01:29 +00:00
rigName = new QLabel ( this ) ;
2021-09-22 09:50:07 +00:00
rigName - > setAlignment ( Qt : : AlignRight ) ;
2021-05-29 04:01:29 +00:00
ui - > statusBar - > addPermanentWidget ( rigName ) ;
rigName - > setText ( " NONE " ) ;
2021-09-22 09:50:07 +00:00
rigName - > setFixedWidth ( 60 ) ;
2018-06-19 19:58:52 +00:00
2021-05-29 04:27:06 +00:00
freq . MHzDouble = 0.0 ;
freq . Hz = 0 ;
oldFreqDialVal = ui - > freqDial - > value ( ) ;
2021-02-24 08:18:19 +00:00
2021-05-29 04:27:06 +00:00
ui - > tuneLockChk - > setChecked ( false ) ;
freqLock = false ;
2021-06-18 06:14:28 +00:00
connect ( ui - > tabWidget , SIGNAL ( currentChanged ( int ) ) , this , SLOT ( updateSizes ( int ) ) ) ;
2021-06-19 23:18:00 +00:00
2021-06-19 23:16:07 +00:00
connect (
ui - > txPowerSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderPercent ( " Tx Power " , newValue ) ; }
) ;
connect (
ui - > rfGainSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderPercent ( " RF Gain " , newValue ) ; }
) ;
connect (
ui - > afGainSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderPercent ( " AF Gain " , newValue ) ; }
) ;
connect (
ui - > micGainSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderPercent ( " TX Audio Gain " , newValue ) ; }
) ;
connect (
ui - > sqlSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderPercent ( " Squelch " , newValue ) ; }
) ;
// -200 0 +200.. take log?
connect (
ui - > scopeRefLevelSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderRaw ( " Scope Ref Level " , newValue ) ; }
) ;
2021-06-19 23:18:00 +00:00
connect (
ui - > wfLengthSlider , & QSlider : : valueChanged ,
[ = ] ( const int & newValue ) { statusFromSliderRaw ( " Waterfall Length " , newValue ) ; }
) ;
2021-11-05 17:09:31 +00:00
connect ( this - > trxadj , & transceiverAdjustments : : setIFShift ,
2021-11-06 00:12:19 +00:00
[ = ] ( const unsigned char & newValue ) { issueCmdUniquePriority ( cmdSetIFShift , newValue ) ; }
2021-11-05 17:09:31 +00:00
) ;
connect ( this - > trxadj , & transceiverAdjustments : : setTPBFInner ,
2021-11-06 00:12:19 +00:00
[ = ] ( const unsigned char & newValue ) { issueCmdUniquePriority ( cmdSetTPBFInner , newValue ) ; }
2021-11-05 17:09:31 +00:00
) ;
connect ( this - > trxadj , & transceiverAdjustments : : setTPBFOuter ,
2021-11-06 00:12:19 +00:00
[ = ] ( const unsigned char & newValue ) { issueCmdUniquePriority ( cmdSetTPBFOuter , newValue ) ; }
2021-11-05 17:09:31 +00:00
) ;
2023-01-20 07:02:54 +00:00
connect ( this - > trxadj , & transceiverAdjustments : : setPassband ,
[ = ] ( const quint16 & passbandHz ) { issueCmdUniquePriority ( cmdSetPassband , passbandHz ) ; }
) ;
2023-01-21 06:11:30 +00:00
connect ( this - > cw , & cwSender : : sendCW ,
[ = ] ( const QString & cwMessage ) { issueCmd ( cmdSendCW , cwMessage ) ; } ) ;
connect ( this - > cw , & cwSender : : stopCW ,
[ = ] ( ) { issueDelayedCommand ( cmdStopCW ) ; } ) ;
connect ( this - > cw , & cwSender : : setBreakInMode ,
[ = ] ( const unsigned char & bmode ) { issueCmd ( cmdSetBreakMode , bmode ) ; } ) ;
connect ( this - > cw , & cwSender : : setKeySpeed ,
2023-01-25 18:01:24 +00:00
[ = ] ( const unsigned char & wpm ) { issueCmd ( cmdSetKeySpeed , wpm ) ; } ) ;
connect ( this - > cw , & cwSender : : setPitch ,
[ = ] ( const unsigned char & pitch ) { issueCmd ( cmdSetCwPitch , pitch ) ; } ) ;
2023-01-21 07:23:47 +00:00
connect ( this - > cw , & cwSender : : getCWSettings ,
2023-01-21 21:06:47 +00:00
[ = ] ( ) { issueDelayedCommand ( cmdGetKeySpeed ) ;
2023-01-21 07:23:47 +00:00
issueDelayedCommand ( cmdGetBreakMode ) ; } ) ;
2022-08-22 04:19:08 +00:00
}
2021-11-05 17:09:31 +00:00
2022-08-22 04:19:08 +00:00
void wfmain : : prepareSettingsWindow ( )
{
settingsTabisAttached = true ;
2021-11-05 17:09:31 +00:00
2022-08-22 04:19:08 +00:00
settingsWidgetWindow = new QWidget ;
settingsWidgetLayout = new QGridLayout ;
settingsWidgetTab = new QTabWidget ;
2021-11-05 17:09:31 +00:00
2022-08-22 04:19:08 +00:00
settingsWidgetWindow - > setLayout ( settingsWidgetLayout ) ;
settingsWidgetLayout - > addWidget ( settingsWidgetTab ) ;
2022-08-22 04:32:49 +00:00
settingsWidgetWindow - > setWindowFlag ( Qt : : WindowCloseButtonHint , false ) ;
//settingsWidgetWindow->setWindowFlag(Qt::WindowMinimizeButtonHint, false);
//settingsWidgetWindow->setWindowFlag(Qt::WindowMaximizeButtonHint, false);
// TODO: Capture an event when the window closes and handle accordingly.
2021-06-18 06:14:28 +00:00
}
void wfmain : : updateSizes ( int tabIndex )
{
2022-09-23 04:14:05 +00:00
2021-06-18 06:14:28 +00:00
// This function does nothing unless you are using a rig without spectrum.
// This is a hack. It is not great, but it seems to work ok.
if ( ! rigCaps . hasSpectrum )
{
// Set "ignore" size policy for non-selected tabs:
2022-09-23 04:06:49 +00:00
for ( int i = 1 ; i < ui - > tabWidget - > count ( ) ; i + + )
if ( ( i ! = tabIndex ) )
2021-06-18 06:14:28 +00:00
ui - > tabWidget - > widget ( i ) - > setSizePolicy ( QSizePolicy : : Ignored , QSizePolicy : : Ignored ) ; // allows size to be any size that fits the tab bar
2022-09-23 03:53:57 +00:00
if ( tabIndex = = 0 )
2021-06-18 06:14:28 +00:00
{
ui - > tabWidget - > widget ( 0 ) - > setSizePolicy ( QSizePolicy : : Minimum , QSizePolicy : : Minimum ) ;
ui - > tabWidget - > widget ( 0 ) - > setMaximumSize ( ui - > tabWidget - > widget ( 0 ) - > minimumSizeHint ( ) ) ;
ui - > tabWidget - > widget ( 0 ) - > adjustSize ( ) ; // tab
this - > setSizePolicy ( QSizePolicy : : Minimum , QSizePolicy : : Minimum ) ;
2022-09-23 04:06:49 +00:00
this - > setMaximumSize ( QSize ( 940 , 350 ) ) ;
this - > setMinimumSize ( QSize ( 940 , 350 ) ) ;
2021-06-18 06:14:28 +00:00
resize ( minimumSize ( ) ) ;
adjustSize ( ) ; // main window
} else {
// At some other tab, with or without spectrum:
ui - > tabWidget - > widget ( tabIndex ) - > setSizePolicy ( QSizePolicy : : MinimumExpanding , QSizePolicy : : MinimumExpanding ) ;
this - > setSizePolicy ( QSizePolicy : : Preferred , QSizePolicy : : Preferred ) ;
2022-01-21 07:26:46 +00:00
this - > setMinimumSize ( QSize ( 1024 , 600 ) ) ; // not large enough for settings tab
2021-06-18 06:14:28 +00:00
this - > setMaximumSize ( QSize ( 65535 , 65535 ) ) ;
2022-09-23 04:06:49 +00:00
resize ( minimumSize ( ) ) ;
2022-01-21 07:26:46 +00:00
adjustSize ( ) ;
2021-06-18 06:14:28 +00:00
}
} else {
ui - > tabWidget - > widget ( tabIndex ) - > setSizePolicy ( QSizePolicy : : MinimumExpanding , QSizePolicy : : MinimumExpanding ) ;
ui - > tabWidget - > widget ( tabIndex ) - > setMaximumSize ( 65535 , 65535 ) ;
//ui->tabWidget->widget(0)->setMinimumSize();
}
2021-05-29 04:27:06 +00:00
}
void wfmain : : getSettingsFilePath ( QString settingsFile )
{
if ( settingsFile . isNull ( ) ) {
settings = new QSettings ( ) ;
}
else
{
QString file = settingsFile ;
QFile info ( settingsFile ) ;
QString path = " " ;
if ( ! QFileInfo ( info ) . isAbsolute ( ) )
{
path = QStandardPaths : : writableLocation ( QStandardPaths : : AppDataLocation ) ;
if ( path . isEmpty ( ) )
{
path = QDir : : homePath ( ) ;
}
path = path + " / " ;
file = info . fileName ( ) ;
}
settings = new QSettings ( path + file , QSettings : : Format : : IniFormat ) ;
}
}
void wfmain : : setInitialTiming ( )
{
2021-06-20 20:34:32 +00:00
loopTickCounter = 0 ;
2021-06-15 03:22:15 +00:00
delayedCmdIntervalLAN_ms = 70 ; // interval for regular delayed commands, including initial rig/UI state queries
2021-05-29 04:27:06 +00:00
delayedCmdIntervalSerial_ms = 100 ; // interval for regular delayed commands, including initial rig/UI state queries
delayedCmdStartupInterval_ms = 250 ; // interval for rigID polling
delayedCommand = new QTimer ( this ) ;
delayedCommand - > setInterval ( delayedCmdStartupInterval_ms ) ; // 250ms until we find rig civ and id, then 100ms.
2021-06-20 20:34:32 +00:00
delayedCommand - > setSingleShot ( false ) ;
connect ( delayedCommand , SIGNAL ( timeout ( ) ) , this , SLOT ( sendRadioCommandLoop ( ) ) ) ;
2021-05-29 04:27:06 +00:00
2019-01-24 01:19:35 +00:00
pttTimer = new QTimer ( this ) ;
pttTimer - > setInterval ( 180 * 1000 ) ; // 3 minute max transmit time in ms
pttTimer - > setSingleShot ( true ) ;
connect ( pttTimer , SIGNAL ( timeout ( ) ) , this , SLOT ( handlePttLimit ( ) ) ) ;
2021-07-09 19:02:50 +00:00
timeSync = new QTimer ( this ) ;
connect ( timeSync , SIGNAL ( timeout ( ) ) , this , SLOT ( setRadioTimeDateSend ( ) ) ) ;
waitingToSetTimeDate = false ;
2021-07-10 01:13:11 +00:00
lastFreqCmdTime_ms = QDateTime : : currentMSecsSinceEpoch ( ) - 5000 ; // 5 seconds ago
2021-05-29 04:27:06 +00:00
}
void wfmain : : setServerToPrefs ( )
{
2021-05-31 08:56:05 +00:00
2021-05-29 04:27:06 +00:00
// Start server if enabled in config
2021-12-30 00:48:39 +00:00
ui - > serverSetupGroup - > setEnabled ( serverConfig . enabled ) ;
2021-12-30 11:17:54 +00:00
if ( serverThread ! = Q_NULLPTR ) {
serverThread - > quit ( ) ;
serverThread - > wait ( ) ;
serverThread = Q_NULLPTR ;
udp = Q_NULLPTR ;
ui - > statusBar - > showMessage ( QString ( " Server disabled " ) , 1000 ) ;
}
2021-05-29 04:27:06 +00:00
if ( serverConfig . enabled ) {
serverConfig . lan = prefs . enableLAN ;
2022-05-05 17:09:16 +00:00
2022-04-20 12:35:23 +00:00
udp = new udpServer ( & serverConfig ) ;
2019-01-24 01:19:35 +00:00
2021-05-29 04:27:06 +00:00
serverThread = new QThread ( this ) ;
2019-01-28 23:36:17 +00:00
2021-05-29 04:27:06 +00:00
udp - > moveToThread ( serverThread ) ;
2022-01-04 21:26:03 +00:00
2021-05-29 04:27:06 +00:00
connect ( this , SIGNAL ( initServer ( ) ) , udp , SLOT ( init ( ) ) ) ;
connect ( serverThread , SIGNAL ( finished ( ) ) , udp , SLOT ( deleteLater ( ) ) ) ;
2022-01-06 10:08:36 +00:00
if ( rig ! = Q_NULLPTR ) {
connect ( rig , SIGNAL ( haveAudioData ( audioPacket ) ) , udp , SLOT ( receiveAudioData ( audioPacket ) ) ) ;
2022-05-05 17:09:16 +00:00
// Need to add a signal/slot for audio from the client to rig.
//connect(udp, SIGNAL(haveAudioData(audioPacket)), rig, SLOT(receiveAudioData(audioPacket)));
2022-01-06 10:08:36 +00:00
connect ( rig , SIGNAL ( haveDataForServer ( QByteArray ) ) , udp , SLOT ( dataForServer ( QByteArray ) ) ) ;
connect ( udp , SIGNAL ( haveDataFromServer ( QByteArray ) ) , rig , SLOT ( dataFromServer ( QByteArray ) ) ) ;
}
2022-05-05 17:09:16 +00:00
if ( serverConfig . lan ) {
2022-01-22 15:12:36 +00:00
connect ( udp , SIGNAL ( haveNetworkStatus ( networkStatus ) ) , this , SLOT ( receiveStatusUpdate ( networkStatus ) ) ) ;
2022-05-05 17:09:16 +00:00
} else {
qInfo ( logAudio ( ) ) < < " Audio Input device " < < serverConfig . rigs . first ( ) - > rxAudioSetup . name ;
qInfo ( logAudio ( ) ) < < " Audio Output device " < < serverConfig . rigs . first ( ) - > txAudioSetup . name ;
2021-06-10 08:41:56 +00:00
}
2021-05-29 04:27:06 +00:00
serverThread - > start ( ) ;
emit initServer ( ) ;
connect ( this , SIGNAL ( sendRigCaps ( rigCapabilities ) ) , udp , SLOT ( receiveRigCaps ( rigCapabilities ) ) ) ;
2021-12-30 11:17:54 +00:00
ui - > statusBar - > showMessage ( QString ( " Server enabled " ) , 1000 ) ;
2021-05-29 04:27:06 +00:00
}
2021-05-29 03:51:19 +00:00
}
2019-01-28 23:36:17 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : setUIToPrefs ( )
{
2018-11-25 06:21:36 +00:00
ui - > fullScreenChk - > setChecked ( prefs . useFullScreen ) ;
on_fullScreenChk_clicked ( prefs . useFullScreen ) ;
2021-02-19 06:38:50 +00:00
ui - > useSystemThemeChk - > setChecked ( prefs . useSystemTheme ) ;
on_useSystemThemeChk_clicked ( prefs . useSystemTheme ) ;
2022-08-18 01:41:35 +00:00
underlayMode = prefs . underlayMode ;
switch ( underlayMode )
{
case underlayNone :
ui - > underlayNone - > setChecked ( true ) ;
break ;
case underlayPeakHold :
ui - > underlayPeakHold - > setChecked ( true ) ;
break ;
case underlayPeakBuffer :
ui - > underlayPeakBuffer - > setChecked ( true ) ;
break ;
case underlayAverageBuffer :
ui - > underlayAverageBuffer - > setChecked ( true ) ;
break ;
default :
break ;
}
2022-08-18 01:46:00 +00:00
ui - > underlayBufferSlider - > setValue ( prefs . underlayBufferSize ) ;
on_underlayBufferSlider_valueChanged ( prefs . underlayBufferSize ) ;
2021-07-05 23:45:19 +00:00
2021-07-15 05:44:05 +00:00
ui - > wfAntiAliasChk - > setChecked ( prefs . wfAntiAlias ) ;
on_wfAntiAliasChk_clicked ( prefs . wfAntiAlias ) ;
ui - > wfInterpolateChk - > setChecked ( prefs . wfInterpolate ) ;
on_wfInterpolateChk_clicked ( prefs . wfInterpolate ) ;
2021-07-05 23:45:19 +00:00
ui - > wfLengthSlider - > setValue ( prefs . wflength ) ;
prepareWf ( prefs . wflength ) ;
2022-08-18 17:54:54 +00:00
preparePlasma ( ) ;
2022-08-18 01:41:35 +00:00
ui - > topLevelSlider - > setValue ( prefs . plotCeiling ) ;
ui - > botLevelSlider - > setValue ( prefs . plotFloor ) ;
plot - > yAxis - > setRange ( QCPRange ( prefs . plotFloor , prefs . plotCeiling ) ) ;
colorMap - > setDataRange ( QCPRange ( prefs . plotFloor , prefs . plotCeiling ) ) ;
2022-08-22 23:49:35 +00:00
colorPrefsType p ;
for ( int pn = 0 ; pn < numColorPresetsTotal ; pn + + )
{
p = colorPreset [ pn ] ;
if ( p . presetName ! = Q_NULLPTR )
ui - > colorPresetCombo - > setItemText ( pn , * p . presetName ) ;
}
2021-07-06 00:04:55 +00:00
2022-11-23 21:36:13 +00:00
ui - > colorPresetCombo - > setCurrentIndex ( prefs . currentColorPresetNumber ) ;
2022-11-24 19:43:27 +00:00
loadColorPresetToUIandPlots ( prefs . currentColorPresetNumber ) ;
2022-11-23 21:36:13 +00:00
2021-07-06 00:04:55 +00:00
ui - > wfthemeCombo - > setCurrentIndex ( ui - > wfthemeCombo - > findData ( prefs . wftheme ) ) ;
colorMap - > setGradient ( static_cast < QCPColorGradient : : GradientPreset > ( prefs . wftheme ) ) ;
2021-11-07 06:59:03 +00:00
2023-01-19 07:17:28 +00:00
ui - > tuningFloorZerosChk - > blockSignals ( true ) ;
ui - > tuningFloorZerosChk - > setChecked ( prefs . niceTS ) ;
ui - > tuningFloorZerosChk - > blockSignals ( false ) ;
ui - > autoSSBchk - > blockSignals ( true ) ;
ui - > autoSSBchk - > setChecked ( prefs . automaticSidebandSwitching ) ;
ui - > autoSSBchk - > blockSignals ( false ) ;
2021-11-07 06:59:03 +00:00
ui - > useCIVasRigIDChk - > blockSignals ( true ) ;
ui - > useCIVasRigIDChk - > setChecked ( prefs . CIVisRadioModel ) ;
ui - > useCIVasRigIDChk - > blockSignals ( false ) ;
2018-06-19 19:58:52 +00:00
}
2021-05-29 04:01:29 +00:00
void wfmain : : setSerialDevicesUI ( )
2021-01-30 06:09:09 +00:00
{
2021-05-29 04:01:29 +00:00
ui - > serialDeviceListCombo - > blockSignals ( true ) ;
ui - > serialDeviceListCombo - > addItem ( " Auto " , 0 ) ;
int i = 0 ;
foreach ( const QSerialPortInfo & serialPortInfo , QSerialPortInfo : : availablePorts ( ) )
{
portList . append ( serialPortInfo . portName ( ) ) ;
# if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
2022-04-08 13:40:05 +00:00
ui - > serialDeviceListCombo - > addItem ( QString ( " /dev/ " ) + serialPortInfo . portName ( ) , i + + ) ;
2021-05-29 04:01:29 +00:00
# else
ui - > serialDeviceListCombo - > addItem ( serialPortInfo . portName ( ) , i + + ) ;
2022-01-29 22:50:58 +00:00
//qInfo(logSystem()) << "Serial Port found: " << serialPortInfo.portName() << "Manufacturer:" << serialPortInfo.manufacturer() << "Product ID" << serialPortInfo.description() << "S/N" << serialPortInfo.serialNumber();
2021-05-29 04:01:29 +00:00
# endif
}
# if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
ui - > serialDeviceListCombo - > addItem ( " Manual... " , 256 ) ;
# endif
ui - > serialDeviceListCombo - > blockSignals ( false ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 04:01:29 +00:00
ui - > vspCombo - > blockSignals ( true ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 04:01:29 +00:00
# ifdef Q_OS_WIN
ui - > vspCombo - > addItem ( QString ( " None " ) , i + + ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 04:01:29 +00:00
foreach ( const QSerialPortInfo & serialPortInfo , QSerialPortInfo : : availablePorts ( ) )
2021-01-30 06:09:09 +00:00
{
2021-05-29 04:01:29 +00:00
ui - > vspCombo - > addItem ( serialPortInfo . portName ( ) ) ;
}
# else
// Provide reasonable names for the symbolic link to the pty device
# ifdef Q_OS_MAC
QString vspName = QStandardPaths : : standardLocations ( QStandardPaths : : DownloadLocation ) [ 0 ] + " /rig-pty " ;
# else
2022-04-08 13:40:05 +00:00
QString vspName = QDir : : homePath ( ) + " /rig-pty " ;
2021-05-29 04:01:29 +00:00
# endif
2022-04-08 13:40:05 +00:00
for ( i = 1 ; i < 8 ; i + + ) {
2021-05-29 04:01:29 +00:00
ui - > vspCombo - > addItem ( vspName + QString : : number ( i ) ) ;
2021-05-29 03:51:19 +00:00
2022-04-08 13:40:05 +00:00
if ( QFile : : exists ( vspName + QString : : number ( i ) ) ) {
auto * model = qobject_cast < QStandardItemModel * > ( ui - > vspCombo - > model ( ) ) ;
auto * item = model - > item ( ui - > vspCombo - > count ( ) - 1 ) ;
2021-05-29 04:01:29 +00:00
item - > setEnabled ( false ) ;
}
2021-02-02 09:05:59 +00:00
}
2022-04-08 13:40:05 +00:00
ui - > vspCombo - > addItem ( vspName + QString : : number ( i ) ) ;
2021-05-29 04:01:29 +00:00
ui - > vspCombo - > addItem ( QString ( " None " ) , i + + ) ;
# endif
ui - > vspCombo - > setEditable ( true ) ;
ui - > vspCombo - > blockSignals ( false ) ;
2021-05-29 03:51:19 +00:00
}
2021-02-02 09:05:59 +00:00
2021-05-29 03:51:19 +00:00
void wfmain : : setupKeyShortcuts ( )
{
keyF1 = new QShortcut ( this ) ;
keyF1 - > setKey ( Qt : : Key_F1 ) ;
connect ( keyF1 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF1 ( ) ) ) ;
2021-04-20 11:29:10 +00:00
2021-05-29 03:51:19 +00:00
keyF2 = new QShortcut ( this ) ;
keyF2 - > setKey ( Qt : : Key_F2 ) ;
connect ( keyF2 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF2 ( ) ) ) ;
2021-04-20 11:29:10 +00:00
2021-05-29 03:51:19 +00:00
keyF3 = new QShortcut ( this ) ;
keyF3 - > setKey ( Qt : : Key_F3 ) ;
connect ( keyF3 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF3 ( ) ) ) ;
2021-02-07 12:59:41 +00:00
2021-05-29 03:51:19 +00:00
keyF4 = new QShortcut ( this ) ;
keyF4 - > setKey ( Qt : : Key_F4 ) ;
connect ( keyF4 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF4 ( ) ) ) ;
2021-02-07 12:59:41 +00:00
2021-05-29 03:51:19 +00:00
keyF5 = new QShortcut ( this ) ;
keyF5 - > setKey ( Qt : : Key_F5 ) ;
connect ( keyF5 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF5 ( ) ) ) ;
2021-02-07 12:59:41 +00:00
2021-05-29 03:51:19 +00:00
keyF6 = new QShortcut ( this ) ;
keyF6 - > setKey ( Qt : : Key_F6 ) ;
connect ( keyF6 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF6 ( ) ) ) ;
2021-05-21 15:30:52 +00:00
2021-05-29 03:51:19 +00:00
keyF7 = new QShortcut ( this ) ;
keyF7 - > setKey ( Qt : : Key_F7 ) ;
connect ( keyF7 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF7 ( ) ) ) ;
2021-05-21 15:30:52 +00:00
2021-05-29 03:51:19 +00:00
keyF8 = new QShortcut ( this ) ;
keyF8 - > setKey ( Qt : : Key_F8 ) ;
connect ( keyF8 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF8 ( ) ) ) ;
2021-02-07 12:59:41 +00:00
2021-05-29 03:51:19 +00:00
keyF9 = new QShortcut ( this ) ;
keyF9 - > setKey ( Qt : : Key_F9 ) ;
connect ( keyF9 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF9 ( ) ) ) ;
2021-05-21 18:35:13 +00:00
2021-05-29 03:51:19 +00:00
keyF10 = new QShortcut ( this ) ;
keyF10 - > setKey ( Qt : : Key_F10 ) ;
connect ( keyF10 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF10 ( ) ) ) ;
2021-05-21 18:35:13 +00:00
2021-05-29 03:51:19 +00:00
keyF11 = new QShortcut ( this ) ;
keyF11 - > setKey ( Qt : : Key_F11 ) ;
connect ( keyF11 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF11 ( ) ) ) ;
2021-02-02 09:05:59 +00:00
2021-05-29 03:51:19 +00:00
keyF12 = new QShortcut ( this ) ;
keyF12 - > setKey ( Qt : : Key_F12 ) ;
connect ( keyF12 , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF12 ( ) ) ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 03:51:19 +00:00
keyControlT = new QShortcut ( this ) ;
keyControlT - > setKey ( Qt : : CTRL + Qt : : Key_T ) ;
connect ( keyControlT , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlT ( ) ) ) ;
2021-02-07 12:59:41 +00:00
2021-05-29 03:51:19 +00:00
keyControlR = new QShortcut ( this ) ;
keyControlR - > setKey ( Qt : : CTRL + Qt : : Key_R ) ;
connect ( keyControlR , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlR ( ) ) ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 03:51:19 +00:00
keyControlI = new QShortcut ( this ) ;
keyControlI - > setKey ( Qt : : CTRL + Qt : : Key_I ) ;
connect ( keyControlI , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlI ( ) ) ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 03:51:19 +00:00
keyControlU = new QShortcut ( this ) ;
keyControlU - > setKey ( Qt : : CTRL + Qt : : Key_U ) ;
connect ( keyControlU , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlU ( ) ) ) ;
2021-02-07 09:03:02 +00:00
2021-05-29 03:51:19 +00:00
keyStar = new QShortcut ( this ) ;
keyStar - > setKey ( Qt : : Key_Asterisk ) ;
connect ( keyStar , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutStar ( ) ) ) ;
2021-02-07 09:03:02 +00:00
2021-05-29 03:51:19 +00:00
keySlash = new QShortcut ( this ) ;
keySlash - > setKey ( Qt : : Key_Slash ) ;
connect ( keySlash , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutSlash ( ) ) ) ;
2021-02-11 17:09:45 +00:00
2021-05-29 03:51:19 +00:00
keyMinus = new QShortcut ( this ) ;
keyMinus - > setKey ( Qt : : Key_Minus ) ;
connect ( keyMinus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutMinus ( ) ) ) ;
2021-05-21 20:01:21 +00:00
2021-05-29 03:51:19 +00:00
keyPlus = new QShortcut ( this ) ;
keyPlus - > setKey ( Qt : : Key_Plus ) ;
connect ( keyPlus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutPlus ( ) ) ) ;
2021-05-21 20:01:21 +00:00
2021-05-29 03:51:19 +00:00
keyShiftMinus = new QShortcut ( this ) ;
keyShiftMinus - > setKey ( Qt : : SHIFT + Qt : : Key_Minus ) ;
connect ( keyShiftMinus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutShiftMinus ( ) ) ) ;
2021-05-22 06:46:15 +00:00
2021-05-29 03:51:19 +00:00
keyShiftPlus = new QShortcut ( this ) ;
keyShiftPlus - > setKey ( Qt : : SHIFT + Qt : : Key_Plus ) ;
connect ( keyShiftPlus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutShiftPlus ( ) ) ) ;
2021-05-21 20:01:21 +00:00
2021-05-29 03:51:19 +00:00
keyControlMinus = new QShortcut ( this ) ;
keyControlMinus - > setKey ( Qt : : CTRL + Qt : : Key_Minus ) ;
connect ( keyControlMinus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlMinus ( ) ) ) ;
2021-05-21 20:01:21 +00:00
2021-05-29 03:51:19 +00:00
keyControlPlus = new QShortcut ( this ) ;
keyControlPlus - > setKey ( Qt : : CTRL + Qt : : Key_Plus ) ;
connect ( keyControlPlus , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutControlPlus ( ) ) ) ;
2021-05-21 20:01:21 +00:00
2021-05-29 03:51:19 +00:00
keyQuit = new QShortcut ( this ) ;
keyQuit - > setKey ( Qt : : CTRL + Qt : : Key_Q ) ;
connect ( keyQuit , SIGNAL ( activated ( ) ) , this , SLOT ( on_exitBtn_clicked ( ) ) ) ;
2021-02-02 09:05:59 +00:00
2021-05-29 03:51:19 +00:00
keyPageUp = new QShortcut ( this ) ;
keyPageUp - > setKey ( Qt : : Key_PageUp ) ;
connect ( keyPageUp , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutPageUp ( ) ) ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 03:51:19 +00:00
keyPageDown = new QShortcut ( this ) ;
keyPageDown - > setKey ( Qt : : Key_PageDown ) ;
connect ( keyPageDown , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutPageDown ( ) ) ) ;
2021-02-02 09:05:59 +00:00
2021-05-29 03:51:19 +00:00
keyF = new QShortcut ( this ) ;
keyF - > setKey ( Qt : : Key_F ) ;
connect ( keyF , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutF ( ) ) ) ;
2021-01-30 06:09:09 +00:00
2021-05-29 03:51:19 +00:00
keyM = new QShortcut ( this ) ;
keyM - > setKey ( Qt : : Key_M ) ;
connect ( keyM , SIGNAL ( activated ( ) ) , this , SLOT ( shortcutM ( ) ) ) ;
2021-06-18 06:14:28 +00:00
2023-01-23 07:41:31 +00:00
// Alternate for plus:
keyK = new QShortcut ( this ) ;
keyK - > setKey ( Qt : : Key_K ) ;
connect ( keyK , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutPlus ( ) ;
} ) ;
// Alternate for minus:
keyJ = new QShortcut ( this ) ;
keyJ - > setKey ( Qt : : Key_J ) ;
connect ( keyJ , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutMinus ( ) ;
} ) ;
keyShiftK = new QShortcut ( this ) ;
keyShiftK - > setKey ( Qt : : SHIFT + Qt : : Key_K ) ;
connect ( keyShiftK , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutShiftPlus ( ) ;
} ) ;
keyShiftJ = new QShortcut ( this ) ;
keyShiftJ - > setKey ( Qt : : SHIFT + Qt : : Key_J ) ;
connect ( keyShiftJ , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutShiftMinus ( ) ;
} ) ;
keyControlK = new QShortcut ( this ) ;
keyControlK - > setKey ( Qt : : CTRL + Qt : : Key_K ) ;
connect ( keyControlK , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutControlPlus ( ) ;
} ) ;
keyControlJ = new QShortcut ( this ) ;
keyControlJ - > setKey ( Qt : : CTRL + Qt : : Key_J ) ;
connect ( keyControlJ , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
this - > shortcutControlMinus ( ) ;
} ) ;
// Move the tuning knob by the tuning step selected:
// H = Down
keyH = new QShortcut ( this ) ;
keyH - > setKey ( Qt : : Key_H ) ;
connect ( keyH , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , - 1 , tsKnobHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
setUIFreq ( ) ;
issueCmd ( cmdSetFreq , f ) ;
} ) ;
// L = Up
keyL = new QShortcut ( this ) ;
keyL - > setKey ( Qt : : Key_L ) ;
connect ( keyL , & QShortcut : : activated ,
[ = ] ( ) {
if ( freqLock ) return ;
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , 1 , tsKnobHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( f . MHzDouble , 0 , ' f ' ) ) ;
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
setUIFreq ( ) ;
issueCmd ( cmdSetFreq , f ) ;
} ) ;
2021-06-18 06:14:28 +00:00
keyDebug = new QShortcut ( this ) ;
2022-12-29 15:26:41 +00:00
# if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
2021-06-18 06:14:28 +00:00
keyDebug - > setKey ( Qt : : CTRL + Qt : : SHIFT + Qt : : Key_D ) ;
2022-08-22 22:09:09 +00:00
# else
keyDebug - > setKey ( Qt : : CTRL + Qt : : Key_D ) ;
2023-01-23 07:41:31 +00:00
# endif
2021-06-18 06:14:28 +00:00
connect ( keyDebug , SIGNAL ( activated ( ) ) , this , SLOT ( on_debugBtn_clicked ( ) ) ) ;
2021-02-05 20:26:18 +00:00
}
2022-04-22 10:11:21 +00:00
void wfmain : : setupUsbControllerDevice ( )
2021-06-01 16:48:19 +00:00
{
2023-01-12 19:20:52 +00:00
# if defined (USB_CONTROLLER)
2022-04-22 10:11:21 +00:00
usbControllerDev = new usbController ( ) ;
usbControllerThread = new QThread ( this ) ;
usbControllerDev - > moveToThread ( usbControllerThread ) ;
connect ( usbControllerThread , SIGNAL ( started ( ) ) , usbControllerDev , SLOT ( run ( ) ) ) ;
connect ( usbControllerThread , SIGNAL ( finished ( ) ) , usbControllerDev , SLOT ( deleteLater ( ) ) ) ;
connect ( usbControllerDev , SIGNAL ( sendJog ( int ) ) , this , SLOT ( changeFrequency ( int ) ) ) ;
connect ( usbControllerDev , SIGNAL ( doShuttle ( bool , unsigned char ) ) , this , SLOT ( doShuttle ( bool , unsigned char ) ) ) ;
2022-04-27 11:56:54 +00:00
connect ( usbControllerDev , SIGNAL ( button ( const COMMAND * ) ) , this , SLOT ( buttonControl ( const COMMAND * ) ) ) ;
2022-04-22 10:11:21 +00:00
connect ( usbControllerDev , SIGNAL ( setBand ( int ) ) , this , SLOT ( setBand ( int ) ) ) ;
2022-05-17 07:53:24 +00:00
connect ( usbControllerDev , SIGNAL ( newDevice ( unsigned char , QVector < BUTTON > * , QVector < COMMAND > * ) ) , shut , SLOT ( newDevice ( unsigned char , QVector < BUTTON > * , QVector < COMMAND > * ) ) ) ;
2022-04-22 10:11:21 +00:00
usbControllerThread - > start ( QThread : : LowestPriority ) ;
2023-02-06 15:02:48 +00:00
2022-09-18 20:00:44 +00:00
connect ( this , SIGNAL ( sendUsbControllerCommands ( QVector < COMMAND > * ) ) , usbControllerDev , SLOT ( receiveCommands ( QVector < COMMAND > * ) ) ) ;
connect ( this , SIGNAL ( sendUsbControllerButtons ( QVector < BUTTON > * ) ) , usbControllerDev , SLOT ( receiveButtons ( QVector < BUTTON > * ) ) ) ;
2023-02-07 09:32:33 +00:00
connect ( shut , SIGNAL ( sendSensitivity ( int ) ) , usbControllerDev , SLOT ( receiveSensitivity ( int ) ) ) ;
connect ( shut , SIGNAL ( sendSensitivity ( int ) ) , this , SLOT ( receiveUsbSensitivity ( int ) ) ) ;
connect ( usbControllerDev , SIGNAL ( sendSensitivity ( int ) ) , shut , SLOT ( receiveSensitivity ( int ) ) ) ;
connect ( this , SIGNAL ( initUsbController ( int ) ) , usbControllerDev , SLOT ( init ( int ) ) ) ;
2023-01-12 19:20:52 +00:00
# endif
2021-06-04 10:14:01 +00:00
}
2021-06-04 23:23:16 +00:00
void wfmain : : pttToggle ( bool status )
2021-06-04 10:14:01 +00:00
{
2021-06-04 23:23:16 +00:00
// is it enabled?
2021-06-01 16:48:19 +00:00
2021-06-04 23:23:16 +00:00
if ( ! ui - > pttEnableChk - > isChecked ( ) )
{
showStatusBarText ( " PTT is disabled, not sending command. Change under Settings tab. " ) ;
return ;
}
emit setPTT ( status ) ;
// Start 3 minute timer
if ( status )
pttTimer - > start ( ) ;
issueDelayedCommand ( cmdGetPTT ) ;
}
2021-08-19 09:21:09 +00:00
void wfmain : : doShuttle ( bool up , unsigned char level )
2021-06-08 07:03:00 +00:00
{
if ( level = = 1 & & up )
shortcutShiftPlus ( ) ;
else if ( level = = 1 & & ! up )
shortcutShiftMinus ( ) ;
else if ( level > 1 & & level < 5 & & up )
for ( int i = 1 ; i < level ; i + + )
shortcutPlus ( ) ;
else if ( level > 1 & & level < 5 & & ! up )
for ( int i = 1 ; i < level ; i + + )
shortcutMinus ( ) ;
else if ( level > 4 & & up )
for ( int i = 4 ; i < level ; i + + )
shortcutControlPlus ( ) ;
else if ( level > 4 & & ! up )
for ( int i = 4 ; i < level ; i + + )
shortcutControlMinus ( ) ;
}
2022-04-27 11:56:54 +00:00
void wfmain : : buttonControl ( const COMMAND * cmd )
2021-08-19 09:21:09 +00:00
{
2023-01-29 19:26:21 +00:00
switch ( cmd - > command ) {
case cmdGetBandStackReg :
2023-01-30 12:01:29 +00:00
issueCmd ( ( cmds ) cmd - > command , cmd - > band ) ;
2023-01-29 19:26:21 +00:00
break ;
2023-01-30 23:54:45 +00:00
case cmdSetBandDown :
2023-01-30 05:54:41 +00:00
for ( size_t i = 0 ; i < rigCaps . bands . size ( ) ; i + + ) {
2023-01-29 19:46:13 +00:00
if ( rigCaps . bands [ i ] . band = = lastRequestedBand )
{
2023-01-30 23:54:45 +00:00
if ( i > 0 ) {
2023-01-29 19:46:13 +00:00
issueCmd ( cmdGetBandStackReg , rigCaps . bands [ i - 1 ] . band ) ;
}
else {
issueCmd ( cmdGetBandStackReg , rigCaps . bands [ rigCaps . bands . size ( ) - 1 ] . band ) ;
}
}
}
2023-01-29 19:26:21 +00:00
break ;
2023-01-30 23:54:45 +00:00
case cmdSetBandUp :
2023-01-30 05:54:41 +00:00
for ( size_t i = 0 ; i < rigCaps . bands . size ( ) ; i + + ) {
2023-01-29 19:46:13 +00:00
if ( rigCaps . bands [ i ] . band = = lastRequestedBand )
{
if ( i + 1 < rigCaps . bands . size ( ) ) {
issueCmd ( cmdGetBandStackReg , rigCaps . bands [ i + 1 ] . band ) ;
}
else {
issueCmd ( cmdGetBandStackReg , rigCaps . bands [ 0 ] . band ) ;
}
}
}
2023-01-29 19:26:21 +00:00
break ;
case cmdSetMode :
2022-09-19 01:03:02 +00:00
changeMode ( cmd - > mode ) ;
2023-01-29 19:26:21 +00:00
break ;
case cmdSetModeUp :
2023-01-30 05:54:41 +00:00
for ( size_t i = 0 ; i < rigCaps . modes . size ( ) ; i + + ) {
2023-01-29 19:26:21 +00:00
if ( rigCaps . modes [ i ] . mk = = currentModeInfo . mk )
{
if ( i + 1 < rigCaps . modes . size ( ) ) {
changeMode ( rigCaps . modes [ i + 1 ] . mk ) ;
}
else {
changeMode ( rigCaps . modes [ 0 ] . mk ) ;
}
}
}
break ;
case cmdSetModeDown :
2023-01-30 05:54:41 +00:00
for ( size_t i = 0 ; i < rigCaps . modes . size ( ) ; i + + ) {
2023-01-29 19:26:21 +00:00
if ( rigCaps . modes [ i ] . mk = = currentModeInfo . mk )
{
if ( i > 0 ) {
changeMode ( rigCaps . modes [ i - 1 ] . mk ) ;
}
else {
changeMode ( rigCaps . modes [ rigCaps . modes . size ( ) - 1 ] . mk ) ;
}
}
}
break ;
2023-01-30 00:31:33 +00:00
case cmdSetStepUp :
if ( ui - > tuningStepCombo - > currentIndex ( ) < ui - > tuningStepCombo - > count ( ) - 1 )
{
ui - > tuningStepCombo - > setCurrentIndex ( ui - > tuningStepCombo - > currentIndex ( ) + 1 ) ;
}
else
{
ui - > tuningStepCombo - > setCurrentIndex ( 0 ) ;
}
break ;
case cmdSetStepDown :
if ( ui - > tuningStepCombo - > currentIndex ( ) > 0 )
{
ui - > tuningStepCombo - > setCurrentIndex ( ui - > tuningStepCombo - > currentIndex ( ) - 1 ) ;
}
else
{
ui - > tuningStepCombo - > setCurrentIndex ( ui - > tuningStepCombo - > count ( ) - 1 ) ;
}
break ;
case cmdSetSpanUp :
if ( ui - > scopeBWCombo - > currentIndex ( ) < ui - > scopeBWCombo - > count ( ) - 1 )
{
ui - > scopeBWCombo - > setCurrentIndex ( ui - > scopeBWCombo - > currentIndex ( ) + 1 ) ;
}
else
{
ui - > scopeBWCombo - > setCurrentIndex ( 0 ) ;
}
break ;
case cmdSetSpanDown :
if ( ui - > scopeBWCombo - > currentIndex ( ) > 0 )
{
ui - > scopeBWCombo - > setCurrentIndex ( ui - > scopeBWCombo - > currentIndex ( ) - 1 ) ;
}
else
{
ui - > scopeBWCombo - > setCurrentIndex ( ui - > scopeBWCombo - > count ( ) - 1 ) ;
}
break ;
2023-01-29 19:26:21 +00:00
default :
issueCmdUniquePriority ( ( cmds ) cmd - > command , cmd - > suffix ) ;
break ;
2021-08-19 09:21:09 +00:00
}
}
2021-06-04 23:23:16 +00:00
void wfmain : : stepUp ( )
{
if ( ui - > tuningStepCombo - > currentIndex ( ) < ui - > tuningStepCombo - > count ( ) - 1 )
ui - > tuningStepCombo - > setCurrentIndex ( ui - > tuningStepCombo - > currentIndex ( ) + 1 ) ;
}
void wfmain : : stepDown ( )
{
if ( ui - > tuningStepCombo - > currentIndex ( ) > 0 )
ui - > tuningStepCombo - > setCurrentIndex ( ui - > tuningStepCombo - > currentIndex ( ) - 1 ) ;
2021-06-01 16:48:19 +00:00
}
2022-04-22 10:11:21 +00:00
void wfmain : : changeFrequency ( int value ) {
if ( freqLock ) return ;
freqt f ;
2023-01-29 15:08:47 +00:00
f . Hz = roundFrequencyWithStep ( freq . Hz , value , tsWfScrollHz ) ;
2022-04-22 10:11:21 +00:00
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-29 15:08:47 +00:00
freq = f ;
2022-04-22 10:11:21 +00:00
issueCmdUniquePriority ( cmdSetFreq , f ) ;
2023-01-29 15:08:47 +00:00
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( f . MHzDouble , 0 , ' f ' ) ) ;
2022-04-22 10:11:21 +00:00
}
2018-11-25 06:21:36 +00:00
void wfmain : : setDefPrefs ( )
{
2021-02-05 05:03:16 +00:00
defPrefs . useFullScreen = false ;
2021-02-19 06:38:50 +00:00
defPrefs . useSystemTheme = false ;
2018-11-25 06:21:36 +00:00
defPrefs . drawPeaks = true ;
2022-08-23 00:57:54 +00:00
defPrefs . currentColorPresetNumber = 0 ;
2022-08-18 01:41:35 +00:00
defPrefs . underlayMode = underlayNone ;
2022-08-18 01:46:00 +00:00
defPrefs . underlayBufferSize = 64 ;
2021-07-15 05:44:05 +00:00
defPrefs . wfAntiAlias = false ;
defPrefs . wfInterpolate = true ;
2019-02-09 00:05:45 +00:00
defPrefs . stylesheetPath = QString ( " qdarkstyle/style.qss " ) ;
2021-01-30 06:09:09 +00:00
defPrefs . radioCIVAddr = 0x00 ; // previously was 0x94 for 7300.
2021-11-07 06:59:03 +00:00
defPrefs . CIVisRadioModel = false ;
2021-12-30 09:52:23 +00:00
defPrefs . forceRTSasPTT = false ;
2018-11-29 21:41:42 +00:00
defPrefs . serialPortRadio = QString ( " auto " ) ;
2020-03-30 21:09:52 +00:00
defPrefs . serialPortBaud = 115200 ;
2022-11-27 05:43:47 +00:00
defPrefs . polling_ms = 0 ; // 0 = Automatic
2023-01-23 21:34:35 +00:00
defPrefs . enablePTT = true ;
2018-11-25 06:21:36 +00:00
defPrefs . niceTS = true ;
2021-04-19 16:26:26 +00:00
defPrefs . enableRigCtlD = false ;
defPrefs . rigCtlPort = 4533 ;
2021-05-05 13:11:00 +00:00
defPrefs . virtualSerialPort = QString ( " none " ) ;
2021-07-05 23:45:19 +00:00
defPrefs . localAFgain = 255 ;
defPrefs . wflength = 160 ;
2021-07-06 00:04:55 +00:00
defPrefs . wftheme = static_cast < int > ( QCPColorGradient : : gpJet ) ;
2022-08-18 01:41:35 +00:00
defPrefs . plotFloor = 0 ;
defPrefs . plotCeiling = 160 ;
2021-07-11 16:30:02 +00:00
defPrefs . confirmExit = true ;
2021-07-20 13:45:44 +00:00
defPrefs . confirmPowerOff = true ;
2021-08-27 17:06:09 +00:00
defPrefs . meter2Type = meterNone ;
2022-04-08 13:40:05 +00:00
defPrefs . tcpPort = 0 ;
2022-04-18 19:29:50 +00:00
defPrefs . waterfallFormat = 0 ;
2022-05-12 00:46:20 +00:00
defPrefs . audioSystem = qtAudio ;
2023-01-30 12:01:29 +00:00
defPrefs . enableUSBControllers = false ;
2023-02-07 09:32:33 +00:00
defPrefs . usbSensitivity = 1 ;
2021-02-05 04:54:34 +00:00
2021-03-01 19:53:12 +00:00
udpDefPrefs . ipAddress = QString ( " " ) ;
udpDefPrefs . controlLANPort = 50001 ;
udpDefPrefs . serialLANPort = 50002 ;
udpDefPrefs . audioLANPort = 50003 ;
udpDefPrefs . username = QString ( " " ) ;
udpDefPrefs . password = QString ( " " ) ;
2021-03-27 16:07:17 +00:00
udpDefPrefs . clientName = QHostInfo : : localHostName ( ) ;
2018-11-25 06:21:36 +00:00
}
2018-11-24 08:10:05 +00:00
void wfmain : : loadSettings ( )
{
2021-05-20 18:24:40 +00:00
qInfo ( logSystem ( ) ) < < " Loading settings from " < < settings - > fileName ( ) ;
2018-11-24 08:10:05 +00:00
2023-01-18 05:43:58 +00:00
QString currentVersionString = QString ( WFVIEW_VERSION ) ;
float currentVersionFloat = currentVersionString . toFloat ( ) ;
settings - > beginGroup ( " Program " ) ;
QString priorVersionString = settings - > value ( " version " , " unset " ) . toString ( ) ;
float priorVersionFloat = priorVersionString . toFloat ( ) ;
2023-01-29 15:08:47 +00:00
if ( currentVersionString ! = priorVersionString )
2023-01-18 05:43:58 +00:00
{
2023-01-18 05:49:17 +00:00
qWarning ( logSystem ( ) ) < < " Settings previously saved under version " < < priorVersionString < < " , you should review your settings and press SaveSettings. " ;
2023-01-18 05:43:58 +00:00
}
if ( priorVersionFloat > currentVersionFloat )
{
qWarning ( logSystem ( ) ) . noquote ( ) . nospace ( ) < < " It looks like the previous version of wfview ( " < < priorVersionString < < " ) was newer than this version ( " < < currentVersionString < < " ) " ;
}
prefs . version = priorVersionString ;
prefs . majorVersion = settings - > value ( " majorVersion " , defPrefs . majorVersion ) . toInt ( ) ;
prefs . minorVersion = settings - > value ( " minorVersion " , defPrefs . minorVersion ) . toInt ( ) ;
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
// UI: (full screen, dark theme, draw peaks, colors, etc)
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Interface " ) ;
prefs . useFullScreen = settings - > value ( " UseFullScreen " , defPrefs . useFullScreen ) . toBool ( ) ;
prefs . useSystemTheme = settings - > value ( " UseSystemTheme " , defPrefs . useSystemTheme ) . toBool ( ) ;
2021-07-06 00:04:55 +00:00
prefs . wftheme = settings - > value ( " WFTheme " , defPrefs . wftheme ) . toInt ( ) ;
2022-08-18 01:41:35 +00:00
prefs . plotFloor = settings - > value ( " plotFloor " , defPrefs . plotFloor ) . toInt ( ) ;
prefs . plotCeiling = settings - > value ( " plotCeiling " , defPrefs . plotCeiling ) . toInt ( ) ;
plotFloor = prefs . plotFloor ;
plotCeiling = prefs . plotCeiling ;
wfFloor = prefs . plotFloor ;
wfCeiling = prefs . plotCeiling ;
2021-05-20 18:24:40 +00:00
prefs . drawPeaks = settings - > value ( " DrawPeaks " , defPrefs . drawPeaks ) . toBool ( ) ;
2022-08-18 01:46:00 +00:00
prefs . underlayBufferSize = settings - > value ( " underlayBufferSize " , defPrefs . underlayBufferSize ) . toInt ( ) ;
2022-08-18 01:41:35 +00:00
prefs . underlayMode = static_cast < underlay_t > ( settings - > value ( " underlayMode " , defPrefs . underlayMode ) . toInt ( ) ) ;
2021-07-15 05:44:05 +00:00
prefs . wfAntiAlias = settings - > value ( " WFAntiAlias " , defPrefs . wfAntiAlias ) . toBool ( ) ;
prefs . wfInterpolate = settings - > value ( " WFInterpolate " , defPrefs . wfInterpolate ) . toBool ( ) ;
2021-12-30 00:48:39 +00:00
prefs . wflength = ( unsigned int ) settings - > value ( " WFLength " , defPrefs . wflength ) . toInt ( ) ;
2021-05-20 18:24:40 +00:00
prefs . stylesheetPath = settings - > value ( " StylesheetPath " , defPrefs . stylesheetPath ) . toString ( ) ;
ui - > splitter - > restoreState ( settings - > value ( " splitter " ) . toByteArray ( ) ) ;
restoreGeometry ( settings - > value ( " windowGeometry " ) . toByteArray ( ) ) ;
restoreState ( settings - > value ( " windowState " ) . toByteArray ( ) ) ;
2020-04-04 23:51:46 +00:00
setWindowState ( Qt : : WindowActive ) ; // Works around QT bug to returns window+keyboard focus.
2021-07-11 16:30:02 +00:00
prefs . confirmExit = settings - > value ( " ConfirmExit " , defPrefs . confirmExit ) . toBool ( ) ;
2021-07-20 13:45:44 +00:00
prefs . confirmPowerOff = settings - > value ( " ConfirmPowerOff " , defPrefs . confirmPowerOff ) . toBool ( ) ;
2021-08-27 17:06:09 +00:00
prefs . meter2Type = static_cast < meterKind > ( settings - > value ( " Meter2Type " , defPrefs . meter2Type ) . toInt ( ) ) ;
2022-10-11 12:17:23 +00:00
prefs . clickDragTuningEnable = settings - > value ( " ClickDragTuning " , false ) . toBool ( ) ;
ui - > clickDragTuningEnableChk - > setChecked ( prefs . clickDragTuningEnable ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
2022-08-22 23:49:35 +00:00
// Load in the color presets. The default values are already loaded.
2021-04-27 06:40:08 +00:00
2022-08-22 23:49:35 +00:00
settings - > beginGroup ( " ColorPresets " ) ;
2022-11-23 21:36:13 +00:00
prefs . currentColorPresetNumber = settings - > value ( " currentColorPresetNumber " , defPrefs . currentColorPresetNumber ) . toInt ( ) ;
2022-08-22 23:49:35 +00:00
if ( prefs . currentColorPresetNumber > numColorPresetsTotal - 1 )
prefs . currentColorPresetNumber = 0 ;
2021-04-27 06:40:08 +00:00
2022-08-22 23:49:35 +00:00
int numPresetsInFile = settings - > beginReadArray ( " ColorPreset " ) ;
// We will use the number of presets that the working copy of wfview
// supports, as we must never exceed the available number.
2022-09-18 20:00:44 +00:00
if ( numPresetsInFile > 0 )
2022-08-22 23:49:35 +00:00
{
2022-09-18 20:00:44 +00:00
colorPrefsType * p ;
2022-08-22 23:49:35 +00:00
QString tempName ;
2022-09-18 20:00:44 +00:00
for ( int pn = 0 ; pn < numColorPresetsTotal ; pn + + )
2022-08-22 23:49:35 +00:00
{
settings - > setArrayIndex ( pn ) ;
p = & ( colorPreset [ pn ] ) ;
p - > presetNum = settings - > value ( " presetNum " , p - > presetNum ) . toInt ( ) ;
tempName = settings - > value ( " presetName " , * p - > presetName ) . toString ( ) ;
2022-09-18 20:00:44 +00:00
if ( ( ! tempName . isEmpty ( ) ) & & tempName . length ( ) < 11 )
2022-08-22 23:49:35 +00:00
{
p - > presetName - > clear ( ) ;
p - > presetName - > append ( tempName ) ;
}
p - > gridColor . setNamedColor ( settings - > value ( " gridColor " , p - > gridColor . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > axisColor . setNamedColor ( settings - > value ( " axisColor " , p - > axisColor . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > textColor . setNamedColor ( settings - > value ( " textColor " , p - > textColor . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > spectrumLine . setNamedColor ( settings - > value ( " spectrumLine " , p - > spectrumLine . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > spectrumFill . setNamedColor ( settings - > value ( " spectrumFill " , p - > spectrumFill . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > underlayLine . setNamedColor ( settings - > value ( " underlayLine " , p - > underlayLine . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > underlayFill . setNamedColor ( settings - > value ( " underlayFill " , p - > underlayFill . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > plotBackground . setNamedColor ( settings - > value ( " plotBackground " , p - > plotBackground . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > tuningLine . setNamedColor ( settings - > value ( " tuningLine " , p - > tuningLine . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-09-28 16:34:15 +00:00
p - > passband . setNamedColor ( settings - > value ( " passband " , p - > passband . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2023-01-19 16:16:47 +00:00
p - > pbt . setNamedColor ( settings - > value ( " pbt " , p - > pbt . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-08-22 23:49:35 +00:00
p - > wfBackground . setNamedColor ( settings - > value ( " wfBackground " , p - > wfBackground . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > wfGrid . setNamedColor ( settings - > value ( " wfGrid " , p - > wfGrid . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > wfAxis . setNamedColor ( settings - > value ( " wfAxis " , p - > wfAxis . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > wfText . setNamedColor ( settings - > value ( " wfText " , p - > wfText . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > meterLevel . setNamedColor ( settings - > value ( " meterLevel " , p - > meterLevel . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > meterAverage . setNamedColor ( settings - > value ( " meterAverage " , p - > meterAverage . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-08-23 04:22:01 +00:00
p - > meterPeakLevel . setNamedColor ( settings - > value ( " meterPeakLevel " , p - > meterPeakLevel . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > meterPeakScale . setNamedColor ( settings - > value ( " meterPeakScale " , p - > meterPeakScale . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-08-22 23:49:35 +00:00
p - > meterLowerLine . setNamedColor ( settings - > value ( " meterLowerLine " , p - > meterLowerLine . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
p - > meterLowText . setNamedColor ( settings - > value ( " meterLowText " , p - > meterLowText . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-10-09 13:23:07 +00:00
p - > clusterSpots . setNamedColor ( settings - > value ( " clusterSpots " , p - > clusterSpots . name ( QColor : : HexArgb ) ) . toString ( ) ) ;
2022-08-22 23:49:35 +00:00
}
}
settings - > endArray ( ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-04-27 06:40:08 +00:00
2018-11-24 08:10:05 +00:00
// Radio and Comms: C-IV addr, port to use
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Radio " ) ;
2021-12-30 00:48:39 +00:00
prefs . radioCIVAddr = ( unsigned char ) settings - > value ( " RigCIVuInt " , defPrefs . radioCIVAddr ) . toInt ( ) ;
if ( prefs . radioCIVAddr ! = 0 )
2021-05-18 07:35:47 +00:00
{
ui - > rigCIVManualAddrChk - > setChecked ( true ) ;
ui - > rigCIVaddrHexLine - > blockSignals ( true ) ;
ui - > rigCIVaddrHexLine - > setText ( QString ( " %1 " ) . arg ( prefs . radioCIVAddr , 2 , 16 ) ) ;
ui - > rigCIVaddrHexLine - > setEnabled ( true ) ;
ui - > rigCIVaddrHexLine - > blockSignals ( false ) ;
2021-12-30 00:48:39 +00:00
}
else {
2021-05-18 07:35:47 +00:00
ui - > rigCIVManualAddrChk - > setChecked ( false ) ;
ui - > rigCIVaddrHexLine - > setEnabled ( false ) ;
}
2021-11-07 06:59:03 +00:00
prefs . CIVisRadioModel = ( bool ) settings - > value ( " CIVisRadioModel " , defPrefs . CIVisRadioModel ) . toBool ( ) ;
2021-12-30 09:52:23 +00:00
prefs . forceRTSasPTT = ( bool ) settings - > value ( " ForceRTSasPTT " , defPrefs . forceRTSasPTT ) . toBool ( ) ;
2021-11-07 06:59:03 +00:00
2021-12-30 09:52:23 +00:00
ui - > useRTSforPTTchk - > setChecked ( prefs . forceRTSasPTT ) ;
2021-11-07 06:59:03 +00:00
2021-05-20 18:24:40 +00:00
prefs . serialPortRadio = settings - > value ( " SerialPortRadio " , defPrefs . serialPortRadio ) . toString ( ) ;
2021-05-07 08:28:01 +00:00
int serialIndex = ui - > serialDeviceListCombo - > findText ( prefs . serialPortRadio ) ;
if ( serialIndex ! = - 1 ) {
ui - > serialDeviceListCombo - > setCurrentIndex ( serialIndex ) ;
}
2021-12-30 00:48:39 +00:00
prefs . serialPortBaud = ( quint32 ) settings - > value ( " SerialPortBaud " , defPrefs . serialPortBaud ) . toInt ( ) ;
2021-05-20 04:36:34 +00:00
ui - > baudRateCombo - > blockSignals ( true ) ;
2021-12-30 00:48:39 +00:00
ui - > baudRateCombo - > setCurrentIndex ( ui - > baudRateCombo - > findData ( prefs . serialPortBaud ) ) ;
2021-05-20 04:36:34 +00:00
ui - > baudRateCombo - > blockSignals ( false ) ;
2021-06-08 16:51:10 +00:00
if ( prefs . serialPortBaud > 0 )
{
serverConfig . baudRate = prefs . serialPortBaud ;
}
2022-11-27 05:43:47 +00:00
prefs . polling_ms = settings - > value ( " polling_ms " , defPrefs . polling_ms ) . toInt ( ) ;
if ( prefs . polling_ms = = 0 )
{
// Automatic
ui - > pollingButtonGroup - > blockSignals ( true ) ;
ui - > autoPollBtn - > setChecked ( true ) ;
ui - > manualPollBtn - > setChecked ( false ) ;
ui - > pollingButtonGroup - > blockSignals ( false ) ;
ui - > pollTimeMsSpin - > setEnabled ( false ) ;
} else {
// Manual
ui - > pollingButtonGroup - > blockSignals ( true ) ;
ui - > autoPollBtn - > setChecked ( false ) ;
ui - > manualPollBtn - > setChecked ( true ) ;
ui - > pollingButtonGroup - > blockSignals ( false ) ;
ui - > pollTimeMsSpin - > blockSignals ( true ) ;
ui - > pollTimeMsSpin - > setValue ( prefs . polling_ms ) ;
ui - > pollTimeMsSpin - > blockSignals ( false ) ;
ui - > pollTimeMsSpin - > setEnabled ( true ) ;
}
2021-05-20 18:24:40 +00:00
prefs . virtualSerialPort = settings - > value ( " VirtualSerialPort " , defPrefs . virtualSerialPort ) . toString ( ) ;
2021-05-05 13:11:00 +00:00
int vspIndex = ui - > vspCombo - > findText ( prefs . virtualSerialPort ) ;
if ( vspIndex ! = - 1 ) {
ui - > vspCombo - > setCurrentIndex ( vspIndex ) ;
}
2021-05-11 10:18:45 +00:00
else
{
ui - > vspCombo - > addItem ( prefs . virtualSerialPort ) ;
2021-12-30 00:48:39 +00:00
ui - > vspCombo - > setCurrentIndex ( ui - > vspCombo - > count ( ) - 1 ) ;
2021-05-11 10:18:45 +00:00
}
2021-12-30 00:48:39 +00:00
prefs . localAFgain = ( unsigned char ) settings - > value ( " localAFgain " , defPrefs . localAFgain ) . toUInt ( ) ;
2021-07-05 23:45:19 +00:00
rxSetup . localAFgain = prefs . localAFgain ;
2022-01-15 16:31:50 +00:00
txSetup . localAFgain = 255 ;
2022-05-12 00:46:20 +00:00
prefs . audioSystem = static_cast < audioType > ( settings - > value ( " AudioSystem " , defPrefs . audioSystem ) . toInt ( ) ) ;
ui - > audioSystemCombo - > blockSignals ( true ) ;
2022-09-16 20:43:01 +00:00
ui - > audioSystemServerCombo - > blockSignals ( true ) ;
2022-05-12 00:46:20 +00:00
ui - > audioSystemCombo - > setCurrentIndex ( prefs . audioSystem ) ;
2022-09-16 20:43:01 +00:00
ui - > audioSystemServerCombo - > setCurrentIndex ( prefs . audioSystem ) ;
ui - > audioSystemServerCombo - > blockSignals ( false ) ;
2022-05-12 00:46:20 +00:00
ui - > audioSystemCombo - > blockSignals ( false ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
// Misc. user settings (enable PTT, draw peaks, etc)
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Controls " ) ;
prefs . enablePTT = settings - > value ( " EnablePTT " , defPrefs . enablePTT ) . toBool ( ) ;
2019-02-10 07:13:18 +00:00
ui - > pttEnableChk - > setChecked ( prefs . enablePTT ) ;
2021-05-20 18:24:40 +00:00
prefs . niceTS = settings - > value ( " NiceTS " , defPrefs . niceTS ) . toBool ( ) ;
2023-01-19 07:17:28 +00:00
prefs . automaticSidebandSwitching = settings - > value ( " automaticSidebandSwitching " , defPrefs . automaticSidebandSwitching ) . toBool ( ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " LAN " ) ;
2021-03-01 19:53:12 +00:00
2021-05-20 18:24:40 +00:00
prefs . enableLAN = settings - > value ( " EnableLAN " , defPrefs . enableLAN ) . toBool ( ) ;
2022-05-05 17:09:16 +00:00
// If LAN is enabled, server gets its audio straight from the LAN
ui - > serverRXAudioInputCombo - > setEnabled ( ! prefs . enableLAN ) ;
ui - > serverTXAudioOutputCombo - > setEnabled ( ! prefs . enableLAN ) ;
2022-09-18 14:23:37 +00:00
ui - > audioSystemServerCombo - > setEnabled ( ! prefs . enableLAN ) ;
2022-05-05 17:09:16 +00:00
ui - > baudRateCombo - > setEnabled ( ! prefs . enableLAN ) ;
ui - > serialDeviceListCombo - > setEnabled ( ! prefs . enableLAN ) ;
2021-05-20 04:36:34 +00:00
2021-03-03 05:55:33 +00:00
ui - > lanEnableBtn - > setChecked ( prefs . enableLAN ) ;
2021-05-31 06:26:36 +00:00
ui - > connectBtn - > setEnabled ( true ) ;
2021-04-19 16:26:26 +00:00
2021-05-20 18:24:40 +00:00
prefs . enableRigCtlD = settings - > value ( " EnableRigCtlD " , defPrefs . enableRigCtlD ) . toBool ( ) ;
2021-08-04 19:49:32 +00:00
ui - > enableRigctldChk - > setChecked ( prefs . enableRigCtlD ) ;
2021-05-20 18:24:40 +00:00
prefs . rigCtlPort = settings - > value ( " RigCtlPort " , defPrefs . rigCtlPort ) . toInt ( ) ;
2021-08-04 19:49:32 +00:00
ui - > rigctldPortTxt - > setText ( QString ( " %1 " ) . arg ( prefs . rigCtlPort ) ) ;
// Call the function to start rigctld if enabled.
on_enableRigctldChk_clicked ( prefs . enableRigCtlD ) ;
2021-04-19 16:26:26 +00:00
2022-04-18 19:29:50 +00:00
prefs . tcpPort = settings - > value ( " TcpServerPort " , defPrefs . tcpPort ) . toInt ( ) ;
ui - > tcpServerPortTxt - > setText ( QString ( " %1 " ) . arg ( prefs . tcpPort ) ) ;
prefs . waterfallFormat = settings - > value ( " WaterfallFormat " , defPrefs . waterfallFormat ) . toInt ( ) ;
ui - > waterfallFormatCombo - > blockSignals ( true ) ;
ui - > waterfallFormatCombo - > setCurrentIndex ( prefs . waterfallFormat ) ;
ui - > waterfallFormatCombo - > blockSignals ( false ) ;
2021-05-20 18:24:40 +00:00
udpPrefs . ipAddress = settings - > value ( " IPAddress " , udpDefPrefs . ipAddress ) . toString ( ) ;
2021-03-03 05:55:33 +00:00
ui - > ipAddressTxt - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-03-01 19:53:12 +00:00
ui - > ipAddressTxt - > setText ( udpPrefs . ipAddress ) ;
2021-12-30 00:48:39 +00:00
2021-05-20 18:24:40 +00:00
udpPrefs . controlLANPort = settings - > value ( " ControlLANPort " , udpDefPrefs . controlLANPort ) . toInt ( ) ;
2021-03-03 05:55:33 +00:00
ui - > controlPortTxt - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-03-01 19:53:12 +00:00
ui - > controlPortTxt - > setText ( QString ( " %1 " ) . arg ( udpPrefs . controlLANPort ) ) ;
2021-12-30 00:48:39 +00:00
2021-05-20 18:24:40 +00:00
udpPrefs . username = settings - > value ( " Username " , udpDefPrefs . username ) . toString ( ) ;
2021-03-03 05:55:33 +00:00
ui - > usernameTxt - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-03-01 19:53:12 +00:00
ui - > usernameTxt - > setText ( QString ( " %1 " ) . arg ( udpPrefs . username ) ) ;
2021-12-30 00:48:39 +00:00
2021-05-20 18:24:40 +00:00
udpPrefs . password = settings - > value ( " Password " , udpDefPrefs . password ) . toString ( ) ;
2021-03-03 05:55:33 +00:00
ui - > passwordTxt - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-03-01 19:53:12 +00:00
ui - > passwordTxt - > setText ( QString ( " %1 " ) . arg ( udpPrefs . password ) ) ;
2021-02-04 10:27:30 +00:00
2021-06-04 07:24:26 +00:00
rxSetup . isinput = false ;
txSetup . isinput = true ;
2021-03-27 16:07:17 +00:00
2021-06-04 07:24:26 +00:00
rxSetup . latency = settings - > value ( " AudioRXLatency " , " 150 " ) . toInt ( ) ;
2021-03-03 05:55:33 +00:00
ui - > rxLatencySlider - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-06-04 07:24:26 +00:00
ui - > rxLatencySlider - > setValue ( rxSetup . latency ) ;
2021-02-27 00:37:00 +00:00
ui - > rxLatencySlider - > setTracking ( false ) ; // Stop it sending value on every change.
2021-06-04 07:24:26 +00:00
txSetup . latency = settings - > value ( " AudioTXLatency " , " 150 " ) . toInt ( ) ;
2021-03-03 05:55:33 +00:00
ui - > txLatencySlider - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-07-02 11:19:53 +00:00
ui - > txLatencySlider - > setValue ( txSetup . latency ) ;
2021-02-27 09:34:56 +00:00
ui - > txLatencySlider - > setTracking ( false ) ; // Stop it sending value on every change.
2021-02-08 16:53:26 +00:00
2021-06-04 07:24:26 +00:00
ui - > audioSampleRateCombo - > blockSignals ( true ) ;
2022-05-08 10:46:33 +00:00
rxSetup . sampleRate = settings - > value ( " AudioRXSampleRate " , " 48000 " ) . toInt ( ) ;
txSetup . sampleRate = rxSetup . sampleRate ;
2022-04-03 19:16:52 +00:00
2021-03-03 05:55:33 +00:00
ui - > audioSampleRateCombo - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2022-05-08 10:46:33 +00:00
int audioSampleRateIndex = ui - > audioSampleRateCombo - > findText ( QString : : number ( rxSetup . sampleRate ) ) ;
2021-02-09 12:43:28 +00:00
if ( audioSampleRateIndex ! = - 1 ) {
2021-05-22 16:02:51 +00:00
ui - > audioSampleRateCombo - > setCurrentIndex ( audioSampleRateIndex ) ;
2021-02-09 12:43:28 +00:00
}
2021-06-04 07:24:26 +00:00
ui - > audioSampleRateCombo - > blockSignals ( false ) ;
2021-02-08 16:53:26 +00:00
2021-02-09 12:43:28 +00:00
// Add codec combobox items here so that we can add userdata!
ui - > audioRXCodecCombo - > addItem ( " LPCM 1ch 16bit " , 4 ) ;
2021-02-11 19:18:35 +00:00
ui - > audioRXCodecCombo - > addItem ( " LPCM 1ch 8bit " , 2 ) ;
ui - > audioRXCodecCombo - > addItem ( " uLaw 1ch 8bit " , 1 ) ;
2021-02-09 12:43:28 +00:00
ui - > audioRXCodecCombo - > addItem ( " LPCM 2ch 16bit " , 16 ) ;
ui - > audioRXCodecCombo - > addItem ( " uLaw 2ch 8bit " , 32 ) ;
ui - > audioRXCodecCombo - > addItem ( " PCM 2ch 8bit " , 8 ) ;
2021-06-16 08:49:38 +00:00
ui - > audioRXCodecCombo - > addItem ( " Opus 1ch " , 64 ) ;
ui - > audioRXCodecCombo - > addItem ( " Opus 2ch " , 128 ) ;
2021-02-09 12:43:28 +00:00
2021-06-04 07:24:26 +00:00
ui - > audioRXCodecCombo - > blockSignals ( true ) ;
rxSetup . codec = settings - > value ( " AudioRXCodec " , " 4 " ) . toInt ( ) ;
2021-03-03 05:55:33 +00:00
ui - > audioRXCodecCombo - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-02-09 12:43:28 +00:00
for ( int f = 0 ; f < ui - > audioRXCodecCombo - > count ( ) ; f + + )
2021-06-04 07:24:26 +00:00
if ( ui - > audioRXCodecCombo - > itemData ( f ) . toInt ( ) = = rxSetup . codec )
2021-02-09 12:43:28 +00:00
ui - > audioRXCodecCombo - > setCurrentIndex ( f ) ;
2021-06-04 07:24:26 +00:00
ui - > audioRXCodecCombo - > blockSignals ( false ) ;
2021-02-09 12:43:28 +00:00
ui - > audioTXCodecCombo - > addItem ( " LPCM 1ch 16bit " , 4 ) ;
2021-02-11 19:18:35 +00:00
ui - > audioTXCodecCombo - > addItem ( " LPCM 1ch 8bit " , 2 ) ;
ui - > audioTXCodecCombo - > addItem ( " uLaw 1ch 8bit " , 1 ) ;
2021-06-16 08:49:38 +00:00
ui - > audioTXCodecCombo - > addItem ( " Opus 1ch " , 64 ) ;
2021-02-09 12:43:28 +00:00
2021-06-04 07:24:26 +00:00
ui - > audioRXCodecCombo - > blockSignals ( true ) ;
txSetup . codec = settings - > value ( " AudioTXCodec " , " 4 " ) . toInt ( ) ;
2021-03-03 05:55:33 +00:00
ui - > audioTXCodecCombo - > setEnabled ( ui - > lanEnableBtn - > isChecked ( ) ) ;
2021-02-09 12:43:28 +00:00
for ( int f = 0 ; f < ui - > audioTXCodecCombo - > count ( ) ; f + + )
2021-06-04 07:24:26 +00:00
if ( ui - > audioTXCodecCombo - > itemData ( f ) . toInt ( ) = = txSetup . codec )
2021-02-09 12:43:28 +00:00
ui - > audioTXCodecCombo - > setCurrentIndex ( f ) ;
2021-06-04 07:24:26 +00:00
ui - > audioRXCodecCombo - > blockSignals ( false ) ;
2021-02-08 16:53:26 +00:00
2022-09-25 10:15:45 +00:00
rxSetup . name = settings - > value ( " AudioOutput " , " Default Output Device " ) . toString ( ) ;
2022-05-12 00:46:20 +00:00
qInfo ( logGui ( ) ) < < " Got Audio Output from Settings: " < < rxSetup . name ;
2022-04-20 12:35:23 +00:00
2022-09-25 10:15:45 +00:00
txSetup . name = settings - > value ( " AudioInput " , " Default Input Device " ) . toString ( ) ;
2022-05-12 00:46:20 +00:00
qInfo ( logGui ( ) ) < < " Got Audio Input from Settings: " < < txSetup . name ;
2022-04-20 12:35:23 +00:00
2021-06-04 07:24:26 +00:00
2021-06-08 07:03:00 +00:00
rxSetup . resampleQuality = settings - > value ( " ResampleQuality " , " 4 " ) . toInt ( ) ;
2021-06-04 07:24:26 +00:00
txSetup . resampleQuality = rxSetup . resampleQuality ;
2021-02-04 10:27:30 +00:00
2021-05-20 18:24:40 +00:00
udpPrefs . clientName = settings - > value ( " ClientName " , udpDefPrefs . clientName ) . toString ( ) ;
2021-03-09 17:22:16 +00:00
2023-01-27 01:41:35 +00:00
udpPrefs . halfDuplex = settings - > value ( " HalfDuplex " , udpDefPrefs . halfDuplex ) . toBool ( ) ;
2023-02-04 10:26:42 +00:00
ui - > audioDuplexCombo - > setVisible ( false ) ;
ui - > label_51 - > setVisible ( false ) ;
2023-01-27 01:41:35 +00:00
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-02-16 16:16:46 +00:00
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Server " ) ;
serverConfig . enabled = settings - > value ( " ServerEnabled " , false ) . toBool ( ) ;
serverConfig . controlPort = settings - > value ( " ServerControlPort " , 50001 ) . toInt ( ) ;
serverConfig . civPort = settings - > value ( " ServerCivPort " , 50002 ) . toInt ( ) ;
serverConfig . audioPort = settings - > value ( " ServerAudioPort " , 50003 ) . toInt ( ) ;
2022-01-23 15:06:31 +00:00
2021-02-16 16:16:46 +00:00
serverConfig . users . clear ( ) ;
2022-01-23 15:06:31 +00:00
int numUsers = settings - > beginReadArray ( " Users " ) ;
if ( numUsers > 0 ) {
{
for ( int f = 0 ; f < numUsers ; f + + )
{
settings - > setArrayIndex ( f ) ;
SERVERUSER user ;
user . username = settings - > value ( " Username " , " " ) . toString ( ) ;
user . password = settings - > value ( " Password " , " " ) . toString ( ) ;
user . userType = settings - > value ( " UserType " , 0 ) . toInt ( ) ;
serverConfig . users . append ( user ) ;
}
}
settings - > endArray ( ) ;
}
else {
/* Support old way of storing users*/
settings - > endArray ( ) ;
numUsers = settings - > value ( " ServerNumUsers " , 2 ) . toInt ( ) ;
for ( int f = 0 ; f < numUsers ; f + + )
{
SERVERUSER user ;
user . username = settings - > value ( " ServerUsername_ " + QString : : number ( f ) , " " ) . toString ( ) ;
user . password = settings - > value ( " ServerPassword_ " + QString : : number ( f ) , " " ) . toString ( ) ;
user . userType = settings - > value ( " ServerUserType_ " + QString : : number ( f ) , 0 ) . toInt ( ) ;
serverConfig . users . append ( user ) ;
}
2021-02-16 16:16:46 +00:00
}
2022-01-23 15:06:31 +00:00
2021-12-30 00:48:39 +00:00
ui - > serverEnableCheckbox - > setChecked ( serverConfig . enabled ) ;
ui - > serverControlPortText - > setText ( QString : : number ( serverConfig . controlPort ) ) ;
ui - > serverCivPortText - > setText ( QString : : number ( serverConfig . civPort ) ) ;
ui - > serverAudioPortText - > setText ( QString : : number ( serverConfig . audioPort ) ) ;
2022-01-29 22:50:58 +00:00
RIGCONFIG * rigTemp = new RIGCONFIG ( ) ;
rigTemp - > rxAudioSetup . isinput = true ;
2022-04-20 12:35:23 +00:00
rigTemp - > txAudioSetup . isinput = false ;
2022-01-29 22:50:58 +00:00
rigTemp - > rxAudioSetup . localAFgain = 255 ;
rigTemp - > txAudioSetup . localAFgain = 255 ;
rigTemp - > rxAudioSetup . resampleQuality = 4 ;
rigTemp - > txAudioSetup . resampleQuality = 4 ;
2022-05-12 00:46:20 +00:00
rigTemp - > rxAudioSetup . type = prefs . audioSystem ;
rigTemp - > txAudioSetup . type = prefs . audioSystem ;
2022-01-29 22:50:58 +00:00
rigTemp - > baudRate = prefs . serialPortBaud ;
rigTemp - > civAddr = prefs . radioCIVAddr ;
2022-08-22 22:09:09 +00:00
rigTemp - > serialPort = prefs . serialPortRadio ;
2022-01-29 22:50:58 +00:00
QString guid = settings - > value ( " GUID " , " " ) . toString ( ) ;
if ( guid . isEmpty ( ) ) {
guid = QUuid : : createUuid ( ) . toString ( ) ;
settings - > setValue ( " GUID " , guid ) ;
}
2022-01-30 10:55:12 +00:00
# if (QT_VERSION >= QT_VERSION_CHECK(5,10,0))
2022-01-29 22:50:58 +00:00
memcpy ( rigTemp - > guid , QUuid : : fromString ( guid ) . toRfc4122 ( ) . constData ( ) , GUIDLEN ) ;
2022-01-30 10:55:12 +00:00
# endif
2022-01-14 19:57:12 +00:00
2022-09-25 10:15:45 +00:00
rigTemp - > rxAudioSetup . name = settings - > value ( " ServerAudioInput " , " Default Input Device " ) . toString ( ) ;
rigTemp - > txAudioSetup . name = settings - > value ( " ServerAudioOutput " , " Default Output Device " ) . toString ( ) ;
2022-01-29 22:50:58 +00:00
serverConfig . rigs . append ( rigTemp ) ;
2021-12-30 00:48:39 +00:00
int row = 0 ;
ui - > serverUsersTable - > setRowCount ( 0 ) ;
2022-09-18 13:59:03 +00:00
QList < SERVERUSER > : : iterator user = serverConfig . users . begin ( ) ;
while ( user ! = serverConfig . users . end ( ) )
2021-02-16 16:16:46 +00:00
{
2022-09-18 13:59:03 +00:00
if ( user - > username ! = " " & & user - > password ! = " " )
2021-12-30 00:48:39 +00:00
{
2022-09-18 13:59:03 +00:00
serverAddUserLine ( user - > username , user - > password , user - > userType ) ;
2021-12-30 00:48:39 +00:00
row + + ;
2022-09-18 13:59:03 +00:00
user + + ;
}
else {
user = serverConfig . users . erase ( user ) ;
2021-12-30 00:48:39 +00:00
}
}
if ( row = = 0 ) {
serverAddUserLine ( " " , " " , 0 ) ;
2022-09-21 14:38:28 +00:00
SERVERUSER user ;
user . username = " " ;
user . password = " " ;
user . userType = 0 ;
serverConfig . users . append ( user ) ;
2022-09-18 13:59:03 +00:00
ui - > serverAddUserBtn - > setEnabled ( false ) ;
2021-02-16 16:16:46 +00:00
}
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-02-16 16:16:46 +00:00
2018-11-24 08:10:05 +00:00
// Memory channels
2018-11-25 06:21:36 +00:00
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Memory " ) ;
int size = settings - > beginReadArray ( " Channel " ) ;
2018-11-25 06:21:36 +00:00
int chan = 0 ;
double freq ;
unsigned char mode ;
bool isSet ;
2018-11-27 07:10:23 +00:00
// Annoying: QSettings will write the array to the
// preference file starting the array at 1 and ending at 100.
// Thus, we are writing the channel number each time.
// It is also annoying that they get written with their array
// numbers in alphabetical order without zero padding.
// Also annoying that the preference groups are not written in
// the order they are specified here.
2018-11-25 06:21:36 +00:00
2021-12-30 00:48:39 +00:00
for ( int i = 0 ; i < size ; i + + )
2018-11-25 06:21:36 +00:00
{
2021-05-20 18:24:40 +00:00
settings - > setArrayIndex ( i ) ;
chan = settings - > value ( " chan " , 0 ) . toInt ( ) ;
freq = settings - > value ( " freq " , 12.345 ) . toDouble ( ) ;
mode = settings - > value ( " mode " , 0 ) . toInt ( ) ;
isSet = settings - > value ( " isSet " , false ) . toBool ( ) ;
2018-11-25 06:21:36 +00:00
2021-12-30 00:48:39 +00:00
if ( isSet )
2018-11-25 06:21:36 +00:00
{
mem . setPreset ( chan , freq , ( mode_kind ) mode ) ;
}
}
2021-05-20 18:24:40 +00:00
settings - > endArray ( ) ;
settings - > endGroup ( ) ;
2021-02-16 16:16:46 +00:00
2022-09-30 16:05:42 +00:00
settings - > beginGroup ( " Cluster " ) ;
prefs . clusterUdpEnable = settings - > value ( " UdpEnabled " , false ) . toBool ( ) ;
prefs . clusterTcpEnable = settings - > value ( " TcpEnabled " , false ) . toBool ( ) ;
prefs . clusterUdpPort = settings - > value ( " UdpPort " , 12060 ) . toInt ( ) ;
ui - > clusterUdpPortLineEdit - > setText ( QString : : number ( prefs . clusterUdpPort ) ) ;
ui - > clusterUdpEnable - > setChecked ( prefs . clusterUdpEnable ) ;
ui - > clusterTcpEnable - > setChecked ( prefs . clusterTcpEnable ) ;
int numClusters = settings - > beginReadArray ( " Servers " ) ;
clusters . clear ( ) ;
if ( numClusters > 0 ) {
{
for ( int f = 0 ; f < numClusters ; f + + )
{
settings - > setArrayIndex ( f ) ;
clusterSettings c ;
c . server = settings - > value ( " ServerName " , " " ) . toString ( ) ;
c . port = settings - > value ( " Port " , 7300 ) . toInt ( ) ;
c . userName = settings - > value ( " UserName " , " " ) . toString ( ) ;
c . password = settings - > value ( " Password " , " " ) . toString ( ) ;
c . timeout = settings - > value ( " Timeout " , 0 ) . toInt ( ) ;
2022-09-30 16:26:21 +00:00
c . isdefault = settings - > value ( " Default " , false ) . toBool ( ) ;
2022-09-30 16:05:42 +00:00
if ( ! c . server . isEmpty ( ) ) {
clusters . append ( c ) ;
}
}
int defaultCluster = 0 ;
ui - > clusterServerNameCombo - > blockSignals ( true ) ;
for ( int f = 0 ; f < clusters . size ( ) ; f + + )
{
ui - > clusterServerNameCombo - > addItem ( clusters [ f ] . server ) ;
2022-09-30 16:26:21 +00:00
if ( clusters [ f ] . isdefault ) {
2022-09-30 16:05:42 +00:00
defaultCluster = f ;
}
}
ui - > clusterServerNameCombo - > blockSignals ( false ) ;
if ( clusters . size ( ) > defaultCluster )
{
ui - > clusterServerNameCombo - > setCurrentIndex ( defaultCluster ) ;
ui - > clusterTcpPortLineEdit - > blockSignals ( true ) ;
ui - > clusterUsernameLineEdit - > blockSignals ( true ) ;
ui - > clusterPasswordLineEdit - > blockSignals ( true ) ;
ui - > clusterTimeoutLineEdit - > blockSignals ( true ) ;
ui - > clusterTcpPortLineEdit - > setText ( QString : : number ( clusters [ defaultCluster ] . port ) ) ;
ui - > clusterUsernameLineEdit - > setText ( clusters [ defaultCluster ] . userName ) ;
ui - > clusterPasswordLineEdit - > setText ( clusters [ defaultCluster ] . password ) ;
ui - > clusterTimeoutLineEdit - > setText ( QString : : number ( clusters [ defaultCluster ] . timeout ) ) ;
ui - > clusterTcpPortLineEdit - > blockSignals ( false ) ;
ui - > clusterUsernameLineEdit - > blockSignals ( false ) ;
ui - > clusterPasswordLineEdit - > blockSignals ( false ) ;
ui - > clusterTimeoutLineEdit - > blockSignals ( false ) ;
}
}
}
2022-09-30 17:41:57 +00:00
else {
ui - > clusterTcpPortLineEdit - > setEnabled ( false ) ;
ui - > clusterUsernameLineEdit - > setEnabled ( false ) ;
ui - > clusterPasswordLineEdit - > setEnabled ( false ) ;
ui - > clusterTimeoutLineEdit - > setEnabled ( false ) ;
}
2022-09-30 16:05:42 +00:00
settings - > endArray ( ) ;
2023-01-21 19:18:26 +00:00
settings - > endGroup ( ) ;
2022-09-30 16:05:42 +00:00
2023-01-21 19:18:26 +00:00
// CW Memory Load:
settings - > beginGroup ( " Keyer " ) ;
int numMemories = settings - > beginReadArray ( " macros " ) ;
if ( numMemories = = 10 )
{
QStringList macroList ;
for ( int m = 0 ; m < 10 ; m + + )
{
settings - > setArrayIndex ( m ) ;
macroList < < settings - > value ( " macroText " , " " ) . toString ( ) ;
}
cw - > setMacroText ( macroList ) ;
}
settings - > endArray ( ) ;
2022-09-30 16:05:42 +00:00
settings - > endGroup ( ) ;
2023-01-21 19:18:26 +00:00
2023-01-12 19:20:52 +00:00
# if defined (USB_CONTROLLER)
2022-05-17 07:53:24 +00:00
settings - > beginGroup ( " USB " ) ;
2023-01-30 12:01:29 +00:00
/* Load USB buttons*/
prefs . enableUSBControllers = settings - > value ( " EnableUSBControllers " , defPrefs . enableUSBControllers ) . toBool ( ) ;
2023-02-07 09:32:33 +00:00
prefs . usbSensitivity = settings - > value ( " USBSensitivity " , defPrefs . usbSensitivity ) . toInt ( ) ;
2023-01-30 12:01:29 +00:00
ui - > enableUsbChk - > blockSignals ( true ) ;
ui - > enableUsbChk - > setChecked ( prefs . enableUSBControllers ) ;
ui - > enableUsbChk - > blockSignals ( false ) ;
ui - > usbControllerBtn - > setEnabled ( prefs . enableUSBControllers ) ;
2023-01-30 16:15:43 +00:00
ui - > usbButtonsResetBtn - > setEnabled ( prefs . enableUSBControllers ) ;
ui - > usbCommandsResetBtn - > setEnabled ( prefs . enableUSBControllers ) ;
ui - > usbResetLbl - > setVisible ( prefs . enableUSBControllers ) ;
2023-01-30 12:01:29 +00:00
if ( prefs . enableUSBControllers ) {
// Setup USB Controller
setupUsbControllerDevice ( ) ;
2023-02-07 09:32:33 +00:00
emit initUsbController ( prefs . usbSensitivity ) ;
2023-01-30 12:01:29 +00:00
emit sendUsbControllerCommands ( & usbCommands ) ;
emit sendUsbControllerButtons ( & usbButtons ) ;
}
2022-09-18 20:00:44 +00:00
int numCommands = settings - > beginReadArray ( " Commands " ) ;
2023-01-29 15:08:47 +00:00
// This is the last time the commands were changed (v1.58)
if ( numCommands = = 0 | | priorVersionFloat < 1.58 ) {
2022-05-17 07:53:24 +00:00
settings - > endArray ( ) ;
// We have no buttons so create defaults
2023-01-30 16:15:43 +00:00
resetUsbCommands ( ) ;
2022-09-18 20:00:44 +00:00
}
else {
for ( int nc = 0 ; nc < numCommands ; nc + + )
{
settings - > setArrayIndex ( nc ) ;
COMMAND comm ;
comm . index = settings - > value ( " Num " , 0 ) . toInt ( ) ;
comm . text = settings - > value ( " Text " , " " ) . toString ( ) ;
comm . command = settings - > value ( " Command " , 0 ) . toInt ( ) ;
2023-01-30 12:01:29 +00:00
comm . band = ( availableBands ) settings - > value ( " Band " , 0 ) . toInt ( ) ;
comm . mode = ( mode_kind ) settings - > value ( " Mode " , 0 ) . toInt ( ) ;
comm . suffix = ( unsigned char ) settings - > value ( " Suffix " , 0 ) . toInt ( ) ;
2022-09-18 20:00:44 +00:00
usbCommands . append ( comm ) ;
}
settings - > endArray ( ) ;
}
int numButtons = settings - > beginReadArray ( " Buttons " ) ;
2023-01-29 15:08:47 +00:00
// This is the last time the buttons were changed, (v1.58)
if ( numButtons = = 0 | | priorVersionFloat < 1.58 ) {
2022-09-18 20:00:44 +00:00
settings - > endArray ( ) ;
// We have no buttons so create defaults
2023-01-30 16:15:43 +00:00
resetUsbButtons ( ) ;
2022-05-17 07:53:24 +00:00
}
2022-09-18 20:00:44 +00:00
else {
usbButtons . clear ( ) ;
for ( int nb = 0 ; nb < numButtons ; nb + + )
{
settings - > setArrayIndex ( nb ) ;
BUTTON butt ;
butt . dev = settings - > value ( " Dev " , 0 ) . toInt ( ) ;
butt . num = settings - > value ( " Num " , 0 ) . toInt ( ) ;
2022-10-23 17:54:18 +00:00
butt . name = settings - > value ( " Name " , " " ) . toString ( ) ;
2022-09-18 20:00:44 +00:00
butt . pos = QRect ( settings - > value ( " Left " , 0 ) . toInt ( ) ,
settings - > value ( " Top " , 0 ) . toInt ( ) ,
settings - > value ( " Width " , 0 ) . toInt ( ) ,
settings - > value ( " Height " , 0 ) . toInt ( ) ) ;
butt . textColour = QColor ( ( settings - > value ( " Colour " , " Green " ) . toString ( ) ) ) ;
2022-09-19 00:14:11 +00:00
QString on = settings - > value ( " OnCommand " , " None " ) . toString ( ) ;
QString off = settings - > value ( " OffCommand " , " None " ) . toString ( ) ;
2022-09-18 20:00:44 +00:00
2022-09-19 00:14:11 +00:00
QVector < COMMAND > : : iterator usbc = usbCommands . begin ( ) ;
2022-09-18 20:00:44 +00:00
2022-09-19 00:14:11 +00:00
while ( usbc ! = usbCommands . end ( ) )
{
if ( on = = usbc - > text )
butt . onCommand = usbc ;
if ( off = = usbc - > text )
butt . offCommand = usbc ;
+ + usbc ;
}
2022-09-18 20:00:44 +00:00
usbButtons . append ( butt ) ;
}
settings - > endArray ( ) ;
}
2022-10-11 22:56:00 +00:00
settings - > endGroup ( ) ;
2023-01-12 19:20:52 +00:00
# endif
2021-12-30 00:48:39 +00:00
}
2021-02-16 16:16:46 +00:00
2021-12-30 00:48:39 +00:00
void wfmain : : serverAddUserLine ( const QString & user , const QString & pass , const int & type )
{
2021-12-30 18:22:34 +00:00
ui - > serverUsersTable - > blockSignals ( true ) ;
2021-12-30 00:48:39 +00:00
ui - > serverUsersTable - > insertRow ( ui - > serverUsersTable - > rowCount ( ) ) ;
2022-09-18 13:59:03 +00:00
ui - > serverUsersTable - > setItem ( ui - > serverUsersTable - > rowCount ( ) - 1 , 0 , new QTableWidgetItem ( ) ) ;
2021-12-30 00:48:39 +00:00
ui - > serverUsersTable - > setItem ( ui - > serverUsersTable - > rowCount ( ) - 1 , 1 , new QTableWidgetItem ( ) ) ;
ui - > serverUsersTable - > setItem ( ui - > serverUsersTable - > rowCount ( ) - 1 , 2 , new QTableWidgetItem ( ) ) ;
2022-09-18 13:59:03 +00:00
ui - > serverUsersTable - > setItem ( ui - > serverUsersTable - > rowCount ( ) - 1 , 3 , new QTableWidgetItem ( ) ) ;
QLineEdit * username = new QLineEdit ( ) ;
username - > setProperty ( " row " , ( int ) ui - > serverUsersTable - > rowCount ( ) - 1 ) ;
username - > setProperty ( " col " , ( int ) 0 ) ;
username - > setText ( user ) ;
connect ( username , SIGNAL ( editingFinished ( ) ) , this , SLOT ( onServerUserFieldChanged ( ) ) ) ;
ui - > serverUsersTable - > setCellWidget ( ui - > serverUsersTable - > rowCount ( ) - 1 , 0 , username ) ;
2021-02-16 16:16:46 +00:00
2021-12-30 00:48:39 +00:00
QLineEdit * password = new QLineEdit ( ) ;
password - > setProperty ( " row " , ( int ) ui - > serverUsersTable - > rowCount ( ) - 1 ) ;
2022-09-18 13:59:03 +00:00
password - > setProperty ( " col " , ( int ) 1 ) ;
2021-12-30 00:48:39 +00:00
password - > setEchoMode ( QLineEdit : : PasswordEchoOnEdit ) ;
password - > setText ( pass ) ;
2022-09-18 13:59:03 +00:00
connect ( password , SIGNAL ( editingFinished ( ) ) , this , SLOT ( onServerUserFieldChanged ( ) ) ) ;
2021-12-30 00:48:39 +00:00
ui - > serverUsersTable - > setCellWidget ( ui - > serverUsersTable - > rowCount ( ) - 1 , 1 , password ) ;
QComboBox * comboBox = new QComboBox ( ) ;
comboBox - > insertItems ( 0 , { " Full User " , " Full with no TX " , " Monitor only " } ) ;
2022-09-18 13:59:03 +00:00
comboBox - > setProperty ( " row " , ( int ) ui - > serverUsersTable - > rowCount ( ) - 1 ) ;
comboBox - > setProperty ( " col " , ( int ) 2 ) ;
2021-12-30 00:48:39 +00:00
comboBox - > setCurrentIndex ( type ) ;
2022-09-18 13:59:03 +00:00
connect ( comboBox , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( onServerUserFieldChanged ( ) ) ) ;
2021-12-30 00:48:39 +00:00
ui - > serverUsersTable - > setCellWidget ( ui - > serverUsersTable - > rowCount ( ) - 1 , 2 , comboBox ) ;
2022-09-18 13:59:03 +00:00
QPushButton * button = new QPushButton ( ) ;
button - > setText ( " Delete " ) ;
button - > setProperty ( " row " , ( int ) ui - > serverUsersTable - > rowCount ( ) - 1 ) ;
button - > setProperty ( " col " , ( int ) 3 ) ;
connect ( button , SIGNAL ( clicked ( ) ) , this , SLOT ( onServerUserFieldChanged ( ) ) ) ;
ui - > serverUsersTable - > setCellWidget ( ui - > serverUsersTable - > rowCount ( ) - 1 , 3 , button ) ;
2021-12-30 18:22:34 +00:00
ui - > serverUsersTable - > blockSignals ( false ) ;
2018-11-24 08:10:05 +00:00
}
2022-09-18 13:59:03 +00:00
void wfmain : : onServerUserFieldChanged ( )
2021-12-30 00:48:39 +00:00
{
2022-09-18 13:59:03 +00:00
2021-12-30 00:48:39 +00:00
int row = sender ( ) - > property ( " row " ) . toInt ( ) ;
2022-09-18 13:59:03 +00:00
int col = sender ( ) - > property ( " col " ) . toInt ( ) ;
2022-09-18 14:02:31 +00:00
qDebug ( ) < < " Server User field col " < < col < < " row " < < row < < " changed " ;
2022-09-18 13:59:03 +00:00
// This is a new user line so add to serverUsersTable
if ( serverConfig . users . length ( ) < = row )
2021-12-30 18:22:34 +00:00
{
2022-09-18 13:59:03 +00:00
qInfo ( ) < < " Something bad has happened, serverConfig.users is shorter than table! " ;
}
else
2021-12-30 18:22:34 +00:00
{
2022-09-18 13:59:03 +00:00
if ( col = = 0 )
2021-12-30 18:22:34 +00:00
{
2022-09-18 13:59:03 +00:00
QLineEdit * username = ( QLineEdit * ) ui - > serverUsersTable - > cellWidget ( row , 0 ) ;
if ( username - > text ( ) ! = serverConfig . users [ row ] . username ) {
serverConfig . users [ row ] . username = username - > text ( ) ;
}
2021-12-30 18:22:34 +00:00
}
2022-09-18 13:59:03 +00:00
else if ( col = = 1 )
{
QLineEdit * password = ( QLineEdit * ) ui - > serverUsersTable - > cellWidget ( row , 1 ) ;
QByteArray pass ;
passcode ( password - > text ( ) , pass ) ;
if ( QString ( pass ) ! = serverConfig . users [ row ] . password ) {
serverConfig . users [ row ] . password = pass ;
}
2021-12-30 18:22:34 +00:00
}
2022-09-18 13:59:03 +00:00
else if ( col = = 2 )
{
QComboBox * comboBox = ( QComboBox * ) ui - > serverUsersTable - > cellWidget ( row , 2 ) ;
serverConfig . users [ row ] . userType = comboBox - > currentIndex ( ) ;
}
else if ( col = = 3 )
{
serverConfig . users . removeAt ( row ) ;
ui - > serverUsersTable - > setRowCount ( 0 ) ;
foreach ( SERVERUSER user , serverConfig . users )
{
serverAddUserLine ( user . username , user . password , user . userType ) ;
}
2021-12-30 18:22:34 +00:00
}
2022-09-18 13:59:03 +00:00
if ( row = = ui - > serverUsersTable - > rowCount ( ) - 1 ) {
ui - > serverAddUserBtn - > setEnabled ( true ) ;
}
2021-12-30 18:22:34 +00:00
}
2021-12-30 00:48:39 +00:00
}
2022-09-18 13:59:03 +00:00
void wfmain : : on_serverAddUserBtn_clicked ( )
2021-12-30 00:48:39 +00:00
{
2022-09-18 13:59:03 +00:00
serverAddUserLine ( " " , " " , 0 ) ;
SERVERUSER user ;
user . username = " " ;
user . password = " " ;
user . userType = 0 ;
serverConfig . users . append ( user ) ;
ui - > serverAddUserBtn - > setEnabled ( false ) ;
2021-12-30 00:48:39 +00:00
}
2020-04-04 23:51:46 +00:00
2021-12-30 18:22:34 +00:00
void wfmain : : on_serverEnableCheckbox_clicked ( bool checked )
{
ui - > serverSetupGroup - > setEnabled ( checked ) ;
serverConfig . enabled = checked ;
setServerToPrefs ( ) ;
}
void wfmain : : on_serverControlPortText_textChanged ( QString text )
{
2022-01-05 14:53:12 +00:00
serverConfig . controlPort = text . toInt ( ) ;
2021-12-30 18:22:34 +00:00
}
void wfmain : : on_serverCivPortText_textChanged ( QString text )
{
2022-01-05 14:53:12 +00:00
serverConfig . civPort = text . toInt ( ) ;
2021-12-30 18:22:34 +00:00
}
void wfmain : : on_serverAudioPortText_textChanged ( QString text )
{
2022-01-05 14:53:12 +00:00
serverConfig . audioPort = text . toInt ( ) ;
2021-12-30 18:22:34 +00:00
}
void wfmain : : on_serverRXAudioInputCombo_currentIndexChanged ( int value )
{
2022-05-12 00:46:20 +00:00
2023-01-15 11:14:28 +00:00
if ( ! serverConfig . rigs . isEmpty ( ) & & value > = 0 )
2022-04-20 12:35:23 +00:00
{
2022-05-12 00:46:20 +00:00
if ( prefs . audioSystem = = qtAudio ) {
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > rxAudioSetup . port = audioDev - > getInputDeviceInfo ( value ) ;
2022-05-12 00:46:20 +00:00
}
else {
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > rxAudioSetup . portInt = audioDev - > getInputDeviceInt ( value ) ;
2022-05-12 00:46:20 +00:00
}
2022-04-20 12:35:23 +00:00
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > rxAudioSetup . name = audioDev - > getInputName ( value ) ;
2022-04-20 12:35:23 +00:00
}
2022-05-12 00:46:20 +00:00
2021-12-30 18:22:34 +00:00
}
2021-12-30 18:27:22 +00:00
void wfmain : : on_serverTXAudioOutputCombo_currentIndexChanged ( int value )
{
2022-04-20 12:35:23 +00:00
2023-01-15 11:14:28 +00:00
if ( ! serverConfig . rigs . isEmpty ( ) & & value > = 0 )
2022-05-12 00:46:20 +00:00
{
if ( prefs . audioSystem = = qtAudio ) {
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > txAudioSetup . port = audioDev - > getOutputDeviceInfo ( value ) ;
2022-05-12 00:46:20 +00:00
}
else {
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > txAudioSetup . portInt = audioDev - > getOutputDeviceInt ( value ) ;
2022-05-12 00:46:20 +00:00
}
2022-12-28 16:57:05 +00:00
serverConfig . rigs . first ( ) - > txAudioSetup . name = audioDev - > getOutputName ( value ) ;
2022-04-20 12:35:23 +00:00
}
2022-05-12 00:46:20 +00:00
2018-11-24 08:10:05 +00:00
}
2020-04-04 23:51:46 +00:00
2018-11-24 08:10:05 +00:00
void wfmain : : saveSettings ( )
{
2021-05-20 18:24:40 +00:00
qInfo ( logSystem ( ) ) < < " Saving settings to " < < settings - > fileName ( ) ;
2018-11-24 08:10:05 +00:00
// Basic things to load:
2023-01-18 05:09:54 +00:00
2023-01-18 05:13:16 +00:00
QString versionstr = QString ( WFVIEW_VERSION ) ;
QString majorVersion = " -1 " ;
QString minorVersion = " -1 " ;
if ( versionstr . contains ( " . " ) & & ( versionstr . split ( " . " ) . length ( ) = = 2 ) )
{
majorVersion = versionstr . split ( " . " ) . at ( 0 ) ;
minorVersion = versionstr . split ( " . " ) . at ( 1 ) ;
}
2023-01-18 05:09:54 +00:00
2022-11-27 04:53:12 +00:00
settings - > beginGroup ( " Program " ) ;
2023-01-18 05:09:54 +00:00
settings - > setValue ( " version " , versionstr ) ;
2023-01-18 05:13:16 +00:00
settings - > setValue ( " majorVersion " , int ( majorVersion . toInt ( ) ) ) ;
settings - > setValue ( " minorVersion " , int ( minorVersion . toInt ( ) ) ) ;
2023-01-18 05:09:54 +00:00
settings - > setValue ( " gitShort " , QString ( GITSHORT ) ) ;
2022-11-27 04:53:12 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
// UI: (full screen, dark theme, draw peaks, colors, etc)
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Interface " ) ;
settings - > setValue ( " UseFullScreen " , prefs . useFullScreen ) ;
settings - > setValue ( " UseSystemTheme " , prefs . useSystemTheme ) ;
settings - > setValue ( " DrawPeaks " , prefs . drawPeaks ) ;
2022-08-18 01:41:35 +00:00
settings - > setValue ( " underlayMode " , prefs . underlayMode ) ;
2022-08-18 01:46:00 +00:00
settings - > setValue ( " underlayBufferSize " , prefs . underlayBufferSize ) ;
2021-07-15 05:44:05 +00:00
settings - > setValue ( " WFAntiAlias " , prefs . wfAntiAlias ) ;
settings - > setValue ( " WFInterpolate " , prefs . wfInterpolate ) ;
2021-07-06 00:04:55 +00:00
settings - > setValue ( " WFTheme " , prefs . wftheme ) ;
2022-08-18 01:41:35 +00:00
settings - > setValue ( " plotFloor " , prefs . plotFloor ) ;
settings - > setValue ( " plotCeiling " , prefs . plotCeiling ) ;
2021-05-20 18:24:40 +00:00
settings - > setValue ( " StylesheetPath " , prefs . stylesheetPath ) ;
settings - > setValue ( " splitter " , ui - > splitter - > saveState ( ) ) ;
settings - > setValue ( " windowGeometry " , saveGeometry ( ) ) ;
settings - > setValue ( " windowState " , saveState ( ) ) ;
2021-07-05 23:45:19 +00:00
settings - > setValue ( " WFLength " , prefs . wflength ) ;
2021-07-11 16:30:02 +00:00
settings - > setValue ( " ConfirmExit " , prefs . confirmExit ) ;
2021-07-20 13:45:44 +00:00
settings - > setValue ( " ConfirmPowerOff " , prefs . confirmPowerOff ) ;
2021-08-27 17:06:09 +00:00
settings - > setValue ( " Meter2Type " , ( int ) prefs . meter2Type ) ;
2022-10-11 12:17:23 +00:00
settings - > setValue ( " ClickDragTuning " , prefs . clickDragTuningEnable ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
// Radio and Comms: C-IV addr, port to use
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Radio " ) ;
settings - > setValue ( " RigCIVuInt " , prefs . radioCIVAddr ) ;
2021-11-07 06:59:03 +00:00
settings - > setValue ( " CIVisRadioModel " , prefs . CIVisRadioModel ) ;
2021-12-30 09:52:23 +00:00
settings - > setValue ( " ForceRTSasPTT " , prefs . forceRTSasPTT ) ;
2022-11-27 05:43:47 +00:00
settings - > setValue ( " polling_ms " , prefs . polling_ms ) ; // 0 = automatic
2021-05-20 18:24:40 +00:00
settings - > setValue ( " SerialPortRadio " , prefs . serialPortRadio ) ;
settings - > setValue ( " SerialPortBaud " , prefs . serialPortBaud ) ;
settings - > setValue ( " VirtualSerialPort " , prefs . virtualSerialPort ) ;
2021-07-05 23:45:19 +00:00
settings - > setValue ( " localAFgain " , prefs . localAFgain ) ;
2022-05-12 00:46:20 +00:00
settings - > setValue ( " AudioSystem " , prefs . audioSystem ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
// Misc. user settings (enable PTT, draw peaks, etc)
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Controls " ) ;
settings - > setValue ( " EnablePTT " , prefs . enablePTT ) ;
settings - > setValue ( " NiceTS " , prefs . niceTS ) ;
2023-01-19 07:17:28 +00:00
settings - > setValue ( " automaticSidebandSwitching " , prefs . automaticSidebandSwitching ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
settings - > beginGroup ( " LAN " ) ;
settings - > setValue ( " EnableLAN " , prefs . enableLAN ) ;
settings - > setValue ( " EnableRigCtlD " , prefs . enableRigCtlD ) ;
2022-04-08 13:40:05 +00:00
settings - > setValue ( " TcpServerPort " , prefs . tcpPort ) ;
2021-05-20 18:24:40 +00:00
settings - > setValue ( " RigCtlPort " , prefs . rigCtlPort ) ;
2022-04-18 19:29:50 +00:00
settings - > setValue ( " tcpServerPort " , prefs . tcpPort ) ;
2021-05-20 18:24:40 +00:00
settings - > setValue ( " IPAddress " , udpPrefs . ipAddress ) ;
settings - > setValue ( " ControlLANPort " , udpPrefs . controlLANPort ) ;
settings - > setValue ( " SerialLANPort " , udpPrefs . serialLANPort ) ;
settings - > setValue ( " AudioLANPort " , udpPrefs . audioLANPort ) ;
settings - > setValue ( " Username " , udpPrefs . username ) ;
settings - > setValue ( " Password " , udpPrefs . password ) ;
2021-06-04 07:24:26 +00:00
settings - > setValue ( " AudioRXLatency " , rxSetup . latency ) ;
settings - > setValue ( " AudioTXLatency " , txSetup . latency ) ;
2022-05-08 10:46:33 +00:00
settings - > setValue ( " AudioRXSampleRate " , rxSetup . sampleRate ) ;
2021-06-04 07:24:26 +00:00
settings - > setValue ( " AudioRXCodec " , rxSetup . codec ) ;
2022-05-08 10:46:33 +00:00
settings - > setValue ( " AudioTXSampleRate " , txSetup . sampleRate ) ;
2021-06-04 07:24:26 +00:00
settings - > setValue ( " AudioTXCodec " , txSetup . codec ) ;
2021-06-04 12:47:32 +00:00
settings - > setValue ( " AudioOutput " , rxSetup . name ) ;
settings - > setValue ( " AudioInput " , txSetup . name ) ;
2021-06-04 07:24:26 +00:00
settings - > setValue ( " ResampleQuality " , rxSetup . resampleQuality ) ;
2021-05-20 18:24:40 +00:00
settings - > setValue ( " ClientName " , udpPrefs . clientName ) ;
2022-04-18 19:29:50 +00:00
settings - > setValue ( " WaterfallFormat " , prefs . waterfallFormat ) ;
2023-01-27 01:41:35 +00:00
settings - > setValue ( " HalfDuplex " , udpPrefs . halfDuplex ) ;
2022-04-18 19:29:50 +00:00
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-02-03 19:36:35 +00:00
2018-11-24 08:10:05 +00:00
// Memory channels
2021-05-20 18:24:40 +00:00
settings - > beginGroup ( " Memory " ) ;
settings - > beginWriteArray ( " Channel " , ( int ) mem . getNumPresets ( ) ) ;
2018-11-24 08:10:05 +00:00
preset_kind temp ;
2022-05-17 07:53:24 +00:00
for ( int i = 0 ; i < ( int ) mem . getNumPresets ( ) ; i + + )
2018-11-24 08:10:05 +00:00
{
temp = mem . getPreset ( ( int ) i ) ;
2021-05-20 18:24:40 +00:00
settings - > setArrayIndex ( i ) ;
settings - > setValue ( " chan " , i ) ;
settings - > setValue ( " freq " , temp . frequency ) ;
settings - > setValue ( " mode " , temp . mode ) ;
settings - > setValue ( " isSet " , temp . isSet ) ;
2018-11-24 08:10:05 +00:00
}
2021-05-20 18:24:40 +00:00
settings - > endArray ( ) ;
settings - > endGroup ( ) ;
2018-11-24 08:10:05 +00:00
2022-08-22 23:49:35 +00:00
// Color presets:
settings - > beginGroup ( " ColorPresets " ) ;
settings - > setValue ( " currentColorPresetNumber " , prefs . currentColorPresetNumber ) ;
settings - > beginWriteArray ( " ColorPreset " , numColorPresetsTotal ) ;
colorPrefsType * p ;
for ( int pn = 0 ; pn < numColorPresetsTotal ; pn + + )
{
p = & ( colorPreset [ pn ] ) ;
settings - > setArrayIndex ( pn ) ;
settings - > setValue ( " presetNum " , p - > presetNum ) ;
settings - > setValue ( " presetName " , * ( p - > presetName ) ) ;
settings - > setValue ( " gridColor " , p - > gridColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " axisColor " , p - > axisColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " textColor " , p - > textColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " spectrumLine " , p - > spectrumLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " spectrumFill " , p - > spectrumFill . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " underlayLine " , p - > underlayLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " underlayFill " , p - > underlayFill . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " plotBackground " , p - > plotBackground . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " tuningLine " , p - > tuningLine . name ( QColor : : HexArgb ) ) ;
2022-09-26 10:59:16 +00:00
settings - > setValue ( " passband " , p - > passband . name ( QColor : : HexArgb ) ) ;
2023-01-19 16:16:47 +00:00
settings - > setValue ( " pbt " , p - > pbt . name ( QColor : : HexArgb ) ) ;
2022-08-22 23:49:35 +00:00
settings - > setValue ( " wfBackground " , p - > wfBackground . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfGrid " , p - > wfGrid . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfAxis " , p - > wfAxis . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfText " , p - > wfText . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterLevel " , p - > meterLevel . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterAverage " , p - > meterAverage . name ( QColor : : HexArgb ) ) ;
2022-08-23 04:22:01 +00:00
settings - > setValue ( " meterPeakScale " , p - > meterPeakScale . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterPeakLevel " , p - > meterPeakLevel . name ( QColor : : HexArgb ) ) ;
2022-08-22 23:49:35 +00:00
settings - > setValue ( " meterLowerLine " , p - > meterLowerLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterLowText " , p - > meterLowText . name ( QColor : : HexArgb ) ) ;
2022-10-09 13:23:07 +00:00
settings - > setValue ( " clusterSpots " , p - > clusterSpots . name ( QColor : : HexArgb ) ) ;
2022-08-22 23:49:35 +00:00
}
settings - > endArray ( ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
settings - > beginGroup ( " Server " ) ;
settings - > setValue ( " ServerEnabled " , serverConfig . enabled ) ;
settings - > setValue ( " ServerControlPort " , serverConfig . controlPort ) ;
settings - > setValue ( " ServerCivPort " , serverConfig . civPort ) ;
settings - > setValue ( " ServerAudioPort " , serverConfig . audioPort ) ;
2022-04-20 12:35:23 +00:00
settings - > setValue ( " ServerAudioOutput " , serverConfig . rigs . first ( ) - > txAudioSetup . name ) ;
settings - > setValue ( " ServerAudioInput " , serverConfig . rigs . first ( ) - > rxAudioSetup . name ) ;
2021-12-30 00:48:39 +00:00
2022-01-23 15:06:31 +00:00
/* Remove old format users*/
int numUsers = settings - > value ( " ServerNumUsers " , 0 ) . toInt ( ) ;
if ( numUsers > 0 ) {
settings - > remove ( " ServerNumUsers " ) ;
for ( int f = 0 ; f < numUsers ; f + + )
{
settings - > remove ( " ServerUsername_ " + QString : : number ( f ) ) ;
settings - > remove ( " ServerPassword_ " + QString : : number ( f ) ) ;
settings - > remove ( " ServerUserType_ " + QString : : number ( f ) ) ;
}
}
settings - > beginWriteArray ( " Users " ) ;
2021-12-30 00:48:39 +00:00
2021-02-16 16:16:46 +00:00
for ( int f = 0 ; f < serverConfig . users . count ( ) ; f + + )
{
2022-01-23 15:06:31 +00:00
settings - > setArrayIndex ( f ) ;
settings - > setValue ( " Username " , serverConfig . users [ f ] . username ) ;
settings - > setValue ( " Password " , serverConfig . users [ f ] . password ) ;
settings - > setValue ( " UserType " , serverConfig . users [ f ] . userType ) ;
2021-02-16 16:16:46 +00:00
}
2022-01-23 15:06:31 +00:00
settings - > endArray ( ) ;
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-02-16 16:16:46 +00:00
2022-09-30 16:05:42 +00:00
settings - > beginGroup ( " Cluster " ) ;
settings - > setValue ( " UdpEnabled " , prefs . clusterUdpEnable ) ;
settings - > setValue ( " TcpEnabled " , prefs . clusterTcpEnable ) ;
settings - > setValue ( " UdpPort " , prefs . clusterUdpPort ) ;
2021-02-16 16:16:46 +00:00
2022-09-30 16:05:42 +00:00
settings - > beginWriteArray ( " Servers " ) ;
for ( int f = 0 ; f < clusters . count ( ) ; f + + )
{
settings - > setArrayIndex ( f ) ;
settings - > setValue ( " ServerName " , clusters [ f ] . server ) ;
settings - > setValue ( " UserName " , clusters [ f ] . userName ) ;
settings - > setValue ( " Port " , clusters [ f ] . port ) ;
settings - > setValue ( " Password " , clusters [ f ] . password ) ;
settings - > setValue ( " Timeout " , clusters [ f ] . timeout ) ;
2022-09-30 16:26:21 +00:00
settings - > setValue ( " Default " , clusters [ f ] . isdefault ) ;
2022-09-30 16:05:42 +00:00
}
settings - > endArray ( ) ;
2023-01-21 19:18:26 +00:00
settings - > endGroup ( ) ;
2021-12-30 00:48:39 +00:00
2023-01-21 19:18:26 +00:00
settings - > beginGroup ( " Keyer " ) ;
QStringList macroList = cw - > getMacroText ( ) ;
if ( macroList . length ( ) = = 10 )
{
settings - > beginWriteArray ( " macros " ) ;
for ( int m = 0 ; m < 10 ; m + + )
{
settings - > setArrayIndex ( m ) ;
settings - > setValue ( " macroText " , macroList . at ( m ) ) ;
}
settings - > endArray ( ) ;
} else {
qDebug ( logSystem ( ) ) < < " Error, CW macro list is wrong length: " < < macroList . length ( ) ;
}
2021-05-20 18:24:40 +00:00
settings - > endGroup ( ) ;
2021-02-16 16:16:46 +00:00
2023-01-12 19:20:52 +00:00
# if defined(USB_CONTROLLER)
2022-05-17 07:53:24 +00:00
settings - > beginGroup ( " USB " ) ;
2022-09-18 20:00:44 +00:00
// Store USB Controller
2023-01-30 12:01:29 +00:00
settings - > setValue ( " EnableUSBControllers " , prefs . enableUSBControllers ) ;
2023-02-07 09:32:33 +00:00
settings - > setValue ( " USBSensitivity " , prefs . usbSensitivity ) ;
2022-09-18 20:00:44 +00:00
settings - > beginWriteArray ( " Buttons " ) ;
for ( int nb = 0 ; nb < usbButtons . count ( ) ; nb + + )
{
settings - > setArrayIndex ( nb ) ;
settings - > setValue ( " Dev " , usbButtons [ nb ] . dev ) ;
settings - > setValue ( " Num " , usbButtons [ nb ] . num ) ;
2022-10-23 17:54:18 +00:00
settings - > setValue ( " Name " , usbButtons [ nb ] . name ) ;
2022-09-18 20:00:44 +00:00
settings - > setValue ( " Left " , usbButtons [ nb ] . pos . left ( ) ) ;
settings - > setValue ( " Top " , usbButtons [ nb ] . pos . top ( ) ) ;
settings - > setValue ( " Width " , usbButtons [ nb ] . pos . width ( ) ) ;
settings - > setValue ( " Height " , usbButtons [ nb ] . pos . height ( ) ) ;
settings - > setValue ( " Colour " , usbButtons [ nb ] . textColour . name ( ) ) ;
if ( usbButtons [ nb ] . onCommand ! = Q_NULLPTR )
2022-09-19 00:14:11 +00:00
settings - > setValue ( " OnCommand " , usbButtons [ nb ] . onCommand - > text ) ;
2022-09-18 20:00:44 +00:00
if ( usbButtons [ nb ] . offCommand ! = Q_NULLPTR )
2022-09-19 00:14:11 +00:00
settings - > setValue ( " OffCommand " , usbButtons [ nb ] . offCommand - > text ) ;
2022-05-17 07:53:24 +00:00
}
settings - > endArray ( ) ;
2023-01-30 12:01:29 +00:00
settings - > beginWriteArray ( " Commands " ) ;
for ( int nc = 0 ; nc < usbCommands . count ( ) ; nc + + )
{
settings - > setArrayIndex ( nc ) ;
settings - > setValue ( " Num " , usbCommands [ nc ] . index ) ;
settings - > setValue ( " Text " , usbCommands [ nc ] . text ) ;
settings - > setValue ( " Command " , usbCommands [ nc ] . command ) ;
settings - > setValue ( " Band " , usbCommands [ nc ] . band ) ;
settings - > setValue ( " Mode " , usbCommands [ nc ] . mode ) ;
settings - > setValue ( " Suffix " , usbCommands [ nc ] . suffix ) ;
}
settings - > endArray ( ) ;
2022-05-17 07:53:24 +00:00
settings - > endGroup ( ) ;
2023-01-12 19:20:52 +00:00
# endif
2018-11-25 06:21:36 +00:00
2021-05-20 18:24:40 +00:00
settings - > sync ( ) ; // Automatic, not needed (supposedly)
2018-11-24 08:10:05 +00:00
}
2021-05-31 06:26:36 +00:00
2021-06-15 18:27:45 +00:00
void wfmain : : showHideSpectrum ( bool show )
{
if ( show )
{
wf - > show ( ) ;
plot - > show ( ) ;
} else {
wf - > hide ( ) ;
plot - > hide ( ) ;
}
// Controls:
ui - > spectrumGroupBox - > setVisible ( show ) ;
ui - > spectrumModeCombo - > setVisible ( show ) ;
ui - > scopeBWCombo - > setVisible ( show ) ;
ui - > scopeEdgeCombo - > setVisible ( show ) ;
ui - > scopeEnableWFBtn - > setVisible ( show ) ;
ui - > scopeRefLevelSlider - > setEnabled ( show ) ;
ui - > wfLengthSlider - > setEnabled ( show ) ;
ui - > wfthemeCombo - > setVisible ( show ) ;
ui - > toFixedBtn - > setVisible ( show ) ;
2022-09-18 20:13:33 +00:00
ui - > customEdgeBtn - > setVisible ( show ) ;
2021-06-15 18:27:45 +00:00
ui - > clearPeakBtn - > setVisible ( show ) ;
// And the labels:
ui - > specEdgeLabel - > setVisible ( show ) ;
ui - > specModeLabel - > setVisible ( show ) ;
ui - > specSpanLabel - > setVisible ( show ) ;
ui - > specThemeLabel - > setVisible ( show ) ;
2021-06-15 20:38:16 +00:00
// And the layout for space:
2021-06-15 18:27:45 +00:00
ui - > specControlsHorizLayout - > setEnabled ( show ) ;
2021-06-15 20:38:16 +00:00
ui - > splitter - > setVisible ( show ) ;
ui - > plot - > setVisible ( show ) ;
ui - > waterfall - > setVisible ( show ) ;
ui - > spectrumGroupBox - > setEnabled ( show ) ;
2021-06-18 06:14:28 +00:00
// Window resize:
updateSizes ( ui - > tabWidget - > currentIndex ( ) ) ;
2021-06-15 18:27:45 +00:00
}
2021-01-25 00:16:38 +00:00
void wfmain : : prepareWf ( )
2021-05-31 06:26:36 +00:00
{
prepareWf ( 160 ) ;
}
void wfmain : : prepareWf ( unsigned int wfLength )
2021-01-25 00:16:38 +00:00
{
// All this code gets moved in from the constructor of wfmain.
if ( haveRigCaps )
{
2021-06-15 18:27:45 +00:00
showHideSpectrum ( rigCaps . hasSpectrum ) ;
if ( ! rigCaps . hasSpectrum )
{
return ;
}
2021-05-31 06:26:36 +00:00
// TODO: Lock the function that draws on the spectrum while we are updating.
spectrumDrawLock = true ;
spectWidth = rigCaps . spectLenMax ;
2021-06-08 16:58:30 +00:00
wfLengthMax = 1024 ;
2021-05-31 06:26:36 +00:00
this - > wfLength = wfLength ; // fixed for now, time-length of waterfall
2021-01-25 00:16:38 +00:00
// Initialize before use!
QByteArray empty ( ( int ) spectWidth , ' \x01 ' ) ;
spectrumPeaks = QByteArray ( ( int ) spectWidth , ' \x01 ' ) ;
2021-05-31 06:26:36 +00:00
2021-06-08 16:58:30 +00:00
if ( ( unsigned int ) wfimage . size ( ) < wfLengthMax )
2021-01-25 00:16:38 +00:00
{
2021-05-31 06:26:36 +00:00
unsigned int i = 0 ;
unsigned int oldSize = wfimage . size ( ) ;
2021-06-08 16:58:30 +00:00
for ( i = oldSize ; i < ( wfLengthMax ) ; i + + )
2021-05-31 06:26:36 +00:00
{
wfimage . append ( empty ) ;
}
} else {
2021-06-08 16:58:30 +00:00
// Keep wfimage, do not trim, no performance impact.
//wfimage.remove(wfLength, wfimage.size()-wfLength);
2021-01-25 00:16:38 +00:00
}
2021-06-08 16:58:30 +00:00
2021-05-31 06:26:36 +00:00
wfimage . squeeze ( ) ;
2021-05-31 09:18:37 +00:00
//colorMap->clearData();
2021-05-31 06:26:36 +00:00
colorMap - > data ( ) - > clear ( ) ;
2021-01-25 00:16:38 +00:00
colorMap - > data ( ) - > setValueRange ( QCPRange ( 0 , wfLength - 1 ) ) ;
colorMap - > data ( ) - > setKeyRange ( QCPRange ( 0 , spectWidth - 1 ) ) ;
2022-08-18 18:07:29 +00:00
colorMap - > setDataRange ( QCPRange ( prefs . plotFloor , prefs . plotCeiling ) ) ;
2021-05-31 06:42:45 +00:00
colorMap - > setGradient ( static_cast < QCPColorGradient : : GradientPreset > ( ui - > wfthemeCombo - > currentData ( ) . toInt ( ) ) ) ;
2021-05-31 06:26:36 +00:00
if ( colorMapData = = Q_NULLPTR )
{
colorMapData = new QCPColorMapData ( spectWidth , wfLength , QCPRange ( 0 , spectWidth - 1 ) , QCPRange ( 0 , wfLength - 1 ) ) ;
} else {
//delete colorMapData; // TODO: Figure out why it crashes if we delete first.
colorMapData = new QCPColorMapData ( spectWidth , wfLength , QCPRange ( 0 , spectWidth - 1 ) , QCPRange ( 0 , wfLength - 1 ) ) ;
}
2021-01-25 00:16:38 +00:00
colorMap - > setData ( colorMapData ) ;
2021-05-31 06:26:36 +00:00
2021-01-25 00:16:38 +00:00
wf - > yAxis - > setRangeReversed ( true ) ;
wf - > xAxis - > setVisible ( false ) ;
2021-05-31 06:26:36 +00:00
spectrumDrawLock = false ;
2021-01-25 00:16:38 +00:00
} else {
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Cannot prepare WF view without rigCaps. Waiting on this. " ;
2021-01-25 00:16:38 +00:00
return ;
}
}
2018-11-24 08:10:05 +00:00
2018-11-28 06:02:37 +00:00
// Key shortcuts (hotkeys)
void wfmain : : shortcutF11 ( )
{
if ( onFullscreen )
{
this - > showNormal ( ) ;
onFullscreen = false ;
} else {
this - > showFullScreen ( ) ;
onFullscreen = true ;
}
2021-02-05 05:03:16 +00:00
ui - > fullScreenChk - > setChecked ( onFullscreen ) ;
2018-11-28 06:02:37 +00:00
}
void wfmain : : shortcutF1 ( )
{
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
}
void wfmain : : shortcutF2 ( )
{
ui - > tabWidget - > setCurrentIndex ( 1 ) ;
}
void wfmain : : shortcutF3 ( )
{
ui - > tabWidget - > setCurrentIndex ( 2 ) ;
2018-11-30 06:20:27 +00:00
ui - > freqMhzLineEdit - > clear ( ) ;
ui - > freqMhzLineEdit - > setFocus ( ) ;
2018-11-28 06:02:37 +00:00
}
void wfmain : : shortcutF4 ( )
{
ui - > tabWidget - > setCurrentIndex ( 3 ) ;
}
2019-01-28 23:36:17 +00:00
// Mode switch keys:
2018-11-28 06:02:37 +00:00
void wfmain : : shortcutF5 ( )
{
2019-01-28 23:36:17 +00:00
// LSB
2021-02-17 06:32:05 +00:00
changeMode ( modeLSB , false ) ;
2019-01-28 23:36:17 +00:00
}
void wfmain : : shortcutF6 ( )
{
// USB
2021-02-17 06:32:05 +00:00
changeMode ( modeUSB , false ) ;
2019-01-28 23:36:17 +00:00
}
void wfmain : : shortcutF7 ( )
{
// AM
2021-02-17 06:32:05 +00:00
changeMode ( modeAM , false ) ;
2019-01-28 23:36:17 +00:00
}
void wfmain : : shortcutF8 ( )
{
// CW
2021-02-17 06:32:05 +00:00
changeMode ( modeCW , false ) ;
2019-01-28 23:36:17 +00:00
}
void wfmain : : shortcutF9 ( )
{
// USB-D
2021-02-17 06:32:05 +00:00
changeMode ( modeUSB , true ) ;
2019-01-28 23:36:17 +00:00
}
void wfmain : : shortcutF10 ( )
{
2021-02-17 06:32:05 +00:00
// FM
changeMode ( modeFM , false ) ;
2018-11-28 06:02:37 +00:00
}
2019-02-01 20:21:54 +00:00
void wfmain : : shortcutF12 ( )
{
2021-07-10 06:59:32 +00:00
// Speak current frequency and mode from the radio
2019-02-01 20:21:54 +00:00
showStatusBarText ( " Sending speech command to radio. " ) ;
emit sayAll ( ) ;
}
void wfmain : : shortcutControlT ( )
{
// Transmit
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Activated Control-T shortcut " ;
2020-03-12 03:58:31 +00:00
showStatusBarText ( QString ( " Transmitting. Press Control-R to receive. " ) ) ;
2019-02-01 20:21:54 +00:00
ui - > pttOnBtn - > click ( ) ;
}
void wfmain : : shortcutControlR ( )
{
// Receive
2021-07-10 06:59:32 +00:00
issueCmdUniquePriority ( cmdSetPTT , false ) ;
pttTimer - > stop ( ) ;
2019-02-01 20:21:54 +00:00
}
void wfmain : : shortcutControlI ( )
{
// Enable ATU
ui - > tuneEnableChk - > click ( ) ;
}
void wfmain : : shortcutControlU ( )
{
// Run ATU tuning cycle
ui - > tuneNowBtn - > click ( ) ;
}
2018-11-28 06:02:37 +00:00
void wfmain : : shortcutStar ( )
{
// Jump to frequency tab from Asterisk key on keypad
ui - > tabWidget - > setCurrentIndex ( 2 ) ;
2018-11-30 06:19:23 +00:00
ui - > freqMhzLineEdit - > clear ( ) ;
ui - > freqMhzLineEdit - > setFocus ( ) ;
2018-11-28 06:02:37 +00:00
}
2019-01-28 23:46:14 +00:00
void wfmain : : shortcutSlash ( )
{
// Cycle through available modes
2019-02-01 20:21:54 +00:00
ui - > modeSelectCombo - > setCurrentIndex ( ( ui - > modeSelectCombo - > currentIndex ( ) + 1 ) % ui - > modeSelectCombo - > count ( ) ) ;
2019-02-03 22:09:06 +00:00
on_modeSelectCombo_activated ( ui - > modeSelectCombo - > currentIndex ( ) ) ;
2019-01-28 23:46:14 +00:00
}
2018-11-28 06:02:37 +00:00
2021-02-22 07:58:23 +00:00
void wfmain : : setTuningSteps ( )
{
// TODO: interact with preferences, tuning step drop down box, and current operating mode
// Units are MHz:
2021-02-22 10:24:29 +00:00
tsPlusControl = 0.010f ;
tsPlus = 0.001f ;
tsPlusShift = 0.0001f ;
tsPage = 1.0f ;
tsPageShift = 0.5f ; // TODO, unbind this keystroke from the dial
2021-03-22 07:11:43 +00:00
tsWfScroll = 0.0001f ; // modified by tuning step selector
tsKnobMHz = 0.0001f ; // modified by tuning step selector
// Units are in Hz:
tsPlusControlHz = 10000 ;
tsPlusHz = 1000 ;
tsPlusShiftHz = 100 ;
tsPageHz = 1000000 ;
tsPageShiftHz = 500000 ; // TODO, unbind this keystroke from the dial
tsWfScrollHz = 100 ; // modified by tuning step selector
tsKnobHz = 100 ; // modified by tuning step selector
2021-03-04 08:02:53 +00:00
}
void wfmain : : on_tuningStepCombo_currentIndexChanged ( int index )
{
2021-03-22 07:11:43 +00:00
tsWfScroll = ( float ) ui - > tuningStepCombo - > itemData ( index ) . toUInt ( ) / 1000000.0 ;
tsKnobMHz = ( float ) ui - > tuningStepCombo - > itemData ( index ) . toUInt ( ) / 1000000.0 ;
tsWfScrollHz = ui - > tuningStepCombo - > itemData ( index ) . toUInt ( ) ;
tsKnobHz = ui - > tuningStepCombo - > itemData ( index ) . toUInt ( ) ;
}
quint64 wfmain : : roundFrequency ( quint64 frequency , unsigned int tsHz )
{
quint64 rounded = 0 ;
if ( ui - > tuningFloorZerosChk - > isChecked ( ) )
{
rounded = ( ( frequency % tsHz ) > tsHz / 2 ) ? frequency + tsHz - frequency % tsHz : frequency - frequency % tsHz ;
return rounded ;
} else {
return frequency ;
}
2021-02-22 07:58:23 +00:00
}
2021-03-22 07:11:43 +00:00
quint64 wfmain : : roundFrequencyWithStep ( quint64 frequency , int steps , unsigned int tsHz )
2021-02-22 07:58:23 +00:00
{
2021-03-22 07:11:43 +00:00
quint64 rounded = 0 ;
if ( steps > 0 )
{
frequency = frequency + ( quint64 ) ( steps * tsHz ) ;
} else {
2021-06-19 19:39:11 +00:00
frequency = frequency - std : : min ( ( quint64 ) ( abs ( steps ) * tsHz ) , frequency ) ;
2021-03-22 07:11:43 +00:00
}
if ( ui - > tuningFloorZerosChk - > isChecked ( ) )
{
rounded = ( ( frequency % tsHz ) > tsHz / 2 ) ? frequency + tsHz - frequency % tsHz : frequency - frequency % tsHz ;
return rounded ;
} else {
return frequency ;
}
2021-02-22 07:58:23 +00:00
}
2019-02-04 05:51:30 +00:00
void wfmain : : shortcutMinus ( )
{
2021-06-04 23:23:16 +00:00
if ( freqLock ) return ;
2021-02-22 07:58:23 +00:00
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , - 1 , tsPlusHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2022-04-22 10:11:21 +00:00
//issueCmd(cmdSetFreq, f);
issueCmdUniquePriority ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-04 05:51:30 +00:00
}
void wfmain : : shortcutPlus ( )
{
2021-06-04 23:23:16 +00:00
if ( freqLock ) return ;
2021-02-22 07:58:23 +00:00
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , 1 , tsPlusHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2022-04-22 10:11:21 +00:00
//issueCmd(cmdSetFreq, f);
issueCmdUniquePriority ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-04 05:51:30 +00:00
}
2021-06-04 23:23:16 +00:00
void wfmain : : shortcutStepMinus ( )
{
if ( freqLock ) return ;
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , - 1 , ui - > tuningStepCombo - > currentData ( ) . toInt ( ) ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
setUIFreq ( ) ;
2022-04-22 10:11:21 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-06-04 23:23:16 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
}
void wfmain : : shortcutStepPlus ( )
{
if ( freqLock ) return ;
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , 1 , ui - > tuningStepCombo - > currentData ( ) . toInt ( ) ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
setUIFreq ( ) ;
2022-04-22 10:11:21 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-06-04 23:23:16 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
}
2019-02-04 18:32:16 +00:00
void wfmain : : shortcutShiftMinus ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , - 1 , tsPlusShiftHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-04 18:32:16 +00:00
}
void wfmain : : shortcutShiftPlus ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , 1 , tsPlusShiftHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-04 18:32:16 +00:00
}
2019-02-06 00:11:25 +00:00
void wfmain : : shortcutControlMinus ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , - 1 , tsPlusControlHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-06 00:11:25 +00:00
}
2019-02-04 18:32:16 +00:00
2019-02-06 00:11:25 +00:00
void wfmain : : shortcutControlPlus ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = roundFrequencyWithStep ( freq . Hz , 1 , tsPlusControlHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2019-02-06 00:11:25 +00:00
}
2019-02-04 18:32:16 +00:00
2020-03-17 22:15:01 +00:00
void wfmain : : shortcutPageUp ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = freq . Hz + tsPageHz ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2020-03-17 22:15:01 +00:00
}
void wfmain : : shortcutPageDown ( )
{
2021-02-22 07:58:23 +00:00
if ( freqLock ) return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = freq . Hz - tsPageHz ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2023-01-23 07:41:31 +00:00
freq . Hz = f . Hz ;
freq . MHzDouble = f . MHzDouble ;
2021-03-22 07:11:43 +00:00
setUIFreq ( ) ;
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2023-01-23 07:41:31 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2020-03-17 22:15:01 +00:00
}
2019-02-07 18:15:10 +00:00
void wfmain : : shortcutF ( )
{
showStatusBarText ( " Sending speech command (frequency) to radio. " ) ;
emit sayFrequency ( ) ;
}
void wfmain : : shortcutM ( )
{
showStatusBarText ( " Sending speech command (mode) to radio. " ) ;
emit sayMode ( ) ;
}
2021-03-22 07:11:43 +00:00
void wfmain : : setUIFreq ( double frequency )
{
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( frequency , 0 , ' f ' ) ) ;
}
void wfmain : : setUIFreq ( )
{
// Call this function, without arguments, if you know that the
// freqMhz variable is already set correctly.
setUIFreq ( freq . MHzDouble ) ;
}
2019-02-04 05:51:30 +00:00
2021-01-30 08:44:36 +00:00
void wfmain : : getInitialRigState ( )
2018-06-23 07:31:41 +00:00
{
2018-11-24 08:10:05 +00:00
// Initial list of queries to the radio.
// These are made when the program starts up
// and are used to adjust the UI to match the radio settings
2021-02-13 06:42:34 +00:00
// the polling interval is set at 200ms. Faster is possible but slower
2022-03-23 15:45:51 +00:00
// computers will glitch occasionally.
2018-06-23 07:31:41 +00:00
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetFreq ) ;
issueDelayedCommand ( cmdGetMode ) ;
2018-06-23 07:31:41 +00:00
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdNone ) ;
2018-11-16 22:08:21 +00:00
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetFreq ) ;
issueDelayedCommand ( cmdGetMode ) ;
2018-06-23 07:31:41 +00:00
2021-02-19 05:47:19 +00:00
// From left to right in the UI:
2021-12-01 10:13:21 +00:00
if ( rigCaps . hasTransmit )
{
issueDelayedCommand ( cmdGetDataMode ) ;
issueDelayedCommand ( cmdGetModInput ) ;
issueDelayedCommand ( cmdGetModDataInput ) ;
}
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetRxGain ) ;
issueDelayedCommand ( cmdGetAfGain ) ;
issueDelayedCommand ( cmdGetSql ) ;
2021-12-01 10:13:21 +00:00
if ( rigCaps . hasTransmit )
{
issueDelayedCommand ( cmdGetTxPower ) ;
2021-12-01 10:21:40 +00:00
issueDelayedCommand ( cmdGetCurrentModLevel ) ; // level for currently selected mod sources
2021-12-01 10:13:21 +00:00
}
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetSpectrumRefLevel ) ;
issueDelayedCommand ( cmdGetDuplexMode ) ;
2021-02-16 04:32:14 +00:00
2021-05-15 22:34:22 +00:00
if ( rigCaps . hasSpectrum )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdDispEnable ) ;
issueDelayedCommand ( cmdSpecOn ) ;
2021-05-15 22:34:22 +00:00
}
2021-12-01 10:13:21 +00:00
if ( rigCaps . hasTransmit )
{
issueDelayedCommand ( cmdGetModInput ) ;
issueDelayedCommand ( cmdGetModDataInput ) ;
}
2021-02-19 08:14:40 +00:00
2021-04-07 05:06:08 +00:00
if ( rigCaps . hasCTCSS )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetTone ) ;
issueDelayedCommand ( cmdGetTSQL ) ;
2021-04-07 05:06:08 +00:00
}
if ( rigCaps . hasDTCS )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetDTCS ) ;
2021-04-07 05:06:08 +00:00
}
2023-02-01 06:08:27 +00:00
if ( rigCaps . hasCTCSS | | rigCaps . hasDTCS )
{
issueDelayedCommand ( cmdGetRptAccessMode ) ;
}
2021-04-07 05:06:08 +00:00
2021-04-10 07:21:58 +00:00
if ( rigCaps . hasAntennaSel )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetAntenna ) ;
2021-04-10 07:21:58 +00:00
}
if ( rigCaps . hasAttenuator )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetAttenuator ) ;
2021-04-10 07:21:58 +00:00
}
if ( rigCaps . hasPreamp )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetPreamp ) ;
2021-04-10 07:21:58 +00:00
}
2021-04-07 05:06:08 +00:00
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetRitEnabled ) ;
issueDelayedCommand ( cmdGetRitValue ) ;
2021-04-25 07:23:52 +00:00
2021-11-05 17:09:31 +00:00
if ( rigCaps . hasIFShift )
issueDelayedCommand ( cmdGetIFShift ) ;
if ( rigCaps . hasTBPF )
{
issueDelayedCommand ( cmdGetTPBFInner ) ;
issueDelayedCommand ( cmdGetTPBFOuter ) ;
}
2021-05-15 22:34:22 +00:00
if ( rigCaps . hasSpectrum )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetSpectrumMode ) ;
issueDelayedCommand ( cmdGetSpectrumSpan ) ;
2023-02-05 21:58:49 +00:00
issueDelayedCommand ( cmdGetPassband ) ;
2021-05-15 22:34:22 +00:00
}
2021-04-11 07:42:25 +00:00
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdNone ) ;
issueDelayedCommand ( cmdStartRegularPolling ) ;
2021-02-19 05:47:19 +00:00
2021-02-13 06:42:34 +00:00
if ( rigCaps . hasATU )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetATUStatus ) ;
2021-02-13 06:42:34 +00:00
}
2023-02-05 21:58:49 +00:00
2018-06-23 07:31:41 +00:00
delayedCommand - > start ( ) ;
}
2018-11-07 23:54:03 +00:00
void wfmain : : showStatusBarText ( QString text )
{
ui - > statusBar - > showMessage ( text , 5000 ) ;
}
2018-06-23 07:31:41 +00:00
2021-02-19 06:38:50 +00:00
void wfmain : : on_useSystemThemeChk_clicked ( bool checked )
2018-06-22 23:31:52 +00:00
{
2021-02-19 06:38:50 +00:00
setAppTheme ( ! checked ) ;
prefs . useSystemTheme = checked ;
}
void wfmain : : setAppTheme ( bool isCustom )
{
if ( isCustom )
2018-06-22 23:31:52 +00:00
{
2021-03-13 10:20:48 +00:00
# ifndef Q_OS_LINUX
2021-02-24 22:55:29 +00:00
QFile f ( " : " + prefs . stylesheetPath ) ; // built-in resource
# else
2021-08-02 06:06:19 +00:00
QFile f ( PREFIX " /share/wfview/ " + prefs . stylesheetPath ) ;
2021-02-24 22:55:29 +00:00
# endif
2018-06-22 23:31:52 +00:00
if ( ! f . exists ( ) )
{
printf ( " Unable to set stylesheet, file not found \n " ) ;
2021-08-02 06:06:19 +00:00
printf ( " Tried to load: [%s] \n " , f . fileName ( ) . toStdString ( ) . c_str ( ) ) ;
2018-06-22 23:31:52 +00:00
}
else
{
f . open ( QFile : : ReadOnly | QFile : : Text ) ;
QTextStream ts ( & f ) ;
qApp - > setStyleSheet ( ts . readAll ( ) ) ;
}
} else {
qApp - > setStyleSheet ( " " ) ;
}
}
2022-08-23 17:35:59 +00:00
void wfmain : : setDefaultColors ( int presetNumber )
2018-11-25 06:21:36 +00:00
{
2022-08-23 17:35:59 +00:00
// These are the default color schemes
if ( presetNumber > numColorPresetsTotal - 1 )
return ;
2018-11-25 06:21:36 +00:00
2022-08-23 17:35:59 +00:00
colorPrefsType * p = & colorPreset [ presetNumber ] ;
2018-11-25 06:21:36 +00:00
2022-08-23 17:35:59 +00:00
// Begin every parameter with these safe defaults first:
if ( p - > presetName = = Q_NULLPTR )
2018-06-22 23:31:52 +00:00
{
2022-08-23 17:35:59 +00:00
p - > presetName = new QString ( ) ;
}
p - > presetName - > clear ( ) ;
p - > presetName - > append ( QString ( " %1 " ) . arg ( presetNumber ) ) ;
p - > presetNum = presetNumber ;
p - > gridColor = QColor ( 0 , 0 , 0 , 255 ) ;
p - > axisColor = QColor ( Qt : : white ) ;
p - > textColor = QColor ( Qt : : white ) ;
p - > spectrumLine = QColor ( Qt : : yellow ) ;
p - > spectrumFill = QColor ( " transparent " ) ;
p - > underlayLine = QColor ( 20 + 200 / 4.0 * 1 , 70 * ( 1.6 - 1 / 4.0 ) , 150 , 150 ) . lighter ( 200 ) ;
p - > underlayFill = QColor ( 20 + 200 / 4.0 * 1 , 70 * ( 1.6 - 1 / 4.0 ) , 150 , 150 ) ;
p - > plotBackground = QColor ( Qt : : black ) ;
p - > tuningLine = QColor ( Qt : : blue ) ;
2022-09-26 10:59:16 +00:00
p - > passband = QColor ( Qt : : blue ) ;
2023-01-19 16:16:47 +00:00
p - > pbt = QColor ( " #32ff0000 " ) ;
2021-04-27 06:40:08 +00:00
2022-08-23 17:35:59 +00:00
p - > meterLevel = QColor ( " #148CD2 " ) . darker ( ) ;
p - > meterAverage = QColor ( " #3FB7CD " ) ;
p - > meterPeakLevel = QColor ( " #3CA0DB " ) . lighter ( ) ;
p - > meterPeakScale = QColor ( Qt : : red ) ;
p - > meterLowerLine = QColor ( " #eff0f1 " ) ;
p - > meterLowText = QColor ( " #eff0f1 " ) ;
2021-04-27 06:40:08 +00:00
2022-08-23 17:35:59 +00:00
p - > wfBackground = QColor ( Qt : : black ) ;
p - > wfAxis = QColor ( Qt : : white ) ;
p - > wfGrid = QColor ( Qt : : white ) ;
p - > wfText = QColor ( Qt : : white ) ;
2018-06-23 07:31:41 +00:00
2022-10-09 13:23:07 +00:00
p - > clusterSpots = QColor ( Qt : : red ) ;
2022-08-23 17:35:59 +00:00
//qInfo(logSystem()) << "default color preset [" << pn << "] set to pn.presetNum index [" << p->presetNum << "]" << ", with name " << *(p->presetName);
2021-04-27 06:40:08 +00:00
2022-08-23 17:35:59 +00:00
switch ( presetNumber )
{
case 0 :
{
// Dark
p - > presetName - > clear ( ) ;
p - > presetName - > append ( " Dark " ) ;
p - > plotBackground = QColor ( 0 , 0 , 0 , 255 ) ;
p - > axisColor = QColor ( Qt : : white ) ;
p - > textColor = QColor ( 255 , 255 , 255 , 255 ) ;
p - > gridColor = QColor ( 0 , 0 , 0 , 255 ) ;
p - > spectrumFill = QColor ( " transparent " ) ;
p - > spectrumLine = QColor ( Qt : : yellow ) ;
p - > underlayLine = QColor ( " #9633ff55 " ) ;
p - > underlayFill = QColor ( 20 + 200 / 4.0 * 1 , 70 * ( 1.6 - 1 / 4.0 ) , 150 , 150 ) ;
p - > tuningLine = QColor ( " #ff55ffff " ) ;
2022-09-28 16:42:12 +00:00
p - > passband = QColor ( " #32ffffff " ) ;
2023-01-19 16:16:47 +00:00
p - > pbt = QColor ( " #32ff0000 " ) ;
2022-08-23 17:35:59 +00:00
p - > meterLevel = QColor ( " #148CD2 " ) . darker ( ) ;
p - > meterAverage = QColor ( " #3FB7CD " ) ;
p - > meterPeakScale = QColor ( Qt : : red ) ;
p - > meterPeakLevel = QColor ( " #3CA0DB " ) . lighter ( ) ;
p - > meterLowerLine = QColor ( " #eff0f1 " ) ;
p - > meterLowText = QColor ( " #eff0f1 " ) ;
p - > wfBackground = QColor ( Qt : : black ) ;
p - > wfAxis = QColor ( Qt : : white ) ;
p - > wfGrid = QColor ( " transparent " ) ;
p - > wfText = QColor ( Qt : : white ) ;
2022-10-09 13:23:07 +00:00
p - > clusterSpots = QColor ( Qt : : red ) ;
2022-08-23 17:35:59 +00:00
break ;
}
case 1 :
{
// Bright
p - > presetName - > clear ( ) ;
p - > presetName - > append ( " Bright " ) ;
p - > plotBackground = QColor ( Qt : : white ) ;
p - > axisColor = QColor ( 200 , 200 , 200 , 255 ) ;
p - > gridColor = QColor ( 255 , 255 , 255 , 0 ) ;
p - > textColor = QColor ( Qt : : black ) ;
p - > spectrumFill = QColor ( " transparent " ) ;
p - > spectrumLine = QColor ( Qt : : black ) ;
p - > underlayLine = QColor ( Qt : : blue ) ;
p - > tuningLine = QColor ( Qt : : darkBlue ) ;
2022-09-28 16:42:12 +00:00
p - > passband = QColor ( " #64000080 " ) ;
2023-01-19 16:16:47 +00:00
p - > pbt = QColor ( " #32ff0000 " ) ;
2022-08-23 17:35:59 +00:00
p - > meterAverage = QColor ( " #3FB7CD " ) ;
p - > meterPeakLevel = QColor ( " #3CA0DB " ) ;
p - > meterPeakScale = QColor ( Qt : : darkRed ) ;
p - > meterLowerLine = QColor ( Qt : : black ) ;
p - > meterLowText = QColor ( Qt : : black ) ;
p - > wfBackground = QColor ( Qt : : white ) ;
p - > wfAxis = QColor ( 200 , 200 , 200 , 255 ) ;
p - > wfGrid = QColor ( " transparent " ) ;
p - > wfText = QColor ( Qt : : black ) ;
2022-10-09 13:23:07 +00:00
p - > clusterSpots = QColor ( Qt : : red ) ;
2022-08-23 17:35:59 +00:00
break ;
}
2021-04-27 06:40:08 +00:00
2022-08-23 17:35:59 +00:00
case 2 :
case 3 :
case 4 :
default :
break ;
2021-04-27 06:40:08 +00:00
2018-06-22 23:31:52 +00:00
}
2022-08-23 17:35:59 +00:00
ui - > colorPresetCombo - > setItemText ( presetNumber , * ( p - > presetName ) ) ;
2018-06-20 06:45:56 +00:00
}
2021-06-25 08:24:21 +00:00
void wfmain : : doCmd ( commandtype cmddata )
{
cmds cmd = cmddata . cmd ;
std : : shared_ptr < void > data = cmddata . data ;
2021-06-25 22:43:53 +00:00
// This switch is for commands with parameters.
// the "default" for non-parameter commands is to call doCmd(cmd).
2021-06-25 08:24:21 +00:00
switch ( cmd )
{
case cmdSetFreq :
{
2021-07-10 01:13:11 +00:00
lastFreqCmdTime_ms = QDateTime : : currentMSecsSinceEpoch ( ) ;
2021-06-25 08:24:21 +00:00
freqt f = ( * std : : static_pointer_cast < freqt > ( data ) ) ;
2023-01-25 08:15:20 +00:00
emit setFrequency ( f . VFO , f ) ;
2021-06-25 08:24:21 +00:00
break ;
}
case cmdSetMode :
{
mode_info m = ( * std : : static_pointer_cast < mode_info > ( data ) ) ;
emit setMode ( m ) ;
break ;
}
2023-01-27 20:44:23 +00:00
case cmdSelVFO :
{
vfo_t v = ( * std : : static_pointer_cast < vfo_t > ( data ) ) ;
emit selectVFO ( v ) ;
break ;
}
2021-06-25 09:31:18 +00:00
case cmdSetTxPower :
{
unsigned char txpower = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setTxPower ( txpower ) ;
break ;
}
2021-06-25 22:43:53 +00:00
case cmdSetMicGain :
{
unsigned char micgain = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setTxPower ( micgain ) ;
break ;
}
2021-06-26 02:47:40 +00:00
case cmdSetRxRfGain :
{
unsigned char rfgain = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setRfGain ( rfgain ) ;
break ;
}
2021-06-25 22:43:53 +00:00
case cmdSetModLevel :
{
unsigned char modlevel = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
rigInput currentIn ;
if ( usingDataMode )
{
currentIn = currentModDataSrc ;
} else {
currentIn = currentModSrc ;
}
emit setModLevel ( currentIn , modlevel ) ;
break ;
}
2021-06-26 02:47:40 +00:00
case cmdSetAfGain :
{
unsigned char afgain = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setAfGain ( afgain ) ;
break ;
}
2021-06-25 22:43:53 +00:00
case cmdSetSql :
{
unsigned char sqlLevel = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setSql ( sqlLevel ) ;
break ;
}
2021-11-05 17:09:31 +00:00
case cmdSetIFShift :
{
unsigned char IFShiftLevel = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setIFShift ( IFShiftLevel ) ;
break ;
}
case cmdSetTPBFInner :
{
unsigned char innterLevel = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setTPBFInner ( innterLevel ) ;
break ;
}
case cmdSetTPBFOuter :
{
unsigned char outerLevel = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setTPBFOuter ( outerLevel ) ;
break ;
}
2023-01-27 22:05:50 +00:00
case cmdSetTone :
{
rptrTone_t t = ( * std : : static_pointer_cast < rptrTone_t > ( data ) ) ;
emit setTone ( t ) ;
break ;
}
case cmdSetTSQL :
2023-01-27 22:47:18 +00:00
{
rptrTone_t t = ( * std : : static_pointer_cast < rptrTone_t > ( data ) ) ;
emit setTSQL ( t ) ;
break ;
}
case cmdSetRptAccessMode :
2023-01-27 22:05:50 +00:00
{
rptrAccessData_t rd = ( * std : : static_pointer_cast < rptrAccessData_t > ( data ) ) ;
2023-02-01 05:52:24 +00:00
if ( rd . accessMode = = ratrNN & & ! rigCaps . hasAdvancedRptrToneCmds )
{
rd . usingSequence = true ;
switch ( rd . sequence )
{
case 0 :
rd . turnOffTone = true ;
rd . turnOffTSQL = false ;
break ;
case 1 :
rd . turnOffTSQL = true ;
rd . turnOffTone = false ;
break ;
default :
break ;
}
}
2023-01-27 22:05:50 +00:00
emit setRepeaterAccessMode ( rd ) ;
2023-02-01 05:52:24 +00:00
rd . sequence + + ;
if ( rd . sequence = = 1 )
issueCmd ( cmdSetRptAccessMode , rd ) ;
break ;
}
case cmdSetToneEnabled :
{
// This command is not aware of which VFO to use
bool toneEnabled = ( * std : : static_pointer_cast < bool > ( data ) ) ;
emit setToneEnabled ( toneEnabled ) ;
break ;
}
case cmdSetTSQLEnabled :
{
// This command is not aware of which VFO to use
bool toneEnabled = ( * std : : static_pointer_cast < bool > ( data ) ) ;
emit setTSQLEnabled ( toneEnabled ) ;
2023-01-27 22:05:50 +00:00
break ;
}
2023-01-28 05:42:57 +00:00
case cmdSetRptDuplexOffset :
{
freqt f = ( * std : : static_pointer_cast < freqt > ( data ) ) ;
emit setRptDuplexOffset ( f ) ;
break ;
}
2023-02-01 17:21:17 +00:00
case cmdSetQuickSplit :
{
bool qsEnabled = ( * std : : static_pointer_cast < bool > ( data ) ) ;
emit setQuickSplit ( qsEnabled ) ;
break ;
}
2021-06-25 22:43:53 +00:00
case cmdSetPTT :
{
bool pttrequest = ( * std : : static_pointer_cast < bool > ( data ) ) ;
emit setPTT ( pttrequest ) ;
2022-12-28 22:45:42 +00:00
2021-08-21 05:19:47 +00:00
ui - > meter2Widget - > clearMeterOnPTTtoggle ( ) ;
2022-09-19 00:34:25 +00:00
if ( pttrequest )
2021-07-17 06:23:29 +00:00
{
ui - > meterSPoWidget - > setMeterType ( meterPower ) ;
2022-09-19 00:34:25 +00:00
}
else {
ui - > meterSPoWidget - > setMeterType ( meterS ) ;
}
break ;
}
case cmdPTTToggle :
{
bool pttrequest = ! amTransmitting ;
emit setPTT ( pttrequest ) ;
ui - > meter2Widget - > clearMeterOnPTTtoggle ( ) ;
if ( pttrequest )
{
ui - > meterSPoWidget - > setMeterType ( meterPower ) ;
}
else {
2021-07-17 06:23:29 +00:00
ui - > meterSPoWidget - > setMeterType ( meterS ) ;
}
2021-06-25 22:43:53 +00:00
break ;
}
2023-01-21 06:11:30 +00:00
case cmdSendCW :
{
QString messageText = ( * std : : static_pointer_cast < QString > ( data ) ) ;
emit sendCW ( messageText ) ;
break ;
}
case cmdSetBreakMode :
{
unsigned char bmode = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setCWBreakMode ( bmode ) ;
break ;
}
case cmdSetKeySpeed :
{
unsigned char wpm = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setKeySpeed ( wpm ) ;
break ;
}
2023-01-25 18:01:24 +00:00
case cmdSetCwPitch :
{
unsigned char pitch = ( * std : : static_pointer_cast < unsigned char > ( data ) ) ;
emit setCwPitch ( pitch ) ;
break ;
}
2021-06-26 02:47:40 +00:00
case cmdSetATU :
{
bool atuOn = ( * std : : static_pointer_cast < bool > ( data ) ) ;
emit setATU ( atuOn ) ;
break ;
}
2021-07-09 19:02:50 +00:00
case cmdSetUTCOffset :
{
timekind u = ( * std : : static_pointer_cast < timekind > ( data ) ) ;
emit setUTCOffset ( u ) ;
break ;
}
case cmdSetTime :
{
timekind t = ( * std : : static_pointer_cast < timekind > ( data ) ) ;
emit setTime ( t ) ;
break ;
}
case cmdSetDate :
{
datekind d = ( * std : : static_pointer_cast < datekind > ( data ) ) ;
emit setDate ( d ) ;
break ;
}
2022-04-22 13:59:49 +00:00
case cmdGetBandStackReg :
{
char band = ( * std : : static_pointer_cast < char > ( data ) ) ;
2023-01-29 19:46:13 +00:00
lastRequestedBand = ( availableBands ) band ;
2023-01-12 19:39:35 +00:00
bandStkBand = rigCaps . bsr [ ( availableBands ) band ] ; // 23cm Needs fixing
2022-04-22 13:59:49 +00:00
bandStkRegCode = ui - > bandStkPopdown - > currentIndex ( ) + 1 ;
emit getBandStackReg ( bandStkBand , bandStkRegCode ) ;
break ;
}
2023-01-13 18:14:11 +00:00
case cmdSetPassband :
{
quint16 pass = ( * std : : static_pointer_cast < quint16 > ( data ) ) ;
emit setPassband ( pass ) ;
break ;
}
2021-06-25 08:24:21 +00:00
default :
doCmd ( cmd ) ;
break ;
}
}
2021-06-20 20:34:32 +00:00
void wfmain : : doCmd ( cmds cmd )
2018-06-19 19:58:52 +00:00
{
2021-06-20 20:34:32 +00:00
// Use this function to take action upon a command.
switch ( cmd )
2018-06-19 19:58:52 +00:00
{
2021-06-20 20:34:32 +00:00
case cmdNone :
//qInfo(logSystem()) << "NOOP";
break ;
case cmdGetRigID :
2022-11-24 07:26:11 +00:00
if ( ! haveRigCaps )
{
emit getRigID ( ) ;
issueDelayedCommand ( cmdGetRigID ) ;
}
break ;
2021-06-20 20:34:32 +00:00
case cmdGetRigCIV :
// if(!know rig civ already)
if ( ! haveRigCaps )
{
emit getRigCIV ( ) ;
issueDelayedCommand ( cmdGetRigCIV ) ; // This way, we stay here until we get an answer.
}
break ;
2018-06-19 19:58:52 +00:00
case cmdGetFreq :
emit getFrequency ( ) ;
break ;
case cmdGetMode :
emit getMode ( ) ;
break ;
2023-01-27 20:44:23 +00:00
case cmdVFOSwap :
emit sendVFOSwap ( ) ;
break ;
case cmdVFOEqualAB :
emit sendVFOEqualAB ( ) ;
break ;
case cmdVFOEqualMS :
emit sendVFOEqualMS ( ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdGetDataMode :
if ( rigCaps . hasDataModes )
emit getDataMode ( ) ;
break ;
case cmdSetModeFilter :
emit setMode ( setModeVal , setFilterVal ) ;
break ;
case cmdSetDataModeOff :
emit setDataMode ( false , ( unsigned char ) ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ) ;
break ;
case cmdSetDataModeOn :
emit setDataMode ( true , ( unsigned char ) ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ) ;
break ;
case cmdGetRitEnabled :
emit getRitEnabled ( ) ;
break ;
case cmdGetRitValue :
emit getRitValue ( ) ;
break ;
case cmdGetModInput :
emit getModInput ( false ) ;
break ;
case cmdGetModDataInput :
emit getModInput ( true ) ;
break ;
case cmdGetCurrentModLevel :
// TODO: Add delay between these queries
emit getModInputLevel ( currentModSrc ) ;
emit getModInputLevel ( currentModDataSrc ) ;
break ;
case cmdGetDuplexMode :
emit getDuplexMode ( ) ;
break ;
2023-01-28 05:42:57 +00:00
case cmdGetRptDuplexOffset :
emit getRptDuplexOffset ( ) ;
break ;
2022-09-26 00:44:49 +00:00
case cmdGetPassband :
emit getPassband ( ) ;
break ;
2023-01-18 18:52:05 +00:00
case cmdGetCwPitch :
emit getCwPitch ( ) ;
break ;
case cmdGetPskTone :
emit getPskTone ( ) ;
break ;
case cmdGetRttyMark :
emit getRttyMark ( ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdGetTone :
emit getTone ( ) ;
break ;
case cmdGetTSQL :
emit getTSQL ( ) ;
break ;
case cmdGetDTCS :
emit getDTCS ( ) ;
break ;
case cmdGetRptAccessMode :
2023-02-01 02:00:12 +00:00
if ( rigCaps . hasAdvancedRptrToneCmds ) {
emit getRptAccessMode ( ) ;
} else {
// Get both TONE and TSQL enabled status
emit getToneEnabled ( ) ;
issueDelayedCommand ( cmdGetTSQLEnabled ) ;
}
break ;
case cmdGetToneEnabled :
emit getToneEnabled ( ) ;
break ;
case cmdGetTSQLEnabled :
emit getTSQLEnabled ( ) ;
2021-06-20 20:34:32 +00:00
break ;
case cmdDispEnable :
emit scopeDisplayEnable ( ) ;
break ;
case cmdDispDisable :
emit scopeDisplayDisable ( ) ;
break ;
case cmdGetSpectrumMode :
emit getScopeMode ( ) ;
break ;
case cmdGetSpectrumSpan :
emit getScopeSpan ( ) ;
break ;
case cmdSpecOn :
emit spectOutputEnable ( ) ;
break ;
case cmdSpecOff :
emit spectOutputDisable ( ) ;
break ;
case cmdGetRxGain :
emit getRfGain ( ) ;
break ;
case cmdGetAfGain :
emit getAfGain ( ) ;
break ;
case cmdGetSql :
emit getSql ( ) ;
break ;
2021-11-05 17:09:31 +00:00
case cmdGetIFShift :
emit getIfShift ( ) ;
break ;
case cmdGetTPBFInner :
emit getTPBFInner ( ) ;
break ;
case cmdGetTPBFOuter :
emit getTPBFOuter ( ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdGetTxPower :
emit getTxPower ( ) ;
break ;
case cmdGetMicGain :
emit getMicGain ( ) ;
break ;
case cmdGetSpectrumRefLevel :
emit getSpectrumRefLevel ( ) ;
break ;
case cmdGetATUStatus :
2021-11-07 05:49:10 +00:00
if ( rigCaps . hasATU )
emit getATUStatus ( ) ;
2021-06-20 20:34:32 +00:00
break ;
2021-06-26 02:47:40 +00:00
case cmdStartATU :
2021-11-07 05:49:10 +00:00
if ( rigCaps . hasATU )
emit startATU ( ) ;
2021-06-26 02:47:40 +00:00
break ;
2021-06-20 20:34:32 +00:00
case cmdGetAttenuator :
emit getAttenuator ( ) ;
break ;
case cmdGetPreamp :
emit getPreamp ( ) ;
break ;
case cmdGetAntenna :
emit getAntenna ( ) ;
break ;
case cmdScopeCenterMode :
emit setScopeMode ( spectModeCenter ) ;
break ;
case cmdScopeFixedMode :
emit setScopeMode ( spectModeFixed ) ;
break ;
case cmdGetPTT :
2021-11-07 05:49:10 +00:00
emit getPTT ( ) ;
2021-06-20 20:34:32 +00:00
break ;
case cmdGetTxRxMeter :
if ( amTransmitting )
emit getMeters ( meterPower ) ;
else
emit getMeters ( meterS ) ;
break ;
case cmdGetSMeter :
if ( ! amTransmitting )
emit getMeters ( meterS ) ;
break ;
2021-07-18 21:27:21 +00:00
case cmdGetCenterMeter :
if ( ! amTransmitting )
emit getMeters ( meterCenter ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdGetPowerMeter :
if ( amTransmitting )
emit getMeters ( meterPower ) ;
break ;
2021-07-18 06:39:40 +00:00
case cmdGetSWRMeter :
if ( amTransmitting )
emit getMeters ( meterSWR ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdGetIdMeter :
emit getMeters ( meterCurrent ) ;
break ;
case cmdGetVdMeter :
emit getMeters ( meterVoltage ) ;
break ;
case cmdGetALCMeter :
if ( amTransmitting )
2023-01-21 06:11:30 +00:00
emit getMeters ( meterALC ) ;
2021-06-20 20:34:32 +00:00
break ;
case cmdGetCompMeter :
if ( amTransmitting )
emit getMeters ( meterComp ) ;
break ;
2023-01-21 06:11:30 +00:00
case cmdGetKeySpeed :
emit getKeySpeed ( ) ;
break ;
case cmdGetBreakMode :
emit getCWBreakMode ( ) ;
break ;
case cmdStopCW :
emit stopCW ( ) ;
break ;
2021-06-20 20:34:32 +00:00
case cmdStartRegularPolling :
runPeriodicCommands = true ;
break ;
case cmdStopRegularPolling :
runPeriodicCommands = false ;
break ;
case cmdQueNormalSpeed :
if ( usingLAN )
{
delayedCommand - > setInterval ( delayedCmdIntervalLAN_ms ) ;
} else {
delayedCommand - > setInterval ( delayedCmdIntervalSerial_ms ) ;
}
break ;
2018-06-19 19:58:52 +00:00
default :
2021-06-25 22:43:53 +00:00
qInfo ( logSystem ( ) ) < < __PRETTY_FUNCTION__ < < " WARNING: Command fell through of type: " < < ( unsigned int ) cmd ;
2018-06-19 19:58:52 +00:00
break ;
}
2021-06-20 20:34:32 +00:00
}
2018-06-23 07:31:41 +00:00
2021-06-20 20:34:32 +00:00
void wfmain : : sendRadioCommandLoop ( )
{
// Called by the periodicPollingTimer, see setInitialTiming()
if ( ! ( loopTickCounter % 2 ) )
2018-06-23 07:31:41 +00:00
{
2021-06-20 20:34:32 +00:00
// if ther's a command waiting, run it.
2021-06-21 07:36:57 +00:00
if ( ! delayedCmdQue . empty ( ) )
2018-06-23 07:31:41 +00:00
{
2021-06-25 08:24:21 +00:00
commandtype cmddata = delayedCmdQue . front ( ) ;
2021-06-21 07:36:57 +00:00
delayedCmdQue . pop_front ( ) ;
2021-06-25 08:24:21 +00:00
doCmd ( cmddata ) ;
2021-06-20 20:34:32 +00:00
} else if ( ! ( loopTickCounter % 10 ) )
{
// pick from useful queries to make now and then
2021-06-21 07:36:57 +00:00
if ( haveRigCaps & & ! slowPollCmdQueue . empty ( ) )
2021-06-20 20:34:32 +00:00
{
2021-06-21 07:36:57 +00:00
2023-01-07 20:52:07 +00:00
int nCmds = ( int ) slowPollCmdQueue . size ( ) ;
2021-06-21 07:36:57 +00:00
cmds sCmd = slowPollCmdQueue [ ( slowCmdNum + + ) % nCmds ] ;
2021-06-20 20:34:32 +00:00
doCmd ( sCmd ) ;
}
2023-01-24 18:37:26 +00:00
} else if ( ( ! rapidPollCmdQueue . empty ( ) ) & & rapidPollCmdQueueEnabled )
{
int nrCmds = ( int ) rapidPollCmdQueue . size ( ) ;
cmds rCmd = rapidPollCmdQueue [ ( rapidCmdNum + + ) % nrCmds ] ;
doCmd ( rCmd ) ;
2018-06-23 07:31:41 +00:00
}
} else {
2021-06-20 20:34:32 +00:00
// odd-number ticks:
// s-meter or other metering
2021-06-21 07:36:57 +00:00
if ( haveRigCaps & & ! periodicCmdQueue . empty ( ) )
2021-06-20 20:34:32 +00:00
{
2023-01-07 20:52:07 +00:00
int nCmds = ( int ) periodicCmdQueue . size ( ) ;
2021-06-21 07:36:57 +00:00
cmds pcmd = periodicCmdQueue [ ( pCmdNum + + ) % nCmds ] ;
2021-06-20 20:34:32 +00:00
doCmd ( pcmd ) ;
}
2018-06-23 07:31:41 +00:00
}
2021-06-20 20:34:32 +00:00
loopTickCounter + + ;
2018-06-19 19:58:52 +00:00
}
2021-02-15 04:45:48 +00:00
void wfmain : : issueDelayedCommand ( cmds cmd )
{
2021-06-20 20:34:32 +00:00
// Append to end of command queue
2021-06-25 08:24:21 +00:00
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = NULL ;
delayedCmdQue . push_back ( cmddata ) ;
2021-02-15 04:45:48 +00:00
}
2021-02-15 04:51:18 +00:00
void wfmain : : issueDelayedCommandPriority ( cmds cmd )
{
// Places the new command at the top of the queue
// Use only when needed.
2021-06-25 08:24:21 +00:00
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = NULL ;
delayedCmdQue . push_front ( cmddata ) ;
2021-02-15 04:51:18 +00:00
}
2021-01-25 00:16:38 +00:00
2021-03-22 07:11:43 +00:00
void wfmain : : issueDelayedCommandUnique ( cmds cmd )
{
// Use this function to insert commands where
// multiple (redundant) commands don't make sense.
2021-06-21 07:41:10 +00:00
2021-06-25 08:24:21 +00:00
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = NULL ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . push_front ( cmddata ) ;
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
2021-06-25 08:24:21 +00:00
// The following is both expensive and not that great,
2023-01-27 01:41:35 +00:00
// since it does not check if the arguments are the same.
/* bool found = false;
2021-06-25 08:24:21 +00:00
for ( unsigned int i = 0 ; i < delayedCmdQue . size ( ) ; i + + )
{
if ( delayedCmdQue . at ( i ) . cmd = = cmd )
{
found = true ;
break ;
}
}
if ( ! found )
2021-03-22 07:11:43 +00:00
{
2021-06-25 08:24:21 +00:00
delayedCmdQue . push_front ( cmddata ) ;
2021-03-22 07:11:43 +00:00
}
2021-06-25 08:24:21 +00:00
// if( std::find(delayedCmdQue.begin(), delayedCmdQue.end(), cmddata ) == delayedCmdQue.end())
// {
// delayedCmdQue.push_front(cmddata);
// }
2023-01-27 01:41:35 +00:00
*/
2021-06-25 08:24:21 +00:00
2023-01-27 01:41:35 +00:00
// delayedCmdQue.push_front(cmddata);
2021-06-25 08:24:21 +00:00
}
2021-06-25 09:31:18 +00:00
void wfmain : : issueCmd ( cmds cmd , mode_info m )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < mode_info > ( new mode_info ( m ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2021-06-25 22:43:53 +00:00
void wfmain : : issueCmd ( cmds cmd , freqt f )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < freqt > ( new freqt ( f ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2023-01-27 20:44:23 +00:00
void wfmain : : issueCmd ( cmds cmd , vfo_t v )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < vfo_t > ( new vfo_t ( v ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2023-01-27 22:05:50 +00:00
void wfmain : : issueCmd ( cmds cmd , rptrTone_t v )
2021-06-25 22:43:53 +00:00
{
commandtype cmddata ;
cmddata . cmd = cmd ;
2023-01-27 22:05:50 +00:00
cmddata . data = std : : shared_ptr < rptrTone_t > ( new rptrTone_t ( v ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
void wfmain : : issueCmd ( cmds cmd , rptrAccessData_t rd )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < rptrAccessData_t > ( new rptrAccessData_t ( rd ) ) ;
2021-06-25 22:43:53 +00:00
delayedCmdQue . push_back ( cmddata ) ;
}
2021-07-09 19:02:50 +00:00
void wfmain : : issueCmd ( cmds cmd , timekind t )
{
qDebug ( logSystem ( ) ) < < " Issuing timekind command with data: " < < t . hours < < " hours, " < < t . minutes < < " minutes, " < < t . isMinus < < " isMinus " ;
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < timekind > ( new timekind ( t ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
}
void wfmain : : issueCmd ( cmds cmd , datekind d )
{
qDebug ( logSystem ( ) ) < < " Issuing datekind command with data: " < < d . day < < " day, " < < d . month < < " month, " < < d . year < < " year. " ;
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < datekind > ( new datekind ( d ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
}
2021-06-25 22:43:53 +00:00
void wfmain : : issueCmd ( cmds cmd , int i )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < int > ( new int ( i ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2021-06-25 09:31:18 +00:00
void wfmain : : issueCmd ( cmds cmd , char c )
2021-06-25 08:24:21 +00:00
{
commandtype cmddata ;
2021-06-25 09:31:18 +00:00
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < char > ( new char ( c ) ) ;
2021-06-25 08:24:21 +00:00
delayedCmdQue . push_back ( cmddata ) ;
2021-03-22 07:11:43 +00:00
}
2021-06-25 09:31:18 +00:00
void wfmain : : issueCmd ( cmds cmd , bool b )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < bool > ( new bool ( b ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
void wfmain : : issueCmd ( cmds cmd , unsigned char c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < unsigned char > ( new unsigned char ( c ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2023-01-13 18:14:11 +00:00
void wfmain : : issueCmd ( cmds cmd , quint16 c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < quint16 > ( new quint16 ( c ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2023-01-16 12:24:22 +00:00
void wfmain : : issueCmd ( cmds cmd , qint16 c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < qint16 > ( new qint16 ( c ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2023-01-21 06:11:30 +00:00
void wfmain : : issueCmd ( cmds cmd , QString s )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < QString > ( new QString ( s ) ) ;
delayedCmdQue . push_back ( cmddata ) ;
}
2021-06-26 02:47:40 +00:00
void wfmain : : issueCmdUniquePriority ( cmds cmd , bool b )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < bool > ( new bool ( b ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2021-06-26 02:47:40 +00:00
}
2021-06-25 22:43:53 +00:00
void wfmain : : issueCmdUniquePriority ( cmds cmd , unsigned char c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < unsigned char > ( new unsigned char ( c ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2021-06-25 22:43:53 +00:00
}
void wfmain : : issueCmdUniquePriority ( cmds cmd , char c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < char > ( new char ( c ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2021-06-25 22:43:53 +00:00
}
void wfmain : : issueCmdUniquePriority ( cmds cmd , freqt f )
2021-06-25 09:31:18 +00:00
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < freqt > ( new freqt ( f ) ) ;
2021-06-25 22:43:53 +00:00
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2021-06-25 22:43:53 +00:00
}
2023-01-13 18:14:11 +00:00
void wfmain : : issueCmdUniquePriority ( cmds cmd , quint16 c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < quint16 > ( new quint16 ( c ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2023-01-13 18:14:11 +00:00
}
2023-01-16 12:24:22 +00:00
void wfmain : : issueCmdUniquePriority ( cmds cmd , qint16 c )
{
commandtype cmddata ;
cmddata . cmd = cmd ;
cmddata . data = std : : shared_ptr < qint16 > ( new qint16 ( c ) ) ;
delayedCmdQue . push_front ( cmddata ) ;
2023-01-27 01:41:35 +00:00
delayedCmdQue . erase ( std : : remove_if ( delayedCmdQue . begin ( ) + 1 , delayedCmdQue . end ( ) , [ cmd ] ( const commandtype & c ) { return ( c . cmd = = cmd ) ; } ) , delayedCmdQue . end ( ) ) ;
//removeSimilarCommand(cmd);
2023-01-16 12:24:22 +00:00
}
2021-06-25 22:43:53 +00:00
void wfmain : : removeSimilarCommand ( cmds cmd )
{
// pop anything out that is of the same kind of command:
// pop anything out that is of the same kind of command:
// Start at 1 since we put one in at zero that we want to keep.
2023-01-23 13:44:15 +00:00
for ( auto it = delayedCmdQue . begin ( ) + 1 ; it ! = delayedCmdQue . end ( ) ; )
{
if ( it - > cmd = = cmd )
{
it = delayedCmdQue . erase ( it ) ;
}
else {
it + + ;
}
}
/*
2021-06-25 22:43:53 +00:00
for ( unsigned int i = 1 ; i < delayedCmdQue . size ( ) ; i + + )
{
2023-01-23 13:44:15 +00:00
if ( delayedCmdQue . at ( i ) . cmd = = cmd )
2021-06-25 22:43:53 +00:00
{
//delayedCmdQue[i].cmd = cmdNone;
delayedCmdQue . erase ( delayedCmdQue . begin ( ) + i ) ;
// i -= 1;
}
}
2023-01-23 13:44:15 +00:00
*/
2021-03-22 07:11:43 +00:00
}
2021-01-25 00:16:38 +00:00
void wfmain : : receiveRigID ( rigCapabilities rigCaps )
{
// Note: We intentionally request rigID several times
// because without rigID, we can't do anything with the waterfall.
if ( haveRigCaps )
{
return ;
} else {
2021-05-18 07:29:06 +00:00
showStatusBarText ( QString ( " Found radio at address 0x%1 of name %2 and model ID %3. " ) . arg ( rigCaps . civ , 2 , 16 ) . arg ( rigCaps . modelName ) . arg ( rigCaps . modelID ) ) ;
2021-02-23 21:21:22 +00:00
qDebug ( logSystem ( ) ) < < " Rig name: " < < rigCaps . modelName ;
qDebug ( logSystem ( ) ) < < " Has LAN capabilities: " < < rigCaps . hasLan ;
qDebug ( logSystem ( ) ) < < " Rig ID received into wfmain: spectLenMax: " < < rigCaps . spectLenMax ;
qDebug ( logSystem ( ) ) < < " Rig ID received into wfmain: spectAmpMax: " < < rigCaps . spectAmpMax ;
qDebug ( logSystem ( ) ) < < " Rig ID received into wfmain: spectSeqMax: " < < rigCaps . spectSeqMax ;
qDebug ( logSystem ( ) ) < < " Rig ID received into wfmain: hasSpectrum: " < < rigCaps . hasSpectrum ;
2021-05-15 17:53:16 +00:00
2021-01-25 00:16:38 +00:00
this - > rigCaps = rigCaps ;
2021-06-15 20:38:16 +00:00
rigName - > setText ( rigCaps . modelName ) ;
2022-04-20 12:35:23 +00:00
if ( serverConfig . enabled ) {
serverConfig . rigs . first ( ) - > modelName = rigCaps . modelName ;
serverConfig . rigs . first ( ) - > rigName = rigCaps . modelName ;
serverConfig . rigs . first ( ) - > civAddr = rigCaps . civ ;
serverConfig . rigs . first ( ) - > baudRate = rigCaps . baudRate ;
}
2021-07-06 06:50:37 +00:00
setWindowTitle ( rigCaps . modelName ) ;
2021-01-25 00:16:38 +00:00
this - > spectWidth = rigCaps . spectLenMax ; // used once haveRigCaps is true.
2022-08-18 06:30:02 +00:00
//wfCeiling = rigCaps.spectAmpMax;
//plotCeiling = rigCaps.spectAmpMax;
2022-09-23 03:53:57 +00:00
if ( rigCaps . hasSpectrum )
{
ui - > topLevelSlider - > setVisible ( true ) ;
ui - > labelTop - > setVisible ( true ) ;
ui - > botLevelSlider - > setVisible ( true ) ;
ui - > labelBot - > setVisible ( true ) ;
ui - > scopeRefLevelSlider - > setVisible ( true ) ;
ui - > refLabel - > setVisible ( true ) ;
ui - > wfLengthSlider - > setVisible ( true ) ;
ui - > lenLabel - > setVisible ( true ) ;
ui - > topLevelSlider - > setMaximum ( rigCaps . spectAmpMax ) ;
ui - > botLevelSlider - > setMaximum ( rigCaps . spectAmpMax ) ;
} else {
ui - > scopeRefLevelSlider - > setVisible ( false ) ;
ui - > refLabel - > setVisible ( false ) ;
ui - > wfLengthSlider - > setVisible ( false ) ;
ui - > lenLabel - > setVisible ( false ) ;
ui - > topLevelSlider - > setVisible ( false ) ;
ui - > labelTop - > setVisible ( false ) ;
ui - > botLevelSlider - > setVisible ( false ) ;
ui - > labelBot - > setVisible ( false ) ;
}
2021-01-25 00:16:38 +00:00
haveRigCaps = true ;
2022-09-17 19:57:49 +00:00
2023-01-30 23:54:45 +00:00
if ( rigCaps . bands . size ( ) > 0 ) {
lastRequestedBand = rigCaps . bands [ 0 ] . band ;
}
2021-02-28 20:10:07 +00:00
// Added so that server receives rig capabilities.
emit sendRigCaps ( rigCaps ) ;
2021-04-07 05:26:08 +00:00
rpt - > setRig ( rigCaps ) ;
2021-11-05 17:09:31 +00:00
trxadj - > setRig ( rigCaps ) ;
2021-02-13 06:42:34 +00:00
2021-05-22 06:46:15 +00:00
// Set the mode combo box up:
2021-02-13 06:42:34 +00:00
2021-05-22 06:46:15 +00:00
ui - > modeSelectCombo - > blockSignals ( true ) ;
ui - > modeSelectCombo - > clear ( ) ;
2021-02-13 06:42:34 +00:00
2021-05-22 06:46:15 +00:00
for ( unsigned int i = 0 ; i < rigCaps . modes . size ( ) ; i + + )
2021-05-01 07:54:42 +00:00
{
2021-05-22 06:46:15 +00:00
ui - > modeSelectCombo - > addItem ( rigCaps . modes . at ( i ) . name ,
rigCaps . modes . at ( i ) . reg ) ;
2021-05-01 18:54:43 +00:00
}
2021-05-01 07:54:42 +00:00
2021-05-22 06:46:15 +00:00
ui - > modeSelectCombo - > blockSignals ( false ) ;
2021-02-16 06:46:26 +00:00
if ( rigCaps . model = = model9700 )
{
ui - > satOpsBtn - > setDisabled ( false ) ;
ui - > adjRefBtn - > setDisabled ( false ) ;
} else {
ui - > satOpsBtn - > setDisabled ( true ) ;
ui - > adjRefBtn - > setDisabled ( true ) ;
}
2021-02-19 08:14:40 +00:00
QString inName ;
2021-03-06 09:07:23 +00:00
// Clear input combos before adding known inputs.
2021-03-06 09:14:28 +00:00
ui - > modInputCombo - > clear ( ) ;
ui - > modInputDataCombo - > clear ( ) ;
2021-03-06 09:07:23 +00:00
2021-02-19 08:14:40 +00:00
for ( int i = 0 ; i < rigCaps . inputs . length ( ) ; i + + )
{
switch ( rigCaps . inputs . at ( i ) )
{
case inputMic :
inName = " Mic " ;
break ;
case inputLAN :
inName = " LAN " ;
break ;
case inputUSB :
inName = " USB " ;
break ;
case inputACC :
inName = " ACC " ;
break ;
case inputACCA :
inName = " ACCA " ;
break ;
case inputACCB :
inName = " ACCB " ;
break ;
default :
inName = " Unknown " ;
break ;
}
ui - > modInputCombo - > addItem ( inName , rigCaps . inputs . at ( i ) ) ;
ui - > modInputDataCombo - > addItem ( inName , rigCaps . inputs . at ( i ) ) ;
}
if ( rigCaps . inputs . length ( ) = = 0 )
{
ui - > modInputCombo - > addItem ( " None " , inputNone ) ;
ui - > modInputDataCombo - > addItem ( " None " , inputNone ) ;
}
2021-02-16 06:46:26 +00:00
2021-04-08 06:35:24 +00:00
ui - > attSelCombo - > clear ( ) ;
2021-04-09 22:57:16 +00:00
if ( rigCaps . hasAttenuator )
2021-04-08 06:35:24 +00:00
{
2021-04-09 22:57:16 +00:00
ui - > attSelCombo - > setDisabled ( false ) ;
for ( unsigned int i = 0 ; i < rigCaps . attenuators . size ( ) ; i + + )
{
inName = ( i = = 0 ) ? QString ( " 0dB " ) : QString ( " -%1 dB " ) . arg ( rigCaps . attenuators . at ( i ) , 0 , 16 ) ;
ui - > attSelCombo - > addItem ( inName , rigCaps . attenuators . at ( i ) ) ;
}
} else {
ui - > attSelCombo - > setDisabled ( true ) ;
2021-04-08 06:35:24 +00:00
}
2021-04-09 22:57:16 +00:00
ui - > preampSelCombo - > clear ( ) ;
if ( rigCaps . hasPreamp )
2021-04-09 17:04:20 +00:00
{
2021-04-09 22:57:16 +00:00
ui - > preampSelCombo - > setDisabled ( false ) ;
for ( unsigned int i = 0 ; i < rigCaps . preamps . size ( ) ; i + + )
{
inName = ( i = = 0 ) ? QString ( " Disabled " ) : QString ( " Pre #%1 " ) . arg ( rigCaps . preamps . at ( i ) , 0 , 16 ) ;
ui - > preampSelCombo - > addItem ( inName , rigCaps . preamps . at ( i ) ) ;
}
} else {
ui - > preampSelCombo - > setDisabled ( true ) ;
2021-04-09 17:04:20 +00:00
}
2021-04-09 22:57:16 +00:00
ui - > antennaSelCombo - > clear ( ) ;
if ( rigCaps . hasAntennaSel )
{
ui - > antennaSelCombo - > setDisabled ( false ) ;
for ( unsigned int i = 0 ; i < rigCaps . antennas . size ( ) ; i + + )
{
2022-03-23 15:45:51 +00:00
inName = QString ( " %1 " ) . arg ( rigCaps . antennas . at ( i ) + 1 , 0 , 16 ) ; // adding 1 to have the combobox start with ant 1 instead of 0
2021-04-09 22:57:16 +00:00
ui - > antennaSelCombo - > addItem ( inName , rigCaps . antennas . at ( i ) ) ;
}
} else {
ui - > antennaSelCombo - > setDisabled ( true ) ;
}
2021-04-09 17:04:20 +00:00
2021-07-16 16:08:55 +00:00
ui - > rxAntennaCheck - > setEnabled ( rigCaps . hasRXAntenna ) ;
ui - > rxAntennaCheck - > setChecked ( false ) ;
2021-06-19 05:45:12 +00:00
ui - > scopeBWCombo - > blockSignals ( true ) ;
ui - > scopeBWCombo - > clear ( ) ;
if ( rigCaps . hasSpectrum )
{
ui - > scopeBWCombo - > setHidden ( false ) ;
for ( unsigned int i = 0 ; i < rigCaps . scopeCenterSpans . size ( ) ; i + + )
{
ui - > scopeBWCombo - > addItem ( rigCaps . scopeCenterSpans . at ( i ) . name , ( int ) rigCaps . scopeCenterSpans . at ( i ) . cstype ) ;
}
2022-08-18 01:41:35 +00:00
plot - > yAxis - > setRange ( QCPRange ( prefs . plotFloor , prefs . plotCeiling ) ) ;
colorMap - > setDataRange ( QCPRange ( prefs . plotFloor , prefs . plotCeiling ) ) ;
2021-06-19 05:45:12 +00:00
} else {
ui - > scopeBWCombo - > setHidden ( true ) ;
}
ui - > scopeBWCombo - > blockSignals ( false ) ;
2021-04-27 01:24:28 +00:00
setBandButtons ( ) ;
2021-04-08 06:35:24 +00:00
2021-02-13 06:42:34 +00:00
ui - > tuneEnableChk - > setEnabled ( rigCaps . hasATU ) ;
ui - > tuneNowBtn - > setEnabled ( rigCaps . hasATU ) ;
2022-11-24 00:59:10 +00:00
ui - > useRTSforPTTchk - > setChecked ( prefs . forceRTSasPTT ) ;
2021-12-30 09:52:23 +00:00
2022-05-12 00:46:20 +00:00
ui - > audioSystemCombo - > setEnabled ( false ) ;
2022-09-17 20:04:46 +00:00
ui - > audioSystemServerCombo - > setEnabled ( false ) ;
2022-09-17 19:58:41 +00:00
2022-09-17 21:31:43 +00:00
ui - > connectBtn - > setText ( " Disconnect from Radio " ) ; // We must be connected now.
2022-05-12 00:46:20 +00:00
2021-07-05 23:45:19 +00:00
prepareWf ( ui - > wfLengthSlider - > value ( ) ) ;
if ( usingLAN )
{
ui - > afGainSlider - > setValue ( prefs . localAFgain ) ;
}
2021-01-25 00:16:38 +00:00
// Adding these here because clearly at this point we have valid
// rig comms. In the future, we should establish comms and then
// do all the initial grabs. For now, this hack of adding them here and there:
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetFreq ) ;
issueDelayedCommand ( cmdGetMode ) ;
2021-06-18 19:41:56 +00:00
// recalculate command timing now that we know the rig better:
2022-11-27 05:43:47 +00:00
if ( prefs . polling_ms ! = 0 )
{
changePollTiming ( prefs . polling_ms , true ) ;
} else {
calculateTimingParameters ( ) ;
}
2021-02-21 04:41:19 +00:00
initPeriodicCommands ( ) ;
2021-08-27 17:06:09 +00:00
2021-08-27 17:07:45 +00:00
// Set the second meter here as I suspect we need to be connected for it to work?
2021-08-27 17:06:09 +00:00
for ( int i = 0 ; i < ui - > meter2selectionCombo - > count ( ) ; i + + )
{
if ( static_cast < meterKind > ( ui - > meter2selectionCombo - > itemData ( i ) . toInt ( ) ) = = prefs . meter2Type )
{
2021-08-27 17:07:45 +00:00
// I thought that setCurrentIndex() would call the activated() function for the combobox
// but it doesn't, so call it manually.
2021-08-27 17:06:09 +00:00
ui - > meter2selectionCombo - > setCurrentIndex ( i ) ;
2021-08-27 17:07:45 +00:00
on_meter2selectionCombo_activated ( i ) ;
2021-08-27 17:06:09 +00:00
}
}
2021-02-21 04:41:19 +00:00
}
2022-09-23 04:06:49 +00:00
updateSizes ( ui - > tabWidget - > currentIndex ( ) ) ;
2021-02-21 04:41:19 +00:00
}
void wfmain : : initPeriodicCommands ( )
{
// This function places periodic polling commands into a queue.
// The commands are run using a timer,
// and the timer is started by the delayed command cmdStartPeriodicTimer.
2021-06-20 20:34:32 +00:00
insertPeriodicCommand ( cmdGetTxRxMeter , 128 ) ;
insertSlowPeriodicCommand ( cmdGetFreq , 128 ) ;
insertSlowPeriodicCommand ( cmdGetMode , 128 ) ;
2021-11-07 05:49:10 +00:00
if ( rigCaps . hasTransmit )
insertSlowPeriodicCommand ( cmdGetPTT , 128 ) ;
2021-06-20 20:34:32 +00:00
insertSlowPeriodicCommand ( cmdGetTxPower , 128 ) ;
insertSlowPeriodicCommand ( cmdGetRxGain , 128 ) ;
2021-11-07 05:49:10 +00:00
if ( rigCaps . hasAttenuator )
insertSlowPeriodicCommand ( cmdGetAttenuator , 128 ) ;
if ( rigCaps . hasTransmit )
insertSlowPeriodicCommand ( cmdGetPTT , 128 ) ;
if ( rigCaps . hasPreamp )
insertSlowPeriodicCommand ( cmdGetPreamp , 128 ) ;
2021-07-16 18:33:15 +00:00
if ( rigCaps . hasRXAntenna ) {
insertSlowPeriodicCommand ( cmdGetAntenna , 128 ) ;
}
2023-01-28 05:48:26 +00:00
insertSlowPeriodicCommand ( cmdGetDuplexMode , 128 ) ; // split and repeater
if ( rigCaps . hasRepeaterModes )
{
insertSlowPeriodicCommand ( cmdGetRptDuplexOffset , 128 ) ;
}
2022-09-26 00:44:49 +00:00
2023-01-24 18:37:26 +00:00
rapidPollCmdQueueEnabled = false ;
rapidPollCmdQueue . clear ( ) ;
rapidPollCmdQueueEnabled = true ;
}
void wfmain : : insertPeriodicRapidCmd ( cmds cmd )
{
rapidPollCmdQueue . push_back ( cmd ) ;
2021-02-21 04:41:19 +00:00
}
2023-01-21 06:11:30 +00:00
void wfmain : : insertPeriodicCommand ( cmds cmd , unsigned char priority = 100 )
2021-02-21 04:41:19 +00:00
{
// TODO: meaningful priority
2021-06-20 20:34:32 +00:00
// These commands get run at the fastest pace possible
// Typically just metering.
2021-02-21 04:41:19 +00:00
if ( priority < 10 )
{
2021-06-21 07:36:57 +00:00
periodicCmdQueue . push_front ( cmd ) ;
2021-02-21 04:41:19 +00:00
} else {
2021-06-21 07:36:57 +00:00
periodicCmdQueue . push_back ( cmd ) ;
2021-01-25 00:16:38 +00:00
}
}
2023-01-24 18:37:26 +00:00
void wfmain : : insertPeriodicRapidCmdUnique ( cmds cmd )
{
removePeriodicRapidCmd ( cmd ) ;
rapidPollCmdQueue . push_back ( cmd ) ;
}
2021-07-18 06:39:40 +00:00
void wfmain : : insertPeriodicCommandUnique ( cmds cmd )
{
// Use this function to insert a non-duplicate command
// into the fast periodic polling queue, typically
// meter commands where high refresh rates are desirable.
removePeriodicCommand ( cmd ) ;
periodicCmdQueue . push_front ( cmd ) ;
}
2023-01-24 18:37:26 +00:00
void wfmain : : removePeriodicRapidCmd ( cmds cmd )
{
2023-01-27 02:00:11 +00:00
2023-01-29 13:09:04 +00:00
qDebug ( ) < < " Removing " < < cmd < < " From periodic queue, len " < < slowPollCmdQueue . size ( ) ;
periodicCmdQueue . erase ( std : : remove_if ( periodicCmdQueue . begin ( ) , periodicCmdQueue . end ( ) , [ cmd ] ( const cmds & c ) { return ( c = = cmd ) ; } ) , periodicCmdQueue . end ( ) ) ;
qDebug ( ) < < " Removed " < < cmd < < " From periodic queue, len " < < slowPollCmdQueue . size ( ) ;
2023-01-27 02:00:11 +00:00
/*
2023-01-24 18:37:26 +00:00
while ( true )
{
auto it = std : : find ( this - > rapidPollCmdQueue . begin ( ) , this - > rapidPollCmdQueue . end ( ) , cmd ) ;
if ( it ! = rapidPollCmdQueue . end ( ) )
{
rapidPollCmdQueue . erase ( it ) ;
} else {
break ;
}
}
2023-01-27 02:00:11 +00:00
*/
2023-01-24 18:37:26 +00:00
}
2021-07-18 06:39:40 +00:00
void wfmain : : removePeriodicCommand ( cmds cmd )
{
2023-01-27 02:00:11 +00:00
2023-01-29 13:09:04 +00:00
qDebug ( ) < < " Removing " < < cmd < < " From periodic queue, len " < < slowPollCmdQueue . size ( ) ;
2023-01-27 02:04:51 +00:00
periodicCmdQueue . erase ( std : : remove_if ( periodicCmdQueue . begin ( ) , periodicCmdQueue . end ( ) , [ cmd ] ( const cmds & c ) { return ( c = = cmd ) ; } ) , periodicCmdQueue . end ( ) ) ;
2023-01-29 13:09:04 +00:00
qDebug ( ) < < " Removed " < < cmd < < " From periodic queue, len " < < slowPollCmdQueue . size ( ) ;
2023-01-27 02:00:11 +00:00
/* while (true)
2021-07-18 06:39:40 +00:00
{
auto it = std : : find ( this - > periodicCmdQueue . begin ( ) , this - > periodicCmdQueue . end ( ) , cmd ) ;
if ( it ! = periodicCmdQueue . end ( ) )
{
periodicCmdQueue . erase ( it ) ;
} else {
break ;
}
}
2023-01-27 02:00:11 +00:00
*/
2021-07-18 06:39:40 +00:00
}
2023-01-21 06:11:30 +00:00
void wfmain : : insertSlowPeriodicCommand ( cmds cmd , unsigned char priority = 100 )
2021-06-20 20:34:32 +00:00
{
// TODO: meaningful priority
// These commands are run every 20 "ticks" of the primary radio command loop
2022-03-23 15:45:51 +00:00
// Basically 20 times less often than the standard periodic command
2023-01-29 13:09:04 +00:00
qDebug ( ) < < " Inserting " < < cmd < < " To slow queue, priority " < < priority < < " len " < < slowPollCmdQueue . size ( ) ;
2021-02-21 04:41:19 +00:00
if ( priority < 10 )
{
2021-06-21 07:36:57 +00:00
slowPollCmdQueue . push_front ( cmd ) ;
2021-02-21 04:41:19 +00:00
} else {
2021-06-21 07:36:57 +00:00
slowPollCmdQueue . push_back ( cmd ) ;
2021-01-25 00:16:38 +00:00
}
2023-01-29 13:09:04 +00:00
qDebug ( ) < < " Inserted " < < cmd < < " To slow queue, priority " < < priority < < " len " < < slowPollCmdQueue . size ( ) ;
}
void wfmain : : removeSlowPeriodicCommand ( cmds cmd )
{
qDebug ( ) < < " Removing " < < cmd < < " From slow queue, len " < < slowPollCmdQueue . size ( ) ;
slowPollCmdQueue . erase ( std : : remove_if ( slowPollCmdQueue . begin ( ) , slowPollCmdQueue . end ( ) , [ cmd ] ( const cmds & c ) { return ( c = = cmd ) ; } ) , slowPollCmdQueue . end ( ) ) ;
qDebug ( ) < < " Removed " < < cmd < < " From slow queue, len " < < slowPollCmdQueue . size ( ) ;
2021-01-25 00:16:38 +00:00
}
2021-03-22 07:11:43 +00:00
void wfmain : : receiveFreq ( freqt freqStruct )
2018-06-19 19:58:52 +00:00
{
2021-03-22 07:11:43 +00:00
2021-07-10 01:13:11 +00:00
qint64 tnow_ms = QDateTime : : currentMSecsSinceEpoch ( ) ;
if ( tnow_ms - lastFreqCmdTime_ms > delayedCommand - > interval ( ) * 2 )
{
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( freqStruct . MHzDouble , 0 , ' f ' ) ) ;
freq = freqStruct ;
2023-01-25 08:15:20 +00:00
rpt - > handleUpdateCurrentMainFrequency ( freqStruct ) ;
2021-07-10 01:13:11 +00:00
} else {
qDebug ( logSystem ( ) ) < < " Rejecting stale frequency: " < < freqStruct . Hz < < " Hz, delta time ms = " < < tnow_ms - lastFreqCmdTime_ms \
< < " , tnow_ms " < < tnow_ms < < " , last: " < < lastFreqCmdTime_ms ;
}
2018-11-07 23:54:03 +00:00
}
void wfmain : : receivePTTstatus ( bool pttOn )
{
2021-02-15 04:45:48 +00:00
// This is the only place where amTransmitting and the transmit button text should be changed:
2021-03-01 16:26:59 +00:00
if ( pttOn & & ! amTransmitting )
{
2022-12-28 22:45:42 +00:00
2023-01-29 18:39:24 +00:00
pttLed - > setState ( QLedLabel : : State : : StateError ) ;
pttLed - > setToolTip ( " Transmitting " ) ;
if ( splitModeEnabled )
{
pttLed - > setState ( QLedLabel : : State : : StateSplitErrorOk ) ;
pttLed - > setToolTip ( " TX Split " ) ;
} else {
pttLed - > setState ( QLedLabel : : State : : StateError ) ;
pttLed - > setToolTip ( " Transmitting " ) ;
}
2021-03-01 16:26:59 +00:00
}
else if ( ! pttOn & & amTransmitting )
{
pttLed - > setState ( QLedLabel : : State : : StateOk ) ;
2023-01-29 18:39:24 +00:00
pttLed - > setToolTip ( " Receiving " ) ;
2021-03-01 16:26:59 +00:00
}
2021-02-15 04:45:48 +00:00
amTransmitting = pttOn ;
2023-01-25 08:15:20 +00:00
rpt - > handleTransmitStatus ( pttOn ) ;
2021-02-15 04:45:48 +00:00
changeTxBtn ( ) ;
}
void wfmain : : changeTxBtn ( )
{
if ( amTransmitting )
{
ui - > transmitBtn - > setText ( " Receive " ) ;
} else {
ui - > transmitBtn - > setText ( " Transmit " ) ;
}
2018-06-19 19:58:52 +00:00
}
2021-02-15 04:45:48 +00:00
2018-06-19 19:58:52 +00:00
void wfmain : : receiveSpectrumData ( QByteArray spectrum , double startFreq , double endFreq )
{
2021-01-25 00:16:38 +00:00
if ( ! haveRigCaps )
{
2021-02-23 21:21:22 +00:00
qDebug ( logSystem ( ) ) < < " Spectrum received, but RigID incomplete. " ;
2021-01-25 00:16:38 +00:00
return ;
}
2022-08-18 16:56:06 +00:00
QElapsedTimer performanceTimer ;
bool updateRange = false ;
2018-06-19 19:58:52 +00:00
if ( ( startFreq ! = oldLowerFreq ) | | ( endFreq ! = oldUpperFreq ) )
{
2019-01-10 06:44:48 +00:00
// If the frequency changed and we were drawing peaks, now is the time to clearn them
2022-08-18 04:46:47 +00:00
if ( underlayMode = = underlayPeakHold )
2019-01-10 06:44:48 +00:00
{
// TODO: create non-button function to do this
// This will break if the button is ever moved or renamed.
2018-06-19 19:58:52 +00:00
on_clearPeakBtn_clicked ( ) ;
2022-12-02 20:38:08 +00:00
} else {
plasmaPrepared = false ;
preparePlasma ( ) ;
2019-01-10 06:44:48 +00:00
}
2022-10-05 10:03:15 +00:00
// Inform other threads (cluster) that the frequency range has changed.
emit setFrequencyRange ( startFreq , endFreq ) ;
2018-06-19 19:58:52 +00:00
}
oldLowerFreq = startFreq ;
oldUpperFreq = endFreq ;
2021-05-15 17:53:16 +00:00
//qInfo(logSystem()) << "start: " << startFreq << " end: " << endFreq;
2018-06-19 19:58:52 +00:00
quint16 specLen = spectrum . length ( ) ;
2021-05-15 17:53:16 +00:00
//qInfo(logSystem()) << "Spectrum data received at UI! Length: " << specLen;
2021-01-25 00:16:38 +00:00
//if( (specLen != 475) || (specLen!=689) )
if ( specLen ! = rigCaps . spectLenMax )
2018-06-19 19:58:52 +00:00
{
2021-02-23 21:21:22 +00:00
qDebug ( logSystem ( ) ) < < " ------------------------------------------- " ;
qDebug ( logSystem ( ) ) < < " ------ Unusual spectrum received, length: " < < specLen ;
qDebug ( logSystem ( ) ) < < " ------ Expected spectrum length: " < < rigCaps . spectLenMax ;
qDebug ( logSystem ( ) ) < < " ------ This should happen once at most. " ;
2018-06-19 19:58:52 +00:00
return ; // safe. Using these unusual length things is a problem.
}
QVector < double > x ( spectWidth ) , y ( spectWidth ) , y2 ( spectWidth ) ;
2022-08-18 18:52:41 +00:00
// TODO: Keep x around unless the frequency range changes. Should save a little time.
2018-06-19 19:58:52 +00:00
for ( int i = 0 ; i < spectWidth ; i + + )
{
x [ i ] = ( i * ( endFreq - startFreq ) / spectWidth ) + startFreq ;
}
for ( int i = 0 ; i < specLen ; i + + )
{
//x[i] = (i * (endFreq-startFreq)/specLen) + startFreq;
2021-03-03 10:34:56 +00:00
y [ i ] = ( unsigned char ) spectrum . at ( i ) ;
2022-08-18 01:41:35 +00:00
if ( underlayMode = = underlayPeakHold )
2018-06-19 19:58:52 +00:00
{
2021-03-03 10:36:43 +00:00
if ( ( unsigned char ) spectrum . at ( i ) > ( unsigned char ) spectrumPeaks . at ( i ) )
2018-06-19 19:58:52 +00:00
{
spectrumPeaks [ i ] = spectrum . at ( i ) ;
}
2021-03-03 10:36:43 +00:00
y2 [ i ] = ( unsigned char ) spectrumPeaks . at ( i ) ;
2018-06-19 19:58:52 +00:00
}
}
2022-08-18 05:38:44 +00:00
plasmaMutex . lock ( ) ;
2022-08-17 22:10:07 +00:00
spectrumPlasma . push_front ( spectrum ) ;
2022-12-02 20:38:08 +00:00
if ( spectrumPlasma . size ( ) > ( int ) spectrumPlasmaSize )
{
spectrumPlasma . pop_back ( ) ;
}
2022-08-18 05:38:44 +00:00
plasmaMutex . unlock ( ) ;
2022-08-17 22:10:07 +00:00
2018-06-19 19:58:52 +00:00
2023-01-18 18:52:05 +00:00
if ( ! spectrumDrawLock )
2018-06-19 19:58:52 +00:00
{
2023-01-18 18:52:05 +00:00
if ( ( plotFloor ! = oldPlotFloor ) | | ( plotCeiling ! = oldPlotCeiling ) ) {
2022-08-18 16:56:06 +00:00
updateRange = true ;
2023-01-18 18:52:05 +00:00
}
2023-01-24 04:56:17 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
plot - > graph ( 0 ) - > setData ( x , y ) ;
# else
2023-01-18 18:52:05 +00:00
plot - > graph ( 0 ) - > setData ( x , y , true ) ;
2023-01-24 04:56:17 +00:00
# endif
2022-08-18 16:56:06 +00:00
2021-05-31 06:26:36 +00:00
if ( ( freq . MHzDouble < endFreq ) & & ( freq . MHzDouble > startFreq ) )
2018-06-19 19:58:52 +00:00
{
2022-09-29 16:17:51 +00:00
freqIndicatorLine - > start - > setCoords ( freq . MHzDouble , 0 ) ;
freqIndicatorLine - > end - > setCoords ( freq . MHzDouble , rigCaps . spectAmpMax ) ;
2023-01-19 16:16:47 +00:00
2023-01-18 18:52:05 +00:00
double pbStart = 0.0 ;
double pbEnd = 0.0 ;
switch ( currentModeInfo . mk )
2022-09-26 20:22:02 +00:00
{
2023-01-18 18:52:05 +00:00
case modeLSB :
case modeRTTY :
case modePSK_R :
pbStart = freq . MHzDouble - passbandCenterFrequency - ( passbandWidth / 2 ) ;
pbEnd = freq . MHzDouble - passbandCenterFrequency + ( passbandWidth / 2 ) ;
break ;
case modeCW :
if ( passbandWidth < 0.0006 ) {
pbStart = freq . MHzDouble - ( passbandWidth / 2 ) ;
pbEnd = freq . MHzDouble + ( passbandWidth / 2 ) ;
}
else {
pbStart = freq . MHzDouble + passbandCenterFrequency - passbandWidth ;
pbEnd = freq . MHzDouble + passbandCenterFrequency ;
}
break ;
case modeCW_R :
if ( passbandWidth < 0.0006 ) {
pbStart = freq . MHzDouble - ( passbandWidth / 2 ) ;
pbEnd = freq . MHzDouble + ( passbandWidth / 2 ) ;
}
else {
pbStart = freq . MHzDouble - passbandCenterFrequency ;
pbEnd = freq . MHzDouble + passbandWidth - passbandCenterFrequency ;
2022-09-26 20:22:02 +00:00
}
2023-01-18 18:52:05 +00:00
break ;
default :
pbStart = freq . MHzDouble + passbandCenterFrequency - ( passbandWidth / 2 ) ;
pbEnd = freq . MHzDouble + passbandCenterFrequency + ( passbandWidth / 2 ) ;
break ;
2022-09-26 19:46:25 +00:00
}
2022-09-26 00:44:49 +00:00
2023-01-18 18:52:05 +00:00
passbandIndicator - > topLeft - > setCoords ( pbStart , 0 ) ;
passbandIndicator - > bottomRight - > setCoords ( pbEnd , rigCaps . spectAmpMax ) ;
2023-01-19 16:16:47 +00:00
2023-01-24 20:12:23 +00:00
if ( ( currentModeInfo . mk = = modeCW | | currentModeInfo . mk = = modeCW_R ) & & passbandWidth > 0.0006 )
{
2023-01-25 11:41:50 +00:00
pbtDefault = round ( ( passbandWidth - ( cwPitch / 1000000.0 ) ) * 200000.0 ) / 200000.0 ;
}
else
{
pbtDefault = 0.0 ;
2023-01-24 20:12:23 +00:00
}
2023-01-25 11:41:50 +00:00
if ( ( TPBFInner - pbtDefault | | TPBFOuter - pbtDefault ) & & passbandAction ! = passbandResizing & & currentModeInfo . mk ! = modeFM )
2023-01-24 20:12:23 +00:00
{
2023-01-19 16:16:47 +00:00
pbtIndicator - > setVisible ( true ) ;
}
else
{
pbtIndicator - > setVisible ( false ) ;
}
2023-01-22 17:19:44 +00:00
/*
pbtIndicator displays the intersection between TPBFInner and TPBFOuter
*/
2023-02-03 20:34:59 +00:00
if ( currentModeInfo . mk = = modeLSB | | currentModeInfo . mk = = modeCW | | currentModeInfo . mk = = modeRTTY ) {
pbtIndicator - > topLeft - > setCoords ( qMax ( pbStart - ( TPBFInner / 2 ) + ( pbtDefault / 2 ) , pbStart - ( TPBFOuter / 2 ) + ( pbtDefault / 2 ) ) , 0 ) ;
2023-01-19 16:16:47 +00:00
2023-02-03 20:34:59 +00:00
pbtIndicator - > bottomRight - > setCoords ( qMin ( pbStart - ( TPBFInner / 2 ) + ( pbtDefault / 2 ) + passbandWidth ,
pbStart - ( TPBFOuter / 2 ) + ( pbtDefault / 2 ) + passbandWidth ) , rigCaps . spectAmpMax ) ;
2023-02-03 19:58:37 +00:00
}
else
{
pbtIndicator - > topLeft - > setCoords ( qMax ( pbStart + ( TPBFInner / 2 ) - ( pbtDefault / 2 ) , pbStart + ( TPBFOuter / 2 ) - ( pbtDefault / 2 ) ) , 0 ) ;
pbtIndicator - > bottomRight - > setCoords ( qMin ( pbStart + ( TPBFInner / 2 ) - ( pbtDefault / 2 ) + passbandWidth ,
pbStart + ( TPBFOuter / 2 ) - ( pbtDefault / 2 ) + passbandWidth ) , rigCaps . spectAmpMax ) ;
}
2023-01-25 11:41:50 +00:00
//qDebug() << "Default" << pbtDefault << "Inner" << TPBFInner << "Outer" << TPBFOuter << "Pass" << passbandWidth << "Center" << passbandCenterFrequency << "CW" << cwPitch;
2018-06-19 19:58:52 +00:00
}
2022-08-18 23:40:10 +00:00
2023-01-18 18:52:05 +00:00
if ( underlayMode = = underlayPeakHold )
2018-06-19 19:58:52 +00:00
{
2023-01-24 04:56:17 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
plot - > graph ( 1 ) - > setData ( x , y2 ) ; // peaks
# else
2023-01-18 18:52:05 +00:00
plot - > graph ( 1 ) - > setData ( x , y2 , true ) ; // peaks
2023-01-24 04:56:17 +00:00
# endif
2018-06-19 19:58:52 +00:00
}
2023-01-18 18:52:05 +00:00
else if ( underlayMode ! = underlayNone ) {
2022-08-18 23:40:10 +00:00
computePlasma ( ) ;
2023-01-24 04:56:17 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
plot - > graph ( 1 ) - > setData ( x , spectrumPlasmaLine ) ;
# else
2023-01-18 18:52:05 +00:00
plot - > graph ( 1 ) - > setData ( x , spectrumPlasmaLine , true ) ;
2023-01-24 04:56:17 +00:00
# endif
2023-01-18 18:52:05 +00:00
}
else {
2023-01-24 04:56:17 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
plot - > graph ( 1 ) - > setData ( x , y2 ) ; // peaks, but probably cleared out
# else
2023-01-18 18:52:05 +00:00
plot - > graph ( 1 ) - > setData ( x , y2 , true ) ; // peaks, but probably cleared out
2023-01-24 04:56:17 +00:00
# endif
2018-06-19 19:58:52 +00:00
}
2022-08-18 01:41:35 +00:00
2022-08-18 16:56:06 +00:00
if ( updateRange )
plot - > yAxis - > setRange ( prefs . plotFloor , prefs . plotCeiling ) ;
2021-05-31 06:26:36 +00:00
plot - > xAxis - > setRange ( startFreq , endFreq ) ;
plot - > replot ( ) ;
2018-06-19 19:58:52 +00:00
2021-05-31 06:26:36 +00:00
if ( specLen = = spectWidth )
2018-06-19 19:58:52 +00:00
{
2021-05-31 06:26:36 +00:00
wfimage . prepend ( spectrum ) ;
2022-08-18 16:56:06 +00:00
wfimage . pop_back ( ) ;
QByteArray wfRow ;
2021-05-31 06:26:36 +00:00
// Waterfall:
for ( int row = 0 ; row < wfLength ; row + + )
{
2022-08-18 16:56:06 +00:00
wfRow = wfimage . at ( row ) ;
2021-05-31 06:26:36 +00:00
for ( int col = 0 ; col < spectWidth ; col + + )
{
2023-01-22 23:24:21 +00:00
colorMap - > data ( ) - > setCell ( col , row , ( unsigned char ) wfRow . at ( col ) ) ;
2021-05-31 06:26:36 +00:00
}
2018-06-19 19:58:52 +00:00
}
2022-08-18 16:56:06 +00:00
if ( updateRange )
{
colorMap - > setDataRange ( QCPRange ( wfFloor , wfCeiling ) ) ;
}
2022-08-18 06:30:02 +00:00
wf - > yAxis - > setRange ( 0 , wfLength - 1 ) ;
wf - > xAxis - > setRange ( 0 , spectWidth - 1 ) ;
wf - > replot ( ) ;
2021-05-31 06:26:36 +00:00
}
2022-08-18 16:56:06 +00:00
oldPlotFloor = plotFloor ;
oldPlotCeiling = plotCeiling ;
2018-06-19 19:58:52 +00:00
}
}
2022-08-18 17:54:54 +00:00
void wfmain : : preparePlasma ( )
{
if ( plasmaPrepared )
return ;
if ( spectrumPlasmaSize = = 0 )
spectrumPlasmaSize = 128 ;
plasmaMutex . lock ( ) ;
spectrumPlasma . clear ( ) ;
spectrumPlasma . squeeze ( ) ;
plasmaMutex . unlock ( ) ;
plasmaPrepared = true ;
}
2018-06-19 19:58:52 +00:00
2022-08-17 22:10:07 +00:00
void wfmain : : computePlasma ( )
{
2022-08-18 05:38:44 +00:00
plasmaMutex . lock ( ) ;
2022-08-17 22:10:07 +00:00
spectrumPlasmaLine . clear ( ) ;
spectrumPlasmaLine . resize ( spectWidth ) ;
2022-08-18 04:46:47 +00:00
int specPlasmaSize = spectrumPlasma . size ( ) ;
2022-08-18 01:41:35 +00:00
if ( underlayMode = = underlayAverageBuffer )
2022-08-17 22:10:07 +00:00
{
for ( int col = 0 ; col < spectWidth ; col + + )
{
2022-08-18 04:46:47 +00:00
for ( int pos = 0 ; pos < specPlasmaSize ; pos + + )
2022-08-17 22:10:07 +00:00
{
2022-08-18 18:52:41 +00:00
spectrumPlasmaLine [ col ] + = ( unsigned char ) spectrumPlasma [ pos ] [ col ] ;
2022-08-17 22:10:07 +00:00
}
2022-08-18 04:46:47 +00:00
spectrumPlasmaLine [ col ] = spectrumPlasmaLine [ col ] / specPlasmaSize ;
2022-08-17 22:10:07 +00:00
}
2022-08-18 01:41:35 +00:00
} else if ( underlayMode = = underlayPeakBuffer ) {
2022-08-17 22:10:07 +00:00
// peak mode, running peak display
for ( int col = 0 ; col < spectWidth ; col + + )
{
2022-08-18 04:46:47 +00:00
for ( int pos = 0 ; pos < specPlasmaSize ; pos + + )
2022-08-17 22:10:07 +00:00
{
2022-08-18 18:52:41 +00:00
if ( ( double ) ( ( unsigned char ) spectrumPlasma [ pos ] [ col ] ) > spectrumPlasmaLine [ col ] )
spectrumPlasmaLine [ col ] = ( unsigned char ) spectrumPlasma [ pos ] [ col ] ;
2022-08-17 22:10:07 +00:00
}
2021-05-31 06:26:36 +00:00
}
2018-06-19 19:58:52 +00:00
}
2022-08-18 05:38:44 +00:00
plasmaMutex . unlock ( ) ;
2018-06-19 19:58:52 +00:00
}
2021-03-01 05:41:27 +00:00
void wfmain : : receiveSpectrumMode ( spectrumMode spectMode )
2021-02-05 06:44:15 +00:00
{
2021-08-27 17:06:09 +00:00
for ( int i = 0 ; i < ui - > spectrumModeCombo - > count ( ) ; i + + )
2021-03-01 05:41:27 +00:00
{
2021-08-27 17:06:09 +00:00
if ( static_cast < spectrumMode > ( ui - > spectrumModeCombo - > itemData ( i ) . toInt ( ) ) = = spectMode )
2021-03-01 05:41:27 +00:00
{
ui - > spectrumModeCombo - > blockSignals ( true ) ;
ui - > spectrumModeCombo - > setCurrentIndex ( i ) ;
ui - > spectrumModeCombo - > blockSignals ( false ) ;
}
}
2022-09-18 20:13:33 +00:00
setUISpectrumControlsToMode ( spectMode ) ;
2021-02-05 06:44:15 +00:00
}
2023-01-31 17:35:55 +00:00
void wfmain : : handleScopeOutOfRange ( bool outOfRange )
{
if ( outOfRange )
{
ui - > scopeOutOfRangeLabel - > setText ( " OUT OF RANGE " ) ;
ui - > scopeOutOfRangeLabel - > setStyleSheet ( " QLabel { background-color : red; color : blue; } " ) ;
} else {
ui - > scopeOutOfRangeLabel - > setText ( " " ) ;
ui - > scopeOutOfRangeLabel - > setStyleSheet ( " " ) ;
}
}
2021-03-01 05:41:27 +00:00
2018-06-19 19:58:52 +00:00
void wfmain : : handlePlotDoubleClick ( QMouseEvent * me )
{
2023-01-16 12:24:22 +00:00
if ( me - > button ( ) = = Qt : : LeftButton ) {
2021-05-02 05:30:45 +00:00
2023-01-16 12:24:22 +00:00
double x ;
freqt freqGo ;
//double y;
//double px;
if ( ! freqLock )
{
//y = plot->yAxis->pixelToCoord(me->pos().y());
x = plot - > xAxis - > pixelToCoord ( me - > pos ( ) . x ( ) ) ;
freqGo . Hz = x * 1E6 ;
2021-05-02 05:30:45 +00:00
2023-01-16 12:24:22 +00:00
freqGo . Hz = roundFrequency ( freqGo . Hz , tsWfScrollHz ) ;
freqGo . MHzDouble = ( float ) freqGo . Hz / 1E6 ;
//emit setFrequency(0,freq);
issueCmd ( cmdSetFreq , freqGo ) ;
freq = freqGo ;
setUIFreq ( ) ;
//issueDelayedCommand(cmdGetFreq);
showStatusBarText ( QString ( " Going to %1 MHz " ) . arg ( x ) ) ;
}
} else if ( me - > button ( ) = = Qt : : RightButton ) {
QCPAbstractItem * item = plot - > itemAt ( me - > pos ( ) , true ) ;
QCPItemRect * rectItem = dynamic_cast < QCPItemRect * > ( item ) ;
if ( rectItem ! = nullptr ) {
2023-01-25 11:41:50 +00:00
double pbFreq = ( pbtDefault / passbandWidth ) * 127.0 ;
qint16 newFreq = pbFreq + 128 ;
issueCmdUniquePriority ( cmdSetTPBFInner , ( unsigned char ) newFreq ) ;
issueCmdUniquePriority ( cmdSetTPBFOuter , ( unsigned char ) newFreq ) ;
2023-01-27 10:36:28 +00:00
issueDelayedCommandUnique ( cmdGetTPBFInner ) ;
issueDelayedCommandUnique ( cmdGetTPBFOuter ) ;
2023-01-16 12:24:22 +00:00
}
2021-02-26 08:24:02 +00:00
}
2018-06-19 19:58:52 +00:00
}
void wfmain : : handleWFDoubleClick ( QMouseEvent * me )
{
double x ;
2021-07-10 01:13:11 +00:00
freqt freqGo ;
2018-06-19 19:58:52 +00:00
//double y;
//x = wf->xAxis->pixelToCoord(me->pos().x());
//y = wf->yAxis->pixelToCoord(me->pos().y());
// cheap trick until I figure out how the axis works on the WF:
2021-02-26 08:24:02 +00:00
if ( ! freqLock )
{
x = plot - > xAxis - > pixelToCoord ( me - > pos ( ) . x ( ) ) ;
2021-07-10 01:13:11 +00:00
freqGo . Hz = x * 1E6 ;
2021-05-02 05:30:45 +00:00
2021-07-10 01:13:11 +00:00
freqGo . Hz = roundFrequency ( freqGo . Hz , tsWfScrollHz ) ;
freqGo . MHzDouble = ( float ) freqGo . Hz / 1E6 ;
2021-05-02 05:30:45 +00:00
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,freq);
2021-07-10 01:13:11 +00:00
issueCmd ( cmdSetFreq , freqGo ) ;
freq = freqGo ;
setUIFreq ( ) ;
2021-02-26 08:24:02 +00:00
showStatusBarText ( QString ( " Going to %1 MHz " ) . arg ( x ) ) ;
}
2018-06-19 19:58:52 +00:00
}
2022-10-05 10:03:15 +00:00
void wfmain : : handlePlotClick ( QMouseEvent * me )
2018-06-19 19:58:52 +00:00
{
2022-10-09 19:24:01 +00:00
QCPAbstractItem * item = plot - > itemAt ( me - > pos ( ) , true ) ;
QCPItemText * textItem = dynamic_cast < QCPItemText * > ( item ) ;
2023-01-13 18:14:11 +00:00
QCPItemRect * rectItem = dynamic_cast < QCPItemRect * > ( item ) ;
2023-01-15 12:27:23 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
int leftPix = ( int ) passbandIndicator - > left - > pixelPoint ( ) . x ( ) ;
int rightPix = ( int ) passbandIndicator - > right - > pixelPoint ( ) . x ( ) ;
2023-01-19 16:16:47 +00:00
int pbtLeftPix = ( int ) pbtIndicator - > left - > pixelPoint ( ) . x ( ) ;
int pbtRightPix = ( int ) pbtIndicator - > right - > pixelPoint ( ) . x ( ) ;
2023-01-15 12:27:23 +00:00
# else
2023-01-13 18:50:06 +00:00
int leftPix = ( int ) passbandIndicator - > left - > pixelPosition ( ) . x ( ) ;
int rightPix = ( int ) passbandIndicator - > right - > pixelPosition ( ) . x ( ) ;
2023-01-19 16:16:47 +00:00
int pbtLeftPix = ( int ) pbtIndicator - > left - > pixelPosition ( ) . x ( ) ;
int pbtRightPix = ( int ) pbtIndicator - > right - > pixelPosition ( ) . x ( ) ;
2023-01-15 12:27:23 +00:00
# endif
2023-01-19 16:16:47 +00:00
int pbtCenterPix = pbtLeftPix + ( ( pbtRightPix - pbtLeftPix ) / 2 ) ;
int cursor = me - > pos ( ) . x ( ) ;
2023-01-16 12:24:22 +00:00
if ( me - > button ( ) = = Qt : : LeftButton ) {
2023-01-19 16:16:47 +00:00
if ( textItem ! = nullptr )
2022-10-08 00:09:41 +00:00
{
2023-01-16 12:24:22 +00:00
QMap < QString , spotData * > : : iterator spot = clusterSpots . find ( textItem - > text ( ) ) ;
if ( spot ! = clusterSpots . end ( ) & & spot . key ( ) = = textItem - > text ( ) )
{
qInfo ( logGui ( ) ) < < " Clicked on spot: " < < textItem - > text ( ) ;
freqt freqGo ;
freqGo . Hz = ( spot . value ( ) - > frequency ) * 1E6 ;
freqGo . MHzDouble = spot . value ( ) - > frequency ;
issueCmdUniquePriority ( cmdSetFreq , freqGo ) ;
}
}
2023-01-19 16:16:47 +00:00
else if ( passbandAction = = passbandStatic & & rectItem ! = nullptr )
{
if ( ( cursor < = leftPix & & cursor > leftPix - 10 ) | | ( cursor > = rightPix & & cursor < rightPix + 10 ) )
{
passbandAction = passbandResizing ;
}
}
2023-01-16 12:24:22 +00:00
else if ( prefs . clickDragTuningEnable )
{
2023-01-23 13:44:15 +00:00
this - > mousePressFreq = plot - > xAxis - > pixelToCoord ( cursor ) ;
showStatusBarText ( QString ( " Selected %1 MHz " ) . arg ( this - > mousePressFreq ) ) ;
2023-01-16 12:24:22 +00:00
}
2023-02-03 11:21:11 +00:00
else {
double x = plot - > xAxis - > pixelToCoord ( cursor ) ;
showStatusBarText ( QString ( " Selected %1 MHz " ) . arg ( x ) ) ;
}
2023-01-19 16:16:47 +00:00
}
else if ( me - > button ( ) = = Qt : : RightButton )
{
2023-01-16 12:24:22 +00:00
if ( textItem ! = nullptr ) {
QMap < QString , spotData * > : : iterator spot = clusterSpots . find ( textItem - > text ( ) ) ;
if ( spot ! = clusterSpots . end ( ) & & spot . key ( ) = = textItem - > text ( ) ) {
/* parent and children are destroyed on close */
QDialog * spotDialog = new QDialog ( ) ;
QVBoxLayout * vlayout = new QVBoxLayout ;
//spotDialog->setFixedSize(240, 100);
spotDialog - > setBaseSize ( 1 , 1 ) ;
spotDialog - > setWindowTitle ( spot . value ( ) - > dxcall ) ;
QLabel * dxcall = new QLabel ( QString ( " DX:%1 " ) . arg ( spot . value ( ) - > dxcall ) ) ;
QLabel * spotter = new QLabel ( QString ( " Spotter:%1 " ) . arg ( spot . value ( ) - > spottercall ) ) ;
QLabel * frequency = new QLabel ( QString ( " Frequency:%1 MHz " ) . arg ( spot . value ( ) - > frequency ) ) ;
QLabel * comment = new QLabel ( QString ( " Comment:%1 " ) . arg ( spot . value ( ) - > comment ) ) ;
QAbstractButton * bExit = new QPushButton ( " Close " ) ;
vlayout - > addWidget ( dxcall ) ;
vlayout - > addWidget ( spotter ) ;
vlayout - > addWidget ( frequency ) ;
vlayout - > addWidget ( comment ) ;
vlayout - > addWidget ( bExit ) ;
spotDialog - > setLayout ( vlayout ) ;
spotDialog - > show ( ) ;
spotDialog - > connect ( bExit , SIGNAL ( clicked ( ) ) , spotDialog , SLOT ( close ( ) ) ) ;
}
2022-10-08 00:09:41 +00:00
}
2023-01-19 16:16:47 +00:00
else if ( passbandAction = = passbandStatic & & rectItem ! = nullptr )
{
if ( cursor < = pbtLeftPix & & cursor > pbtLeftPix - 10 )
{
passbandAction = pbtInnerMove ;
}
else if ( cursor > = pbtRightPix & & cursor < pbtRightPix + 10 )
{
passbandAction = pbtOuterMove ;
}
else if ( cursor > pbtCenterPix - 20 & & cursor < pbtCenterPix + 20 )
{
passbandAction = pbtMoving ;
}
2023-01-23 13:44:15 +00:00
this - > mousePressFreq = plot - > xAxis - > pixelToCoord ( cursor ) ;
2023-01-19 16:16:47 +00:00
}
2022-10-06 10:02:22 +00:00
}
2022-09-26 18:53:56 +00:00
}
2022-10-06 10:02:22 +00:00
void wfmain : : handlePlotMouseRelease ( QMouseEvent * me )
2018-06-19 19:58:52 +00:00
{
2022-10-09 19:24:01 +00:00
QCPAbstractItem * item = plot - > itemAt ( me - > pos ( ) , true ) ;
QCPItemText * textItem = dynamic_cast < QCPItemText * > ( item ) ;
2022-10-11 12:17:23 +00:00
if ( textItem = = nullptr & & prefs . clickDragTuningEnable ) {
2022-10-06 10:02:22 +00:00
this - > mouseReleaseFreq = plot - > xAxis - > pixelToCoord ( me - > pos ( ) . x ( ) ) ;
double delta = mouseReleaseFreq - mousePressFreq ;
qInfo ( logGui ( ) ) < < " Mouse release delta: " < < delta ;
}
2023-01-16 12:24:22 +00:00
if ( passbandAction ! = passbandStatic ) {
passbandAction = passbandStatic ;
2023-01-13 18:14:11 +00:00
}
2022-09-26 18:53:56 +00:00
}
2023-01-19 16:16:47 +00:00
void wfmain : : handlePlotMouseMove ( QMouseEvent * me )
2022-09-26 18:53:56 +00:00
{
2022-10-09 19:24:01 +00:00
QCPAbstractItem * item = plot - > itemAt ( me - > pos ( ) , true ) ;
QCPItemText * textItem = dynamic_cast < QCPItemText * > ( item ) ;
2023-01-13 18:14:11 +00:00
QCPItemRect * rectItem = dynamic_cast < QCPItemRect * > ( item ) ;
2023-01-15 12:27:23 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
int leftPix = ( int ) passbandIndicator - > left - > pixelPoint ( ) . x ( ) ;
int rightPix = ( int ) passbandIndicator - > right - > pixelPoint ( ) . x ( ) ;
2023-01-19 16:16:47 +00:00
int pbtLeftPix = ( int ) pbtIndicator - > left - > pixelPoint ( ) . x ( ) ;
int pbtRightPix = ( int ) pbtIndicator - > right - > pixelPoint ( ) . x ( ) ;
2023-01-15 12:27:23 +00:00
# else
2023-01-13 18:50:06 +00:00
int leftPix = ( int ) passbandIndicator - > left - > pixelPosition ( ) . x ( ) ;
int rightPix = ( int ) passbandIndicator - > right - > pixelPosition ( ) . x ( ) ;
2023-01-19 16:16:47 +00:00
int pbtLeftPix = ( int ) pbtIndicator - > left - > pixelPosition ( ) . x ( ) ;
int pbtRightPix = ( int ) pbtIndicator - > right - > pixelPosition ( ) . x ( ) ;
2023-01-15 12:27:23 +00:00
# endif
2023-01-19 16:16:47 +00:00
int pbtCenterPix = pbtLeftPix + ( ( pbtRightPix - pbtLeftPix ) / 2 ) ;
int cursor = me - > pos ( ) . x ( ) ;
2023-01-23 13:44:15 +00:00
double movedFrequency = plot - > xAxis - > pixelToCoord ( cursor ) - mousePressFreq ;
2023-01-19 16:16:47 +00:00
if ( passbandAction = = passbandStatic & & rectItem ! = nullptr )
{
if ( ( cursor < = leftPix & & cursor > leftPix - 10 ) | |
( cursor > = rightPix & & cursor < rightPix + 10 ) | |
( cursor < = pbtLeftPix & & cursor > pbtLeftPix - 10 ) | |
( cursor > = pbtRightPix & & cursor < pbtRightPix + 10 ) )
{
setCursor ( Qt : : SizeHorCursor ) ;
}
2023-01-23 13:44:15 +00:00
else if ( cursor > pbtCenterPix - 20 & & cursor < pbtCenterPix + 20 ) {
2023-01-19 16:16:47 +00:00
setCursor ( Qt : : OpenHandCursor ) ;
}
2023-01-16 12:24:22 +00:00
}
2023-01-19 16:16:47 +00:00
else if ( passbandAction = = passbandResizing )
{
2023-01-27 01:41:35 +00:00
static double lastFreq = movedFrequency ;
if ( lastFreq - movedFrequency > 0.000049 | | movedFrequency - lastFreq > 0.000049 ) {
2023-01-18 18:52:05 +00:00
2023-01-27 01:41:35 +00:00
// We are currently resizing the passband.
double pb = 0.0 ;
double origin = 0.0 ;
switch ( currentModeInfo . mk )
{
case modeCW :
case modeCW_R :
origin = 0.0 ;
break ;
case modeLSB :
origin = - passbandCenterFrequency ;
break ;
default :
origin = passbandCenterFrequency ;
break ;
}
2023-01-13 18:14:11 +00:00
2023-01-27 01:41:35 +00:00
if ( plot - > xAxis - > pixelToCoord ( cursor ) > = freq . MHzDouble + origin ) {
pb = plot - > xAxis - > pixelToCoord ( cursor ) - passbandIndicator - > topLeft - > coords ( ) . x ( ) ;
}
else {
pb = passbandIndicator - > bottomRight - > coords ( ) . x ( ) - plot - > xAxis - > pixelToCoord ( cursor ) ;
}
issueCmdUniquePriority ( cmdSetPassband , ( quint16 ) ( pb * 1000000 ) ) ;
issueDelayedCommandUnique ( cmdGetPassband ) ;
lastFreq = movedFrequency ;
}
2023-01-13 18:14:11 +00:00
}
2023-01-19 16:16:47 +00:00
else if ( passbandAction = = pbtMoving ) {
2023-01-13 18:14:11 +00:00
2023-01-23 13:44:15 +00:00
//qint16 shift = (qint16)(level - 128);
//TPBFInner = (double)(shift / 127.0) * (passbandWidth);
// Only move if more than 100Hz
static double lastFreq = movedFrequency ;
if ( lastFreq - movedFrequency > 0.000049 | | movedFrequency - lastFreq > 0.000049 ) {
double innerFreq = ( ( double ) ( TPBFInner + movedFrequency ) / passbandWidth ) * 127.0 ;
double outerFreq = ( ( double ) ( TPBFOuter + movedFrequency ) / passbandWidth ) * 127.0 ;
qint16 newInFreq = innerFreq + 128 ;
qint16 newOutFreq = outerFreq + 128 ;
2023-01-16 12:24:22 +00:00
2023-01-23 13:44:15 +00:00
if ( newInFreq > = 0 & & newInFreq < = 255 & & newOutFreq > = 0 & & newOutFreq < = 255 ) {
qDebug ( ) < < QString ( " Moving passband by %1 Hz (Inner %2) (Outer %3) Mode:%4 " ) . arg ( ( qint16 ) ( movedFrequency * 1000000 ) )
. arg ( newInFreq ) . arg ( newOutFreq ) . arg ( currentModeInfo . mk ) ;
2023-01-27 01:41:35 +00:00
issueCmdUniquePriority ( cmdSetTPBFInner , ( unsigned char ) newInFreq ) ;
issueCmdUniquePriority ( cmdSetTPBFOuter , ( unsigned char ) newOutFreq ) ;
issueDelayedCommandUnique ( cmdGetTPBFInner ) ;
issueDelayedCommandUnique ( cmdGetTPBFOuter ) ;
2023-01-23 13:44:15 +00:00
}
lastFreq = movedFrequency ;
2023-01-16 12:24:22 +00:00
}
}
2023-01-19 16:16:47 +00:00
else if ( passbandAction = = pbtInnerMove ) {
2023-01-27 01:41:35 +00:00
static double lastFreq = movedFrequency ;
if ( lastFreq - movedFrequency > 0.000049 | | movedFrequency - lastFreq > 0.000049 ) {
double pbFreq = ( ( double ) ( TPBFInner + movedFrequency ) / passbandWidth ) * 127.0 ;
qint16 newFreq = pbFreq + 128 ;
if ( newFreq > = 0 & & newFreq < = 255 ) {
issueCmdUniquePriority ( cmdSetTPBFInner , ( unsigned char ) newFreq ) ;
issueDelayedCommandUnique ( cmdGetTPBFInner ) ;
}
lastFreq = movedFrequency ;
2023-01-23 21:26:43 +00:00
}
2023-01-19 16:16:47 +00:00
}
else if ( passbandAction = = pbtOuterMove ) {
2023-01-27 01:41:35 +00:00
static double lastFreq = movedFrequency ;
if ( lastFreq - movedFrequency > 0.000049 | | movedFrequency - lastFreq > 0.000049 ) {
double pbFreq = ( ( double ) ( TPBFOuter + movedFrequency ) / passbandWidth ) * 127.0 ;
qint16 newFreq = pbFreq + 128 ;
if ( newFreq > = 0 & & newFreq < = 255 ) {
issueCmdUniquePriority ( cmdSetTPBFOuter , ( unsigned char ) newFreq ) ;
issueDelayedCommandUnique ( cmdGetTPBFOuter ) ;
}
lastFreq = movedFrequency ;
2023-01-23 21:26:43 +00:00
}
2023-01-19 16:16:47 +00:00
}
2023-01-16 12:24:22 +00:00
else if ( passbandAction = = passbandStatic & & me - > buttons ( ) = = Qt : : LeftButton & & textItem = = nullptr & & prefs . clickDragTuningEnable )
2022-09-26 18:53:56 +00:00
{
2023-01-23 13:44:15 +00:00
double delta = plot - > xAxis - > pixelToCoord ( cursor ) - mousePressFreq ;
2023-01-16 12:24:22 +00:00
qDebug ( logGui ( ) ) < < " Mouse moving delta: " < < delta ;
2022-09-26 18:53:56 +00:00
if ( ( ( delta < - 0.0001 ) | | ( delta > 0.0001 ) ) & & ( ( delta < 0.501 ) & & ( delta > - 0.501 ) ) )
{
freqt freqGo ;
2023-01-16 12:24:22 +00:00
freqGo . Hz = ( freq . MHzDouble + delta ) * 1E6 ;
2022-09-26 18:53:56 +00:00
//freqGo.Hz = roundFrequency(freqGo.Hz, tsWfScrollHz);
freqGo . MHzDouble = ( float ) freqGo . Hz / 1E6 ;
issueCmdUniquePriority ( cmdSetFreq , freqGo ) ;
}
2023-01-16 12:24:22 +00:00
} else {
setCursor ( Qt : : ArrowCursor ) ;
2022-09-26 18:53:56 +00:00
}
2023-01-16 12:24:22 +00:00
2018-06-19 19:58:52 +00:00
}
void wfmain : : handleWFClick ( QMouseEvent * me )
{
2018-11-07 23:54:03 +00:00
double x = plot - > xAxis - > pixelToCoord ( me - > pos ( ) . x ( ) ) ;
showStatusBarText ( QString ( " Selected %1 MHz " ) . arg ( x ) ) ;
2018-06-19 19:58:52 +00:00
}
2020-04-21 04:10:20 +00:00
void wfmain : : handleWFScroll ( QWheelEvent * we )
{
// The wheel event is typically
// .y() and is +/- 120.
// We will click the dial once for every 120 received.
//QPoint delta = we->angleDelta();
2021-02-02 09:05:59 +00:00
2023-01-29 15:08:47 +00:00
if ( freqLock )
2021-02-27 01:32:06 +00:00
return ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = 0 ;
f . MHzDouble = 0 ;
2021-02-27 01:32:06 +00:00
int clicks = we - > angleDelta ( ) . y ( ) / 120 ;
2023-01-29 15:08:47 +00:00
if ( ! clicks )
2021-03-22 07:11:43 +00:00
return ;
unsigned int stepsHz = tsWfScrollHz ;
2021-02-02 09:05:59 +00:00
2023-01-29 15:08:47 +00:00
Qt : : KeyboardModifiers key = we - > modifiers ( ) ;
2020-04-21 04:23:34 +00:00
2023-01-29 15:08:47 +00:00
if ( ( key = = Qt : : ShiftModifier ) & & ( stepsHz ! = 1 ) )
2020-04-21 04:23:34 +00:00
{
2021-03-22 07:11:43 +00:00
stepsHz / = 10 ;
2023-01-29 15:08:47 +00:00
}
else if ( key = = Qt : : ControlModifier )
2020-04-21 04:23:34 +00:00
{
2021-03-22 07:11:43 +00:00
stepsHz * = 10 ;
2020-04-21 04:23:34 +00:00
}
2021-03-22 07:11:43 +00:00
f . Hz = roundFrequencyWithStep ( freq . Hz , clicks , stepsHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
freq = f ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueCmdUniquePriority ( cmdSetFreq , f ) ;
2021-03-22 07:11:43 +00:00
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( f . MHzDouble , 0 , ' f ' ) ) ;
2021-07-10 01:13:11 +00:00
//issueDelayedCommandUnique(cmdGetFreq);
2020-04-21 04:10:20 +00:00
}
void wfmain : : handlePlotScroll ( QWheelEvent * we )
{
2021-03-22 07:11:43 +00:00
handleWFScroll ( we ) ;
2020-04-21 04:10:20 +00:00
}
2021-02-09 07:31:44 +00:00
void wfmain : : on_scopeEnableWFBtn_clicked ( bool checked )
{
if ( checked )
{
emit spectOutputEnable ( ) ;
} else {
emit spectOutputDisable ( ) ;
}
}
2018-06-19 19:58:52 +00:00
2021-02-14 07:42:51 +00:00
void wfmain : : receiveMode ( unsigned char mode , unsigned char filter )
2018-06-19 19:58:52 +00:00
{
2021-05-15 17:53:16 +00:00
//qInfo(logSystem()) << __func__ << "Received mode " << mode << " current mode: " << currentModeIndex;
2021-02-13 06:42:34 +00:00
2021-02-13 07:35:17 +00:00
bool found = false ;
if ( mode < 0x23 )
2021-02-13 06:42:34 +00:00
{
2021-02-13 07:35:17 +00:00
2023-01-27 01:41:35 +00:00
// Update mode information if mode/filter has changed
if ( currentModeInfo . mk ! = ( mode_kind ) mode | | currentModeInfo . filter ! = filter )
2021-02-13 07:35:17 +00:00
{
2023-01-27 01:41:35 +00:00
removePeriodicRapidCmd ( cmdGetCwPitch ) ;
2023-01-29 13:09:04 +00:00
removeSlowPeriodicCommand ( cmdGetPassband ) ;
removeSlowPeriodicCommand ( cmdGetTPBFInner ) ;
removeSlowPeriodicCommand ( cmdGetTPBFOuter ) ;
2023-01-27 01:41:35 +00:00
quint16 maxPassbandHz = 0 ;
switch ( ( mode_kind ) mode ) {
case modeFM :
if ( filter = = 1 )
passbandWidth = 0.015 ;
else if ( filter = = 2 )
passbandWidth = 0.010 ;
else
passbandWidth = 0.007 ;
passbandCenterFrequency = 0.0 ;
maxPassbandHz = 10E3 ;
break ;
case modeCW :
case modeCW_R :
insertPeriodicRapidCmdUnique ( cmdGetCwPitch ) ;
2023-01-29 13:09:04 +00:00
issueDelayedCommandUnique ( cmdGetCwPitch ) ;
2023-01-27 01:41:35 +00:00
maxPassbandHz = 3600 ;
break ;
case modeAM :
passbandCenterFrequency = 0.0 ;
maxPassbandHz = 10E3 ;
break ;
case modeLSB :
case modeUSB :
passbandCenterFrequency = 0.0015 ;
maxPassbandHz = 3600 ;
break ;
default :
passbandCenterFrequency = 0.0 ;
maxPassbandHz = 3600 ;
break ;
}
for ( int i = 0 ; i < ui - > modeSelectCombo - > count ( ) ; i + + )
2021-02-13 07:35:17 +00:00
{
2023-01-27 01:41:35 +00:00
if ( ui - > modeSelectCombo - > itemData ( i ) . toInt ( ) = = mode )
{
ui - > modeSelectCombo - > blockSignals ( true ) ;
ui - > modeSelectCombo - > setCurrentIndex ( i ) ;
ui - > modeSelectCombo - > blockSignals ( false ) ;
found = true ;
}
2021-02-13 07:35:17 +00:00
}
2023-01-18 18:52:05 +00:00
2023-01-27 01:41:35 +00:00
if ( ( filter ) & & ( filter < 4 ) ) {
ui - > modeFilterCombo - > blockSignals ( true ) ;
ui - > modeFilterCombo - > setCurrentIndex ( filter - 1 ) ;
ui - > modeFilterCombo - > blockSignals ( false ) ;
}
2021-02-13 07:35:17 +00:00
2023-01-27 01:41:35 +00:00
currentModeIndex = mode ;
currentModeInfo . mk = ( mode_kind ) mode ;
currentMode = ( mode_kind ) mode ;
currentModeInfo . filter = filter ;
currentModeInfo . reg = mode ;
rpt - > handleUpdateCurrentMainMode ( currentModeInfo ) ;
2023-01-28 06:34:40 +00:00
cw - > handleCurrentModeUpdate ( currentMode ) ;
2023-01-27 01:41:35 +00:00
if ( ! found )
{
qWarning ( logSystem ( ) ) < < __func__ < < " Received mode " < < mode < < " but could not match to any index within the modeSelectCombo. " ;
return ;
}
2023-01-19 06:50:18 +00:00
2023-01-27 01:41:35 +00:00
if ( maxPassbandHz ! = 0 )
{
trxadj - > setMaxPassband ( maxPassbandHz ) ;
}
2021-02-14 07:42:51 +00:00
2023-01-29 13:09:04 +00:00
if ( currentModeInfo . mk ! = modeFM )
{
insertSlowPeriodicCommand ( cmdGetPassband , 128 ) ;
insertSlowPeriodicCommand ( cmdGetTPBFInner , 128 ) ;
insertSlowPeriodicCommand ( cmdGetTPBFOuter , 128 ) ;
issueDelayedCommandUnique ( cmdGetPassband ) ;
issueDelayedCommandUnique ( cmdGetTPBFInner ) ;
issueDelayedCommandUnique ( cmdGetTPBFOuter ) ;
}
2023-01-27 01:41:35 +00:00
// Note: we need to know if the DATA mode is active to reach mode-D
// some kind of queued query:
if ( rigCaps . hasDataModes & & rigCaps . hasTransmit )
{
issueDelayedCommand ( cmdGetDataMode ) ;
}
}
} else {
qCritical ( logSystem ( ) ) < < __func__ < < " Invalid mode " < < mode < < " received. " ;
2021-12-01 10:13:21 +00:00
}
2018-11-16 22:08:21 +00:00
}
void wfmain : : receiveDataModeStatus ( bool dataEnabled )
{
2021-02-13 06:49:42 +00:00
ui - > dataModeBtn - > blockSignals ( true ) ;
ui - > dataModeBtn - > setChecked ( dataEnabled ) ;
ui - > dataModeBtn - > blockSignals ( false ) ;
2021-02-20 08:05:23 +00:00
usingDataMode = dataEnabled ;
2018-06-19 19:58:52 +00:00
}
void wfmain : : on_clearPeakBtn_clicked ( )
{
2021-01-25 00:16:38 +00:00
if ( haveRigCaps )
{
spectrumPeaks = QByteArray ( ( int ) spectWidth , ' \x01 ' ) ;
2022-09-18 19:22:11 +00:00
clearPlasmaBuffer ( ) ;
2021-01-25 00:16:38 +00:00
}
return ;
2018-06-19 19:58:52 +00:00
}
void wfmain : : on_fullScreenChk_clicked ( bool checked )
{
if ( checked )
2018-11-28 06:02:37 +00:00
{
2018-06-19 19:58:52 +00:00
this - > showFullScreen ( ) ;
2018-11-28 06:02:37 +00:00
onFullscreen = true ;
} else {
2018-06-19 19:58:52 +00:00
this - > showNormal ( ) ;
2018-11-28 06:02:37 +00:00
onFullscreen = false ;
}
2018-11-27 07:10:23 +00:00
prefs . useFullScreen = checked ;
2018-06-19 19:58:52 +00:00
}
void wfmain : : on_goFreqBtn_clicked ( )
{
2021-03-22 07:11:43 +00:00
freqt f ;
2018-06-19 19:58:52 +00:00
bool ok = false ;
2021-07-10 01:13:11 +00:00
double freqDbl = 0 ;
2021-04-07 04:00:47 +00:00
int KHz = 0 ;
if ( ui - > freqMhzLineEdit - > text ( ) . contains ( " . " ) )
2018-06-19 19:58:52 +00:00
{
2021-04-07 04:00:47 +00:00
2021-07-10 01:13:11 +00:00
freqDbl = ui - > freqMhzLineEdit - > text ( ) . toDouble ( & ok ) ;
2021-04-07 04:00:47 +00:00
if ( ok )
{
2021-07-10 01:13:11 +00:00
f . Hz = freqDbl * 1E6 ;
2021-04-07 04:00:47 +00:00
}
} else {
KHz = ui - > freqMhzLineEdit - > text ( ) . toInt ( & ok ) ;
if ( ok )
{
f . Hz = KHz * 1E3 ;
}
2018-06-19 19:58:52 +00:00
}
2021-07-10 01:13:11 +00:00
if ( ok )
{
2023-01-19 06:27:06 +00:00
mode_info m ;
issueCmd ( cmdSetFreq , f ) ;
m . mk = sidebandChooser : : getMode ( f , currentMode ) ;
2023-01-19 06:50:18 +00:00
m . reg = ( unsigned char ) m . mk ;
m . filter = ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ;
2023-01-19 07:17:28 +00:00
if ( ( m . mk ! = currentMode ) & & ! usingDataMode & & prefs . automaticSidebandSwitching )
{
2023-01-19 06:27:06 +00:00
issueCmd ( cmdSetMode , m ) ;
2023-01-19 07:17:28 +00:00
currentMode = m . mk ;
}
2023-01-19 06:27:06 +00:00
2021-07-10 01:13:11 +00:00
f . MHzDouble = ( float ) f . Hz / 1E6 ;
freq = f ;
setUIFreq ( ) ;
}
2021-04-07 04:00:47 +00:00
2018-06-19 19:58:52 +00:00
ui - > freqMhzLineEdit - > selectAll ( ) ;
freqTextSelected = true ;
2018-11-16 22:08:21 +00:00
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2018-06-19 19:58:52 +00:00
}
void wfmain : : checkFreqSel ( )
{
if ( freqTextSelected )
{
freqTextSelected = false ;
ui - > freqMhzLineEdit - > clear ( ) ;
}
}
void wfmain : : on_f0btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 0 " ) ) ;
}
void wfmain : : on_f1btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 1 " ) ) ;
}
void wfmain : : on_f2btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 2 " ) ) ;
}
void wfmain : : on_f3btn_clicked ( )
{
2023-01-30 17:10:39 +00:00
checkFreqSel ( ) ;
2018-06-19 19:58:52 +00:00
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 3 " ) ) ;
}
void wfmain : : on_f4btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 4 " ) ) ;
}
void wfmain : : on_f5btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 5 " ) ) ;
}
void wfmain : : on_f6btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 6 " ) ) ;
}
void wfmain : : on_f7btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 7 " ) ) ;
}
void wfmain : : on_f8btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 8 " ) ) ;
}
void wfmain : : on_f9btn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " 9 " ) ) ;
}
void wfmain : : on_fDotbtn_clicked ( )
{
checkFreqSel ( ) ;
ui - > freqMhzLineEdit - > setText ( ui - > freqMhzLineEdit - > text ( ) . append ( " . " ) ) ;
}
void wfmain : : on_fBackbtn_clicked ( )
{
QString currentFreq = ui - > freqMhzLineEdit - > text ( ) ;
currentFreq . chop ( 1 ) ;
ui - > freqMhzLineEdit - > setText ( currentFreq ) ;
}
void wfmain : : on_fCEbtn_clicked ( )
{
ui - > freqMhzLineEdit - > clear ( ) ;
freqTextSelected = false ;
}
2021-03-01 05:41:27 +00:00
void wfmain : : on_spectrumModeCombo_currentIndexChanged ( int index )
2018-06-19 19:58:52 +00:00
{
2022-09-18 20:13:33 +00:00
spectrumMode smode = static_cast < spectrumMode > ( ui - > spectrumModeCombo - > itemData ( index ) . toInt ( ) ) ;
emit setScopeMode ( smode ) ;
setUISpectrumControlsToMode ( smode ) ;
}
void wfmain : : setUISpectrumControlsToMode ( spectrumMode smode )
{
if ( ( smode = = spectModeCenter ) | | ( smode = = spectModeScrollC ) )
{
ui - > specEdgeLabel - > hide ( ) ;
ui - > scopeEdgeCombo - > hide ( ) ;
ui - > customEdgeBtn - > hide ( ) ;
ui - > toFixedBtn - > show ( ) ;
ui - > specSpanLabel - > show ( ) ;
ui - > scopeBWCombo - > show ( ) ;
} else {
ui - > specEdgeLabel - > show ( ) ;
ui - > scopeEdgeCombo - > show ( ) ;
ui - > customEdgeBtn - > show ( ) ;
ui - > toFixedBtn - > hide ( ) ;
ui - > specSpanLabel - > hide ( ) ;
ui - > scopeBWCombo - > hide ( ) ;
}
2018-06-19 19:58:52 +00:00
}
void wfmain : : on_fEnterBtn_clicked ( )
{
2018-11-24 08:10:05 +00:00
// TODO: do not jump to main tab on enter, only on return
// or something.
2021-05-20 18:24:40 +00:00
// Maybe this should be an option in settings->
2018-06-19 19:58:52 +00:00
on_goFreqBtn_clicked ( ) ;
}
void wfmain : : on_scopeBWCombo_currentIndexChanged ( int index )
{
emit setScopeSpan ( ( char ) index ) ;
}
void wfmain : : on_scopeEdgeCombo_currentIndexChanged ( int index )
{
emit setScopeEdge ( ( char ) index + 1 ) ;
}
2021-02-17 06:32:05 +00:00
void wfmain : : changeMode ( mode_kind mode )
{
bool dataOn = false ;
if ( ( ( unsigned char ) mode > > 4 ) = = 0x08 )
{
dataOn = true ;
mode = ( mode_kind ) ( ( int ) mode & 0x0f ) ;
}
changeMode ( mode , dataOn ) ;
}
void wfmain : : changeMode ( mode_kind mode , bool dataOn )
{
int filter = ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ;
2023-01-19 06:27:06 +00:00
mode_info m ;
m . filter = ( unsigned char ) filter ;
m . reg = ( unsigned char ) mode ;
issueCmd ( cmdSetMode , m ) ;
2021-04-27 01:24:28 +00:00
currentMode = mode ;
2023-01-19 06:50:18 +00:00
if ( dataOn & & ( ! usingDataMode ) )
2021-02-17 06:32:05 +00:00
{
issueDelayedCommand ( cmdSetDataModeOn ) ;
ui - > dataModeBtn - > blockSignals ( true ) ;
ui - > dataModeBtn - > setChecked ( true ) ;
ui - > dataModeBtn - > blockSignals ( false ) ;
2023-01-19 06:50:18 +00:00
} else if ( ( ! dataOn ) & & usingDataMode ) {
2021-02-17 06:32:05 +00:00
issueDelayedCommand ( cmdSetDataModeOff ) ;
ui - > dataModeBtn - > blockSignals ( true ) ;
ui - > dataModeBtn - > setChecked ( false ) ;
ui - > dataModeBtn - > blockSignals ( false ) ;
}
issueDelayedCommand ( cmdGetMode ) ;
}
2018-06-25 07:34:33 +00:00
void wfmain : : on_modeSelectCombo_activated ( int index )
{
2019-02-03 22:09:06 +00:00
// The "acticvated" signal means the user initiated a mode change.
2022-03-23 15:45:51 +00:00
// This function is not called if code initiated the change.
2018-06-19 19:58:52 +00:00
2021-06-26 06:56:19 +00:00
mode_info mode ;
2021-02-13 07:18:01 +00:00
unsigned char newMode = static_cast < unsigned char > ( ui - > modeSelectCombo - > itemData ( index ) . toUInt ( ) ) ;
2021-02-13 07:35:17 +00:00
currentModeIndex = newMode ;
2021-06-26 06:56:19 +00:00
mode . reg = newMode ;
2018-06-25 07:34:33 +00:00
2021-02-13 18:02:45 +00:00
int filterSelection = ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ;
if ( filterSelection = = 99 )
{
// oops, we forgot to reset the combo box
2021-06-26 06:56:19 +00:00
return ;
2021-02-13 18:02:45 +00:00
} else {
2021-05-15 17:53:16 +00:00
//qInfo(logSystem()) << __func__ << " at index " << index << " has newMode: " << newMode;
2021-04-27 01:24:28 +00:00
currentMode = ( mode_kind ) newMode ;
2021-06-26 06:56:19 +00:00
mode . filter = filterSelection ;
mode . name = ui - > modeSelectCombo - > currentText ( ) ; // for debug
for ( unsigned int i = 0 ; i < rigCaps . modes . size ( ) ; i + + )
{
if ( rigCaps . modes . at ( i ) . reg = = newMode )
{
mode . mk = rigCaps . modes . at ( i ) . mk ;
break ;
}
}
issueCmd ( cmdSetMode , mode ) ;
2023-01-27 01:41:35 +00:00
issueDelayedCommand ( cmdGetMode ) ;
//currentModeInfo = mode;
2021-02-13 18:02:45 +00:00
}
2018-06-19 19:58:52 +00:00
}
2018-06-22 23:31:52 +00:00
2018-06-25 07:34:33 +00:00
void wfmain : : on_freqDial_valueChanged ( int value )
{
2022-09-17 19:05:32 +00:00
int fullSweep = ui - > freqDial - > maximum ( ) - ui - > freqDial - > minimum ( ) ;
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = 0 ;
f . MHzDouble = 0 ;
2018-07-04 00:20:03 +00:00
volatile int delta = 0 ;
2021-02-22 07:58:23 +00:00
if ( freqLock )
{
ui - > freqDial - > blockSignals ( true ) ;
ui - > freqDial - > setValue ( oldFreqDialVal ) ;
ui - > freqDial - > blockSignals ( false ) ;
return ;
}
2018-07-04 00:20:03 +00:00
2022-09-17 19:05:32 +00:00
delta = ( value - oldFreqDialVal ) ;
if ( delta > fullSweep / 2 )
2018-07-04 00:20:03 +00:00
{
2022-09-17 19:05:32 +00:00
// counter-clockwise past the zero mark
// ie, from +3000 to 3990, old=3000, new = 3990, new-old = 990
// desired delta here would actually be -10
delta = delta - fullSweep ;
} else if ( delta < - fullSweep / 2 )
2018-07-04 00:20:03 +00:00
{
2022-09-17 19:05:32 +00:00
// clock-wise past the zero mark
// ie, from +3990 to 3000, old=3990, new = 3000, new-old = -990
// desired delta here would actually be +10
delta = fullSweep + delta ;
2018-07-04 00:20:03 +00:00
}
2022-09-17 19:05:32 +00:00
// The step size is 10, which forces the knob to not skip a step crossing zero.
delta = delta / ui - > freqDial - > singleStep ( ) ;
2018-07-04 00:20:03 +00:00
2021-03-22 07:11:43 +00:00
// With the number of steps and direction of steps established,
2022-03-23 15:45:51 +00:00
// we can now adjust the frequency:
2018-07-04 00:20:03 +00:00
2021-03-22 07:11:43 +00:00
f . Hz = roundFrequencyWithStep ( freq . Hz , delta , tsKnobHz ) ;
f . MHzDouble = f . Hz / ( double ) 1E6 ;
2021-06-04 23:23:16 +00:00
if ( f . Hz > 0 )
2021-05-02 06:02:27 +00:00
{
freq = f ;
oldFreqDialVal = value ;
ui - > freqLabel - > setText ( QString ( " %1 " ) . arg ( f . MHzDouble , 0 , ' f ' ) ) ;
2021-06-25 22:43:53 +00:00
issueCmdUniquePriority ( cmdSetFreq , f ) ;
2021-05-02 06:02:27 +00:00
} else {
ui - > freqDial - > blockSignals ( true ) ;
ui - > freqDial - > setValue ( oldFreqDialVal ) ;
ui - > freqDial - > blockSignals ( false ) ;
return ;
}
2018-06-25 07:34:33 +00:00
}
2018-11-16 22:08:21 +00:00
2021-07-10 01:13:11 +00:00
void wfmain : : receiveBandStackReg ( freqt freqGo , char mode , char filter , bool dataOn )
2018-11-16 22:08:21 +00:00
{
// read the band stack and apply by sending out commands
2021-07-10 01:13:11 +00:00
qInfo ( logSystem ( ) ) < < __func__ < < " BSR received into main: Freq: " < < freqGo . Hz < < " , mode: " < < ( unsigned int ) mode < < " , filter: " < < ( unsigned int ) filter < < " , data mode: " < < dataOn ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,freq);
2021-07-10 01:13:11 +00:00
issueCmd ( cmdSetFreq , freqGo ) ;
2021-05-07 22:46:47 +00:00
setModeVal = ( unsigned char ) mode ;
setFilterVal = ( unsigned char ) filter ;
issueDelayedCommand ( cmdSetModeFilter ) ;
2021-07-10 01:13:11 +00:00
freq = freqGo ;
setUIFreq ( ) ;
2018-11-16 22:08:21 +00:00
if ( dataOn )
{
2021-05-07 22:46:47 +00:00
issueDelayedCommand ( cmdSetDataModeOn ) ;
2018-11-16 22:08:21 +00:00
} else {
2021-05-07 22:46:47 +00:00
issueDelayedCommand ( cmdSetDataModeOff ) ;
2018-11-16 22:08:21 +00:00
}
2021-07-10 01:13:11 +00:00
//issueDelayedCommand(cmdGetFreq);
//issueDelayedCommand(cmdGetMode);
2018-11-16 22:08:21 +00:00
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2021-05-07 22:46:47 +00:00
receiveMode ( ( unsigned char ) mode , ( unsigned char ) filter ) ; // update UI
2018-11-16 22:08:21 +00:00
}
void wfmain : : bandStackBtnClick ( )
{
bandStkRegCode = ui - > bandStkPopdown - > currentIndex ( ) + 1 ;
waitingForBandStackRtn = true ; // so that when the return is parsed we jump to this frequency/mode info
emit getBandStackReg ( bandStkBand , bandStkRegCode ) ;
}
2022-04-22 10:11:21 +00:00
void wfmain : : setBand ( int band )
{
2022-04-22 13:59:49 +00:00
issueCmdUniquePriority ( cmdGetBandStackReg , ( char ) band ) ;
//bandStackBtnClick();
2022-04-22 10:11:21 +00:00
}
2021-04-27 01:24:28 +00:00
void wfmain : : on_band23cmbtn_clicked ( )
{
bandStkBand = rigCaps . bsr [ band23cm ] ; // 23cm
bandStackBtnClick ( ) ;
}
void wfmain : : on_band70cmbtn_clicked ( )
{
bandStkBand = rigCaps . bsr [ band70cm ] ; // 70cm
bandStackBtnClick ( ) ;
}
void wfmain : : on_band2mbtn_clicked ( )
{
bandStkBand = rigCaps . bsr [ band2m ] ; // 2m
bandStackBtnClick ( ) ;
}
2021-04-28 03:18:17 +00:00
void wfmain : : on_bandAirbtn_clicked ( )
{
bandStkBand = rigCaps . bsr [ bandAir ] ; // VHF Aircraft
bandStackBtnClick ( ) ;
}
void wfmain : : on_bandWFMbtn_clicked ( )
{
bandStkBand = rigCaps . bsr [ bandWFM ] ; // Broadcast FM
bandStackBtnClick ( ) ;
}
2021-04-27 01:24:28 +00:00
void wfmain : : on_band4mbtn_clicked ( )
{
// There isn't a BSR for this one:
freqt f ;
2023-01-16 12:24:22 +00:00
if ( ( currentMode = = modeAM ) | | ( currentMode = = modeFM ) )
2021-04-27 01:24:28 +00:00
{
f . Hz = ( 70.260 ) * 1E6 ;
} else {
f . Hz = ( 70.200 ) * 1E6 ;
}
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2021-04-27 01:24:28 +00:00
}
2018-11-16 22:08:21 +00:00
void wfmain : : on_band6mbtn_clicked ( )
{
bandStkBand = 0x10 ; // 6 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band10mbtn_clicked ( )
{
bandStkBand = 0x09 ; // 10 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band12mbtn_clicked ( )
{
bandStkBand = 0x08 ; // 12 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band15mbtn_clicked ( )
{
bandStkBand = 0x07 ; // 15 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band17mbtn_clicked ( )
{
bandStkBand = 0x06 ; // 17 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band20mbtn_clicked ( )
{
bandStkBand = 0x05 ; // 20 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band30mbtn_clicked ( )
{
bandStkBand = 0x04 ; // 30 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band40mbtn_clicked ( )
{
bandStkBand = 0x03 ; // 40 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band60mbtn_clicked ( )
{
// This one is tricky. There isn't a band stack register on the
// 7300 for 60 meters, so we just drop to the middle of the band:
// Channel 1: 5330.5 kHz
// Channel 2: 5346.5 kHz
// Channel 3: 5357.0 kHz
// Channel 4: 5371.5 kHz
// Channel 5: 5403.5 kHz
// Really not sure what the best strategy here is, don't want to
// clutter the UI with 60M channel buttons...
2021-03-22 07:11:43 +00:00
freqt f ;
f . Hz = ( 5.3305 ) * 1E6 ;
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-04-28 03:48:05 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2018-11-16 22:08:21 +00:00
}
void wfmain : : on_band80mbtn_clicked ( )
{
bandStkBand = 0x02 ; // 80 meters
bandStackBtnClick ( ) ;
}
void wfmain : : on_band160mbtn_clicked ( )
{
bandStkBand = 0x01 ; // 160 meters
bandStackBtnClick ( ) ;
}
2021-04-27 01:24:28 +00:00
void wfmain : : on_band630mbtn_clicked ( )
{
freqt f ;
f . Hz = 475 * 1E3 ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-04-28 03:48:05 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2021-04-27 01:24:28 +00:00
}
void wfmain : : on_band2200mbtn_clicked ( )
{
freqt f ;
f . Hz = 136 * 1E3 ;
2021-08-29 10:51:53 +00:00
//emit setFrequency(0,f);
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetFreq , f ) ;
2021-04-28 03:48:05 +00:00
issueDelayedCommandUnique ( cmdGetFreq ) ;
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2021-04-27 01:24:28 +00:00
}
2018-11-16 22:08:21 +00:00
void wfmain : : on_bandGenbtn_clicked ( )
{
// "GENE" general coverage frequency outside the ham bands
// which does probably include any 60 meter frequencies used.
2021-04-27 01:24:28 +00:00
bandStkBand = rigCaps . bsr [ bandGen ] ; // GEN
2018-11-16 22:08:21 +00:00
bandStackBtnClick ( ) ;
}
void wfmain : : on_aboutBtn_clicked ( )
{
2021-07-08 07:31:59 +00:00
abtBox - > show ( ) ;
2018-11-16 22:08:21 +00:00
}
void wfmain : : on_fStoBtn_clicked ( )
{
// sequence:
// type frequency
// press Enter or Go
// change mode if desired
2018-11-24 08:10:05 +00:00
// type in index number 0 through 99
2018-11-16 22:08:21 +00:00
// press STO
2018-11-24 08:10:05 +00:00
bool ok ;
int preset_number = ui - > freqMhzLineEdit - > text ( ) . toInt ( & ok ) ;
if ( ok & & ( preset_number > = 0 ) & & ( preset_number < 100 ) )
{
// TODO: keep an enum around with the current mode
2021-05-08 05:37:28 +00:00
mem . setPreset ( preset_number , freq . MHzDouble , ( mode_kind ) ui - > modeSelectCombo - > currentData ( ) . toInt ( ) ) ;
2021-03-22 07:11:43 +00:00
showStatusBarText ( QString ( " Storing frequency %1 to memory location %2 " ) . arg ( freq . MHzDouble ) . arg ( preset_number ) ) ;
2018-11-24 08:10:05 +00:00
} else {
2020-03-30 21:09:52 +00:00
showStatusBarText ( QString ( " Could not store preset to %1. Valid preset numbers are 0 to 99 " ) . arg ( preset_number ) ) ;
2018-11-24 08:10:05 +00:00
}
2018-11-16 22:08:21 +00:00
}
void wfmain : : on_fRclBtn_clicked ( )
{
// Sequence:
// type memory location 0 through 99
// press RCL
// Program recalls data stored in vector at position specified
// drop contents into text box, press go button
// add delayed command for mode and data mode
2018-11-24 08:10:05 +00:00
preset_kind temp ;
bool ok ;
QString freqString ;
int preset_number = ui - > freqMhzLineEdit - > text ( ) . toInt ( & ok ) ;
if ( ok & & ( preset_number > = 0 ) & & ( preset_number < 100 ) )
{
temp = mem . getPreset ( preset_number ) ;
2021-05-08 05:37:28 +00:00
// TODO: change to int hz
// TODO: store filter setting as well.
2018-11-24 08:10:05 +00:00
freqString = QString ( " %1 " ) . arg ( temp . frequency ) ;
ui - > freqMhzLineEdit - > setText ( freqString ) ;
ui - > goFreqBtn - > click ( ) ;
2021-05-08 05:37:28 +00:00
setModeVal = temp . mode ;
setFilterVal = ui - > modeFilterCombo - > currentIndex ( ) + 1 ; // TODO, add to memory
issueDelayedCommand ( cmdSetModeFilter ) ;
issueDelayedCommand ( cmdGetMode ) ;
2018-11-24 08:10:05 +00:00
} else {
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Could not recall preset. Valid presets are 0 through 99. " ;
2018-11-24 08:10:05 +00:00
}
2018-11-16 22:08:21 +00:00
}
2018-11-17 06:19:44 +00:00
void wfmain : : on_rfGainSlider_valueChanged ( int value )
{
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetRxRfGain , ( unsigned char ) value ) ;
2018-11-17 06:19:44 +00:00
}
void wfmain : : on_afGainSlider_valueChanged ( int value )
{
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetAfGain , ( unsigned char ) value ) ;
2021-07-05 23:45:19 +00:00
if ( usingLAN )
{
rxSetup . localAFgain = ( unsigned char ) ( value ) ;
prefs . localAFgain = ( unsigned char ) ( value ) ;
}
2018-11-17 06:19:44 +00:00
}
void wfmain : : receiveRfGain ( unsigned char level )
{
2021-05-15 17:53:16 +00:00
// qInfo(logSystem()) << "Receive RF level of" << (int)level << " = " << 100*level/255.0 << "%";
2018-12-19 20:31:44 +00:00
ui - > rfGainSlider - > blockSignals ( true ) ;
2018-11-17 06:19:44 +00:00
ui - > rfGainSlider - > setValue ( level ) ;
2018-12-19 20:31:44 +00:00
ui - > rfGainSlider - > blockSignals ( false ) ;
2018-11-17 06:19:44 +00:00
}
void wfmain : : receiveAfGain ( unsigned char level )
{
2021-05-15 17:53:16 +00:00
// qInfo(logSystem()) << "Receive AF level of" << (int)level << " = " << 100*level/255.0 << "%";
2018-12-19 20:31:44 +00:00
ui - > afGainSlider - > blockSignals ( true ) ;
2018-11-17 06:19:44 +00:00
ui - > afGainSlider - > setValue ( level ) ;
2018-12-19 20:31:44 +00:00
ui - > afGainSlider - > blockSignals ( false ) ;
2018-11-17 06:19:44 +00:00
}
2018-11-18 08:01:20 +00:00
void wfmain : : receiveSql ( unsigned char level )
{
2021-02-11 05:22:38 +00:00
ui - > sqlSlider - > setValue ( level ) ;
2018-11-18 08:01:20 +00:00
}
2021-11-05 17:09:31 +00:00
void wfmain : : receiveIFShift ( unsigned char level )
{
trxadj - > updateIFShift ( level ) ;
}
void wfmain : : receiveTBPFInner ( unsigned char level )
{
trxadj - > updateTPBFInner ( level ) ;
}
void wfmain : : receiveTBPFOuter ( unsigned char level )
{
trxadj - > updateTPBFOuter ( level ) ;
}
2018-11-17 06:19:44 +00:00
void wfmain : : on_tuneNowBtn_clicked ( )
{
2021-06-26 02:47:40 +00:00
issueDelayedCommand ( cmdStartATU ) ;
2018-12-20 19:22:52 +00:00
showStatusBarText ( " Starting ATU tuning cycle... " ) ;
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetATUStatus ) ;
2018-11-17 07:13:59 +00:00
}
2018-11-17 06:19:44 +00:00
2018-11-17 07:13:59 +00:00
void wfmain : : on_tuneEnableChk_clicked ( bool checked )
{
2021-06-26 02:47:40 +00:00
issueCmd ( cmdSetATU , checked ) ;
2018-11-17 07:13:59 +00:00
if ( checked )
{
showStatusBarText ( " Turning on ATU " ) ;
} else {
showStatusBarText ( " Turning off ATU " ) ;
}
2018-11-17 06:19:44 +00:00
}
2018-11-20 07:42:34 +00:00
void wfmain : : on_exitBtn_clicked ( )
{
// Are you sure?
QApplication : : exit ( ) ;
}
2018-11-24 08:10:05 +00:00
void wfmain : : on_pttOnBtn_clicked ( )
{
// is it enabled?
2019-01-24 01:19:35 +00:00
if ( ! ui - > pttEnableChk - > isChecked ( ) )
{
2020-03-12 03:58:31 +00:00
showStatusBarText ( " PTT is disabled, not sending command. Change under Settings tab. " ) ;
2019-01-24 01:19:35 +00:00
return ;
}
2018-11-24 08:10:05 +00:00
2019-01-24 01:19:35 +00:00
// Are we already PTT? Not a big deal, just send again anyway.
2020-03-12 03:58:31 +00:00
showStatusBarText ( " Sending PTT ON command. Use Control-R to receive. " ) ;
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetPTT , true ) ;
2022-12-28 22:45:42 +00:00
2018-11-24 08:10:05 +00:00
// send PTT
// Start 3 minute timer
2019-01-24 01:19:35 +00:00
pttTimer - > start ( ) ;
2021-02-15 04:51:18 +00:00
issueDelayedCommand ( cmdGetPTT ) ;
2018-11-24 08:10:05 +00:00
}
void wfmain : : on_pttOffBtn_clicked ( )
{
// Send the PTT OFF command (more than once?)
2019-01-24 01:19:35 +00:00
showStatusBarText ( " Sending PTT OFF command " ) ;
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetPTT , false ) ;
2018-11-24 08:10:05 +00:00
2018-11-27 07:10:23 +00:00
// Stop the 3 min timer
2019-01-24 01:19:35 +00:00
pttTimer - > stop ( ) ;
2021-02-15 04:51:18 +00:00
issueDelayedCommand ( cmdGetPTT ) ;
2019-01-24 01:19:35 +00:00
}
void wfmain : : handlePttLimit ( )
{
// transmission time exceeded!
showStatusBarText ( " Transmit timeout at 3 minutes. Sending PTT OFF command now. " ) ;
2021-02-17 06:32:05 +00:00
issueDelayedCommand ( cmdGetPTT ) ;
2018-11-24 08:10:05 +00:00
}
2018-11-27 07:10:23 +00:00
void wfmain : : on_saveSettingsBtn_clicked ( )
{
saveSettings ( ) ; // save memory, UI, and radio settings
}
2018-12-19 20:31:44 +00:00
void wfmain : : receiveATUStatus ( unsigned char atustatus )
{
2021-05-15 17:53:16 +00:00
// qInfo(logSystem()) << "Received ATU status update: " << (unsigned int) atustatus;
2018-12-19 20:31:44 +00:00
switch ( atustatus )
{
case 0x00 :
// ATU not active
ui - > tuneEnableChk - > blockSignals ( true ) ;
ui - > tuneEnableChk - > setChecked ( false ) ;
ui - > tuneEnableChk - > blockSignals ( false ) ;
showStatusBarText ( " ATU not enabled. " ) ;
break ;
case 0x01 :
// ATU enabled
ui - > tuneEnableChk - > blockSignals ( true ) ;
ui - > tuneEnableChk - > setChecked ( true ) ;
ui - > tuneEnableChk - > blockSignals ( false ) ;
showStatusBarText ( " ATU enabled. " ) ;
break ;
case 0x02 :
// ATU tuning in-progress.
// Add command queue to check again and update status bar
2021-05-15 17:53:16 +00:00
// qInfo(logSystem()) << "Received ATU status update that *tuning* is taking place";
2018-12-20 19:22:52 +00:00
showStatusBarText ( " ATU is Tuning... " ) ;
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdGetATUStatus ) ; // Sometimes the first hit seems to be missed.
issueDelayedCommand ( cmdGetATUStatus ) ;
2018-12-19 20:31:44 +00:00
break ;
2018-12-20 18:56:54 +00:00
default :
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Did not understand ATU status: " < < ( unsigned int ) atustatus ;
2018-12-20 19:22:52 +00:00
break ;
2018-12-19 20:31:44 +00:00
}
}
2019-02-10 07:13:18 +00:00
void wfmain : : on_pttEnableChk_clicked ( bool checked )
{
prefs . enablePTT = checked ;
}
2021-03-03 05:55:33 +00:00
void wfmain : : on_serialEnableBtn_clicked ( bool checked )
{
prefs . enableLAN = ! checked ;
ui - > serialDeviceListCombo - > setEnabled ( checked ) ;
2021-05-31 06:26:36 +00:00
ui - > connectBtn - > setEnabled ( true ) ;
2021-03-03 05:55:33 +00:00
ui - > ipAddressTxt - > setEnabled ( ! checked ) ;
ui - > controlPortTxt - > setEnabled ( ! checked ) ;
ui - > usernameTxt - > setEnabled ( ! checked ) ;
ui - > passwordTxt - > setEnabled ( ! checked ) ;
2021-03-22 09:10:03 +00:00
ui - > audioRXCodecCombo - > setEnabled ( ! checked ) ;
ui - > audioTXCodecCombo - > setEnabled ( ! checked ) ;
ui - > audioSampleRateCombo - > setEnabled ( ! checked ) ;
ui - > rxLatencySlider - > setEnabled ( ! checked ) ;
ui - > txLatencySlider - > setEnabled ( ! checked ) ;
ui - > rxLatencyValue - > setEnabled ( ! checked ) ;
ui - > txLatencyValue - > setEnabled ( ! checked ) ;
2021-12-24 05:04:53 +00:00
ui - > audioOutputCombo - > setEnabled ( ! checked ) ;
ui - > audioInputCombo - > setEnabled ( ! checked ) ;
2021-05-20 04:36:34 +00:00
ui - > baudRateCombo - > setEnabled ( checked ) ;
ui - > serialDeviceListCombo - > setEnabled ( checked ) ;
2022-05-05 17:09:16 +00:00
ui - > serverRXAudioInputCombo - > setEnabled ( checked ) ;
ui - > serverTXAudioOutputCombo - > setEnabled ( checked ) ;
2022-09-18 14:23:37 +00:00
2021-03-03 05:55:33 +00:00
}
void wfmain : : on_lanEnableBtn_clicked ( bool checked )
2021-02-03 19:36:35 +00:00
{
prefs . enableLAN = checked ;
2021-05-31 06:26:36 +00:00
ui - > connectBtn - > setEnabled ( true ) ;
2021-02-05 04:54:34 +00:00
ui - > ipAddressTxt - > setEnabled ( checked ) ;
ui - > controlPortTxt - > setEnabled ( checked ) ;
ui - > usernameTxt - > setEnabled ( checked ) ;
ui - > passwordTxt - > setEnabled ( checked ) ;
2021-12-24 05:02:35 +00:00
ui - > audioRXCodecCombo - > setEnabled ( checked ) ;
ui - > audioTXCodecCombo - > setEnabled ( checked ) ;
ui - > audioSampleRateCombo - > setEnabled ( checked ) ;
ui - > rxLatencySlider - > setEnabled ( checked ) ;
ui - > txLatencySlider - > setEnabled ( checked ) ;
ui - > rxLatencyValue - > setEnabled ( checked ) ;
ui - > txLatencyValue - > setEnabled ( checked ) ;
2021-12-24 05:04:53 +00:00
ui - > audioOutputCombo - > setEnabled ( checked ) ;
ui - > audioInputCombo - > setEnabled ( checked ) ;
2021-05-20 04:36:34 +00:00
ui - > baudRateCombo - > setEnabled ( ! checked ) ;
ui - > serialDeviceListCombo - > setEnabled ( ! checked ) ;
2022-05-05 17:09:16 +00:00
ui - > serverRXAudioInputCombo - > setEnabled ( ! checked ) ;
ui - > serverTXAudioOutputCombo - > setEnabled ( ! checked ) ;
2021-02-05 04:54:34 +00:00
if ( checked )
{
2021-07-25 05:53:36 +00:00
showStatusBarText ( " After filling in values, press Save Settings. " ) ;
2021-02-05 04:54:34 +00:00
}
2021-02-03 19:36:35 +00:00
}
void wfmain : : on_ipAddressTxt_textChanged ( QString text )
{
2021-03-01 19:53:12 +00:00
udpPrefs . ipAddress = text ;
2021-02-03 19:36:35 +00:00
}
void wfmain : : on_controlPortTxt_textChanged ( QString text )
{
2021-03-01 19:53:12 +00:00
udpPrefs . controlLANPort = text . toUInt ( ) ;
2021-02-03 19:36:35 +00:00
}
void wfmain : : on_usernameTxt_textChanged ( QString text )
{
2021-03-01 19:53:12 +00:00
udpPrefs . username = text ;
2021-02-03 19:36:35 +00:00
}
void wfmain : : on_passwordTxt_textChanged ( QString text )
{
2021-03-01 19:53:12 +00:00
udpPrefs . password = text ;
2021-02-03 19:36:35 +00:00
}
2023-01-27 01:41:35 +00:00
void wfmain : : on_audioDuplexCombo_currentIndexChanged ( int value )
{
udpPrefs . halfDuplex = ( bool ) value ;
}
2021-05-16 20:16:59 +00:00
void wfmain : : on_audioOutputCombo_currentIndexChanged ( int value )
2021-02-04 10:27:30 +00:00
{
2022-05-12 00:46:20 +00:00
2023-01-15 11:14:28 +00:00
if ( value > = 0 ) {
if ( prefs . audioSystem = = qtAudio ) {
rxSetup . port = audioDev - > getOutputDeviceInfo ( value ) ;
}
else {
rxSetup . portInt = audioDev - > getOutputDeviceInt ( value ) ;
}
2022-04-20 12:35:23 +00:00
2023-01-15 11:14:28 +00:00
rxSetup . name = audioDev - > getOutputName ( value ) ;
}
2022-05-12 00:46:20 +00:00
qDebug ( logGui ( ) ) < < " Changed audio output to: " < < rxSetup . name ;
2021-02-04 10:27:30 +00:00
}
2021-05-16 20:16:59 +00:00
void wfmain : : on_audioInputCombo_currentIndexChanged ( int value )
2021-02-08 16:53:26 +00:00
{
2023-01-15 11:14:28 +00:00
if ( value > = 0 ) {
if ( prefs . audioSystem = = qtAudio ) {
txSetup . port = audioDev - > getInputDeviceInfo ( value ) ;
}
else {
txSetup . portInt = audioDev - > getInputDeviceInt ( value ) ;
}
2022-05-12 00:46:20 +00:00
2023-01-15 11:14:28 +00:00
txSetup . name = audioDev - > getInputName ( value ) ;
2022-05-12 00:46:20 +00:00
}
qDebug ( logGui ( ) ) < < " Changed audio input to: " < < txSetup . name ;
2021-02-08 16:53:26 +00:00
}
2022-08-22 22:09:09 +00:00
void wfmain : : on_audioSampleRateCombo_currentIndexChanged ( int value )
2021-02-08 16:53:26 +00:00
{
2022-08-22 22:09:09 +00:00
rxSetup . sampleRate = ui - > audioSampleRateCombo - > itemText ( value ) . toInt ( ) ;
txSetup . sampleRate = ui - > audioSampleRateCombo - > itemText ( value ) . toInt ( ) ;
2021-02-09 12:43:28 +00:00
}
void wfmain : : on_audioRXCodecCombo_currentIndexChanged ( int value )
{
2021-06-04 07:24:26 +00:00
rxSetup . codec = ui - > audioRXCodecCombo - > itemData ( value ) . toInt ( ) ;
2021-02-08 16:53:26 +00:00
}
2021-02-09 12:43:28 +00:00
void wfmain : : on_audioTXCodecCombo_currentIndexChanged ( int value )
2021-02-08 16:53:26 +00:00
{
2021-06-04 07:24:26 +00:00
txSetup . codec = ui - > audioTXCodecCombo - > itemData ( value ) . toInt ( ) ;
2021-02-08 16:53:26 +00:00
}
2021-02-27 00:37:00 +00:00
void wfmain : : on_rxLatencySlider_valueChanged ( int value )
{
2021-06-04 07:24:26 +00:00
rxSetup . latency = value ;
2021-02-27 00:37:00 +00:00
ui - > rxLatencyValue - > setText ( QString : : number ( value ) ) ;
emit sendChangeLatency ( value ) ;
}
void wfmain : : on_txLatencySlider_valueChanged ( int value )
2021-02-08 16:53:26 +00:00
{
2021-06-04 07:24:26 +00:00
txSetup . latency = value ;
2021-02-27 00:37:00 +00:00
ui - > txLatencyValue - > setText ( QString : : number ( value ) ) ;
2021-02-08 16:53:26 +00:00
}
2021-05-05 13:11:00 +00:00
void wfmain : : on_vspCombo_currentIndexChanged ( int value )
{
Q_UNUSED ( value ) ;
prefs . virtualSerialPort = ui - > vspCombo - > currentText ( ) ;
}
2021-02-06 07:58:17 +00:00
void wfmain : : on_toFixedBtn_clicked ( )
{
2022-09-20 15:58:12 +00:00
int currentEdge = ui - > scopeEdgeCombo - > currentIndex ( ) ;
bool dialogOk = false ;
bool numOk = false ;
QStringList edges ;
edges < < " 1 " < < " 2 " < < " 3 " < < " 4 " ;
QString item = QInputDialog : : getItem ( this , " Select Edge " , " Edge to replace: " , edges , currentEdge , false , & dialogOk ) ;
if ( dialogOk )
{
int edge = QString ( item ) . toInt ( & numOk , 10 ) ;
if ( numOk )
{
emit setScopeFixedEdge ( oldLowerFreq , oldUpperFreq , edge ) ;
emit setScopeEdge ( edge ) ;
ui - > scopeEdgeCombo - > blockSignals ( true ) ;
ui - > scopeEdgeCombo - > setCurrentIndex ( edge - 1 ) ;
ui - > scopeEdgeCombo - > blockSignals ( false ) ;
issueDelayedCommand ( cmdScopeFixedMode ) ;
}
}
2021-02-06 07:58:17 +00:00
}
2021-03-01 05:41:27 +00:00
2021-02-07 12:59:41 +00:00
void wfmain : : on_connectBtn_clicked ( )
{
2021-02-07 17:40:38 +00:00
this - > rigStatus - > setText ( " " ) ; // Clear status
2023-01-05 20:00:31 +00:00
if ( ui - > connectBtn - > text ( ) = = " Connect to Radio " ) {
connectionHandler ( true ) ;
2021-02-07 12:59:41 +00:00
}
2023-01-05 20:00:31 +00:00
else
2021-02-07 12:59:41 +00:00
{
2023-01-05 20:00:31 +00:00
connectionHandler ( false ) ;
2021-02-07 12:59:41 +00:00
}
2023-01-05 20:00:31 +00:00
2022-09-17 21:43:40 +00:00
ui - > connectBtn - > clearFocus ( ) ;
2021-02-07 12:59:41 +00:00
}
2021-02-11 05:22:38 +00:00
void wfmain : : on_sqlSlider_valueChanged ( int value )
{
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetSql , ( unsigned char ) value ) ;
//emit setSql((unsigned char)value);
2021-02-11 05:22:38 +00:00
}
2021-11-05 17:09:31 +00:00
// These three are from the transceiver adjustment window:
void wfmain : : changeIFShift ( unsigned char level )
{
2021-11-05 18:52:20 +00:00
//issueCmd(cmdSetIFShift, level);
issueCmdUniquePriority ( cmdSetIFShift , level ) ;
2021-11-05 17:09:31 +00:00
}
void wfmain : : changeTPBFInner ( unsigned char level )
{
2021-11-05 18:52:20 +00:00
issueCmdUniquePriority ( cmdSetTPBFInner , level ) ;
2021-11-05 17:09:31 +00:00
}
void wfmain : : changeTPBFOuter ( unsigned char level )
{
2021-11-05 18:52:20 +00:00
issueCmdUniquePriority ( cmdSetTPBFOuter , level ) ;
2021-11-05 17:09:31 +00:00
}
2021-02-11 05:22:38 +00:00
2021-02-11 17:21:17 +00:00
void wfmain : : on_modeFilterCombo_activated ( int index )
{
2021-02-13 18:02:45 +00:00
int filterSelection = ui - > modeFilterCombo - > itemData ( index ) . toInt ( ) ;
2023-01-19 06:50:18 +00:00
mode_info m ;
2021-02-13 18:02:45 +00:00
if ( filterSelection = = 99 )
2021-02-11 17:21:17 +00:00
{
2021-02-13 18:02:45 +00:00
// TODO:
// Bump the filter selected back to F1, F2, or F3
// possibly track the filter in the class. Would make this easier.
// filterSetup.show();
//
} else {
unsigned char newMode = static_cast < unsigned char > ( ui - > modeSelectCombo - > currentData ( ) . toUInt ( ) ) ;
currentModeIndex = newMode ; // we track this for other functions
2021-05-15 02:49:37 +00:00
if ( ui - > dataModeBtn - > isChecked ( ) )
{
emit setDataMode ( true , ( unsigned char ) filterSelection ) ;
2023-01-19 06:50:18 +00:00
issueDelayedCommand ( cmdSetDataModeOn ) ;
2021-05-15 02:49:37 +00:00
} else {
2023-01-19 06:50:18 +00:00
m . filter = ( unsigned char ) filterSelection ;
m . mk = ( mode_kind ) newMode ;
m . reg = newMode ;
issueCmd ( cmdSetMode , m ) ;
2023-01-27 01:41:35 +00:00
2023-01-19 06:50:18 +00:00
//emit setMode(newMode, (unsigned char)filterSelection);
2021-05-15 02:49:37 +00:00
}
2021-02-11 17:21:17 +00:00
}
}
2021-02-11 05:22:38 +00:00
2021-02-14 07:42:51 +00:00
void wfmain : : on_dataModeBtn_toggled ( bool checked )
{
2021-05-09 06:46:44 +00:00
emit setDataMode ( checked , ( unsigned char ) ui - > modeFilterCombo - > currentData ( ) . toInt ( ) ) ;
2021-02-20 08:05:23 +00:00
usingDataMode = checked ;
2021-02-20 08:15:47 +00:00
if ( usingDataMode )
{
changeModLabelAndSlider ( currentModDataSrc ) ;
} else {
changeModLabelAndSlider ( currentModSrc ) ;
}
2021-02-14 07:42:51 +00:00
}
2021-02-15 04:45:48 +00:00
void wfmain : : on_transmitBtn_clicked ( )
{
if ( ! amTransmitting )
{
// Currently receiving
if ( ! ui - > pttEnableChk - > isChecked ( ) )
{
showStatusBarText ( " PTT is disabled, not sending command. Change under Settings tab. " ) ;
return ;
}
// Are we already PTT? Not a big deal, just send again anyway.
showStatusBarText ( " Sending PTT ON command. Use Control-R to receive. " ) ;
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetPTT , true ) ;
2021-02-15 04:45:48 +00:00
// send PTT
// Start 3 minute timer
pttTimer - > start ( ) ;
2021-06-26 02:47:40 +00:00
issueDelayedCommand ( cmdGetPTT ) ;
2021-02-15 04:45:48 +00:00
//changeTxBtn();
} else {
// Currently transmitting
2021-06-26 02:47:40 +00:00
issueCmdUniquePriority ( cmdSetPTT , false ) ;
2021-02-17 06:32:05 +00:00
pttTimer - > stop ( ) ;
2021-06-26 02:47:40 +00:00
issueDelayedCommand ( cmdGetPTT ) ;
2021-02-15 04:45:48 +00:00
}
}
2021-02-15 06:40:04 +00:00
void wfmain : : on_adjRefBtn_clicked ( )
{
cal - > show ( ) ;
}
void wfmain : : on_satOpsBtn_clicked ( )
{
sat - > show ( ) ;
}
2021-07-09 19:02:50 +00:00
void wfmain : : setRadioTimeDatePrep ( )
{
if ( ! waitingToSetTimeDate )
{
// 1: Find the current time and date
2021-12-24 04:05:34 +00:00
QDateTime now ;
if ( ui - > useUTCChk - > isChecked ( ) )
{
now = QDateTime : : currentDateTimeUtc ( ) ;
now . setTime ( QTime : : currentTime ( ) ) ;
} else {
now = QDateTime : : currentDateTime ( ) ;
now . setTime ( QTime : : currentTime ( ) ) ;
}
2021-07-09 19:02:50 +00:00
int second = now . time ( ) . second ( ) ;
// 2: Find how many mseconds until next minute
int msecdelay = QTime : : currentTime ( ) . msecsTo ( QTime : : currentTime ( ) . addSecs ( 60 - second ) ) ;
// 3: Compute time and date at one minute later
2022-03-23 15:45:51 +00:00
QDateTime setpoint = now . addMSecs ( msecdelay ) ; // at HMS or possibly HMS + some ms. Never under though.
2021-07-09 19:02:50 +00:00
// 4: Prepare data structs for the time at one minute later
timesetpoint . hours = ( unsigned char ) setpoint . time ( ) . hour ( ) ;
timesetpoint . minutes = ( unsigned char ) setpoint . time ( ) . minute ( ) ;
datesetpoint . day = ( unsigned char ) setpoint . date ( ) . day ( ) ;
datesetpoint . month = ( unsigned char ) setpoint . date ( ) . month ( ) ;
datesetpoint . year = ( uint16_t ) setpoint . date ( ) . year ( ) ;
unsigned int utcOffsetSeconds = ( unsigned int ) abs ( setpoint . offsetFromUtc ( ) ) ;
bool isMinus = setpoint . offsetFromUtc ( ) < 0 ;
utcsetting . hours = utcOffsetSeconds / 60 / 60 ;
utcsetting . minutes = ( utcOffsetSeconds - ( utcsetting . hours * 60 * 60 ) ) / 60 ;
utcsetting . isMinus = isMinus ;
timeSync - > setInterval ( msecdelay ) ;
timeSync - > setSingleShot ( true ) ;
// 5: start one-shot timer for the delta computed in #2.
timeSync - > start ( ) ;
waitingToSetTimeDate = true ;
showStatusBarText ( QString ( " Setting time, date, and UTC offset for radio in %1 seconds. " ) . arg ( msecdelay / 1000 ) ) ;
}
}
void wfmain : : setRadioTimeDateSend ( )
{
// Issue priority commands for UTC offset, date, and time
// UTC offset must come first, otherwise the radio may "help" and correct for any changes.
showStatusBarText ( QString ( " Setting time, date, and UTC offset for radio now. " ) ) ;
issueCmd ( cmdSetTime , timesetpoint ) ;
issueCmd ( cmdSetDate , datesetpoint ) ;
issueCmd ( cmdSetUTCOffset , utcsetting ) ;
waitingToSetTimeDate = false ;
}
2021-02-16 01:15:28 +00:00
void wfmain : : changeSliderQuietly ( QSlider * slider , int value )
{
slider - > blockSignals ( true ) ;
slider - > setValue ( value ) ;
slider - > blockSignals ( false ) ;
}
2021-06-19 23:16:07 +00:00
void wfmain : : statusFromSliderRaw ( QString name , int rawValue )
{
showStatusBarText ( name + QString ( " : %1 " ) . arg ( rawValue ) ) ;
}
void wfmain : : statusFromSliderPercent ( QString name , int rawValue )
{
2021-06-26 09:13:35 +00:00
showStatusBarText ( name + QString ( " : %1% " ) . arg ( ( int ) ( 100 * rawValue / 255.0 ) ) ) ;
2021-06-19 23:16:07 +00:00
}
2021-02-16 01:15:28 +00:00
void wfmain : : receiveTxPower ( unsigned char power )
{
changeSliderQuietly ( ui - > txPowerSlider , power ) ;
}
void wfmain : : receiveMicGain ( unsigned char gain )
{
2021-02-20 08:05:23 +00:00
processModLevel ( inputMic , gain ) ;
}
void wfmain : : processModLevel ( rigInput source , unsigned char level )
{
rigInput currentIn ;
if ( usingDataMode )
{
currentIn = currentModDataSrc ;
} else {
currentIn = currentModSrc ;
}
switch ( source )
{
case inputMic :
micGain = level ;
break ;
case inputACC :
accGain = level ;
break ;
case inputACCA :
accAGain = level ;
break ;
case inputACCB :
accBGain = level ;
break ;
case inputUSB :
usbGain = level ;
break ;
case inputLAN :
lanGain = level ;
break ;
default :
break ;
}
if ( currentIn = = source )
{
changeSliderQuietly ( ui - > micGainSlider , level ) ;
}
2021-02-16 01:15:28 +00:00
}
2021-02-19 08:14:40 +00:00
void wfmain : : receiveModInput ( rigInput input , bool dataOn )
2021-02-18 07:47:34 +00:00
{
2021-02-19 08:14:40 +00:00
QComboBox * box ;
2021-02-20 08:05:23 +00:00
QString inputName ;
2021-02-19 08:14:40 +00:00
bool found ;
2021-02-20 08:05:23 +00:00
bool foundCurrent = false ;
2021-02-19 08:14:40 +00:00
if ( dataOn )
{
box = ui - > modInputDataCombo ;
2021-02-20 08:05:23 +00:00
currentModDataSrc = input ;
if ( usingDataMode )
foundCurrent = true ;
2021-02-19 08:14:40 +00:00
} else {
box = ui - > modInputCombo ;
2021-02-20 08:05:23 +00:00
currentModSrc = input ;
if ( ! usingDataMode )
foundCurrent = true ;
2021-02-19 08:14:40 +00:00
}
for ( int i = 0 ; i < box - > count ( ) ; i + + )
{
if ( box - > itemData ( i ) . toInt ( ) = = ( int ) input )
{
box - > blockSignals ( true ) ;
box - > setCurrentIndex ( i ) ;
box - > blockSignals ( false ) ;
found = true ;
}
}
2021-02-20 08:05:23 +00:00
if ( foundCurrent )
{
changeModLabel ( input ) ;
}
2021-02-19 08:14:40 +00:00
if ( ! found )
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Could not find modulation input: " < < ( int ) input ;
2021-02-18 07:47:34 +00:00
}
void wfmain : : receiveACCGain ( unsigned char level , unsigned char ab )
{
2021-02-20 08:05:23 +00:00
if ( ab = = 1 )
{
processModLevel ( inputACCB , level ) ;
} else {
if ( rigCaps . model = = model7850 )
{
processModLevel ( inputACCA , level ) ;
} else {
processModLevel ( inputACC , level ) ;
}
}
2021-02-18 07:47:34 +00:00
}
void wfmain : : receiveUSBGain ( unsigned char level )
{
2021-02-20 08:05:23 +00:00
processModLevel ( inputUSB , level ) ;
2021-02-18 07:47:34 +00:00
}
void wfmain : : receiveLANGain ( unsigned char level )
{
2021-02-20 08:05:23 +00:00
processModLevel ( inputLAN , level ) ;
2021-02-18 07:47:34 +00:00
}
2022-10-28 19:04:14 +00:00
void wfmain : : receivePassband ( quint16 pass )
2022-09-26 00:44:49 +00:00
{
2023-01-20 11:24:29 +00:00
if ( passbandWidth ! = ( double ) ( pass / 1000000.0 ) ) {
passbandWidth = ( double ) ( pass / 1000000.0 ) ;
2023-01-20 07:02:54 +00:00
trxadj - > updatePassband ( pass ) ;
2023-02-05 21:51:00 +00:00
rigState - > set ( PASSBAND , pass , false ) ;
2023-01-13 21:07:55 +00:00
showStatusBarText ( QString ( " IF filter width %1 Hz " ) . arg ( pass ) ) ;
2023-01-13 21:04:10 +00:00
}
2022-09-26 00:44:49 +00:00
}
2023-01-18 18:52:05 +00:00
void wfmain : : receiveCwPitch ( unsigned char pitch ) {
if ( currentModeInfo . mk = = modeCW | | currentModeInfo . mk = = modeCW_R ) {
2023-01-25 18:01:24 +00:00
cwPitch = round ( ( ( ( 600.0 / 255.0 ) * pitch ) + 300 ) / 5.0 ) * 5.0 ;
2023-01-24 20:12:23 +00:00
passbandCenterFrequency = cwPitch / 2000000.0 ;
2023-01-18 18:52:05 +00:00
}
2023-01-25 15:39:01 +00:00
//qDebug() << "CW" << pitch << "Pitch" << cwPitch;
2023-01-18 18:52:05 +00:00
}
2023-01-16 12:24:22 +00:00
void wfmain : : receiveTPBFInner ( unsigned char level ) {
2023-01-24 20:12:23 +00:00
/*
2023-01-25 11:41:50 +00:00
* This is written like this as although PBT is supposed to be sent in 25 Hz steps ,
2023-01-24 20:12:23 +00:00
* sometimes it sends the ' nearest ' value . This results in math errors .
2023-01-25 11:41:50 +00:00
* In CW mode , the value is also dependant on the CW Pitch setting
2023-01-24 20:12:23 +00:00
*/
2023-01-16 12:24:22 +00:00
qint16 shift = ( qint16 ) ( level - 128 ) ;
2023-01-25 11:41:50 +00:00
double tempVar = ceil ( ( shift / 127.0 ) * passbandWidth * 20000.0 ) / 20000.0 ;
// tempVar now contains value to the nearest 50Hz If CW mode, add/remove the cwPitch.
double pitch = 0.0 ;
if ( ( currentModeInfo . mk = = modeCW | | currentModeInfo . mk = = modeCW_R ) & & passbandWidth > 0.0006 )
{
pitch = ( 600.0 - cwPitch ) / 1000000.0 ;
}
TPBFInner = round ( ( tempVar + pitch ) * 200000.0 ) / 200000.0 ; // Nearest 5Hz.
//qDebug() << "Inner" << level << "TPBFInner" << TPBFInner;
2023-01-16 12:24:22 +00:00
}
void wfmain : : receiveTPBFOuter ( unsigned char level ) {
2023-01-24 20:12:23 +00:00
/*
2023-01-25 11:41:50 +00:00
* This is written like this as although PBT is supposed to be sent in 25 Hz steps ,
2023-01-24 20:12:23 +00:00
* sometimes it sends the ' nearest ' value . This results in math errors .
2023-01-25 11:41:50 +00:00
* In CW mode , the value is also dependant on the CW Pitch setting
2023-01-24 20:12:23 +00:00
*/
2023-01-16 12:24:22 +00:00
qint16 shift = ( qint16 ) ( level - 128 ) ;
2023-01-25 11:41:50 +00:00
double tempVar = ceil ( ( shift / 127.0 ) * passbandWidth * 20000.0 ) / 20000.0 ;
// tempVar now contains value to the nearest 50Hz If CW mode, add/remove the cwPitch.
double pitch = 0.0 ;
if ( ( currentModeInfo . mk = = modeCW | | currentModeInfo . mk = = modeCW_R ) & & passbandWidth > 0.0006 )
{
pitch = ( 600.0 - cwPitch ) / 1000000.0 ;
}
TPBFOuter = round ( ( tempVar + pitch ) * 200000.0 ) / 200000.0 ; // Nearest 5Hz.
//qDebug() << "Outer" << level << "TPBFOuter" << TPBFOuter;
2023-01-16 12:24:22 +00:00
}
2021-02-21 04:41:19 +00:00
void wfmain : : receiveMeter ( meterKind inMeter , unsigned char level )
{
2021-02-24 08:18:19 +00:00
2021-02-21 04:41:19 +00:00
switch ( inMeter )
{
case meterS :
2021-07-17 00:45:07 +00:00
ui - > meterSPoWidget - > setMeterType ( meterS ) ;
2021-07-19 23:56:04 +00:00
ui - > meterSPoWidget - > setLevel ( level ) ;
2021-07-17 00:45:07 +00:00
ui - > meterSPoWidget - > repaint ( ) ;
2021-02-21 04:41:19 +00:00
break ;
case meterPower :
2021-07-17 00:45:07 +00:00
ui - > meterSPoWidget - > setMeterType ( meterPower ) ;
2021-07-19 23:56:04 +00:00
ui - > meterSPoWidget - > setLevel ( level ) ;
2021-07-17 00:45:07 +00:00
ui - > meterSPoWidget - > update ( ) ;
2021-02-21 04:41:19 +00:00
break ;
default :
2021-07-18 06:39:40 +00:00
if ( ui - > meter2Widget - > getMeterType ( ) = = inMeter )
{
2021-07-19 23:56:04 +00:00
ui - > meter2Widget - > setLevel ( level ) ;
2022-08-24 05:24:05 +00:00
} else if ( ( ui - > meter2Widget - > getMeterType ( ) = = meterAudio ) & &
( inMeter = = meterTxMod ) & & amTransmitting ) {
ui - > meter2Widget - > setLevel ( level ) ;
} else if ( ( ui - > meter2Widget - > getMeterType ( ) = = meterAudio ) & &
( inMeter = = meterRxAudio ) & & ! amTransmitting ) {
ui - > meter2Widget - > setLevel ( level ) ;
2021-07-18 06:39:40 +00:00
}
2021-02-21 04:41:19 +00:00
break ;
}
}
2021-02-16 01:15:28 +00:00
void wfmain : : receiveCompLevel ( unsigned char compLevel )
{
( void ) compLevel ;
}
void wfmain : : receiveMonitorGain ( unsigned char monitorGain )
{
( void ) monitorGain ;
}
void wfmain : : receiveVoxGain ( unsigned char voxGain )
{
( void ) voxGain ;
}
void wfmain : : receiveAntiVoxGain ( unsigned char antiVoxGain )
{
( void ) antiVoxGain ;
}
2021-02-16 04:32:14 +00:00
void wfmain : : on_txPowerSlider_valueChanged ( int value )
{
2021-06-25 22:43:53 +00:00
issueCmdUniquePriority ( cmdSetTxPower , ( unsigned char ) value ) ;
//emit setTxPower(value);
2021-02-16 04:32:14 +00:00
}
void wfmain : : on_micGainSlider_valueChanged ( int value )
{
2021-02-20 08:05:23 +00:00
processChangingCurrentModLevel ( ( unsigned char ) value ) ;
2021-02-16 04:32:14 +00:00
}
void wfmain : : on_scopeRefLevelSlider_valueChanged ( int value )
{
2021-02-16 05:40:31 +00:00
value = ( value / 5 ) * 5 ; // rounded to "nearest 5"
emit setSpectrumRefLevel ( value ) ;
2021-02-16 04:32:14 +00:00
}
2021-02-16 06:33:21 +00:00
void wfmain : : receiveSpectrumRefLevel ( int level )
{
changeSliderQuietly ( ui - > scopeRefLevelSlider , level ) ;
}
2021-02-16 01:15:28 +00:00
2021-02-19 08:14:40 +00:00
void wfmain : : on_modInputCombo_activated ( int index )
{
emit setModInput ( ( rigInput ) ui - > modInputCombo - > currentData ( ) . toInt ( ) , false ) ;
2021-02-20 08:05:23 +00:00
currentModSrc = ( rigInput ) ui - > modInputCombo - > currentData ( ) . toInt ( ) ;
issueDelayedCommand ( cmdGetCurrentModLevel ) ;
if ( ! usingDataMode )
{
changeModLabel ( currentModSrc ) ;
}
( void ) index ;
2021-02-19 08:14:40 +00:00
}
void wfmain : : on_modInputDataCombo_activated ( int index )
{
emit setModInput ( ( rigInput ) ui - > modInputDataCombo - > currentData ( ) . toInt ( ) , true ) ;
2021-02-20 08:05:23 +00:00
currentModDataSrc = ( rigInput ) ui - > modInputDataCombo - > currentData ( ) . toInt ( ) ;
issueDelayedCommand ( cmdGetCurrentModLevel ) ;
if ( usingDataMode )
{
changeModLabel ( currentModDataSrc ) ;
}
( void ) index ;
}
2021-02-20 08:15:47 +00:00
void wfmain : : changeModLabelAndSlider ( rigInput source )
{
changeModLabel ( source , true ) ;
}
2021-02-20 08:05:23 +00:00
void wfmain : : changeModLabel ( rigInput input )
2021-02-20 08:15:47 +00:00
{
changeModLabel ( input , false ) ;
}
void wfmain : : changeModLabel ( rigInput input , bool updateLevel )
2021-02-20 08:05:23 +00:00
{
QString inputName ;
2021-02-20 08:15:47 +00:00
unsigned char gain = 0 ;
2021-02-20 08:05:23 +00:00
switch ( input )
{
case inputMic :
inputName = " Mic " ;
2021-02-20 08:15:47 +00:00
gain = micGain ;
2021-02-20 08:05:23 +00:00
break ;
case inputACC :
inputName = " ACC " ;
2021-02-20 08:15:47 +00:00
gain = accGain ;
2021-02-20 08:05:23 +00:00
break ;
case inputACCA :
inputName = " ACCA " ;
2021-02-20 08:15:47 +00:00
gain = accAGain ;
2021-02-20 08:05:23 +00:00
break ;
case inputACCB :
inputName = " ACCB " ;
2021-02-20 08:15:47 +00:00
gain = accBGain ;
2021-02-20 08:05:23 +00:00
break ;
case inputUSB :
inputName = " USB " ;
2021-02-20 08:15:47 +00:00
gain = usbGain ;
2021-02-20 08:05:23 +00:00
break ;
case inputLAN :
inputName = " LAN " ;
2021-02-20 08:15:47 +00:00
gain = lanGain ;
2021-02-20 08:05:23 +00:00
break ;
default :
inputName = " UNK " ;
2021-02-20 08:15:47 +00:00
gain = 0 ;
break ;
2021-02-20 08:05:23 +00:00
}
ui - > modSliderLbl - > setText ( inputName ) ;
2021-02-20 08:15:47 +00:00
if ( updateLevel )
{
changeSliderQuietly ( ui - > micGainSlider , gain ) ;
}
2021-02-20 08:05:23 +00:00
}
void wfmain : : processChangingCurrentModLevel ( unsigned char level )
{
// slider moved, so find the current mod and issue the level set command.
2021-06-25 22:43:53 +00:00
issueCmd ( cmdSetModLevel , level ) ;
2021-02-19 08:14:40 +00:00
}
2021-02-22 07:58:23 +00:00
void wfmain : : on_tuneLockChk_clicked ( bool checked )
{
freqLock = checked ;
}
2022-08-22 22:09:09 +00:00
void wfmain : : on_serialDeviceListCombo_textActivated ( const QString & arg1 )
2021-03-07 07:35:46 +00:00
{
QString manualPort ;
bool ok ;
if ( arg1 = = QString ( " Manual... " ) )
{
manualPort = QInputDialog : : getText ( this , tr ( " Manual port assignment " ) ,
tr ( " Enter serial port assignment: " ) ,
QLineEdit : : Normal ,
tr ( " /dev/device " ) , & ok ) ;
if ( manualPort . isEmpty ( ) | | ! ok )
{
ui - > serialDeviceListCombo - > blockSignals ( true ) ;
ui - > serialDeviceListCombo - > setCurrentIndex ( 0 ) ;
ui - > serialDeviceListCombo - > blockSignals ( false ) ;
return ;
} else {
prefs . serialPortRadio = manualPort ;
showStatusBarText ( " Setting preferences to use manually-assigned serial port: " + manualPort ) ;
ui - > serialEnableBtn - > setChecked ( true ) ;
return ;
}
}
if ( arg1 = = QString ( " Auto " ) )
{
2021-05-08 06:15:24 +00:00
prefs . serialPortRadio = " auto " ;
2021-03-07 07:35:46 +00:00
showStatusBarText ( " Setting preferences to automatically find rig serial port. " ) ;
ui - > serialEnableBtn - > setChecked ( true ) ;
return ;
}
prefs . serialPortRadio = arg1 ;
showStatusBarText ( " Setting preferences to use manually-assigned serial port: " + arg1 ) ;
ui - > serialEnableBtn - > setChecked ( true ) ;
}
2021-03-04 08:02:53 +00:00
2021-03-31 06:37:35 +00:00
void wfmain : : on_rptSetupBtn_clicked ( )
{
2023-01-28 05:42:57 +00:00
if ( rpt - > isMinimized ( ) )
{
rpt - > raise ( ) ;
rpt - > activateWindow ( ) ;
return ;
}
2021-03-31 06:37:35 +00:00
rpt - > show ( ) ;
2023-01-28 05:42:57 +00:00
rpt - > raise ( ) ;
rpt - > activateWindow ( ) ;
2021-03-31 06:37:35 +00:00
}
2021-04-08 06:35:24 +00:00
void wfmain : : on_attSelCombo_activated ( int index )
{
unsigned char att = ( unsigned char ) ui - > attSelCombo - > itemData ( index ) . toInt ( ) ;
emit setAttenuator ( att ) ;
2021-04-11 05:48:32 +00:00
issueDelayedCommand ( cmdGetPreamp ) ;
2021-04-08 06:35:24 +00:00
}
2021-04-09 17:04:20 +00:00
void wfmain : : on_preampSelCombo_activated ( int index )
{
unsigned char pre = ( unsigned char ) ui - > preampSelCombo - > itemData ( index ) . toInt ( ) ;
emit setPreamp ( pre ) ;
2021-04-11 05:48:32 +00:00
issueDelayedCommand ( cmdGetAttenuator ) ;
2021-04-09 17:04:20 +00:00
}
2021-04-09 22:57:16 +00:00
void wfmain : : on_antennaSelCombo_activated ( int index )
{
unsigned char ant = ( unsigned char ) ui - > antennaSelCombo - > itemData ( index ) . toInt ( ) ;
2021-07-16 16:08:55 +00:00
emit setAntenna ( ant , ui - > rxAntennaCheck - > isChecked ( ) ) ;
2021-04-09 22:57:16 +00:00
}
2021-07-16 16:08:55 +00:00
void wfmain : : on_rxAntennaCheck_clicked ( bool value )
{
unsigned char ant = ( unsigned char ) ui - > antennaSelCombo - > itemData ( ui - > antennaSelCombo - > currentIndex ( ) ) . toInt ( ) ;
emit setAntenna ( ant , value ) ;
}
2021-04-10 06:38:36 +00:00
void wfmain : : on_wfthemeCombo_activated ( int index )
{
colorMap - > setGradient ( static_cast < QCPColorGradient : : GradientPreset > ( ui - > wfthemeCombo - > itemData ( index ) . toInt ( ) ) ) ;
2021-07-06 00:04:55 +00:00
prefs . wftheme = ui - > wfthemeCombo - > itemData ( index ) . toInt ( ) ;
2021-04-10 06:38:36 +00:00
}
2021-04-11 05:48:32 +00:00
void wfmain : : receivePreamp ( unsigned char pre )
{
int preindex = ui - > preampSelCombo - > findData ( pre ) ;
ui - > preampSelCombo - > setCurrentIndex ( preindex ) ;
}
void wfmain : : receiveAttenuator ( unsigned char att )
{
int attindex = ui - > attSelCombo - > findData ( att ) ;
ui - > attSelCombo - > setCurrentIndex ( attindex ) ;
}
2021-07-16 18:33:15 +00:00
void wfmain : : receiveAntennaSel ( unsigned char ant , bool rx )
{
ui - > antennaSelCombo - > setCurrentIndex ( ant ) ;
ui - > rxAntennaCheck - > setChecked ( rx ) ;
}
2021-04-11 07:42:25 +00:00
void wfmain : : receiveSpectrumSpan ( freqt freqspan , bool isSub )
{
if ( ! isSub )
{
switch ( ( int ) ( freqspan . MHzDouble * 1000000.0 ) )
{
case ( 2500 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 0 ) ;
break ;
case ( 5000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 1 ) ;
break ;
case ( 10000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 2 ) ;
break ;
case ( 25000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 3 ) ;
break ;
case ( 50000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 4 ) ;
break ;
case ( 100000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 5 ) ;
break ;
case ( 250000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 6 ) ;
break ;
case ( 500000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 7 ) ;
break ;
2021-06-21 06:46:26 +00:00
case ( 1000000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 8 ) ;
break ;
case ( 2500000 ) :
ui - > scopeBWCombo - > setCurrentIndex ( 9 ) ;
break ;
2021-04-11 07:42:25 +00:00
default :
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < __func__ < < " Could not match: " < < freqspan . MHzDouble < < " to anything like: " < < ( int ) ( freqspan . MHzDouble * 1E6 ) ;
2021-04-11 07:42:25 +00:00
break ;
}
}
}
2021-06-08 16:18:40 +00:00
void wfmain : : calculateTimingParameters ( )
{
// Function for calculating polling parameters.
// Requires that we know the "baud rate" of the actual
// radio connection.
// baud on the serial port reflects the actual rig connection,
// even if a client-server connection is being used.
// Computed time for a 10 byte message, with a safety factor of 2.
if ( prefs . serialPortBaud = = 0 )
{
prefs . serialPortBaud = 9600 ;
qInfo ( logSystem ( ) ) < < " WARNING: baud rate received was zero. Assuming 9600 baud, performance may suffer. " ;
}
unsigned int usPerByte = 9600 * 1000 / prefs . serialPortBaud ;
unsigned int msMinTiming = usPerByte * 10 * 2 / 1000 ;
2021-06-18 19:41:56 +00:00
if ( msMinTiming < 25 )
msMinTiming = 25 ;
2021-06-08 16:18:40 +00:00
2021-06-18 19:41:56 +00:00
if ( haveRigCaps & & rigCaps . hasFDcomms )
{
2021-06-20 20:34:32 +00:00
delayedCommand - > setInterval ( msMinTiming ) ; // 20 byte message
2021-06-18 19:41:56 +00:00
} else {
2021-06-20 20:34:32 +00:00
delayedCommand - > setInterval ( msMinTiming * 3 ) ; // 20 byte message
2021-06-18 19:41:56 +00:00
}
2021-06-08 16:18:40 +00:00
2021-06-18 19:41:56 +00:00
qInfo ( logSystem ( ) ) < < " Delay command interval timing: " < < delayedCommand - > interval ( ) < < " ms " ;
2021-06-08 16:18:40 +00:00
2022-11-27 05:43:47 +00:00
ui - > pollTimeMsSpin - > blockSignals ( true ) ;
ui - > pollTimeMsSpin - > setValue ( delayedCommand - > interval ( ) ) ;
ui - > pollTimeMsSpin - > blockSignals ( false ) ;
2021-06-08 16:18:40 +00:00
// Normal:
2021-06-20 20:34:32 +00:00
delayedCmdIntervalLAN_ms = delayedCommand - > interval ( ) ;
delayedCmdIntervalSerial_ms = delayedCommand - > interval ( ) ;
2021-06-08 16:18:40 +00:00
// startup initial state:
2021-06-20 20:34:32 +00:00
delayedCmdStartupInterval_ms = delayedCommand - > interval ( ) * 3 ;
2021-06-08 16:18:40 +00:00
}
2021-05-21 15:30:52 +00:00
void wfmain : : receiveBaudRate ( quint32 baud )
{
qInfo ( ) < < " Received serial port baud rate from remote server: " < < baud ;
prefs . serialPortBaud = baud ;
2021-06-08 16:18:40 +00:00
calculateTimingParameters ( ) ;
2021-05-21 15:30:52 +00:00
}
2021-04-20 05:55:39 +00:00
void wfmain : : on_rigPowerOnBtn_clicked ( )
{
2021-04-24 06:11:54 +00:00
powerRigOn ( ) ;
2021-04-20 05:55:39 +00:00
}
void wfmain : : on_rigPowerOffBtn_clicked ( )
{
2021-07-20 13:45:44 +00:00
// Are you sure?
if ( ! prefs . confirmPowerOff ) {
powerRigOff ( ) ;
return ;
}
QCheckBox * cb = new QCheckBox ( " Don't ask me again " ) ;
QMessageBox msgbox ;
msgbox . setWindowTitle ( " Power " ) ;
msgbox . setText ( " Power down the radio? \n " ) ;
msgbox . setIcon ( QMessageBox : : Icon : : Question ) ;
QAbstractButton * yesButton = msgbox . addButton ( QMessageBox : : Yes ) ;
msgbox . addButton ( QMessageBox : : No ) ;
msgbox . setDefaultButton ( QMessageBox : : Yes ) ;
msgbox . setCheckBox ( cb ) ;
QObject : : connect ( cb , & QCheckBox : : stateChanged , [ this ] ( int state ) {
if ( static_cast < Qt : : CheckState > ( state ) = = Qt : : CheckState : : Checked ) {
prefs . confirmPowerOff = false ;
}
else {
prefs . confirmPowerOff = true ;
}
settings - > beginGroup ( " Interface " ) ;
settings - > setValue ( " ConfirmPowerOff " , this - > prefs . confirmPowerOff ) ;
settings - > endGroup ( ) ;
settings - > sync ( ) ;
} ) ;
msgbox . exec ( ) ;
if ( msgbox . clickedButton ( ) = = yesButton ) {
2021-04-24 06:11:54 +00:00
powerRigOff ( ) ;
}
}
void wfmain : : powerRigOn ( )
{
emit sendPowerOn ( ) ;
delayedCommand - > setInterval ( 3000 ) ; // 3 seconds
if ( ui - > scopeEnableWFBtn - > isChecked ( ) )
{
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdDispEnable ) ;
issueDelayedCommand ( cmdQueNormalSpeed ) ;
issueDelayedCommand ( cmdSpecOn ) ;
issueDelayedCommand ( cmdStartRegularPolling ) ; // s-meter, etc
2021-04-24 06:11:54 +00:00
} else {
issueDelayedCommand ( cmdQueNormalSpeed ) ;
2021-06-20 20:34:32 +00:00
issueDelayedCommand ( cmdStartRegularPolling ) ; // s-meter, etc
2021-04-20 05:55:39 +00:00
}
2021-04-24 06:11:54 +00:00
delayedCommand - > start ( ) ;
}
void wfmain : : powerRigOff ( )
{
delayedCommand - > stop ( ) ;
2021-06-21 07:36:57 +00:00
delayedCmdQue . clear ( ) ;
2021-04-24 06:11:54 +00:00
emit sendPowerOff ( ) ;
2021-04-20 05:55:39 +00:00
}
2021-04-24 07:31:51 +00:00
void wfmain : : on_ritTuneDial_valueChanged ( int value )
{
emit setRitValue ( value ) ;
}
void wfmain : : on_ritEnableChk_clicked ( bool checked )
{
emit setRitEnable ( checked ) ;
}
2021-04-25 07:23:52 +00:00
void wfmain : : receiveRITStatus ( bool ritEnabled )
{
ui - > ritEnableChk - > blockSignals ( true ) ;
ui - > ritEnableChk - > setChecked ( ritEnabled ) ;
ui - > ritEnableChk - > blockSignals ( false ) ;
}
void wfmain : : receiveRITValue ( int ritValHz )
{
2021-04-27 01:24:28 +00:00
if ( ( ritValHz > - 500 ) & & ( ritValHz < 500 ) )
2021-04-25 07:23:52 +00:00
{
ui - > ritTuneDial - > blockSignals ( true ) ;
ui - > ritTuneDial - > setValue ( ritValHz ) ;
ui - > ritTuneDial - > blockSignals ( false ) ;
} else {
2021-05-15 17:53:16 +00:00
qInfo ( logSystem ( ) ) < < " Warning: out of range RIT value received: " < < ritValHz < < " Hz " ;
2021-04-25 07:23:52 +00:00
}
}
2021-04-27 01:24:28 +00:00
void wfmain : : showButton ( QPushButton * btn )
{
btn - > setHidden ( false ) ;
}
void wfmain : : hideButton ( QPushButton * btn )
{
btn - > setHidden ( true ) ;
}
void wfmain : : setBandButtons ( )
{
// Turn off each button first:
hideButton ( ui - > band23cmbtn ) ;
hideButton ( ui - > band70cmbtn ) ;
hideButton ( ui - > band2mbtn ) ;
2021-04-28 03:18:17 +00:00
hideButton ( ui - > bandAirbtn ) ;
hideButton ( ui - > bandWFMbtn ) ;
2021-04-27 01:24:28 +00:00
hideButton ( ui - > band4mbtn ) ;
hideButton ( ui - > band6mbtn ) ;
hideButton ( ui - > band10mbtn ) ;
hideButton ( ui - > band12mbtn ) ;
hideButton ( ui - > band15mbtn ) ;
hideButton ( ui - > band17mbtn ) ;
hideButton ( ui - > band20mbtn ) ;
hideButton ( ui - > band30mbtn ) ;
hideButton ( ui - > band40mbtn ) ;
hideButton ( ui - > band60mbtn ) ;
hideButton ( ui - > band80mbtn ) ;
hideButton ( ui - > band160mbtn ) ;
hideButton ( ui - > band630mbtn ) ;
hideButton ( ui - > band2200mbtn ) ;
hideButton ( ui - > bandGenbtn ) ;
bandType bandSel ;
//for (auto band = rigCaps.bands.begin(); band != rigCaps.bands.end(); ++band) // no worky
for ( unsigned int i = 0 ; i < rigCaps . bands . size ( ) ; i + + )
{
bandSel = rigCaps . bands . at ( i ) ;
2022-10-29 14:12:30 +00:00
switch ( bandSel . band )
2021-04-27 01:24:28 +00:00
{
case ( band23cm ) :
showButton ( ui - > band23cmbtn ) ;
break ;
case ( band70cm ) :
showButton ( ui - > band70cmbtn ) ;
break ;
case ( band2m ) :
showButton ( ui - > band2mbtn ) ;
break ;
2021-04-28 03:18:17 +00:00
case ( bandAir ) :
showButton ( ui - > bandAirbtn ) ;
break ;
case ( bandWFM ) :
showButton ( ui - > bandWFMbtn ) ;
break ;
2021-04-27 01:24:28 +00:00
case ( band4m ) :
showButton ( ui - > band4mbtn ) ;
break ;
case ( band6m ) :
showButton ( ui - > band6mbtn ) ;
break ;
case ( band10m ) :
showButton ( ui - > band10mbtn ) ;
break ;
case ( band12m ) :
showButton ( ui - > band12mbtn ) ;
break ;
case ( band15m ) :
showButton ( ui - > band15mbtn ) ;
break ;
case ( band17m ) :
showButton ( ui - > band17mbtn ) ;
break ;
case ( band20m ) :
showButton ( ui - > band20mbtn ) ;
break ;
case ( band30m ) :
showButton ( ui - > band30mbtn ) ;
break ;
case ( band40m ) :
showButton ( ui - > band40mbtn ) ;
break ;
case ( band60m ) :
showButton ( ui - > band60mbtn ) ;
break ;
case ( band80m ) :
showButton ( ui - > band80mbtn ) ;
break ;
case ( band160m ) :
showButton ( ui - > band160mbtn ) ;
break ;
case ( band630m ) :
showButton ( ui - > band630mbtn ) ;
break ;
case ( band2200m ) :
showButton ( ui - > band2200mbtn ) ;
break ;
case ( bandGen ) :
showButton ( ui - > bandGenbtn ) ;
break ;
default :
break ;
}
}
}
2021-05-18 07:29:06 +00:00
void wfmain : : on_rigCIVManualAddrChk_clicked ( bool checked )
{
if ( checked )
{
ui - > rigCIVaddrHexLine - > setEnabled ( true ) ;
ui - > rigCIVaddrHexLine - > setText ( QString ( " %1 " ) . arg ( prefs . radioCIVAddr , 2 , 16 ) ) ;
} else {
ui - > rigCIVaddrHexLine - > setText ( " auto " ) ;
ui - > rigCIVaddrHexLine - > setEnabled ( false ) ;
prefs . radioCIVAddr = 0 ; // auto
showStatusBarText ( " Setting radio CI-V address to: 'auto'. Make sure CI-V Transceive is enabled on the radio. " ) ;
}
}
void wfmain : : on_rigCIVaddrHexLine_editingFinished ( )
{
bool okconvert = false ;
unsigned char propCIVAddr = ( unsigned char ) ui - > rigCIVaddrHexLine - > text ( ) . toUInt ( & okconvert , 16 ) ;
2021-05-21 14:56:19 +00:00
if ( okconvert & & ( propCIVAddr < 0xe0 ) & & ( propCIVAddr ! = 0 ) )
2021-05-18 07:29:06 +00:00
{
prefs . radioCIVAddr = propCIVAddr ;
2021-05-30 22:08:22 +00:00
emit setCIVAddr ( propCIVAddr ) ;
2021-05-18 07:29:06 +00:00
showStatusBarText ( QString ( " Setting radio CI-V address to: 0x%1. Press Save Settings to retain. " ) . arg ( propCIVAddr , 2 , 16 ) ) ;
} else {
2021-05-21 22:03:24 +00:00
showStatusBarText ( QString ( " Could not use provided CI-V address. Address must be < 0xE0 " ) ) ;
2021-05-18 07:29:06 +00:00
}
}
2021-12-30 09:52:23 +00:00
2021-05-20 22:17:10 +00:00
void wfmain : : on_baudRateCombo_activated ( int index )
2021-05-20 04:36:34 +00:00
{
bool ok = false ;
quint32 baud = ui - > baudRateCombo - > currentData ( ) . toUInt ( & ok ) ;
if ( ok )
{
prefs . serialPortBaud = baud ;
2021-06-08 16:51:10 +00:00
serverConfig . baudRate = baud ;
2021-05-20 04:36:34 +00:00
showStatusBarText ( QString ( " Changed baud rate to %1 bps. Press Save Settings to retain. " ) . arg ( baud ) ) ;
}
2021-05-20 22:17:10 +00:00
( void ) index ;
2021-05-20 04:36:34 +00:00
}
2021-05-18 07:29:06 +00:00
2021-12-30 09:52:23 +00:00
void wfmain : : on_useRTSforPTTchk_clicked ( bool checked )
{
emit setRTSforPTT ( checked ) ;
prefs . forceRTSasPTT = checked ;
}
2021-05-31 06:26:36 +00:00
void wfmain : : on_wfLengthSlider_valueChanged ( int value )
{
2021-07-05 23:45:19 +00:00
prefs . wflength = ( unsigned int ) ( value ) ;
2021-05-31 06:26:36 +00:00
prepareWf ( value ) ;
}
2021-07-14 05:42:55 +00:00
void wfmain : : on_wfAntiAliasChk_clicked ( bool checked )
{
colorMap - > setAntialiased ( checked ) ;
2021-07-15 05:44:05 +00:00
prefs . wfAntiAlias = checked ;
2021-07-14 05:42:55 +00:00
}
void wfmain : : on_wfInterpolateChk_clicked ( bool checked )
{
colorMap - > setInterpolate ( checked ) ;
2021-07-15 05:44:05 +00:00
prefs . wfInterpolate = checked ;
2021-07-14 05:42:55 +00:00
}
2023-01-24 18:37:26 +00:00
cmds wfmain : : meterKindToMeterCommand ( meterKind m )
2021-07-18 06:39:40 +00:00
{
cmds c ;
switch ( m )
{
case meterNone :
c = cmdNone ;
break ;
case meterS :
c = cmdGetSMeter ;
break ;
2021-07-18 21:27:21 +00:00
case meterCenter :
c = cmdGetCenterMeter ;
break ;
2021-07-18 06:39:40 +00:00
case meterPower :
c = cmdGetPowerMeter ;
break ;
case meterSWR :
c = cmdGetSWRMeter ;
break ;
case meterALC :
c = cmdGetALCMeter ;
break ;
case meterComp :
c = cmdGetCompMeter ;
break ;
case meterCurrent :
c = cmdGetIdMeter ;
break ;
case meterVoltage :
c = cmdGetVdMeter ;
break ;
default :
c = cmdNone ;
break ;
}
return c ;
}
void wfmain : : on_meter2selectionCombo_activated ( int index )
{
meterKind newMeterType ;
meterKind oldMeterType ;
newMeterType = static_cast < meterKind > ( ui - > meter2selectionCombo - > currentData ( ) . toInt ( ) ) ;
oldMeterType = ui - > meter2Widget - > getMeterType ( ) ;
if ( newMeterType = = oldMeterType )
return ;
cmds newCmd = meterKindToMeterCommand ( newMeterType ) ;
cmds oldCmd = meterKindToMeterCommand ( oldMeterType ) ;
removePeriodicCommand ( oldCmd ) ;
if ( newMeterType = = meterNone )
{
ui - > meter2Widget - > hide ( ) ;
2021-08-21 05:19:47 +00:00
ui - > meter2Widget - > setMeterType ( newMeterType ) ;
2021-07-18 06:39:40 +00:00
} else {
ui - > meter2Widget - > show ( ) ;
ui - > meter2Widget - > setMeterType ( newMeterType ) ;
2022-08-24 05:24:05 +00:00
if ( ( newMeterType ! = meterRxAudio ) & & ( newMeterType ! = meterTxMod ) & & ( newMeterType ! = meterAudio ) )
insertPeriodicCommandUnique ( newCmd ) ;
2021-07-18 06:39:40 +00:00
}
2021-08-27 17:06:09 +00:00
prefs . meter2Type = newMeterType ;
2021-07-18 06:39:40 +00:00
( void ) index ;
}
2021-08-04 19:49:32 +00:00
void wfmain : : on_enableRigctldChk_clicked ( bool checked )
{
if ( rigCtl ! = Q_NULLPTR )
{
rigCtl - > disconnect ( ) ;
delete rigCtl ;
rigCtl = Q_NULLPTR ;
}
if ( checked ) {
// Start rigctld
rigCtl = new rigCtlD ( this ) ;
rigCtl - > startServer ( prefs . rigCtlPort ) ;
connect ( this , SIGNAL ( sendRigCaps ( rigCapabilities ) ) , rigCtl , SLOT ( receiveRigCaps ( rigCapabilities ) ) ) ;
if ( rig ! = Q_NULLPTR ) {
// We are already connected to a rig.
2021-11-23 00:39:10 +00:00
connect ( rig , SIGNAL ( stateInfo ( rigstate * ) ) , rigCtl , SLOT ( receiveStateInfo ( rigstate * ) ) ) ;
connect ( rigCtl , SIGNAL ( stateUpdated ( ) ) , rig , SLOT ( stateUpdated ( ) ) ) ;
2021-08-06 11:37:03 +00:00
2021-08-04 19:49:32 +00:00
emit sendRigCaps ( rigCaps ) ;
emit requestRigState ( ) ;
}
}
prefs . enableRigCtlD = checked ;
}
2021-08-05 00:23:15 +00:00
void wfmain : : on_rigctldPortTxt_editingFinished ( )
{
bool okconvert = false ;
unsigned int port = ui - > rigctldPortTxt - > text ( ) . toUInt ( & okconvert ) ;
if ( okconvert )
{
prefs . rigCtlPort = port ;
}
}
2021-08-04 19:49:32 +00:00
2022-04-18 19:29:50 +00:00
void wfmain : : on_tcpServerPortTxt_editingFinished ( )
{
bool okconvert = false ;
unsigned int port = ui - > tcpServerPortTxt - > text ( ) . toUInt ( & okconvert ) ;
if ( okconvert )
{
prefs . tcpPort = port ;
}
}
void wfmain : : on_waterfallFormatCombo_activated ( int index )
{
prefs . waterfallFormat = index ;
}
2021-11-06 00:12:19 +00:00
void wfmain : : on_moreControlsBtn_clicked ( )
{
2023-01-18 04:53:34 +00:00
if ( trxadj - > isMinimized ( ) )
{
trxadj - > raise ( ) ;
trxadj - > activateWindow ( ) ;
return ;
}
2021-11-06 00:12:19 +00:00
trxadj - > show ( ) ;
2023-01-18 04:53:34 +00:00
trxadj - > raise ( ) ;
trxadj - > activateWindow ( ) ;
2021-11-06 00:12:19 +00:00
}
2021-11-07 06:59:03 +00:00
void wfmain : : on_useCIVasRigIDChk_clicked ( bool checked )
{
prefs . CIVisRadioModel = checked ;
}
2021-12-04 19:21:23 +00:00
void wfmain : : receiveStateInfo ( rigstate * state )
{
qInfo ( " Setting rig state for wfmain " ) ;
rigState = state ;
}
2021-12-24 04:05:34 +00:00
void wfmain : : on_setClockBtn_clicked ( )
{
setRadioTimeDatePrep ( ) ;
}
2022-01-21 19:23:32 +00:00
void wfmain : : radioSelection ( QList < radio_cap_packet > radios )
{
selRad - > populate ( radios ) ;
2022-01-21 23:58:18 +00:00
}
void wfmain : : on_radioStatusBtn_clicked ( )
{
if ( selRad - > isVisible ( ) )
{
selRad - > hide ( ) ;
}
else
{
selRad - > show ( ) ;
}
2022-01-21 19:23:32 +00:00
}
2022-05-12 00:46:20 +00:00
void wfmain : : setAudioDevicesUI ( )
{
2023-01-15 11:14:28 +00:00
qInfo ( ) < < " Looking for inputs " ;
2022-05-12 00:46:20 +00:00
ui - > audioInputCombo - > blockSignals ( true ) ;
ui - > audioInputCombo - > clear ( ) ;
2022-12-28 16:57:05 +00:00
ui - > audioInputCombo - > addItems ( audioDev - > getInputs ( ) ) ;
2022-09-25 10:15:45 +00:00
ui - > audioInputCombo - > setCurrentIndex ( - 1 ) ;
2022-12-28 16:57:05 +00:00
ui - > audioInputCombo - > setStyleSheet ( QString ( " QComboBox QAbstractItemView {min-width: %1px;} " ) . arg ( audioDev - > getNumCharsIn ( ) + 30 ) ) ;
2022-05-12 00:46:20 +00:00
ui - > audioInputCombo - > blockSignals ( false ) ;
2022-12-28 16:57:05 +00:00
ui - > audioInputCombo - > setCurrentIndex ( audioDev - > findInput ( " Client " , txSetup . name ) ) ;
2023-01-15 11:14:28 +00:00
qInfo ( ) < < " Looking for outputs " ;
2022-12-28 16:57:05 +00:00
ui - > audioOutputCombo - > blockSignals ( true ) ;
ui - > audioOutputCombo - > clear ( ) ;
ui - > audioOutputCombo - > addItems ( audioDev - > getOutputs ( ) ) ;
ui - > audioOutputCombo - > setCurrentIndex ( - 1 ) ;
ui - > audioOutputCombo - > setStyleSheet ( QString ( " QComboBox QAbstractItemView {min-width: %1px;} " ) . arg ( audioDev - > getNumCharsOut ( ) + 30 ) ) ;
2022-05-12 00:46:20 +00:00
ui - > audioOutputCombo - > blockSignals ( false ) ;
2022-12-28 16:57:05 +00:00
ui - > audioOutputCombo - > setCurrentIndex ( audioDev - > findOutput ( " Client " , rxSetup . name ) ) ;
ui - > serverTXAudioOutputCombo - > blockSignals ( true ) ;
ui - > serverTXAudioOutputCombo - > clear ( ) ;
ui - > serverTXAudioOutputCombo - > addItems ( audioDev - > getOutputs ( ) ) ;
ui - > serverTXAudioOutputCombo - > setCurrentIndex ( - 1 ) ;
ui - > serverTXAudioOutputCombo - > setStyleSheet ( QString ( " QComboBox QAbstractItemView {min-width: %1px;} " ) . arg ( audioDev - > getNumCharsOut ( ) + 30 ) ) ;
2022-05-12 00:46:20 +00:00
ui - > serverTXAudioOutputCombo - > blockSignals ( false ) ;
2022-12-28 16:57:05 +00:00
ui - > serverRXAudioInputCombo - > blockSignals ( true ) ;
ui - > serverRXAudioInputCombo - > clear ( ) ;
ui - > serverRXAudioInputCombo - > addItems ( audioDev - > getInputs ( ) ) ;
ui - > serverRXAudioInputCombo - > setCurrentIndex ( - 1 ) ;
ui - > serverRXAudioInputCombo - > setStyleSheet ( QString ( " QComboBox QAbstractItemView {min-width: %1px;} " ) . arg ( audioDev - > getNumCharsIn ( ) + 30 ) ) ;
ui - > serverRXAudioInputCombo - > blockSignals ( false ) ;
2022-05-12 00:46:20 +00:00
rxSetup . type = prefs . audioSystem ;
txSetup . type = prefs . audioSystem ;
if ( ! serverConfig . rigs . isEmpty ( ) )
{
2022-05-13 08:55:16 +00:00
serverConfig . rigs . first ( ) - > rxAudioSetup . type = prefs . audioSystem ;
serverConfig . rigs . first ( ) - > txAudioSetup . type = prefs . audioSystem ;
2022-12-28 16:57:05 +00:00
ui - > serverRXAudioInputCombo - > setCurrentIndex ( audioDev - > findInput ( " Server " , serverConfig . rigs . first ( ) - > rxAudioSetup . name ) ) ;
ui - > serverTXAudioOutputCombo - > setCurrentIndex ( audioDev - > findOutput ( " Server " , serverConfig . rigs . first ( ) - > txAudioSetup . name ) ) ;
2022-05-12 00:46:20 +00:00
}
2022-05-13 08:55:16 +00:00
2022-12-28 16:57:05 +00:00
2022-05-12 00:46:20 +00:00
qDebug ( logSystem ( ) ) < < " Audio devices done. " ;
}
void wfmain : : on_audioSystemCombo_currentIndexChanged ( int value )
{
prefs . audioSystem = static_cast < audioType > ( value ) ;
2023-01-02 01:11:25 +00:00
audioDev - > setAudioType ( prefs . audioSystem ) ;
audioDev - > enumerate ( ) ;
2022-09-16 20:43:01 +00:00
ui - > audioSystemServerCombo - > blockSignals ( true ) ;
ui - > audioSystemServerCombo - > setCurrentIndex ( value ) ;
ui - > audioSystemServerCombo - > blockSignals ( false ) ;
2022-05-17 07:53:24 +00:00
}
2022-09-16 20:43:01 +00:00
void wfmain : : on_audioSystemServerCombo_currentIndexChanged ( int value )
2022-05-17 07:53:24 +00:00
{
2022-09-16 20:43:01 +00:00
prefs . audioSystem = static_cast < audioType > ( value ) ;
2023-01-02 01:11:25 +00:00
audioDev - > setAudioType ( prefs . audioSystem ) ;
audioDev - > enumerate ( ) ;
2022-09-16 20:43:01 +00:00
ui - > audioSystemCombo - > blockSignals ( true ) ;
ui - > audioSystemCombo - > setCurrentIndex ( value ) ;
ui - > audioSystemCombo - > blockSignals ( false ) ;
2022-08-17 22:10:07 +00:00
}
2022-08-17 23:21:33 +00:00
void wfmain : : on_topLevelSlider_valueChanged ( int value )
{
wfCeiling = value ;
plotCeiling = value ;
2022-08-18 01:41:35 +00:00
prefs . plotCeiling = value ;
2022-08-17 23:21:33 +00:00
plot - > yAxis - > setRange ( QCPRange ( plotFloor , plotCeiling ) ) ;
colorMap - > setDataRange ( QCPRange ( wfFloor , wfCeiling ) ) ;
2022-05-17 07:53:24 +00:00
}
2022-08-17 23:21:33 +00:00
void wfmain : : on_botLevelSlider_valueChanged ( int value )
{
wfFloor = value ;
plotFloor = value ;
2022-08-18 01:41:35 +00:00
prefs . plotFloor = value ;
2022-08-17 23:21:33 +00:00
plot - > yAxis - > setRange ( QCPRange ( plotFloor , plotCeiling ) ) ;
colorMap - > setDataRange ( QCPRange ( wfFloor , wfCeiling ) ) ;
}
2022-05-17 07:53:24 +00:00
2022-08-18 01:41:35 +00:00
void wfmain : : on_underlayBufferSlider_valueChanged ( int value )
2022-05-17 07:53:24 +00:00
{
2022-08-18 05:38:44 +00:00
resizePlasmaBuffer ( value ) ;
2022-08-18 01:46:00 +00:00
prefs . underlayBufferSize = value ;
2022-12-02 21:32:02 +00:00
spectrumPlasmaSize = value ;
2022-05-17 07:53:24 +00:00
}
2022-08-18 05:38:44 +00:00
void wfmain : : resizePlasmaBuffer ( int newSize )
2022-05-17 07:53:24 +00:00
{
2022-08-18 05:38:44 +00:00
QByteArray empty ( ( int ) spectWidth , ' \x01 ' ) ;
plasmaMutex . lock ( ) ;
int oldSize = spectrumPlasma . size ( ) ;
if ( oldSize < newSize )
{
spectrumPlasma . resize ( newSize ) ;
for ( int p = oldSize ; p < newSize ; p + + )
{
spectrumPlasma . append ( empty ) ;
}
} else if ( oldSize > newSize ) {
for ( int p = oldSize ; p > newSize ; p - - )
{
spectrumPlasma . pop_back ( ) ;
}
}
spectrumPlasma . squeeze ( ) ;
plasmaMutex . unlock ( ) ;
}
2022-09-18 19:22:11 +00:00
void wfmain : : clearPlasmaBuffer ( )
{
QByteArray empty ( ( int ) spectWidth , ' \x01 ' ) ;
plasmaMutex . lock ( ) ;
int pSize = spectrumPlasma . size ( ) ;
for ( int i = 0 ; i < pSize ; i + + )
{
spectrumPlasma [ i ] = empty ;
}
plasmaMutex . unlock ( ) ;
}
2022-08-18 01:41:35 +00:00
void wfmain : : on_underlayNone_toggled ( bool checked )
{
ui - > underlayBufferSlider - > setDisabled ( checked ) ;
if ( checked )
{
underlayMode = underlayNone ;
prefs . underlayMode = underlayMode ;
on_clearPeakBtn_clicked ( ) ;
}
}
void wfmain : : on_underlayPeakHold_toggled ( bool checked )
{
ui - > underlayBufferSlider - > setDisabled ( checked ) ;
if ( checked )
{
underlayMode = underlayPeakHold ;
prefs . underlayMode = underlayMode ;
on_clearPeakBtn_clicked ( ) ;
}
}
void wfmain : : on_underlayPeakBuffer_toggled ( bool checked )
{
ui - > underlayBufferSlider - > setDisabled ( ! checked ) ;
if ( checked )
{
underlayMode = underlayPeakBuffer ;
prefs . underlayMode = underlayMode ;
}
}
void wfmain : : on_underlayAverageBuffer_toggled ( bool checked )
{
ui - > underlayBufferSlider - > setDisabled ( ! checked ) ;
if ( checked )
{
underlayMode = underlayAverageBuffer ;
prefs . underlayMode = underlayMode ;
}
}
2022-08-17 23:21:33 +00:00
// --- DEBUG FUNCTION ---
void wfmain : : on_debugBtn_clicked ( )
{
qInfo ( logSystem ( ) ) < < " Debug button pressed. " ;
2023-02-01 05:52:24 +00:00
qDebug ( logSystem ( ) ) < < " Query for repeater access mode (tone, tsql, etc) sent. " ;
issueDelayedCommand ( cmdGetRptAccessMode ) ;
2022-08-17 23:21:33 +00:00
}
2022-08-19 16:41:13 +00:00
2022-08-22 04:19:08 +00:00
// ---------- color helper functions: ---------- //
2022-08-19 16:41:13 +00:00
void wfmain : : setColorElement ( QColor color ,
QLedLabel * led ,
QLabel * label ,
QLineEdit * lineText )
{
if ( led ! = Q_NULLPTR )
{
led - > setColor ( color , true ) ;
}
if ( label ! = Q_NULLPTR )
{
label - > setText ( color . name ( QColor : : HexArgb ) ) ;
}
if ( lineText ! = Q_NULLPTR )
{
lineText - > setText ( color . name ( QColor : : HexArgb ) ) ;
}
}
void wfmain : : setColorElement ( QColor color , QLedLabel * led , QLabel * label )
{
setColorElement ( color , led , label , Q_NULLPTR ) ;
}
void wfmain : : setColorElement ( QColor color , QLedLabel * led , QLineEdit * lineText )
{
setColorElement ( color , led , Q_NULLPTR , lineText ) ;
}
2022-08-21 23:47:17 +00:00
QColor wfmain : : getColorFromPicker ( QColor initialColor )
2022-08-19 16:41:13 +00:00
{
QColorDialog : : ColorDialogOptions options ;
options . setFlag ( QColorDialog : : ShowAlphaChannel , true ) ;
options . setFlag ( QColorDialog : : DontUseNativeDialog , true ) ;
QColor selColor = QColorDialog : : getColor ( initialColor , this , " Select Color " , options ) ;
2022-08-23 17:35:59 +00:00
int alphaVal = 0 ;
bool ok = false ;
2022-08-22 06:50:02 +00:00
if ( selColor . isValid ( ) )
2022-08-23 17:35:59 +00:00
{
if ( selColor . alpha ( ) = = 0 )
{
alphaVal = QInputDialog : : getInt ( this , tr ( " Specify Opacity " ) ,
tr ( " You specified an opacity value of 0. \n Do you want to change it? (0=transparent, 255=opaque) " ) , 0 , 0 , 255 , 1 ,
& ok ) ;
if ( ! ok )
{
return selColor ;
} else {
selColor . setAlpha ( alphaVal ) ;
return selColor ;
}
}
2022-08-22 06:50:02 +00:00
return selColor ;
2022-08-23 17:35:59 +00:00
}
2022-08-22 06:50:02 +00:00
else
return initialColor ;
2022-08-19 16:41:13 +00:00
}
void wfmain : : getSetColor ( QLedLabel * led , QLabel * label )
{
2022-08-21 23:47:17 +00:00
QColor selColor = getColorFromPicker ( led - > getColor ( ) ) ;
2022-08-19 16:41:13 +00:00
setColorElement ( selColor , led , label ) ;
}
void wfmain : : getSetColor ( QLedLabel * led , QLineEdit * line )
{
2022-08-21 23:47:17 +00:00
QColor selColor = getColorFromPicker ( led - > getColor ( ) ) ;
2022-08-19 16:41:13 +00:00
setColorElement ( selColor , led , line ) ;
}
2022-08-19 17:32:06 +00:00
QString wfmain : : setColorFromString ( QString colorstr , QLedLabel * led )
{
if ( led = = Q_NULLPTR )
return " ERROR " ;
if ( ! colorstr . startsWith ( " # " ) )
{
colorstr . prepend ( " # " ) ;
}
if ( colorstr . length ( ) ! = 9 )
{
// TODO: Tell user about AA RR GG BB
return led - > getColor ( ) . name ( QColor : : HexArgb ) ;
}
led - > setColor ( colorstr , true ) ;
return led - > getColor ( ) . name ( QColor : : HexArgb ) ;
}
2022-08-21 23:47:17 +00:00
void wfmain : : useCurrentColorPreset ( )
2022-08-19 17:32:06 +00:00
{
2022-08-21 23:47:17 +00:00
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
useColorPreset ( & colorPreset [ pos ] ) ;
2022-08-21 07:17:44 +00:00
}
void wfmain : : useColorPreset ( colorPrefsType * cp )
{
// Apply the given preset to the UI elements
// prototyped from setPlotTheme()
if ( cp = = Q_NULLPTR )
return ;
2022-08-23 04:31:31 +00:00
//qInfo(logSystem()) << "Setting plots to color preset number " << cp->presetNum << ", with name " << *(cp->presetName);
2022-08-21 23:47:17 +00:00
2022-08-21 07:17:44 +00:00
plot - > setBackground ( cp - > plotBackground ) ;
plot - > xAxis - > grid ( ) - > setPen ( cp - > gridColor ) ;
plot - > yAxis - > grid ( ) - > setPen ( cp - > gridColor ) ;
plot - > legend - > setTextColor ( cp - > textColor ) ;
plot - > legend - > setBorderPen ( cp - > gridColor ) ;
plot - > legend - > setBrush ( cp - > gridColor ) ;
2022-08-22 00:52:52 +00:00
plot - > xAxis - > setTickLabelColor ( cp - > textColor ) ;
plot - > xAxis - > setLabelColor ( cp - > gridColor ) ;
plot - > yAxis - > setTickLabelColor ( cp - > textColor ) ;
plot - > yAxis - > setLabelColor ( cp - > gridColor ) ;
2022-08-21 07:17:44 +00:00
2022-08-22 00:52:52 +00:00
plot - > xAxis - > setBasePen ( cp - > axisColor ) ;
plot - > xAxis - > setTickPen ( cp - > axisColor ) ;
plot - > yAxis - > setBasePen ( cp - > axisColor ) ;
plot - > yAxis - > setTickPen ( cp - > axisColor ) ;
2022-08-21 07:17:44 +00:00
freqIndicatorLine - > setPen ( QPen ( cp - > tuningLine ) ) ;
2023-01-19 16:16:47 +00:00
2022-09-26 10:59:16 +00:00
passbandIndicator - > setPen ( QPen ( cp - > passband ) ) ;
passbandIndicator - > setBrush ( QBrush ( cp - > passband ) ) ;
2022-08-21 07:17:44 +00:00
2023-01-19 16:16:47 +00:00
pbtIndicator - > setPen ( QPen ( cp - > pbt ) ) ;
pbtIndicator - > setBrush ( QBrush ( cp - > pbt ) ) ;
2022-08-21 07:17:44 +00:00
plot - > graph ( 0 ) - > setPen ( QPen ( cp - > spectrumLine ) ) ;
plot - > graph ( 0 ) - > setBrush ( QBrush ( cp - > spectrumFill ) ) ;
plot - > graph ( 1 ) - > setPen ( QPen ( cp - > underlayLine ) ) ;
plot - > graph ( 1 ) - > setBrush ( QBrush ( cp - > underlayFill ) ) ;
2022-08-22 00:52:52 +00:00
wf - > yAxis - > setBasePen ( cp - > wfAxis ) ;
wf - > yAxis - > setTickPen ( cp - > wfAxis ) ;
wf - > xAxis - > setBasePen ( cp - > wfAxis ) ;
wf - > xAxis - > setTickPen ( cp - > wfAxis ) ;
wf - > xAxis - > setLabelColor ( cp - > wfGrid ) ;
wf - > yAxis - > setLabelColor ( cp - > wfGrid ) ;
wf - > xAxis - > setTickLabelColor ( cp - > wfText ) ;
wf - > yAxis - > setTickLabelColor ( cp - > wfText ) ;
wf - > setBackground ( cp - > wfBackground ) ;
2022-08-23 04:22:01 +00:00
ui - > meterSPoWidget - > setColors ( cp - > meterLevel , cp - > meterPeakScale , cp - > meterPeakLevel , cp - > meterAverage , cp - > meterLowerLine , cp - > meterLowText ) ;
ui - > meter2Widget - > setColors ( cp - > meterLevel , cp - > meterPeakScale , cp - > meterPeakLevel , cp - > meterAverage , cp - > meterLowerLine , cp - > meterLowText ) ;
2022-10-09 13:23:07 +00:00
clusterColor = cp - > clusterSpots ;
2022-08-21 07:17:44 +00:00
}
2022-08-21 23:47:17 +00:00
void wfmain : : setColorButtonOperations ( QColor * colorStore ,
QLineEdit * e , QLedLabel * d )
{
// Call this function with a pointer into the colorPreset color you
// wish to edit.
2022-08-21 07:17:44 +00:00
2022-08-21 23:47:17 +00:00
if ( colorStore = = Q_NULLPTR )
{
qInfo ( logSystem ( ) ) < < " ERROR, invalid pointer to color received. " ;
return ;
}
getSetColor ( d , e ) ;
QColor t = d - > getColor ( ) ;
2022-08-22 04:51:50 +00:00
colorStore - > setNamedColor ( t . name ( QColor : : HexArgb ) ) ;
2022-08-21 23:47:17 +00:00
useCurrentColorPreset ( ) ;
}
void wfmain : : setColorLineEditOperations ( QColor * colorStore ,
QLineEdit * e , QLedLabel * d )
2022-08-21 07:17:44 +00:00
{
2022-08-21 23:47:17 +00:00
// Call this function with a pointer into the colorPreset color you
// wish to edit.
if ( colorStore = = Q_NULLPTR )
{
qInfo ( logSystem ( ) ) < < " ERROR, invalid pointer to color received. " ;
return ;
}
2022-08-21 07:17:44 +00:00
2022-08-21 23:47:17 +00:00
QString colorStrValidated = setColorFromString ( e - > text ( ) , d ) ;
e - > setText ( colorStrValidated ) ;
colorStore - > setNamedColor ( colorStrValidated ) ;
useCurrentColorPreset ( ) ;
2022-08-21 07:17:44 +00:00
}
2022-08-21 23:47:17 +00:00
void wfmain : : on_colorPopOutBtn_clicked ( )
{
2022-08-22 04:19:08 +00:00
2022-10-09 13:32:09 +00:00
if ( settingsTabisAttached )
2022-08-22 04:19:08 +00:00
{
settingsTab = ui - > tabWidget - > currentWidget ( ) ;
ui - > tabWidget - > removeTab ( ui - > tabWidget - > indexOf ( settingsTab ) ) ;
settingsWidgetTab - > addTab ( settingsTab , " Settings " ) ;
settingsWidgetWindow - > show ( ) ;
ui - > colorPopOutBtn - > setText ( " Re-attach " ) ;
2022-10-09 13:32:09 +00:00
ui - > clusterPopOutBtn - > setText ( " Re-attach " ) ;
2022-08-22 04:32:49 +00:00
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
2022-08-22 04:19:08 +00:00
settingsTabisAttached = false ;
2022-10-09 13:32:09 +00:00
}
else {
2022-08-22 04:19:08 +00:00
settingsTab = settingsWidgetTab - > currentWidget ( ) ;
settingsWidgetTab - > removeTab ( settingsWidgetTab - > indexOf ( settingsTab ) ) ;
ui - > tabWidget - > addTab ( settingsTab , " Settings " ) ;
settingsWidgetWindow - > close ( ) ;
ui - > colorPopOutBtn - > setText ( " Pop-Out " ) ;
2022-10-09 13:32:09 +00:00
ui - > clusterPopOutBtn - > setText ( " Pop-Out " ) ;
2022-08-22 04:32:49 +00:00
ui - > tabWidget - > setCurrentIndex ( 3 ) ;
2022-08-22 04:19:08 +00:00
settingsTabisAttached = true ;
}
2022-08-21 23:47:17 +00:00
}
void wfmain : : setDefaultColorPresets ( )
2022-08-21 07:17:44 +00:00
{
2022-08-21 23:47:17 +00:00
// Default wfview colors in each preset
// gets overridden after preferences are loaded
for ( int pn = 0 ; pn < numColorPresetsTotal ; pn + + )
{
2022-08-23 17:35:59 +00:00
setDefaultColors ( pn ) ;
2022-08-21 23:47:17 +00:00
}
2022-08-21 07:17:44 +00:00
}
2022-08-21 23:47:17 +00:00
void wfmain : : setEditAndLedFromColor ( QColor c , QLineEdit * e , QLedLabel * d )
2022-08-21 07:17:44 +00:00
{
2022-08-21 23:47:17 +00:00
bool blockSignals = true ;
if ( e ! = Q_NULLPTR )
{
e - > blockSignals ( blockSignals ) ;
2022-08-22 04:51:50 +00:00
e - > setText ( c . name ( QColor : : HexArgb ) ) ;
2022-08-21 23:47:17 +00:00
e - > blockSignals ( false ) ;
}
if ( d ! = Q_NULLPTR )
{
d - > setColor ( c ) ;
}
}
void wfmain : : loadColorPresetToUIandPlots ( int presetNumber )
{
if ( presetNumber > = numColorPresetsTotal )
{
qDebug ( logSystem ( ) ) < < " WARNING: asked for preset number [ " < < presetNumber < < " ], which is out of range. " ;
return ;
}
colorPrefsType p = colorPreset [ presetNumber ] ;
2022-08-23 04:31:31 +00:00
//qInfo(logSystem()) << "color preset number [" << presetNumber << "] requested for UI load, which has internal index of [" << p.presetNum << "]";
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . gridColor , ui - > colorEditGrid , ui - > colorSwatchGrid ) ;
2022-08-22 06:59:48 +00:00
setEditAndLedFromColor ( p . axisColor , ui - > colorEditAxis , ui - > colorSwatchAxis ) ;
2022-08-22 06:54:37 +00:00
setEditAndLedFromColor ( p . textColor , ui - > colorEditText , ui - > colorSwatchText ) ;
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . spectrumLine , ui - > colorEditSpecLine , ui - > colorSwatchSpecLine ) ;
setEditAndLedFromColor ( p . spectrumFill , ui - > colorEditSpecFill , ui - > colorSwatchSpecFill ) ;
2022-08-22 00:52:52 +00:00
setEditAndLedFromColor ( p . underlayLine , ui - > colorEditUnderlayLine , ui - > colorSwatchUnderlayLine ) ;
setEditAndLedFromColor ( p . underlayFill , ui - > colorEditUnderlayFill , ui - > colorSwatchUnderlayFill ) ;
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . plotBackground , ui - > colorEditPlotBackground , ui - > colorSwatchPlotBackground ) ;
setEditAndLedFromColor ( p . tuningLine , ui - > colorEditTuningLine , ui - > colorSwatchTuningLine ) ;
2022-09-26 10:59:16 +00:00
setEditAndLedFromColor ( p . passband , ui - > colorEditPassband , ui - > colorSwatchPassband ) ;
2023-02-05 13:21:12 +00:00
setEditAndLedFromColor ( p . pbt , ui - > colorEditPBT , ui - > colorSwatchPBT ) ;
2022-08-21 07:17:44 +00:00
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . meterLevel , ui - > colorEditMeterLevel , ui - > colorSwatchMeterLevel ) ;
setEditAndLedFromColor ( p . meterAverage , ui - > colorEditMeterAvg , ui - > colorSwatchMeterAverage ) ;
2022-08-23 04:22:01 +00:00
setEditAndLedFromColor ( p . meterPeakLevel , ui - > colorEditMeterPeakLevel , ui - > colorSwatchMeterPeakLevel ) ;
setEditAndLedFromColor ( p . meterPeakScale , ui - > colorEditMeterPeakScale , ui - > colorSwatchMeterPeakScale ) ;
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . meterLowerLine , ui - > colorEditMeterScale , ui - > colorSwatchMeterScale ) ;
setEditAndLedFromColor ( p . meterLowText , ui - > colorEditMeterText , ui - > colorSwatchMeterText ) ;
setEditAndLedFromColor ( p . wfBackground , ui - > colorEditWfBackground , ui - > colorSwatchWfBackground ) ;
setEditAndLedFromColor ( p . wfGrid , ui - > colorEditWfGrid , ui - > colorSwatchWfGrid ) ;
2022-08-22 06:59:48 +00:00
setEditAndLedFromColor ( p . wfAxis , ui - > colorEditWfAxis , ui - > colorSwatchWfAxis ) ;
2022-08-21 23:47:17 +00:00
setEditAndLedFromColor ( p . wfText , ui - > colorEditWfText , ui - > colorSwatchWfText ) ;
2022-10-09 13:23:07 +00:00
setEditAndLedFromColor ( p . clusterSpots , ui - > colorEditClusterSpots , ui - > colorSwatchClusterSpots ) ;
2022-08-21 23:47:17 +00:00
useColorPreset ( & p ) ;
2022-08-21 07:17:44 +00:00
}
2022-08-22 23:49:35 +00:00
void wfmain : : on_colorRenamePresetBtn_clicked ( )
{
int p = ui - > colorPresetCombo - > currentIndex ( ) ;
QString newName ;
QMessageBox msgBox ;
bool ok = false ;
2022-08-23 17:35:59 +00:00
newName = QInputDialog : : getText ( this , tr ( " Rename Preset " ) ,
tr ( " Preset Name (10 characters max): " ) , QLineEdit : : Normal ,
2022-08-22 23:49:35 +00:00
ui - > colorPresetCombo - > currentText ( ) , & ok ) ;
if ( ! ok )
return ;
2022-08-23 17:35:59 +00:00
if ( ok & & ( newName . length ( ) < 11 ) & & ! newName . isEmpty ( ) )
2022-08-22 23:49:35 +00:00
{
colorPreset [ p ] . presetName - > clear ( ) ;
colorPreset [ p ] . presetName - > append ( newName ) ;
ui - > colorPresetCombo - > setItemText ( p , * ( colorPreset [ p ] . presetName ) ) ;
} else {
2022-08-23 17:35:59 +00:00
if ( newName . isEmpty ( ) | | ( newName . length ( ) > 10 ) )
2022-08-22 23:49:35 +00:00
{
2022-08-23 17:35:59 +00:00
msgBox . setText ( " Error, name must be at least one character and not exceed 10 characters. " ) ;
2022-08-22 23:49:35 +00:00
msgBox . exec ( ) ;
}
}
}
2022-08-21 23:47:17 +00:00
void wfmain : : on_colorPresetCombo_currentIndexChanged ( int index )
{
2022-08-22 23:49:35 +00:00
prefs . currentColorPresetNumber = index ;
2022-08-21 23:47:17 +00:00
loadColorPresetToUIandPlots ( index ) ;
}
2022-08-23 17:35:59 +00:00
void wfmain : : on_colorRevertPresetBtn_clicked ( )
{
int pn = ui - > colorPresetCombo - > currentIndex ( ) ;
setDefaultColors ( pn ) ;
loadColorPresetToUIandPlots ( pn ) ;
}
2022-08-22 04:19:08 +00:00
// ---------- end color helper functions ---------- //
// ---------- Color UI slots ----------//
2022-08-21 23:47:17 +00:00
// Grid:
2022-08-21 07:33:59 +00:00
void wfmain : : on_colorSetBtnGrid_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-08-21 23:47:17 +00:00
QColor * c = & ( colorPreset [ pos ] . gridColor ) ;
setColorButtonOperations ( c , ui - > colorEditGrid , ui - > colorSwatchGrid ) ;
}
void wfmain : : on_colorEditGrid_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . gridColor ) ;
setColorLineEditOperations ( c , ui - > colorEditGrid , ui - > colorSwatchGrid ) ;
2022-08-21 07:33:59 +00:00
}
2022-08-22 00:52:52 +00:00
// Axis:
void wfmain : : on_colorSetBtnAxis_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . axisColor ) ;
setColorButtonOperations ( c , ui - > colorEditAxis , ui - > colorSwatchAxis ) ;
}
void wfmain : : on_colorEditAxis_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . axisColor ) ;
setColorLineEditOperations ( c , ui - > colorEditAxis , ui - > colorSwatchAxis ) ;
}
2022-08-21 23:47:17 +00:00
// Text:
void wfmain : : on_colorSetBtnText_clicked ( )
2022-08-21 07:17:44 +00:00
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-08-21 23:47:17 +00:00
QColor * c = & ( colorPreset [ pos ] . textColor ) ;
setColorButtonOperations ( c , ui - > colorEditText , ui - > colorSwatchText ) ;
}
void wfmain : : on_colorEditText_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . textColor ) ;
setColorLineEditOperations ( c , ui - > colorEditText , ui - > colorSwatchText ) ;
2022-08-21 07:17:44 +00:00
}
2022-08-21 23:47:17 +00:00
// SpecLine:
void wfmain : : on_colorEditSpecLine_editingFinished ( )
2022-08-21 07:17:44 +00:00
{
2022-08-21 23:47:17 +00:00
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . spectrumLine ) ;
setColorLineEditOperations ( c , ui - > colorEditSpecLine , ui - > colorSwatchSpecLine ) ;
}
void wfmain : : on_colorSetBtnSpecLine_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . spectrumLine ) ;
setColorButtonOperations ( c , ui - > colorEditSpecLine , ui - > colorSwatchSpecLine ) ;
}
// SpecFill:
void wfmain : : on_colorSetBtnSpecFill_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . spectrumFill ) ;
setColorButtonOperations ( c , ui - > colorEditSpecFill , ui - > colorSwatchSpecFill ) ;
}
void wfmain : : on_colorEditSpecFill_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . spectrumFill ) ;
setColorLineEditOperations ( c , ui - > colorEditSpecFill , ui - > colorSwatchSpecFill ) ;
2022-08-19 17:32:06 +00:00
}
2022-08-21 23:47:17 +00:00
// PlotBackground:
void wfmain : : on_colorEditPlotBackground_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . plotBackground ) ;
setColorLineEditOperations ( c , ui - > colorEditPlotBackground , ui - > colorSwatchPlotBackground ) ;
}
void wfmain : : on_colorSetBtnPlotBackground_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . plotBackground ) ;
setColorButtonOperations ( c , ui - > colorEditPlotBackground , ui - > colorSwatchPlotBackground ) ;
}
2022-08-22 00:52:52 +00:00
// Underlay Line:
void wfmain : : on_colorSetBtnUnderlayLine_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . underlayLine ) ;
setColorButtonOperations ( c , ui - > colorEditUnderlayLine , ui - > colorSwatchUnderlayLine ) ;
}
void wfmain : : on_colorEditUnderlayLine_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . underlayLine ) ;
setColorLineEditOperations ( c , ui - > colorEditUnderlayLine , ui - > colorSwatchUnderlayLine ) ;
}
2022-08-21 23:47:17 +00:00
2022-08-22 00:52:52 +00:00
// Underlay Fill:
void wfmain : : on_colorSetBtnUnderlayFill_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . underlayFill ) ;
setColorButtonOperations ( c , ui - > colorEditUnderlayFill , ui - > colorSwatchUnderlayFill ) ;
}
void wfmain : : on_colorEditUnderlayFill_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . underlayFill ) ;
setColorLineEditOperations ( c , ui - > colorEditUnderlayFill , ui - > colorSwatchUnderlayFill ) ;
}
2022-08-21 23:47:17 +00:00
2022-08-22 00:52:52 +00:00
// WF Background:
void wfmain : : on_colorSetBtnwfBackground_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfBackground ) ;
setColorButtonOperations ( c , ui - > colorEditWfBackground , ui - > colorSwatchWfBackground ) ;
}
void wfmain : : on_colorEditWfBackground_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfBackground ) ;
setColorLineEditOperations ( c , ui - > colorEditWfBackground , ui - > colorSwatchWfBackground ) ;
}
// WF Grid:
void wfmain : : on_colorSetBtnWfGrid_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfGrid ) ;
setColorButtonOperations ( c , ui - > colorEditWfGrid , ui - > colorSwatchWfGrid ) ;
}
void wfmain : : on_colorEditWfGrid_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfGrid ) ;
setColorLineEditOperations ( c , ui - > colorEditWfGrid , ui - > colorSwatchWfGrid ) ;
}
// WF Axis:
void wfmain : : on_colorSetBtnWfAxis_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfAxis ) ;
setColorButtonOperations ( c , ui - > colorEditWfAxis , ui - > colorSwatchWfAxis ) ;
}
void wfmain : : on_colorEditWfAxis_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . wfAxis ) ;
setColorLineEditOperations ( c , ui - > colorEditWfAxis , ui - > colorSwatchWfAxis ) ;
}
// WF Text:
void wfmain : : on_colorSetBtnWfText_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-10-09 13:23:07 +00:00
QColor * c = & ( colorPreset [ pos ] . wfText ) ;
2022-08-22 00:52:52 +00:00
setColorButtonOperations ( c , ui - > colorEditWfText , ui - > colorSwatchWfText ) ;
}
2022-10-09 13:23:07 +00:00
2022-08-22 00:52:52 +00:00
void wfmain : : on_colorEditWfText_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-10-09 13:23:07 +00:00
QColor * c = & ( colorPreset [ pos ] . wfText ) ;
2022-08-22 00:52:52 +00:00
setColorLineEditOperations ( c , ui - > colorEditWfText , ui - > colorSwatchWfText ) ;
}
// Tuning Line:
void wfmain : : on_colorSetBtnTuningLine_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-09-26 10:59:16 +00:00
QColor * c = & ( colorPreset [ pos ] . tuningLine ) ;
2022-08-22 00:52:52 +00:00
setColorButtonOperations ( c , ui - > colorEditTuningLine , ui - > colorSwatchTuningLine ) ;
}
void wfmain : : on_colorEditTuningLine_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-09-26 10:59:16 +00:00
QColor * c = & ( colorPreset [ pos ] . tuningLine ) ;
2022-08-22 00:52:52 +00:00
setColorLineEditOperations ( c , ui - > colorEditTuningLine , ui - > colorSwatchTuningLine ) ;
}
2022-09-26 10:59:16 +00:00
// Passband:
void wfmain : : on_colorSetBtnPassband_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . passband ) ;
2022-09-28 16:34:15 +00:00
setColorButtonOperations ( c , ui - > colorEditPassband , ui - > colorSwatchPassband ) ;
2022-09-26 10:59:16 +00:00
}
2023-02-05 13:21:12 +00:00
2022-09-26 10:59:16 +00:00
void wfmain : : on_colorEditPassband_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . passband ) ;
2022-09-28 16:34:15 +00:00
setColorLineEditOperations ( c , ui - > colorEditPassband , ui - > colorSwatchPassband ) ;
2022-09-26 10:59:16 +00:00
}
2023-02-05 13:21:12 +00:00
void wfmain : : on_colorSetBtnPBT_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . pbt ) ;
setColorButtonOperations ( c , ui - > colorEditPBT , ui - > colorSwatchPBT ) ;
}
void wfmain : : on_colorEditPBT_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . pbt ) ;
setColorLineEditOperations ( c , ui - > colorEditPBT , ui - > colorSwatchPBT ) ;
}
2022-08-22 00:52:52 +00:00
// Meter Level:
void wfmain : : on_colorSetBtnMeterLevel_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLevel ) ;
setColorButtonOperations ( c , ui - > colorEditMeterLevel , ui - > colorSwatchMeterLevel ) ;
}
void wfmain : : on_colorEditMeterLevel_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLevel ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterLevel , ui - > colorSwatchMeterLevel ) ;
}
// Meter Average:
void wfmain : : on_colorSetBtnMeterAvg_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterAverage ) ;
setColorButtonOperations ( c , ui - > colorEditMeterAvg , ui - > colorSwatchMeterAverage ) ;
}
void wfmain : : on_colorEditMeterAvg_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterAverage ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterAvg , ui - > colorSwatchMeterAverage ) ;
}
2022-08-23 04:22:01 +00:00
// Meter Peak Level:
void wfmain : : on_colorSetBtnMeterPeakLevel_clicked ( )
2022-08-22 00:52:52 +00:00
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-08-23 04:22:01 +00:00
QColor * c = & ( colorPreset [ pos ] . meterPeakLevel ) ;
setColorButtonOperations ( c , ui - > colorEditMeterPeakLevel , ui - > colorSwatchMeterPeakLevel ) ;
2022-08-22 00:52:52 +00:00
}
2022-08-23 04:22:01 +00:00
void wfmain : : on_colorEditMeterPeakLevel_editingFinished ( )
2022-08-22 00:52:52 +00:00
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-08-23 04:22:01 +00:00
QColor * c = & ( colorPreset [ pos ] . meterPeakLevel ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterPeakLevel , ui - > colorSwatchMeterPeakLevel ) ;
}
// Meter Peak Scale:
void wfmain : : on_colorSetBtnMeterPeakScale_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterPeakScale ) ;
setColorButtonOperations ( c , ui - > colorEditMeterPeakScale , ui - > colorSwatchMeterPeakScale ) ;
}
void wfmain : : on_colorEditMeterPeakScale_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterPeakScale ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterPeakScale , ui - > colorSwatchMeterPeakScale ) ;
2022-08-22 00:52:52 +00:00
}
// Meter Scale (line):
void wfmain : : on_colorSetBtnMeterScale_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLowerLine ) ;
setColorButtonOperations ( c , ui - > colorEditMeterScale , ui - > colorSwatchMeterScale ) ;
}
void wfmain : : on_colorEditMeterScale_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLowerLine ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterScale , ui - > colorSwatchMeterScale ) ;
}
// Meter Text:
void wfmain : : on_colorSetBtnMeterText_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLowText ) ;
setColorButtonOperations ( c , ui - > colorEditMeterText , ui - > colorSwatchMeterText ) ;
}
void wfmain : : on_colorEditMeterText_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . meterLowText ) ;
setColorLineEditOperations ( c , ui - > colorEditMeterText , ui - > colorSwatchMeterText ) ;
}
2022-08-22 04:19:08 +00:00
2022-10-09 13:23:07 +00:00
// Cluster Spots:
void wfmain : : on_colorSetBtnClusterSpots_clicked ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . clusterSpots ) ;
setColorButtonOperations ( c , ui - > colorEditClusterSpots , ui - > colorSwatchClusterSpots ) ;
}
void wfmain : : on_colorEditClusterSpots_editingFinished ( )
{
int pos = ui - > colorPresetCombo - > currentIndex ( ) ;
QColor * c = & ( colorPreset [ pos ] . clusterSpots ) ;
setColorLineEditOperations ( c , ui - > colorEditClusterSpots , ui - > colorSwatchClusterSpots ) ;
}
2022-08-22 04:19:08 +00:00
// ---------- End color UI slots ----------//
2022-08-22 16:44:00 +00:00
2022-08-23 17:35:59 +00:00
void wfmain : : on_colorSavePresetBtn_clicked ( )
2022-08-23 00:57:54 +00:00
{
2022-08-23 17:35:59 +00:00
int pn = ui - > colorPresetCombo - > currentIndex ( ) ;
2022-08-23 04:22:01 +00:00
2022-08-23 17:35:59 +00:00
settings - > beginGroup ( " ColorPresets " ) ;
settings - > setValue ( " currentColorPresetNumber " , prefs . currentColorPresetNumber ) ;
settings - > beginWriteArray ( " ColorPreset " , numColorPresetsTotal ) ;
2022-08-23 04:22:01 +00:00
2022-08-23 17:35:59 +00:00
colorPrefsType * p ;
p = & ( colorPreset [ pn ] ) ;
settings - > setArrayIndex ( pn ) ;
settings - > setValue ( " presetNum " , p - > presetNum ) ;
settings - > setValue ( " presetName " , * ( p - > presetName ) ) ;
settings - > setValue ( " gridColor " , p - > gridColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " axisColor " , p - > axisColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " textColor " , p - > textColor . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " spectrumLine " , p - > spectrumLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " spectrumFill " , p - > spectrumFill . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " underlayLine " , p - > underlayLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " underlayFill " , p - > underlayFill . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " plotBackground " , p - > plotBackground . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " tuningLine " , p - > tuningLine . name ( QColor : : HexArgb ) ) ;
2022-09-26 10:59:16 +00:00
settings - > setValue ( " passband " , p - > passband . name ( QColor : : HexArgb ) ) ;
2023-01-19 16:16:47 +00:00
settings - > setValue ( " pbt " , p - > pbt . name ( QColor : : HexArgb ) ) ;
2022-08-23 17:35:59 +00:00
settings - > setValue ( " wfBackground " , p - > wfBackground . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfGrid " , p - > wfGrid . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfAxis " , p - > wfAxis . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " wfText " , p - > wfText . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterLevel " , p - > meterLevel . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterAverage " , p - > meterAverage . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterPeakScale " , p - > meterPeakScale . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterPeakLevel " , p - > meterPeakLevel . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterLowerLine " , p - > meterLowerLine . name ( QColor : : HexArgb ) ) ;
settings - > setValue ( " meterLowText " , p - > meterLowText . name ( QColor : : HexArgb ) ) ;
2022-10-09 13:23:07 +00:00
settings - > setValue ( " clusterSpots " , p - > clusterSpots . name ( QColor : : HexArgb ) ) ;
2022-08-23 04:22:01 +00:00
2022-08-23 17:35:59 +00:00
settings - > endArray ( ) ;
settings - > endGroup ( ) ;
settings - > sync ( ) ;
}
2022-09-15 00:07:23 +00:00
void wfmain : : on_showLogBtn_clicked ( )
{
2022-09-15 18:52:08 +00:00
if ( logWindow - > isMinimized ( ) )
{
logWindow - > raise ( ) ;
logWindow - > activateWindow ( ) ;
return ;
}
2022-09-15 00:07:23 +00:00
logWindow - > show ( ) ;
2022-09-15 18:52:08 +00:00
logWindow - > raise ( ) ;
logWindow - > activateWindow ( ) ;
2022-09-15 00:07:23 +00:00
}
void wfmain : : initLogging ( )
{
// Set the logging file before doing anything else.
m_logFile . reset ( new QFile ( logFilename ) ) ;
// Open the file logging
m_logFile . data ( ) - > open ( QFile : : WriteOnly | QFile : : Truncate | QFile : : Text ) ;
// Set handler
qInstallMessageHandler ( messageHandler ) ;
2022-09-15 16:42:19 +00:00
connect ( logWindow , SIGNAL ( setDebugMode ( bool ) ) , this , SLOT ( setDebugLogging ( bool ) ) ) ;
2022-09-15 01:32:28 +00:00
// Interval timer for log window updates:
logCheckingTimer . setInterval ( 100 ) ;
2022-09-15 00:07:23 +00:00
connect ( & logCheckingTimer , SIGNAL ( timeout ( ) ) , this , SLOT ( logCheck ( ) ) ) ;
logCheckingTimer . start ( ) ;
}
void wfmain : : logCheck ( )
{
// This is called by a timer to check for new log messages and copy
// the messages into the logWindow.
QMutexLocker locker ( & logTextMutex ) ;
int size = logStringBuffer . size ( ) ;
for ( int i = 0 ; i < size ; i + + )
{
handleLogText ( logStringBuffer . back ( ) ) ;
logStringBuffer . pop_back ( ) ;
}
}
void wfmain : : handleLogText ( QString text )
{
// This function is just a pass-through
logWindow - > acceptLogText ( text ) ;
}
2022-09-15 16:42:19 +00:00
void wfmain : : setDebugLogging ( bool debugModeOn )
{
this - > debugMode = debugModeOn ;
2022-09-15 16:53:50 +00:00
debugModeLogging = debugModeOn ;
2022-09-15 16:42:19 +00:00
}
2022-09-15 00:07:23 +00:00
void wfmain : : messageHandler ( QtMsgType type , const QMessageLogContext & context , const QString & msg )
{
// Open stream file writes
if ( type = = QtDebugMsg & & ! debugModeLogging )
{
return ;
}
QMutexLocker locker ( & logMutex ) ;
QTextStream out ( m_logFile . data ( ) ) ;
QString text ;
// Write the date of recording
out < < QDateTime : : currentDateTime ( ) . toString ( " yyyy-MM-dd hh:mm:ss.zzz " ) ;
text . append ( QDateTime : : currentDateTime ( ) . toString ( " yyyy-MM-dd hh:mm:ss.zzz " ) ) ;
// By type determine to what level belongs message
switch ( type )
{
case QtDebugMsg :
out < < " DBG " ;
text . append ( " DBG " ) ;
break ;
case QtInfoMsg :
out < < " INF " ;
text . append ( " INF " ) ;
break ;
case QtWarningMsg :
out < < " WRN " ;
text . append ( " WRN " ) ;
break ;
case QtCriticalMsg :
out < < " CRT " ;
text . append ( " CRT " ) ;
break ;
case QtFatalMsg :
out < < " FTL " ;
text . append ( " FLT " ) ;
break ;
}
// Write to the output category of the message and the message itself
out < < context . category < < " : " < < msg < < " \n " ;
out . flush ( ) ; // Clear the buffered data
text . append ( context . category ) ;
text . append ( " : " ) ;
text . append ( msg ) ;
logTextMutex . lock ( ) ;
2022-09-15 16:33:09 +00:00
logStringBuffer . push_front ( text ) ;
2022-09-15 00:07:23 +00:00
logTextMutex . unlock ( ) ;
2023-01-21 21:38:39 +00:00
2022-09-15 00:07:23 +00:00
}
2022-09-18 16:42:41 +00:00
2022-09-18 20:13:33 +00:00
void wfmain : : on_customEdgeBtn_clicked ( )
{
double lowFreq = oldLowerFreq ;
double highFreq = oldUpperFreq ;
QString freqstring = QString ( " %1, %2 " ) . arg ( lowFreq ) . arg ( highFreq ) ;
bool ok ;
QString userFreq = QInputDialog : : getText ( this , " Scope Edges " ,
" Please enter desired scope edges, in MHz, \
with a comma between the low and high range . " ,
QLineEdit : : Normal , freqstring , & ok ) ;
if ( ! ok )
return ;
QString clean = userFreq . trimmed ( ) . replace ( " " , " " ) ;
QStringList freqs = clean . split ( " , " ) ;
if ( freqs . length ( ) = = 2 )
{
lowFreq = QString ( freqs . at ( 0 ) ) . toDouble ( & ok ) ;
if ( ok )
{
highFreq = QString ( freqs . at ( 1 ) ) . toDouble ( & ok ) ;
if ( ok )
{
qDebug ( logGui ( ) ) < < " setting edge to: " < < lowFreq < < " , " < < highFreq < < " , edge num: " < < ui - > scopeEdgeCombo - > currentIndex ( ) + 1 ;
emit setScopeFixedEdge ( lowFreq , highFreq , ui - > scopeEdgeCombo - > currentIndex ( ) + 1 ) ;
return ;
}
}
goto errMsg ;
} else {
goto errMsg ;
}
errMsg :
{
QMessageBox URLmsgBox ;
URLmsgBox . setText ( " Error, could not interpret your input. \
< br / > Please make sure to place a comma between the frequencies . \
< br / > For example : ' 7.200 , 7.300 ' " );
URLmsgBox . exec ( ) ;
return ;
}
}
2022-09-20 21:53:26 +00:00
2022-09-29 16:17:51 +00:00
2022-09-30 16:05:42 +00:00
void wfmain : : receiveClusterOutput ( QString text ) {
ui - > clusterOutputTextEdit - > moveCursor ( QTextCursor : : End ) ;
ui - > clusterOutputTextEdit - > insertPlainText ( text ) ;
ui - > clusterOutputTextEdit - > moveCursor ( QTextCursor : : End ) ;
2022-09-29 16:17:51 +00:00
}
2022-09-30 16:05:42 +00:00
void wfmain : : on_clusterUdpEnable_clicked ( bool enable )
2022-09-18 16:42:41 +00:00
{
2022-09-30 16:05:42 +00:00
prefs . clusterUdpEnable = enable ;
emit setClusterEnableUdp ( enable ) ;
}
void wfmain : : on_clusterTcpEnable_clicked ( bool enable )
{
prefs . clusterTcpEnable = enable ;
emit setClusterEnableTcp ( enable ) ;
}
void wfmain : : on_clusterUdpPortLineEdit_editingFinished ( )
{
prefs . clusterUdpPort = ui - > clusterUdpPortLineEdit - > text ( ) . toInt ( ) ;
emit setClusterUdpPort ( prefs . clusterUdpPort ) ;
}
void wfmain : : on_clusterServerNameCombo_currentIndexChanged ( int index )
{
if ( index < 0 )
return ;
QString text = ui - > clusterServerNameCombo - > currentText ( ) ;
if ( clusters . size ( ) < = index )
{
qInfo ( logGui ) < < " Adding Cluster server " < < text ;
clusterSettings c ;
c . server = text ;
clusters . append ( c ) ;
2022-09-30 17:41:57 +00:00
ui - > clusterTcpPortLineEdit - > setEnabled ( true ) ;
ui - > clusterUsernameLineEdit - > setEnabled ( true ) ;
ui - > clusterPasswordLineEdit - > setEnabled ( true ) ;
ui - > clusterTimeoutLineEdit - > setEnabled ( true ) ;
2022-09-30 16:05:42 +00:00
}
else {
qInfo ( logGui ) < < " Editing Cluster server " < < text ;
clusters [ index ] . server = text ;
}
ui - > clusterUsernameLineEdit - > blockSignals ( true ) ;
ui - > clusterPasswordLineEdit - > blockSignals ( true ) ;
ui - > clusterTimeoutLineEdit - > blockSignals ( true ) ;
ui - > clusterTcpPortLineEdit - > setText ( QString : : number ( clusters [ index ] . port ) ) ;
ui - > clusterUsernameLineEdit - > setText ( clusters [ index ] . userName ) ;
ui - > clusterPasswordLineEdit - > setText ( clusters [ index ] . password ) ;
ui - > clusterTimeoutLineEdit - > setText ( QString : : number ( clusters [ index ] . timeout ) ) ;
ui - > clusterUsernameLineEdit - > blockSignals ( false ) ;
ui - > clusterPasswordLineEdit - > blockSignals ( false ) ;
ui - > clusterTimeoutLineEdit - > blockSignals ( false ) ;
for ( int i = 0 ; i < clusters . size ( ) ; i + + ) {
if ( i = = index )
2022-10-28 23:18:04 +00:00
clusters [ i ] . isdefault = true ;
2022-09-30 16:05:42 +00:00
else
2022-10-28 23:18:04 +00:00
clusters [ i ] . isdefault = false ;
2022-09-30 16:05:42 +00:00
}
emit setClusterServerName ( clusters [ index ] . server ) ;
emit setClusterTcpPort ( clusters [ index ] . port ) ;
emit setClusterUserName ( clusters [ index ] . userName ) ;
emit setClusterPassword ( clusters [ index ] . password ) ;
emit setClusterTimeout ( clusters [ index ] . timeout ) ;
}
void wfmain : : on_clusterServerNameCombo_currentTextChanged ( QString text )
{
if ( text . isEmpty ( ) ) {
int index = ui - > clusterServerNameCombo - > currentIndex ( ) ;
ui - > clusterServerNameCombo - > removeItem ( index ) ;
clusters . removeAt ( index ) ;
2022-09-30 17:41:57 +00:00
if ( clusters . size ( ) = = 0 )
{
ui - > clusterTcpPortLineEdit - > setEnabled ( false ) ;
ui - > clusterUsernameLineEdit - > setEnabled ( false ) ;
ui - > clusterPasswordLineEdit - > setEnabled ( false ) ;
ui - > clusterTimeoutLineEdit - > setEnabled ( false ) ;
}
2022-09-30 16:05:42 +00:00
}
}
void wfmain : : on_clusterTcpPortLineEdit_editingFinished ( )
{
int index = ui - > clusterServerNameCombo - > currentIndex ( ) ;
if ( index < clusters . size ( ) )
{
clusters [ index ] . port = ui - > clusterTcpPortLineEdit - > displayText ( ) . toInt ( ) ;
emit setClusterTcpPort ( clusters [ index ] . port ) ;
}
}
void wfmain : : on_clusterUsernameLineEdit_editingFinished ( )
{
int index = ui - > clusterServerNameCombo - > currentIndex ( ) ;
if ( index < clusters . size ( ) )
{
clusters [ index ] . userName = ui - > clusterUsernameLineEdit - > text ( ) ;
emit setClusterUserName ( clusters [ index ] . userName ) ;
}
}
void wfmain : : on_clusterPasswordLineEdit_editingFinished ( )
{
int index = ui - > clusterServerNameCombo - > currentIndex ( ) ;
if ( index < clusters . size ( ) )
{
clusters [ index ] . password = ui - > clusterPasswordLineEdit - > text ( ) ;
emit setClusterPassword ( clusters [ index ] . password ) ;
}
}
void wfmain : : on_clusterTimeoutLineEdit_editingFinished ( )
{
int index = ui - > clusterServerNameCombo - > currentIndex ( ) ;
if ( index < clusters . size ( ) )
{
clusters [ index ] . timeout = ui - > clusterTimeoutLineEdit - > displayText ( ) . toInt ( ) ;
emit setClusterTimeout ( clusters [ index ] . timeout ) ;
}
}
2022-10-05 10:03:15 +00:00
void wfmain : : receiveSpots ( QList < spotData > spots )
2022-09-30 16:05:42 +00:00
{
2022-10-28 23:20:27 +00:00
//QElapsedTimer timer;
//timer.start();
2022-10-05 10:03:15 +00:00
2022-10-10 11:55:12 +00:00
bool current = false ;
if ( clusterSpots . size ( ) > 0 ) {
current = clusterSpots . begin ( ) . value ( ) - > current ;
2022-10-05 10:03:15 +00:00
}
foreach ( spotData s , spots )
{
bool found = false ;
QMap < QString , spotData * > : : iterator spot = clusterSpots . find ( s . dxcall ) ;
while ( spot ! = clusterSpots . end ( ) & & spot . key ( ) = = s . dxcall & & spot . value ( ) - > frequency = = s . frequency ) {
2022-10-10 11:55:12 +00:00
spot . value ( ) - > current = ! current ;
2022-10-05 10:03:15 +00:00
found = true ;
+ + spot ;
}
if ( ! found )
{
2022-10-05 13:26:42 +00:00
spotData * sp = new spotData ( s ) ;
2022-10-05 10:03:15 +00:00
//qDebug(logCluster()) << "ADD:" << sp->dxcall;
2022-10-10 11:55:12 +00:00
sp - > current = ! current ;
2022-10-05 10:03:15 +00:00
bool conflict = true ;
double left = sp - > frequency ;
2022-10-09 19:24:01 +00:00
QCPRange range = plot - > yAxis - > range ( ) ;
double top = range . upper - 15.0 ;
2022-10-05 10:03:15 +00:00
sp - > text = new QCPItemText ( plot ) ;
sp - > text - > setAntialiased ( true ) ;
2022-10-09 13:23:07 +00:00
sp - > text - > setColor ( clusterColor ) ;
2022-10-05 10:03:15 +00:00
sp - > text - > setText ( sp - > dxcall ) ;
sp - > text - > setFont ( QFont ( font ( ) . family ( ) , 10 ) ) ;
sp - > text - > setPositionAlignment ( Qt : : AlignVCenter | Qt : : AlignHCenter ) ;
sp - > text - > position - > setType ( QCPItemPosition : : ptPlotCoords ) ;
sp - > text - > setSelectable ( true ) ;
QMargins margin ;
int width = ( sp - > text - > right - sp - > text - > left ) / 2 ;
margin . setLeft ( width ) ;
margin . setRight ( width ) ;
sp - > text - > setPadding ( margin ) ;
sp - > text - > position - > setCoords ( left , top ) ;
sp - > text - > setVisible ( false ) ;
while ( conflict ) {
2023-01-15 12:27:23 +00:00
# if QCUSTOMPLOT_VERSION < 0x020000
QCPAbstractItem * item = plot - > itemAt ( sp - > text - > position - > pixelPoint ( ) , true ) ;
# else
2022-10-09 19:24:01 +00:00
QCPAbstractItem * item = plot - > itemAt ( sp - > text - > position - > pixelPosition ( ) , true ) ;
2023-01-15 12:27:23 +00:00
# endif
2022-10-09 19:24:01 +00:00
QCPItemText * textItem = dynamic_cast < QCPItemText * > ( item ) ;
2022-10-05 10:03:15 +00:00
if ( textItem ! = nullptr & & sp - > text ! = textItem ) {
top = top - 5.0 ;
}
else {
conflict = false ;
}
sp - > text - > position - > setCoords ( left , top ) ;
2022-09-30 16:05:42 +00:00
}
2022-10-05 10:03:15 +00:00
sp - > text - > setVisible ( true ) ;
clusterSpots . insert ( sp - > dxcall , sp ) ;
}
}
QMap < QString , spotData * > : : iterator spot2 = clusterSpots . begin ( ) ;
while ( spot2 ! = clusterSpots . end ( ) ) {
2022-10-10 11:55:12 +00:00
if ( spot2 . value ( ) - > current = = current ) {
2022-10-05 10:03:15 +00:00
plot - > removeItem ( spot2 . value ( ) - > text ) ;
//qDebug(logCluster()) << "REMOVE:" << spot2.value()->dxcall;
delete spot2 . value ( ) ; // Stop memory leak?
spot2 = clusterSpots . erase ( spot2 ) ;
2022-09-18 16:42:41 +00:00
}
else {
2022-10-05 10:03:15 +00:00
+ + spot2 ;
2022-09-18 16:42:41 +00:00
}
2022-10-05 10:03:15 +00:00
2022-09-18 16:42:41 +00:00
}
2022-10-28 23:20:27 +00:00
//qDebug(logCluster()) << "Processing took" << timer.nsecsElapsed() / 1000 << "us";
2022-10-05 10:03:15 +00:00
}
2022-09-18 16:42:41 +00:00
2022-10-09 13:32:09 +00:00
void wfmain : : on_clusterPopOutBtn_clicked ( )
2022-09-18 16:42:41 +00:00
{
2022-10-09 13:32:09 +00:00
if ( settingsTabisAttached )
{
settingsTab = ui - > tabWidget - > currentWidget ( ) ;
ui - > tabWidget - > removeTab ( ui - > tabWidget - > indexOf ( settingsTab ) ) ;
settingsWidgetTab - > addTab ( settingsTab , " Settings " ) ;
settingsWidgetWindow - > show ( ) ;
ui - > clusterPopOutBtn - > setText ( " Re-attach " ) ;
ui - > colorPopOutBtn - > setText ( " Re-attach " ) ;
ui - > tabWidget - > setCurrentIndex ( 0 ) ;
settingsTabisAttached = false ;
}
else {
settingsTab = settingsWidgetTab - > currentWidget ( ) ;
settingsWidgetTab - > removeTab ( settingsWidgetTab - > indexOf ( settingsTab ) ) ;
ui - > tabWidget - > addTab ( settingsTab , " Settings " ) ;
settingsWidgetWindow - > close ( ) ;
ui - > clusterPopOutBtn - > setText ( " Pop-Out " ) ;
ui - > colorPopOutBtn - > setText ( " Pop-Out " ) ;
ui - > tabWidget - > setCurrentIndex ( 3 ) ;
settingsTabisAttached = true ;
}
2022-09-18 16:42:41 +00:00
}
2022-10-31 12:39:27 +00:00
void wfmain : : on_clusterSkimmerSpotsEnable_clicked ( bool enable )
{
prefs . clusterSkimmerSpotsEnable = enable ;
emit setClusterSkimmerSpots ( enable ) ;
}
2022-10-11 12:17:23 +00:00
void wfmain : : on_clickDragTuningEnableChk_clicked ( bool checked )
{
prefs . clickDragTuningEnable = checked ;
}
2022-09-18 16:42:41 +00:00
2023-01-30 12:01:29 +00:00
void wfmain : : on_enableUsbChk_clicked ( bool checked )
{
prefs . enableUSBControllers = checked ;
ui - > usbControllerBtn - > setEnabled ( checked ) ;
2023-01-30 16:15:43 +00:00
ui - > usbButtonsResetBtn - > setEnabled ( checked ) ;
ui - > usbCommandsResetBtn - > setEnabled ( checked ) ;
ui - > usbResetLbl - > setVisible ( checked ) ;
2023-01-30 12:01:29 +00:00
# if defined (USB_CONTROLLER)
if ( usbControllerThread ! = Q_NULLPTR ) {
usbControllerThread - > quit ( ) ;
usbControllerThread - > wait ( ) ;
usbControllerThread = Q_NULLPTR ;
}
if ( checked ) {
// Setup USB Controller
setupUsbControllerDevice ( ) ;
2023-02-07 09:32:33 +00:00
emit initUsbController ( prefs . usbSensitivity ) ;
2023-01-30 12:01:29 +00:00
emit sendUsbControllerCommands ( & usbCommands ) ;
emit sendUsbControllerButtons ( & usbButtons ) ;
}
# endif
}
2022-10-11 15:42:34 +00:00
void wfmain : : on_usbControllerBtn_clicked ( )
{
if ( shut ! = Q_NULLPTR ) {
if ( shut - > isVisible ( ) ) {
shut - > hide ( ) ;
}
else {
shut - > show ( ) ;
2022-10-22 22:43:49 +00:00
shut - > raise ( ) ;
2022-10-11 15:42:34 +00:00
}
2022-12-28 10:21:45 +00:00
}
}
2022-11-27 05:43:47 +00:00
2023-01-30 16:15:43 +00:00
void wfmain : : on_usbButtonsResetBtn_clicked ( )
{
int ret = QMessageBox : : warning ( this , tr ( " wfview " ) ,
tr ( " Are you sure you wish to reset the USB buttons? " ) ,
QMessageBox : : Ok | QMessageBox : : Cancel ,
QMessageBox : : Cancel ) ;
if ( ret = = QMessageBox : : Ok ) {
qInfo ( logUsbControl ( ) ) < < " Resetting USB buttons to default values " ;
resetUsbButtons ( ) ;
on_enableUsbChk_clicked ( true ) ; // Force disconnect/reconnect of USB controller.
}
}
void wfmain : : on_usbCommandsResetBtn_clicked ( )
{
int ret = QMessageBox : : warning ( this , tr ( " wfview " ) ,
tr ( " Are you sure you wish to reset the USB commands? " ) ,
QMessageBox : : Ok | QMessageBox : : Cancel ,
QMessageBox : : Cancel ) ;
if ( ret = = QMessageBox : : Ok ) {
qInfo ( logUsbControl ( ) ) < < " Resetting USB commands to default values " ;
resetUsbCommands ( ) ;
on_enableUsbChk_clicked ( true ) ; // Force disconnect/reconnect of USB controller.
}
}
2022-11-27 05:43:47 +00:00
void wfmain : : on_autoPollBtn_clicked ( bool checked )
{
ui - > pollTimeMsSpin - > setEnabled ( ! checked ) ;
if ( checked )
{
prefs . polling_ms = 0 ;
qInfo ( logSystem ( ) ) < < " User set radio polling interval to automatic. " ;
calculateTimingParameters ( ) ;
}
}
void wfmain : : on_manualPollBtn_clicked ( bool checked )
{
ui - > pollTimeMsSpin - > setEnabled ( checked ) ;
if ( checked )
{
prefs . polling_ms = ui - > pollTimeMsSpin - > value ( ) ;
changePollTiming ( prefs . polling_ms ) ;
}
}
void wfmain : : on_pollTimeMsSpin_valueChanged ( int timing_ms )
{
if ( ui - > manualPollBtn - > isChecked ( ) )
{
changePollTiming ( timing_ms ) ;
}
}
void wfmain : : changePollTiming ( int timing_ms , bool setUI )
{
delayedCommand - > setInterval ( timing_ms ) ;
qInfo ( logSystem ( ) ) < < " User changed radio polling interval to " < < timing_ms < < " ms. " ;
showStatusBarText ( " User changed radio polling interval to " + QString ( " %1 " ) . arg ( timing_ms ) + " ms. " ) ;
prefs . polling_ms = timing_ms ;
if ( setUI )
{
ui - > pollTimeMsSpin - > blockSignals ( true ) ;
ui - > pollTimeMsSpin - > setValue ( timing_ms ) ;
ui - > pollTimeMsSpin - > blockSignals ( false ) ;
2022-10-11 15:42:34 +00:00
}
}
2023-01-05 20:00:31 +00:00
void wfmain : : connectionHandler ( bool connect )
{
if ( ! connect ) {
emit sendCloseComm ( ) ;
ui - > connectBtn - > setText ( " Connect to Radio " ) ;
ui - > audioSystemCombo - > setEnabled ( true ) ;
ui - > audioSystemServerCombo - > setEnabled ( true ) ;
haveRigCaps = false ;
rigName - > setText ( " NONE " ) ;
}
else
{
emit sendCloseComm ( ) ; // Just in case there is a failed connection open.
if ( ui - > connectBtn - > text ( ) ! = " Cancel connection " ) {
openRig ( ) ;
}
else {
ui - > connectBtn - > setText ( " Connect to Radio " ) ;
ui - > audioSystemCombo - > setEnabled ( true ) ;
ui - > audioSystemServerCombo - > setEnabled ( true ) ;
}
}
}
2023-01-19 07:17:28 +00:00
void wfmain : : on_autoSSBchk_clicked ( bool checked )
{
prefs . automaticSidebandSwitching = checked ;
}
2023-01-21 07:23:47 +00:00
void wfmain : : on_cwButton_clicked ( )
{
if ( cw - > isMinimized ( ) )
{
cw - > raise ( ) ;
cw - > activateWindow ( ) ;
return ;
}
cw - > show ( ) ;
cw - > raise ( ) ;
cw - > activateWindow ( ) ;
}
2023-01-30 16:15:43 +00:00
void wfmain : : resetUsbButtons ( )
{
usbButtons . clear ( ) ;
// ShuttleXpress
usbButtons . append ( BUTTON ( 1 , 4 , QRect ( 25 , 199 , 89 , 169 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 1 , 5 , QRect ( 101 , 72 , 83 , 88 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 1 , 6 , QRect ( 238 , 26 , 134 , 69 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 1 , 7 , QRect ( 452 , 72 , 77 , 86 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 1 , 8 , QRect ( 504 , 199 , 89 , 169 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
// ShuttlePro2
usbButtons . append ( BUTTON ( 2 , 0 , QRect ( 60 , 66 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 1 , QRect ( 114 , 50 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 2 , QRect ( 169 , 47 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 3 , QRect ( 225 , 59 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 4 , QRect ( 41 , 132 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 5 , QRect ( 91 , 105 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 6 , QRect ( 144 , 93 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 7 , QRect ( 204 , 99 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 8 , QRect ( 253 , 124 , 40 , 30 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 9 , QRect ( 50 , 270 , 70 , 55 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 10 , QRect ( 210 , 270 , 70 , 55 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 11 , QRect ( 50 , 335 , 70 , 55 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 12 , QRect ( 210 , 335 , 70 , 55 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 13 , QRect ( 30 , 195 , 25 , 80 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 2 , 14 , QRect ( 280 , 195 , 25 , 80 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
// RC28
2023-01-30 23:54:45 +00:00
usbButtons . append ( BUTTON ( 3 , 0 , QRect ( 52 , 445 , 238 , 64 ) , Qt : : red , & usbCommands [ 1 ] , & usbCommands [ 2 ] ) ) ; // PTT On/OFF
2023-01-30 16:15:43 +00:00
usbButtons . append ( BUTTON ( 3 , 1 , QRect ( 52 , 373 , 98 , 46 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 3 , 2 , QRect ( 193 , 373 , 98 , 46 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
// Xbox Gamepad
usbButtons . append ( BUTTON ( 4 , " UP " , QRect ( 256 , 229 , 50 , 50 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " DOWN " , QRect ( 256 , 316 , 50 , 50 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " LEFT " , QRect ( 203 , 273 , 50 , 50 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " RIGHT " , QRect ( 303 , 273 , 50 , 50 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " SELECT " , QRect ( 302 , 160 , 40 , 40 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " START " , QRect ( 412 , 163 , 40 , 40 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " Y " , QRect ( 534 , 104 , 53 , 53 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " X " , QRect ( 485 , 152 , 53 , 53 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " B " , QRect ( 590 , 152 , 53 , 53 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " A " , QRect ( 534 , 202 , 53 , 53 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " L1 " , QRect ( 123 , 40 , 70 , 45 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " R1 " , QRect ( 562 , 40 , 70 , 45 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " LEFTX " , QRect ( 143 , 119 , 83 , 35 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " LEFTY " , QRect ( 162 , 132 , 50 , 57 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " RIGHTX " , QRect ( 430 , 298 , 83 , 35 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
usbButtons . append ( BUTTON ( 4 , " RIGHTY " , QRect ( 453 , 233 , 50 , 57 ) , Qt : : red , & usbCommands [ 0 ] , & usbCommands [ 0 ] ) ) ;
emit sendUsbControllerButtons ( & usbButtons ) ;
}
void wfmain : : resetUsbCommands ( )
{
usbCommands . clear ( ) ;
2023-02-02 23:46:39 +00:00
int num = 0 ;
usbCommands . append ( COMMAND ( num + + , " None " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " PTT On " , cmdSetPTT , 0x1 ) ) ;
usbCommands . append ( COMMAND ( num + + , " PTT Off " , cmdSetPTT , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " PTT Toggle " , cmdPTTToggle , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Tune " , cmdStartATU , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Step+ " , cmdSetStepUp , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Step- " , cmdSetStepDown , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Span+ " , cmdSetSpanUp , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Span- " , cmdSetSpanDown , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode+ " , cmdSetModeUp , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode- " , cmdSetModeDown , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode LSB " , cmdSetMode , modeLSB ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode USB " , cmdSetMode , modeUSB ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode LSBD " , cmdSetMode , modeLSB_D ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode USBD " , cmdSetMode , modeUSB_D ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode CW " , cmdSetMode , modeCW ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode CWR " , cmdSetMode , modeCW_R ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode FM " , cmdSetMode , modeFM ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode AM " , cmdSetMode , modeAM ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode RTTY " , cmdSetMode , modeRTTY ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode RTTYR " , cmdSetMode , modeRTTY_R ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode PSK " , cmdSetMode , modePSK ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode PSKR " , cmdSetMode , modePSK_R ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode DV " , cmdSetMode , modeDV ) ) ;
usbCommands . append ( COMMAND ( num + + , " Mode DD " , cmdSetMode , modeDD ) ) ;
usbCommands . append ( COMMAND ( num + + , " Band+ " , cmdSetBandUp , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Band- " , cmdSetBandDown , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " 23cm " , cmdGetBandStackReg , band23cm ) ) ;
usbCommands . append ( COMMAND ( num + + , " 70cm " , cmdGetBandStackReg , band70cm ) ) ;
usbCommands . append ( COMMAND ( num + + , " 2m " , cmdGetBandStackReg , band2m ) ) ;
usbCommands . append ( COMMAND ( num + + , " AIR " , cmdGetBandStackReg , bandAir ) ) ;
usbCommands . append ( COMMAND ( num + + , " WFM " , cmdGetBandStackReg , bandWFM ) ) ;
usbCommands . append ( COMMAND ( num + + , " 4m " , cmdGetBandStackReg , band4m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 6m " , cmdGetBandStackReg , band6m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 10m " , cmdGetBandStackReg , band10m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 12m " , cmdGetBandStackReg , band12m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 15m " , cmdGetBandStackReg , band15m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 17m " , cmdGetBandStackReg , band17m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 20m " , cmdGetBandStackReg , band20m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 30m " , cmdGetBandStackReg , band30m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 40m " , cmdGetBandStackReg , band40m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 60m " , cmdGetBandStackReg , band60m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 80m " , cmdGetBandStackReg , band80m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 160m " , cmdGetBandStackReg , band160m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 630m " , cmdGetBandStackReg , band630m ) ) ;
usbCommands . append ( COMMAND ( num + + , " 2200m " , cmdGetBandStackReg , band2200m ) ) ;
usbCommands . append ( COMMAND ( num + + , " GEN " , cmdGetBandStackReg , bandGen ) ) ;
usbCommands . append ( COMMAND ( num + + , " NR On " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " NR Off " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " NB On " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " NB Off " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Split On " , cmdNone , 0x01 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Split Off " , cmdNone , 0x0 ) ) ;
usbCommands . append ( COMMAND ( num + + , " Swap VFOs " , cmdVFOSwap , 0x0 ) ) ;
2023-01-30 16:15:43 +00:00
emit sendUsbControllerCommands ( & usbCommands ) ;
2023-02-01 09:24:26 +00:00
}
2023-02-07 09:32:33 +00:00
void wfmain : : receiveUsbSensitivity ( int val ) {
prefs . usbSensitivity = val ;
}