From e1be3ad4e854ec22fed79299f92ef7addc23a6c2 Mon Sep 17 00:00:00 2001 From: Joe Taylor <joe@princeton.edu> Date: Sun, 5 May 2024 16:15:24 -0400 Subject: [PATCH] Add input widget for SuperFox KEY, and send it to sftx[.exe] for use there. --- Configuration.cpp | 16 ++ Configuration.hpp | 1 + Configuration.ui | 349 ++++++++++++++++++++++------------------- widgets/mainwindow.cpp | 10 +- 4 files changed, 217 insertions(+), 159 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 870639172..9e95feccf 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -594,6 +594,7 @@ private: Q_SLOT void on_cbAutoLog_clicked(bool); Q_SLOT void on_Field_Day_Exchange_textEdited (QString const&); Q_SLOT void on_RTTY_Exchange_textEdited (QString const&); + Q_SLOT void on_FoxKey_textEdited (QString const&); Q_SLOT void on_Contest_Name_textEdited (QString const&); // typenames used as arguments must match registered type names :( @@ -692,6 +693,7 @@ private: QString RTTY_exchange_; QString Contest_Name_; QString hamlib_backed_up_; + QString FoxKey_; qint32 id_interval_; qint32 ntrials_; @@ -1001,6 +1003,11 @@ QString Configuration::RTTY_Exchange() const return m_->RTTY_exchange_; } +QString Configuration::FoxKey() const +{ + return m_->FoxKey_; +} + QString Configuration::Contest_Name() const { return m_->Contest_Name_; @@ -1577,9 +1584,11 @@ void Configuration::impl::read_settings () my_grid_ = settings_->value ("MyGrid", QString {}).toString (); FD_exchange_ = settings_->value ("Field_Day_Exchange",QString {}).toString (); RTTY_exchange_ = settings_->value ("RTTY_Exchange",QString {}).toString (); + FoxKey_ = settings_->value ("FoxKey",QString {}).toString (); Contest_Name_ = settings_->value ("Contest_Name",QString {}).toString (); ui_->Field_Day_Exchange->setText(FD_exchange_); ui_->RTTY_Exchange->setText(RTTY_exchange_); + ui_->FoxKey->setText(FoxKey_); ui_->Contest_Name->setText(Contest_Name_); hamlib_backed_up_ = settings_->value ("HamlibBackedUp",QString {}).toString (); @@ -1808,6 +1817,7 @@ void Configuration::impl::write_settings () settings_->setValue ("MyGrid", my_grid_); settings_->setValue ("Field_Day_Exchange", FD_exchange_); settings_->setValue ("RTTY_Exchange", RTTY_exchange_); + settings_->setValue ("FoxKey", FoxKey_); settings_->setValue ("Contest_Name", Contest_Name_); settings_->setValue ("Font", font_.toString ()); settings_->setValue ("DecodedTextFont", decoded_text_font_.toString ()); @@ -2275,6 +2285,7 @@ void Configuration::impl::accept () my_grid_ = ui_->grid_line_edit->text (); FD_exchange_= ui_->Field_Day_Exchange->text ().toUpper (); RTTY_exchange_= ui_->RTTY_Exchange->text ().toUpper (); + FoxKey_= ui_->FoxKey->text().toUpper(); Contest_Name_= ui_->Contest_Name->text ().toUpper (); spot_to_psk_reporter_ = ui_->psk_reporter_check_box->isChecked (); psk_reporter_tcpip_ = ui_->psk_reporter_tcpip_check_box->isChecked (); @@ -3129,6 +3140,11 @@ void Configuration::impl::on_RTTY_Exchange_textEdited (QString const& exchange) ui_->RTTY_Exchange->setText (exchange.toUpper ()); } +void Configuration::impl::on_FoxKey_textEdited (QString const& ckey) +{ + ui_->FoxKey->setText (ckey.toUpper ()); +} + void Configuration::impl::on_Contest_Name_textEdited (QString const& exchange) { ui_->Contest_Name->setText (exchange.toUpper ()); diff --git a/Configuration.hpp b/Configuration.hpp index 6ae241f76..07a297eb8 100644 --- a/Configuration.hpp +++ b/Configuration.hpp @@ -100,6 +100,7 @@ public: QString my_grid () const; QString Field_Day_Exchange() const; QString RTTY_Exchange() const; + QString FoxKey() const; QString Contest_Name() const; void setEU_VHF_Contest(); QFont text_font () const; diff --git a/Configuration.ui b/Configuration.ui index 8f6662590..33a6f5f01 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -2908,18 +2908,40 @@ Right click for insert and delete options.</string> <bool>false</bool> </property> <layout class="QGridLayout" name="gridLayout_15" columnstretch="1,0,0,0,0"> - <item row="0" column="2" rowspan="3"> - <spacer name="horizontalSpacer_11"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <item row="1" column="0"> + <widget class="QRadioButton" name="rbNA_VHF_Contest"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> + <property name="toolTip"> + <string><html><head/><body><p>North American VHF/UHF/Microwave contests and others in which a 4-character grid locator is the required exchange.</p></body></html></string> </property> - </spacer> + <property name="accessibleName"> + <string>NA VHF Contest</string> + </property> + <property name="text"> + <string>NA VHF</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">special_op_activity_button_group</string> + </attribute> + </widget> + </item> + <item row="3" column="4"> + <widget class="QRadioButton" name="rbARRL_Digi"> + <property name="toolTip"> + <string><html><head/><body><p>ARRL International Digital Contest</p></body></html></string> + </property> + <property name="text"> + <string>ARRL Digi Contest</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">special_op_activity_button_group</string> + </attribute> + </widget> </item> <item row="4" column="0"> <widget class="QRadioButton" name="rbQ65pileup"> @@ -2940,8 +2962,8 @@ Right click for insert and delete options.</string> </attribute> </widget> </item> - <item row="1" column="0"> - <widget class="QRadioButton" name="rbNA_VHF_Contest"> + <item row="2" column="0"> + <widget class="QRadioButton" name="rbEU_VHF_Contest"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> <horstretch>0</horstretch> @@ -2949,13 +2971,124 @@ Right click for insert and delete options.</string> </sizepolicy> </property> <property name="toolTip"> - <string><html><head/><body><p>North American VHF/UHF/Microwave contests and others in which a 4-character grid locator is the required exchange.</p></body></html></string> + <string><html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html></string> </property> <property name="accessibleName"> - <string>NA VHF Contest</string> + <string>EU VHF Contest</string> </property> <property name="text"> - <string>NA VHF</string> + <string>EU VHF Contest</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">special_op_activity_button_group</string> + </attribute> + </widget> + </item> + <item row="0" column="2" rowspan="3"> + <spacer name="horizontalSpacer_11"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="4" column="4"> + <layout class="QHBoxLayout" name="horizontalLayout_24"> + <item> + <widget class="QCheckBox" name="cbContestName"> + <property name="toolTip"> + <string><html><head/><body><p>Call CQ with an individual contest name instead of TEST, RU, or WW. </p></body></html></string> + </property> + <property name="text"> + <string>CQ with individual contest name</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_12"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_25"> + <item> + <widget class="QLabel" name="labCN"> + <property name="text"> + <string>Contest name:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="Contest_Name"> + <property name="maximumSize"> + <size> + <width>70</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="maxLength"> + <number>4</number> + </property> + <property name="cursorPosition"> + <number>0</number> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item row="0" column="0"> + <widget class="QRadioButton" name="rbFox"> + <property name="toolTip"> + <string><html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html></string> + </property> + <property name="accessibleName"> + <string>Fox</string> + </property> + <property name="text"> + <string>Fox</string> + </property> + <property name="checked"> + <bool>false</bool> + </property> + <attribute name="buttonGroup"> + <string notr="true">special_op_activity_button_group</string> + </attribute> + </widget> + </item> + <item row="0" column="4"> + <widget class="QRadioButton" name="rbHound"> + <property name="toolTip"> + <string><html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html></string> + </property> + <property name="accessibleName"> + <string>Hound</string> + </property> + <property name="text"> + <string>Hound</string> + </property> + <property name="checked"> + <bool>true</bool> </property> <attribute name="buttonGroup"> <string notr="true">special_op_activity_button_group</string> @@ -2984,6 +3117,13 @@ Right click for insert and delete options.</string> </attribute> </widget> </item> + <item row="0" column="1"> + <widget class="QCheckBox" name="cbSuperFox"> + <property name="text"> + <string>SuperFox</string> + </property> + </widget> + </item> <item row="2" column="4"> <layout class="QHBoxLayout" name="horizontalLayout_18" stretch="2,1,1"> <item> @@ -3053,120 +3193,6 @@ Right click for insert and delete options.</string> </item> </layout> </item> - <item row="4" column="4"> - <layout class="QHBoxLayout" name="horizontalLayout_24"> - <item> - <widget class="QCheckBox" name="cbContestName"> - <property name="toolTip"> - <string><html><head/><body><p>Call CQ with an individual contest name instead of TEST, RU, or WW. </p></body></html></string> - </property> - <property name="text"> - <string>CQ with individual contest name</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_12"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_25"> - <item> - <widget class="QLabel" name="labCN"> - <property name="text"> - <string>Contest name:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="Contest_Name"> - <property name="maximumSize"> - <size> - <width>70</width> - <height>16777215</height> - </size> - </property> - <property name="text"> - <string/> - </property> - <property name="maxLength"> - <number>4</number> - </property> - <property name="cursorPosition"> - <number>0</number> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item row="3" column="4"> - <widget class="QRadioButton" name="rbARRL_Digi"> - <property name="toolTip"> - <string><html><head/><body><p>ARRL International Digital Contest</p></body></html></string> - </property> - <property name="text"> - <string>ARRL Digi Contest</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">special_op_activity_button_group</string> - </attribute> - </widget> - </item> - <item row="2" column="0"> - <widget class="QRadioButton" name="rbEU_VHF_Contest"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string><html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html></string> - </property> - <property name="accessibleName"> - <string>EU VHF Contest</string> - </property> - <property name="text"> - <string>EU VHF Contest</string> - </property> - <attribute name="buttonGroup"> - <string notr="true">special_op_activity_button_group</string> - </attribute> - </widget> - </item> - <item row="0" column="0"> - <widget class="QRadioButton" name="rbFox"> - <property name="toolTip"> - <string><html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html></string> - </property> - <property name="accessibleName"> - <string>Fox</string> - </property> - <property name="text"> - <string>Fox</string> - </property> - <property name="checked"> - <bool>false</bool> - </property> - <attribute name="buttonGroup"> - <string notr="true">special_op_activity_button_group</string> - </attribute> - </widget> - </item> <item row="1" column="4"> <layout class="QHBoxLayout" name="horizontalLayout_17" stretch="2,1,1"> <item> @@ -3236,31 +3262,38 @@ Right click for insert and delete options.</string> </item> </layout> </item> - <item row="0" column="4"> - <widget class="QRadioButton" name="rbHound"> - <property name="toolTip"> - <string><html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html></string> - </property> - <property name="accessibleName"> - <string>Hound</string> - </property> - <property name="text"> - <string>Hound</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - <attribute name="buttonGroup"> - <string notr="true">special_op_activity_button_group</string> - </attribute> - </widget> - </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="cbSuperFox"> - <property name="text"> - <string>SuperFox</string> - </property> - </widget> + <item row="1" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_27"> + <item> + <widget class="QLabel" name="sfkey_label"> + <property name="text"> + <string>Key:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="FoxKey"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>80</width> + <height>16777215</height> + </size> + </property> + <property name="maxLength"> + <number>9</number> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> </item> </layout> </widget> @@ -3505,13 +3538,13 @@ Right click for insert and delete options.</string> </connection> </connections> <buttongroups> - <buttongroup name="split_mode_button_group"/> - <buttongroup name="TX_mode_button_group"/> - <buttongroup name="CAT_data_bits_button_group"/> - <buttongroup name="CAT_stop_bits_button_group"/> <buttongroup name="TX_audio_source_button_group"/> <buttongroup name="PTT_method_button_group"/> + <buttongroup name="split_mode_button_group"/> + <buttongroup name="CAT_stop_bits_button_group"/> <buttongroup name="CAT_handshake_button_group"/> <buttongroup name="special_op_activity_button_group"/> + <buttongroup name="TX_mode_button_group"/> + <buttongroup name="CAT_data_bits_button_group"/> </buttongroups> </ui> diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index bf5816d2f..3e2c3f8a3 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -5134,6 +5134,11 @@ void MainWindow::guiUpdate() //Once per second (onesec) if(nsec != m_sec0) { // qDebug() << "AAA" << nsec%60 << ipc_qmap[5]; + +// qint64 n64 = QDateTime::currentSecsSinceEpoch(); +// n64=n64/30; +// n64=n64*30; +// qDebug() << "bb" << m_config.FoxKey() << nsec%60 << dec_data.params.nutc << n64 << n64%60; if(m_mode=="FST4") chk_FST4_freq_range(); m_currentBand=m_config.bands()->find(m_freqNominal); if( SpecOp::HOUND == m_specOp ) { @@ -10933,7 +10938,10 @@ void MainWindow::on_jt65Button_clicked() void MainWindow::sfox_tx() { auto fname {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox_1.dat")).toLocal8Bit()}; - p2.start(QDir::toNativeSeparators(m_appDir)+QDir::separator()+"sftx", QStringList {fname}); + QStringList args{fname}; + args.append(m_config.FoxKey()); + qDebug() << "aa" << args; + p2.start(QDir::toNativeSeparators(m_appDir)+QDir::separator()+"sftx", args); p2.waitForFinished(); auto fname2 {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox_2.dat")).toLocal8Bit()}; sfox_wave_(fname2.constData(), (FCL)fname2.size());