From ee2cf70dc046f161fa4d3be61174d9a90397c79b Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Wed, 4 Aug 2021 20:49:32 +0100 Subject: [PATCH] Add rigctld config to ui and fix some bugs --- rigcommander.cpp | 7 +++- rigcommander.h | 1 + rigctld.cpp | 76 ++++++++++++++++++++++++++++++------------ rigctld.h | 1 + wfmain.cpp | 44 +++++++++++++++++++----- wfmain.h | 3 ++ wfmain.ui | 22 +++++++++++- wfview.vcxproj | 64 +++++++++++++++++++++++++++++++---- wfview.vcxproj.filters | 27 +++++++++++++++ 9 files changed, 208 insertions(+), 37 deletions(-) diff --git a/rigcommander.cpp b/rigcommander.cpp index efff77c..5226d57 100644 --- a/rigcommander.cpp +++ b/rigcommander.cpp @@ -140,7 +140,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud // data from the comm port to the program: emit commReady(); - emit stateInfo(&rigState); + sendState(); // Send current rig state to rigctld pttAllowed = true; // This is for developing, set to false for "safe" debugging. Set to true for deployment. @@ -3785,6 +3785,11 @@ QByteArray rigCommander::stripData(const QByteArray &data, unsigned char cutPosi return rtndata; } +void rigCommander::sendState() +{ + emit stateInfo(&rigState); +} + void rigCommander::getDebug() { // generic debug function for development. diff --git a/rigcommander.h b/rigcommander.h index 676d07f..170476d 100644 --- a/rigcommander.h +++ b/rigcommander.h @@ -270,6 +270,7 @@ public slots: // Housekeeping: void handleStatusUpdate(const QString text); + void sendState(); void getDebug(); signals: diff --git a/rigctld.cpp b/rigctld.cpp index 7eff599..ab7c1b4 100644 --- a/rigctld.cpp +++ b/rigctld.cpp @@ -9,6 +9,7 @@ rigCtlD::rigCtlD(QObject* parent) : rigCtlD::~rigCtlD() { + qInfo(logRigCtlD()) << "closing rigctld"; } void rigCtlD::receiveFrequency(freqt freq) @@ -124,7 +125,6 @@ void rigCtlClient::socketReadyRead() } QStringList command = commandBuffer.mid(num).split(" "); - if (command[0] == 0xf0 || command[0]=="chk_vfo") { if (longReply) @@ -146,7 +146,12 @@ void rigCtlClient::socketReadyRead() if (command.length()>1) { freqt freq; - freq.Hz = command[1].toInt(); + bool ok; + double newFreq = command[1].toDouble(&ok); + if (ok) { + freq.Hz = static_cast(newFreq); + } + qInfo(logRigCtlD()) << QString("Set frequency: %1 (%2)").arg(freq.Hz).arg(command[1]); emit parent->setFrequency(freq); } sendData(QString("RPRT 0\n")); @@ -180,9 +185,23 @@ void rigCtlClient::socketReadyRead() else if (command[0] == "M" || command[0] == "set_mode") { // Set mode - if (command.length() > 1) { - qInfo(logRigCtlD()) << "setting mode: " << getMode(command[1]); - emit parent->setMode(getMode(command[1]), 0x06); + if (command.length() > 2) { + + qInfo(logRigCtlD()) << "setting mode: " << getMode(command[1]) << command[1] << "width" << command[2]; + int width = command[2].toInt(); + + if (width != -1 && width <= 1800) + width = 2; + else + width = 1; + + emit parent->setMode(getMode(command[1]), width); + if (command[1].mid(0, 3) == "PKT") { + emit parent->setDataMode(true, width); + } + else { + emit parent->setDataMode(false, 0x01); + } } sendData(QString("RPRT 0\n")); } @@ -295,36 +314,51 @@ QString rigCtlClient::getFilter(unsigned char mode, unsigned char filter) { } QString rigCtlClient::getMode(unsigned char mode, bool datamode) { - (void)datamode; + + QString ret; + if (datamode) { + return ret="PKT"; + } + switch (mode) { case 0: - return QString("LSB"); + ret.append("LSB"); + break; case 1: - return QString("USB"); + ret.append("USB"); + break; case 2: - return QString("AM"); + ret.append("AM"); + break; case 3: - return QString("CW"); + ret.append("CW"); + break; case 4: - return QString("RTTY"); + ret.append("RTTY"); + break; case 5: - return QString("FM"); + ret.append("FM"); + break; case 6: - return QString("WFM"); + ret.append("WFM"); + break; case 7: - return QString("CWR"); + ret.append("CWR"); + break; case 8: - return QString("RTTYR"); + ret.append("RTTYR"); + break; case 12: - return QString("PKTUSB"); + ret.append("USB"); + break; case 17: - return QString("PKTLSB"); + ret.append("LSB"); + break; case 22: - return QString("PKTFM"); - default: - return QString(""); + ret.append("FM"); + break; } - return QString(""); + return ret; } unsigned char rigCtlClient::getMode(QString modeString) { diff --git a/rigctld.h b/rigctld.h index 8694f4b..257509b 100644 --- a/rigctld.h +++ b/rigctld.h @@ -33,6 +33,7 @@ signals: void setFrequency(freqt freq); void setPTT(bool state); void setMode(unsigned char mode, unsigned char modeFilter); + void setDataMode(bool dataOn, unsigned char modeFilter); public slots: virtual void incomingConnection(qintptr socketDescriptor); diff --git a/wfmain.cpp b/wfmain.cpp index a5b9f08..a353cf4 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -175,13 +175,6 @@ void wfmain::openRig() qDebug(logSystem()) << "Remote host name specified by user: " << hostCL; } - // Start rigctld - if (prefs.enableRigCtlD && rigCtl == Q_NULLPTR) { - rigCtl = new rigCtlD(this); - - rigCtl->startServer(prefs.rigCtlPort); - connect(this, SIGNAL(sendRigCaps(rigCapabilities)), rigCtl, SLOT(receiveRigCaps(rigCapabilities))); - } makeRig(); @@ -405,8 +398,10 @@ void wfmain::makeRig() if (rigCtl != Q_NULLPTR) { connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*))); + connect(this, SIGNAL(requestRigState()), rig, SLOT(sendState())); connect(rigCtl, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt))); connect(rigCtl, SIGNAL(setMode(unsigned char, unsigned char)), rig, SLOT(setMode(unsigned char, unsigned char))); + connect(rigCtl, SIGNAL(setDataMode(bool, unsigned char)), rig, SLOT(setDataMode(bool, unsigned char))); connect(rigCtl, SIGNAL(setPTT(bool)), rig, SLOT(setPTT(bool))); } } @@ -425,7 +420,7 @@ void wfmain::removeRig() delete rigThread; delete rig; - + rig = Q_NULLPTR; } } @@ -1367,7 +1362,11 @@ void wfmain::loadSettings() ui->connectBtn->setEnabled(true); prefs.enableRigCtlD = settings->value("EnableRigCtlD", defPrefs.enableRigCtlD).toBool(); + ui->enableRigctldChk->setChecked(prefs.enableRigCtlD); prefs.rigCtlPort = settings->value("RigCtlPort", defPrefs.rigCtlPort).toInt(); + ui->rigctldPortTxt->setText(QString("%1").arg(prefs.rigCtlPort)); + // Call the function to start rigctld if enabled. + on_enableRigctldChk_clicked(prefs.enableRigCtlD); udpPrefs.ipAddress = settings->value("IPAddress", udpDefPrefs.ipAddress).toString(); ui->ipAddressTxt->setEnabled(ui->lanEnableBtn->isChecked()); @@ -5247,6 +5246,35 @@ void wfmain::on_meter2selectionCombo_activated(int index) (void)index; } +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. + connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*))); + connect(rigCtl, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt))); + connect(rigCtl, SIGNAL(setMode(unsigned char, unsigned char)), rig, SLOT(setMode(unsigned char, unsigned char))); + connect(rigCtl, SIGNAL(setDataMode(bool, unsigned char)), rig, SLOT(setDataMode(bool, unsigned char))); + connect(rigCtl, SIGNAL(setPTT(bool)), rig, SLOT(setPTT(bool))); + emit sendRigCaps(rigCaps); + emit requestRigState(); + } + } + prefs.enableRigCtlD = checked; +} + + // --- DEBUG FUNCTION --- void wfmain::on_debugBtn_clicked() { diff --git a/wfmain.h b/wfmain.h index a119c77..8835f32 100644 --- a/wfmain.h +++ b/wfmain.h @@ -153,6 +153,7 @@ signals: void initServer(); void sendServerConfig(SERVERCONFIG conf); void sendRigCaps(rigCapabilities caps); + void requestRigState(); private slots: void updateSizes(int tabIndex); @@ -472,6 +473,8 @@ private slots: void on_meter2selectionCombo_activated(int index); + void on_enableRigctldChk_clicked(bool checked); + private: Ui::wfmain *ui; void closeEvent(QCloseEvent *event); diff --git a/wfmain.ui b/wfmain.ui index fe15c95..d55ba9b 100644 --- a/wfmain.ui +++ b/wfmain.ui @@ -2232,7 +2232,7 @@ - + Qt::Horizontal @@ -2244,6 +2244,26 @@ + + + + Qt::RightToLeft + + + Enable RigCtld + + + + + + + Port + + + + + + diff --git a/wfview.vcxproj b/wfview.vcxproj index 2502415..6d319a1 100644 --- a/wfview.vcxproj +++ b/wfview.vcxproj @@ -57,7 +57,7 @@ Sync release\ MaxSpeed - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT="ea09e1f";HOST="wfview.org";UNAME="build";QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT="eddc5d4";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions) false MultiThreadedDLL @@ -67,12 +67,13 @@ true shell32.lib;%(AdditionalDependencies) - C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.6.11-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories) + C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories) "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) true false true false + true $(OutDir)\wfview.exe true Windows @@ -84,7 +85,7 @@ 0 - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT=\"ea09e1f\";HOST=\"wfview.org\";UNAME=\"build\";QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT=\"eddc5d4\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h @@ -98,7 +99,7 @@ Sync debug\ Disabled - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT="ea09e1f";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT="eddc5d4";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions) false MultiThreadedDebugDLL true @@ -107,7 +108,7 @@ true shell32.lib;%(AdditionalDependencies) - C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.6.11-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories) + C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories) "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) true true @@ -123,10 +124,11 @@ 0 - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT=\"ea09e1f\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;__WINDOWS_WASAPI__;GITSHORT=\"eddc5d4\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions) msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h + @@ -144,12 +146,23 @@ + + + + + + + + + + + @@ -161,6 +174,7 @@ + @@ -269,6 +283,16 @@ + + + + + + + + + + @@ -320,6 +344,8 @@ + + Document true @@ -362,6 +388,10 @@ + + + + @@ -369,6 +399,17 @@ + + + + + + + + + + + @@ -401,6 +442,17 @@ + + + + + + + + + + + diff --git a/wfview.vcxproj.filters b/wfview.vcxproj.filters index bc7845e..d78480d 100644 --- a/wfview.vcxproj.filters +++ b/wfview.vcxproj.filters @@ -57,6 +57,9 @@ + + Source Files + Source Files @@ -108,6 +111,9 @@ Source Files + + Source Files + Source Files @@ -122,12 +128,18 @@ + + Header Files + Header Files Header Files + + Header Files + Header Files @@ -182,6 +194,9 @@ Header Files + + Header Files + Header Files @@ -207,6 +222,8 @@ + + Generated Files @@ -239,6 +256,10 @@ + + + + @@ -246,6 +267,9 @@ + + Form Files + Form Files @@ -255,6 +279,9 @@ Form Files + + Form Files + Form Files