Compare commits
47 Commits
v1.0.0-rc1
...
v1.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 9423640e52 | |||
| 952cc0b844 | |||
| 0bd7a74103 | |||
| 82a0cdd0cf | |||
| 7f187f4cf8 | |||
| f2ba541f09 | |||
| e9d2d59842 | |||
| bda9a5202e | |||
| 40e1bfab0e | |||
| b031a2cdbe | |||
| a2c6451b47 | |||
| 3f6c87b200 | |||
| fa4c39495d | |||
| 5f3b74338c | |||
| d1ccbc599b | |||
| 6e036b7d58 | |||
| 1629415dc1 | |||
| 08cf869125 | |||
| 03bd44ae39 | |||
| 14626978c0 | |||
| dd43f0db84 | |||
| 5646268faf | |||
| 5d21fdf1dc | |||
| 5d2ba76c17 | |||
| 7bd86ca177 | |||
| 59b1a3b011 | |||
| ce2c045458 | |||
| 218c5b3d47 | |||
| 27ae28a889 | |||
| 1a2596224a | |||
| 82915540b4 | |||
| 73c6dd50fb | |||
| ee48d8fd86 | |||
| d8a16f4a42 | |||
| 5ef440faf6 | |||
| 9d9ae62526 | |||
| 6b9c9b4ceb | |||
| 1febb18495 | |||
| 43401c3c26 | |||
| 55928be661 | |||
| a5f8593b3d | |||
| 07f1594d0a | |||
| b6dd6aadc8 | |||
| b9b334c6cf | |||
| fec45aa0ad | |||
| 2ef4e90710 | |||
| a0dc7bc013 |
@@ -243,6 +243,7 @@ set (wsjtx_CXXSRCS
|
||||
messagereplydialog.cpp
|
||||
keyeater.cpp
|
||||
APRSISClient.cpp
|
||||
SpotClient.cpp
|
||||
Inbox.cpp
|
||||
messagewindow.cpp
|
||||
mainwindow.cpp
|
||||
|
||||
+7
-1
@@ -628,6 +628,7 @@ private:
|
||||
qint32 RxBandwidth_;
|
||||
double degrade_;
|
||||
double txDelay_;
|
||||
bool check_for_updates_;
|
||||
bool id_after_73_;
|
||||
bool tx_qsy_allowed_;
|
||||
bool spot_to_reporting_networks_;
|
||||
@@ -750,6 +751,7 @@ qint32 Configuration::aggressive() const {return m_->aggressive_;}
|
||||
double Configuration::degrade() const {return m_->degrade_;}
|
||||
double Configuration::txDelay() const {return m_->txDelay_;}
|
||||
qint32 Configuration::RxBandwidth() const {return m_->RxBandwidth_;}
|
||||
bool Configuration::check_for_updates() const { return m_->check_for_updates_; }
|
||||
bool Configuration::id_after_73 () const {return m_->id_after_73_;}
|
||||
bool Configuration::tx_qsy_allowed () const {return m_->tx_qsy_allowed_;}
|
||||
bool Configuration::spot_to_reporting_networks () const
|
||||
@@ -772,7 +774,7 @@ bool Configuration::heartbeat_qso_pause() const { return m_->heartbeat_qso_pause
|
||||
bool Configuration::relay_off() const { return m_->relay_disabled_; }
|
||||
bool Configuration::monitor_off_at_startup () const {return m_->monitor_off_at_startup_;}
|
||||
bool Configuration::monitor_last_used () const {return m_->rig_is_dummy_ || m_->monitor_last_used_;}
|
||||
bool Configuration::log_as_DATA () const {return m_->log_as_DATA_;}
|
||||
bool Configuration::log_as_DATA () const { return false; }
|
||||
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
|
||||
bool Configuration::prompt_to_log () const {return m_->prompt_to_log_;}
|
||||
bool Configuration::insert_blank () const {return m_->insert_blank_;}
|
||||
@@ -1400,6 +1402,7 @@ void Configuration::impl::initialize_models ()
|
||||
ui_->sound_cq_path_display_label->setText(sound_cq_path_);
|
||||
ui_->sound_dm_path_display_label->setText(sound_dm_path_);
|
||||
ui_->sound_am_path_display_label->setText(sound_am_path_);
|
||||
ui_->checkForUpdates_checkBox->setChecked (check_for_updates_);
|
||||
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
|
||||
ui_->tx_qsy_check_box->setChecked (tx_qsy_allowed_);
|
||||
ui_->psk_reporter_check_box->setChecked (spot_to_reporting_networks_);
|
||||
@@ -1677,6 +1680,7 @@ void Configuration::impl::read_settings ()
|
||||
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
|
||||
monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool ();
|
||||
spot_to_reporting_networks_ = settings_->value ("PSKReporter", true).toBool ();
|
||||
check_for_updates_ = settings_->value("CheckForUpdates", true).toBool();
|
||||
id_after_73_ = settings_->value ("After73", false).toBool ();
|
||||
tx_qsy_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
|
||||
use_dynamic_info_ = settings_->value ("AutoGrid", false).toBool ();
|
||||
@@ -1849,6 +1853,7 @@ void Configuration::impl::write_settings ()
|
||||
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
|
||||
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
|
||||
settings_->setValue ("PSKReporter", spot_to_reporting_networks_);
|
||||
settings_->setValue ("CheckForUpdates", check_for_updates_);
|
||||
settings_->setValue ("After73", id_after_73_);
|
||||
settings_->setValue ("TxQSYAllowed", tx_qsy_allowed_);
|
||||
settings_->setValue ("Macros", macros_.stringList ());
|
||||
@@ -2381,6 +2386,7 @@ void Configuration::impl::accept ()
|
||||
aggressive_ = ui_->sbAggressive->value ();
|
||||
degrade_ = ui_->sbDegrade->value ();
|
||||
RxBandwidth_ = ui_->sbBandwidth->value ();
|
||||
check_for_updates_ = ui_->checkForUpdates_checkBox->isChecked();
|
||||
id_after_73_ = ui_->CW_id_after_73_check_box->isChecked ();
|
||||
tx_qsy_allowed_ = ui_->tx_qsy_check_box->isChecked ();
|
||||
transmit_directed_ = ui_->transmit_directed_check_box->isChecked();
|
||||
|
||||
@@ -118,6 +118,7 @@ public:
|
||||
qint32 RxBandwidth() const;
|
||||
double degrade() const;
|
||||
double txDelay() const;
|
||||
bool check_for_updates() const;
|
||||
bool id_after_73 () const;
|
||||
bool tx_qsy_allowed () const;
|
||||
bool spot_to_reporting_networks () const;
|
||||
|
||||
+138
-59
@@ -63,7 +63,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>738</width>
|
||||
<height>453</height>
|
||||
<height>448</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
@@ -88,6 +88,16 @@
|
||||
<string>Station Details</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="callsign_label">
|
||||
<property name="text">
|
||||
<string>My Callsign:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>callsign_line_edit</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="grid_label">
|
||||
<property name="text">
|
||||
@@ -121,16 +131,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="callsign_label">
|
||||
<property name="text">
|
||||
<string>My Callsign:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>callsign_line_edit</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="groups_label">
|
||||
<property name="text">
|
||||
@@ -278,8 +278,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>724</width>
|
||||
<height>646</height>
|
||||
<width>726</width>
|
||||
<height>631</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_26">
|
||||
@@ -394,6 +394,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkForUpdates_checkBox">
|
||||
<property name="text">
|
||||
<string>Check for software updates at startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
@@ -918,8 +925,8 @@ text message.</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>718</width>
|
||||
<height>435</height>
|
||||
<width>285</width>
|
||||
<height>397</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_27">
|
||||
@@ -1339,8 +1346,8 @@ a few, particularly some Kenwood rigs, require it).</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>237</width>
|
||||
<height>467</height>
|
||||
<width>257</width>
|
||||
<height>427</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_28">
|
||||
@@ -1767,8 +1774,8 @@ radio interface behave as expected.</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>760</width>
|
||||
<height>502</height>
|
||||
<width>267</width>
|
||||
<height>302</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_29">
|
||||
@@ -2080,8 +2087,8 @@ both here.</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>746</width>
|
||||
<height>525</height>
|
||||
<width>572</width>
|
||||
<height>498</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_30">
|
||||
@@ -2108,7 +2115,7 @@ both here.</string>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="label_13">
|
||||
<property name="text">
|
||||
<string>Op Call:</string>
|
||||
<string>Operator Callsign (if different than Station Callsign):</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -2153,6 +2160,9 @@ both here.</string>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="log_as_RTTY_check_box">
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Some logging programs will not accept JT-65 or JT9 as a recognized mode.</string>
|
||||
</property>
|
||||
@@ -2182,6 +2192,9 @@ comments field.</string>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -2339,7 +2352,7 @@ This is used for reverse ping analysis which is very useful
|
||||
for assessing propagation and system performance.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable spotting to reporting networks (PSKReporter && APRS-IS)</string>
|
||||
<string>Enable spotting to reporting networks (JS8NET, PSKReporter, APRS-IS, etc)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
@@ -2537,8 +2550,8 @@ for assessing propagation and system performance.</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>760</width>
|
||||
<height>502</height>
|
||||
<width>498</width>
|
||||
<height>321</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_31">
|
||||
@@ -3115,8 +3128,8 @@ QListView::item:hover {
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>738</width>
|
||||
<height>378</height>
|
||||
<width>280</width>
|
||||
<height>201</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_15">
|
||||
@@ -3370,8 +3383,8 @@ QListView::item:hover {
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>233</width>
|
||||
<height>253</height>
|
||||
<width>236</width>
|
||||
<height>258</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
@@ -3574,8 +3587,8 @@ QListView::item:hover {
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>277</width>
|
||||
<height>93</height>
|
||||
<width>288</width>
|
||||
<height>96</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
@@ -3983,71 +3996,137 @@ soundcard changes</string>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>configuration_tabs</tabstop>
|
||||
<tabstop>use_dynamic_grid</tabstop>
|
||||
<tabstop>type_2_msg_gen_combo_box</tabstop>
|
||||
<tabstop>monitor_last_used_check_box</tabstop>
|
||||
<tabstop>quick_call_check_box</tabstop>
|
||||
<tabstop>CW_id_after_73_check_box</tabstop>
|
||||
<tabstop>enable_VHF_features_check_box</tabstop>
|
||||
<tabstop>single_decode_check_box</tabstop>
|
||||
<tabstop>decode_at_52s_check_box</tabstop>
|
||||
<tabstop>CW_id_interval_spin_box</tabstop>
|
||||
<tabstop>tabWidget_2</tabstop>
|
||||
<tabstop>callsign_line_edit</tabstop>
|
||||
<tabstop>grid_line_edit</tabstop>
|
||||
<tabstop>groups_line_edit</tabstop>
|
||||
<tabstop>avoid_allcall_checkbox</tabstop>
|
||||
<tabstop>cq_message_line_edit</tabstop>
|
||||
<tabstop>reply_message_line_edit</tabstop>
|
||||
<tabstop>info_message_line_edit</tabstop>
|
||||
<tabstop>scrollArea_2</tabstop>
|
||||
<tabstop>miles_check_box</tabstop>
|
||||
<tabstop>monitor_off_check_box</tabstop>
|
||||
<tabstop>tx_qsy_check_box</tabstop>
|
||||
<tabstop>transmit_directed_check_box</tabstop>
|
||||
<tabstop>heartbeat_anywhere_check_box</tabstop>
|
||||
<tabstop>heartbeat_qso_pause_check_box</tabstop>
|
||||
<tabstop>spellcheck_check_box</tabstop>
|
||||
<tabstop>autoreply_off_check_box</tabstop>
|
||||
<tabstop>relay_disabled_check_box</tabstop>
|
||||
<tabstop>auto_whitelist_line_edit</tabstop>
|
||||
<tabstop>auto_blacklist_line_edit</tabstop>
|
||||
<tabstop>scrollArea</tabstop>
|
||||
<tabstop>callsign_aging_spin_box</tabstop>
|
||||
<tabstop>activity_aging_spin_box</tabstop>
|
||||
<tabstop>tx_watchdog_spin_box</tabstop>
|
||||
<tabstop>rig_combo_box</tabstop>
|
||||
<tabstop>CAT_poll_interval_spin_box</tabstop>
|
||||
<tabstop>tabWidget_3</tabstop>
|
||||
<tabstop>scrollArea_3</tabstop>
|
||||
<tabstop>CAT_port_combo_box</tabstop>
|
||||
<tabstop>CAT_serial_baud_combo_box</tabstop>
|
||||
<tabstop>CAT_default_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_7_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_8_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_default_stop_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_one_stop_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_two_stop_bit_radio_button</tabstop>
|
||||
<tabstop>CAT_handshake_default_radio_button</tabstop>
|
||||
<tabstop>CAT_handshake_none_radio_button</tabstop>
|
||||
<tabstop>CAT_handshake_xon_radio_button</tabstop>
|
||||
<tabstop>CAT_handshake_hardware_radio_button</tabstop>
|
||||
<tabstop>force_DTR_combo_box</tabstop>
|
||||
<tabstop>force_RTS_combo_box</tabstop>
|
||||
<tabstop>scrollArea_4</tabstop>
|
||||
<tabstop>PTT_VOX_radio_button</tabstop>
|
||||
<tabstop>PTT_CAT_radio_button</tabstop>
|
||||
<tabstop>PTT_DTR_radio_button</tabstop>
|
||||
<tabstop>PTT_CAT_radio_button</tabstop>
|
||||
<tabstop>PTT_RTS_radio_button</tabstop>
|
||||
<tabstop>PTT_port_combo_box</tabstop>
|
||||
<tabstop>mode_USB_radio_button</tabstop>
|
||||
<tabstop>mode_none_radio_button</tabstop>
|
||||
<tabstop>mode_data_radio_button</tabstop>
|
||||
<tabstop>TX_source_data_radio_button</tabstop>
|
||||
<tabstop>TX_source_mic_radio_button</tabstop>
|
||||
<tabstop>mode_none_radio_button</tabstop>
|
||||
<tabstop>mode_USB_radio_button</tabstop>
|
||||
<tabstop>mode_data_radio_button</tabstop>
|
||||
<tabstop>split_none_radio_button</tabstop>
|
||||
<tabstop>split_rig_radio_button</tabstop>
|
||||
<tabstop>split_emulate_radio_button</tabstop>
|
||||
<tabstop>split_rig_radio_button</tabstop>
|
||||
<tabstop>split_none_radio_button</tabstop>
|
||||
<tabstop>sbTxDelay</tabstop>
|
||||
<tabstop>ptt_command_line_edit</tabstop>
|
||||
<tabstop>test_CAT_push_button</tabstop>
|
||||
<tabstop>test_PTT_push_button</tabstop>
|
||||
<tabstop>scrollArea_5</tabstop>
|
||||
<tabstop>sound_output_combo_box</tabstop>
|
||||
<tabstop>sound_input_combo_box</tabstop>
|
||||
<tabstop>sound_input_channel_combo_box</tabstop>
|
||||
<tabstop>sound_output_combo_box</tabstop>
|
||||
<tabstop>sound_output_channel_combo_box</tabstop>
|
||||
<tabstop>save_path_select_push_button</tabstop>
|
||||
<tabstop>azel_path_select_push_button</tabstop>
|
||||
<tabstop>checkBoxPwrBandTxMemory</tabstop>
|
||||
<tabstop>checkBoxPwrBandTuneMemory</tabstop>
|
||||
<tabstop>add_macro_line_edit</tabstop>
|
||||
<tabstop>add_macro_push_button</tabstop>
|
||||
<tabstop>delete_macro_push_button</tabstop>
|
||||
<tabstop>macros_list_view</tabstop>
|
||||
<tabstop>prompt_to_log_check_box</tabstop>
|
||||
<tabstop>scrollArea_6</tabstop>
|
||||
<tabstop>opCallEntry</tabstop>
|
||||
<tabstop>log_as_RTTY_check_box</tabstop>
|
||||
<tabstop>udp_server_line_edit</tabstop>
|
||||
<tabstop>udp_server_port_spin_box</tabstop>
|
||||
<tabstop>udpEnable</tabstop>
|
||||
<tabstop>accept_udp_requests_check_box</tabstop>
|
||||
<tabstop>udpWindowToFront</tabstop>
|
||||
<tabstop>udpWindowRestore</tabstop>
|
||||
<tabstop>use_dynamic_grid</tabstop>
|
||||
<tabstop>psk_reporter_check_box</tabstop>
|
||||
<tabstop>aprs_server_line_edit</tabstop>
|
||||
<tabstop>aprs_server_port_spin_box</tabstop>
|
||||
<tabstop>aprs_passcode_line_edit</tabstop>
|
||||
<tabstop>enable_n1mm_broadcast_check_box</tabstop>
|
||||
<tabstop>n1mm_server_name_line_edit</tabstop>
|
||||
<tabstop>n1mm_server_port_spin_box</tabstop>
|
||||
<tabstop>scrollArea_7</tabstop>
|
||||
<tabstop>calibration_slope_ppm_spin_box</tabstop>
|
||||
<tabstop>calibration_intercept_spin_box</tabstop>
|
||||
<tabstop>frequencies_table_view</tabstop>
|
||||
<tabstop>auto_switch_bands_check_box</tabstop>
|
||||
<tabstop>stations_table_view</tabstop>
|
||||
<tabstop>sbNtrials</tabstop>
|
||||
<tabstop>sbAggressive</tabstop>
|
||||
<tabstop>cbTwoPass</tabstop>
|
||||
<tabstop>add_macro_push_button</tabstop>
|
||||
<tabstop>add_macro_line_edit</tabstop>
|
||||
<tabstop>delete_macro_push_button</tabstop>
|
||||
<tabstop>macros_list_view</tabstop>
|
||||
<tabstop>sound_am_path_test_push_button</tabstop>
|
||||
<tabstop>sound_dm_path_reset_push_button</tabstop>
|
||||
<tabstop>sound_am_path_reset_push_button</tabstop>
|
||||
<tabstop>sound_dm_path_select_push_button</tabstop>
|
||||
<tabstop>sound_am_path_select_push_button</tabstop>
|
||||
<tabstop>sound_dm_path_test_push_button</tabstop>
|
||||
<tabstop>sound_cq_path_select_push_button</tabstop>
|
||||
<tabstop>sound_cq_path_test_push_button</tabstop>
|
||||
<tabstop>sound_cq_path_reset_push_button</tabstop>
|
||||
<tabstop>font_push_button</tabstop>
|
||||
<tabstop>tabWidget</tabstop>
|
||||
<tabstop>scrollArea_8</tabstop>
|
||||
<tabstop>tableForegroundButton</tabstop>
|
||||
<tabstop>pbCQmsg</tabstop>
|
||||
<tabstop>tableFontButton</tabstop>
|
||||
<tabstop>pbMyCall</tabstop>
|
||||
<tabstop>tableSelectedRowBackgroundButton</tabstop>
|
||||
<tabstop>tableBackgroundButton</tabstop>
|
||||
<tabstop>scrollArea_9</tabstop>
|
||||
<tabstop>txFontButton</tabstop>
|
||||
<tabstop>rxFontButton</tabstop>
|
||||
<tabstop>txForegroundButton</tabstop>
|
||||
<tabstop>rxBackgroundButton</tabstop>
|
||||
<tabstop>rxForegroundButton</tabstop>
|
||||
<tabstop>scrollArea_10</tabstop>
|
||||
<tabstop>composeBackgroundButton</tabstop>
|
||||
<tabstop>composeForegroundButton</tabstop>
|
||||
<tabstop>composeFontButton</tabstop>
|
||||
<tabstop>sbDegrade</tabstop>
|
||||
<tabstop>sbBandwidth</tabstop>
|
||||
<tabstop>cbx2ToneSpacing</tabstop>
|
||||
<tabstop>cbx4ToneSpacing</tabstop>
|
||||
<tabstop>sbNtrials</tabstop>
|
||||
<tabstop>sbAggressive</tabstop>
|
||||
<tabstop>cbTwoPass</tabstop>
|
||||
<tabstop>cbFox</tabstop>
|
||||
<tabstop>cbHound</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
@@ -4117,12 +4196,12 @@ soundcard changes</string>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
#include "SpotClient.h"
|
||||
#include "Message.h"
|
||||
|
||||
#include "moc_SpotClient.cpp"
|
||||
|
||||
SpotClient::SpotClient(MessageClient *client, QObject *parent):
|
||||
QObject(parent),
|
||||
m_client { client }
|
||||
{
|
||||
prepare();
|
||||
|
||||
connect(&m_timer, &QTimer::timeout, this, &SpotClient::processSpots);
|
||||
m_timer.setInterval(60 * 1000);
|
||||
m_timer.setSingleShot(false);
|
||||
m_timer.start();
|
||||
}
|
||||
|
||||
void SpotClient::prepare(){
|
||||
QHostInfo::lookupHost("spot.js8call.com", this, SLOT(dnsLookupResult(QHostInfo)));
|
||||
}
|
||||
|
||||
void SpotClient::dnsLookupResult(QHostInfo info){
|
||||
if (info.addresses().isEmpty()) {
|
||||
qDebug() << "SpotClient Error:" << info.errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
m_address = info.addresses().at(0);
|
||||
qDebug() << "SpotClient Resolve:" << m_address.toString();
|
||||
}
|
||||
|
||||
void SpotClient::setLocalStation(QString callsign, QString grid, QString info, QString version){
|
||||
bool changed = false;
|
||||
|
||||
if(m_call != callsign){
|
||||
m_call = callsign;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if(m_grid != grid){
|
||||
m_grid = grid;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if(m_info != info){
|
||||
m_info = info;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if(m_version != version){
|
||||
m_version = version;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
// send local information to network on change, or once every 15 minutes
|
||||
if(changed || m_seq % 15 == 0){
|
||||
enqueueLocalSpot(callsign, grid, info, version);
|
||||
}
|
||||
}
|
||||
|
||||
void SpotClient::enqueueLocalSpot(QString callsign, QString grid, QString info, QString version){
|
||||
auto m = Message("RX.LOCAL", "", {
|
||||
{"CALLSIGN", QVariant(callsign)},
|
||||
{"GRID", QVariant(grid)},
|
||||
{"INFO", QVariant(info)},
|
||||
{"VERSION", QVariant(version)},
|
||||
});
|
||||
|
||||
m_queue.enqueue(m.toJson());
|
||||
}
|
||||
|
||||
void SpotClient::enqueueSpot(QString callsign, QString grid, int frequency, int snr){
|
||||
auto m = Message("RX.SPOT", "", {
|
||||
{"BY", QVariant(QMap<QString, QVariant>{
|
||||
{"CALLSIGN", QVariant(m_call)},
|
||||
{"GRID", QVariant(m_grid)},
|
||||
})},
|
||||
{"CALLSIGN", QVariant(callsign)},
|
||||
{"GRID", QVariant(grid)},
|
||||
{"FREQ", QVariant(frequency)},
|
||||
{"SNR", QVariant(snr)},
|
||||
});
|
||||
|
||||
m_queue.enqueue(m.toJson());
|
||||
}
|
||||
|
||||
void SpotClient::enqueueCmd(QString cmd, QString from, QString to, QString relayPath, QString text, QString grid, QString extra, int frequency, int snr){
|
||||
auto m = Message("RX.DIRECTED", "", {
|
||||
{"BY", QVariant(QMap<QString, QVariant>{
|
||||
{"CALLSIGN", QVariant(m_call)},
|
||||
{"GRID", QVariant(m_grid)},
|
||||
})},
|
||||
{"CMD", QVariant(cmd)},
|
||||
{"FROM", QVariant(from)},
|
||||
{"TO", QVariant(to)},
|
||||
{"PATH", QVariant(relayPath)},
|
||||
{"TEXT", QVariant(text)},
|
||||
{"GRID", QVariant(grid)},
|
||||
{"EXTRA", QVariant(extra)},
|
||||
{"FREQ", QVariant(frequency)},
|
||||
{"SNR", QVariant(snr)},
|
||||
});
|
||||
|
||||
m_queue.enqueue(m.toJson());
|
||||
}
|
||||
|
||||
void SpotClient::processSpots(){
|
||||
if(m_address.isNull()){
|
||||
prepare();
|
||||
return;
|
||||
}
|
||||
|
||||
while(!m_queue.isEmpty()){
|
||||
sendRawSpot(m_queue.dequeue());
|
||||
}
|
||||
|
||||
m_seq++;
|
||||
}
|
||||
|
||||
void SpotClient::sendRawSpot(QByteArray payload){
|
||||
if(!m_address.isNull()){
|
||||
m_client->send_raw_datagram(payload, m_address, 50000);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
#ifndef JS8SPOTCLIENT_H
|
||||
#define JS8SPOTCLIENT_H
|
||||
|
||||
#include "MessageClient.hpp"
|
||||
|
||||
#include <QObject>
|
||||
#include <QHostInfo>
|
||||
#include <QQueue>
|
||||
#include <QTimer>
|
||||
|
||||
class SpotClient : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpotClient(MessageClient *client, QObject *parent = nullptr);
|
||||
|
||||
void prepare();
|
||||
void setLocalStation(QString callsign, QString grid, QString info, QString version);
|
||||
void enqueueLocalSpot(QString callsign, QString grid, QString info, QString version);
|
||||
void enqueueCmd(QString cmd, QString from, QString to, QString relayPath, QString text, QString grid, QString extra, int frequency, int snr);
|
||||
void enqueueSpot(QString callsign, QString grid, int frequency, int snr);
|
||||
void sendRawSpot(QByteArray payload);
|
||||
|
||||
public slots:
|
||||
void processSpots();
|
||||
void dnsLookupResult(QHostInfo);
|
||||
|
||||
private:
|
||||
int m_seq;
|
||||
QString m_call;
|
||||
QString m_grid;
|
||||
QString m_info;
|
||||
QString m_version;
|
||||
|
||||
QHostAddress m_address;
|
||||
MessageClient *m_client;
|
||||
QTimer m_timer;
|
||||
QQueue<QByteArray> m_queue;
|
||||
};
|
||||
|
||||
#endif // JS8SPOTCLIENT_H
|
||||
+1
-1
@@ -2,5 +2,5 @@
|
||||
set (WSJTX_VERSION_MAJOR 1)
|
||||
set (WSJTX_VERSION_MINOR 0)
|
||||
set (WSJTX_VERSION_PATCH 0)
|
||||
set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions
|
||||
set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions
|
||||
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
|
||||
|
||||
@@ -23,7 +23,7 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
|
||||
"development group. <br/>JS8Call is "
|
||||
"licensed under and in accordance with the terms "
|
||||
"of the <a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">GPLv3 license</a>.<br/>"
|
||||
"The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/wsjtx/\">this repository</a>.<br/><br/>"
|
||||
"The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/js8call/\">this repository</a>.<br/><br/>"
|
||||
|
||||
"JS8Call is heavily inspired by WSJT-X, Fldigi, "
|
||||
"and FSQCall <br/>and would not exist without the hard work and "
|
||||
|
||||
@@ -81,7 +81,8 @@ SOURCES += \
|
||||
jsc_checker.cpp \
|
||||
Message.cpp \
|
||||
Inbox.cpp \
|
||||
messagewindow.cpp
|
||||
messagewindow.cpp \
|
||||
SpotClient.cpp
|
||||
|
||||
HEADERS += qt_helpers.hpp \
|
||||
pimpl_h.hpp pimpl_impl.hpp \
|
||||
@@ -113,7 +114,8 @@ HEADERS += qt_helpers.hpp \
|
||||
jsc_checker.h \
|
||||
Message.h \
|
||||
Inbox.h \
|
||||
messagewindow.h
|
||||
messagewindow.h \
|
||||
SpotClient.h
|
||||
|
||||
|
||||
INCLUDEPATH += qmake_only
|
||||
@@ -15,7 +15,7 @@ subroutine extractmessage144(decoded,msgreceived,nhashflag,recent_calls,nrecent)
|
||||
do ibyte=1,10
|
||||
itmp=0
|
||||
do ibit=1,8
|
||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*8+ibit))
|
||||
itmp=ishft(itmp,1)+iand(1_1,decoded((ibyte-1)*8+ibit))
|
||||
enddo
|
||||
i1Dec8BitBytes(ibyte)=itmp
|
||||
enddo
|
||||
@@ -31,7 +31,7 @@ subroutine extractmessage144(decoded,msgreceived,nhashflag,recent_calls,nrecent)
|
||||
do ibyte=1,12
|
||||
itmp=0
|
||||
do ibit=1,6
|
||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*6+ibit))
|
||||
itmp=ishft(itmp,1)+iand(1_1,decoded((ibyte-1)*6+ibit))
|
||||
enddo
|
||||
i4Dec6BitWords(ibyte)=itmp
|
||||
enddo
|
||||
|
||||
@@ -13,7 +13,7 @@ subroutine chkcrc12a(decoded,nbadcrc)
|
||||
read(cbits,1002) ncrc12 !Received CRC12
|
||||
1002 format(75x,b12)
|
||||
|
||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
|
||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32,0_1))
|
||||
i1Dec8BitBytes(11)=0
|
||||
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
|
||||
icrc12=xor(icrc12, 42) ! TODO: jsherer - could change the crc here
|
||||
|
||||
@@ -19,7 +19,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
|
||||
read(cbits,1002) ncrc12 !Received CRC12
|
||||
1002 format(75x,b12)
|
||||
|
||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
|
||||
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),transfer(128+64+32,0_1))
|
||||
i1Dec8BitBytes(11)=0
|
||||
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
|
||||
icrc12=xor(icrc12, 42) ! TODO: jsherer - could change the crc here
|
||||
@@ -29,7 +29,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
|
||||
do ibyte=1,12
|
||||
itmp=0
|
||||
do ibit=1,6
|
||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*6+ibit))
|
||||
itmp=ishft(itmp,1)+iand(1_1,decoded((ibyte-1)*6+ibit))
|
||||
enddo
|
||||
i4Dec6BitWords(ibyte)=itmp
|
||||
enddo
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ subroutine genft8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone)
|
||||
1000 format(12b6.6,b8.8)
|
||||
read(cbits,1001) i1Msg8BitBytes(1:10)
|
||||
1001 format(10b8)
|
||||
i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),128+64+32)
|
||||
i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),transfer(128+64+32,0_1))
|
||||
i1Msg8BitBytes(11)=0
|
||||
icrc12=crc12(c_loc(i1Msg8BitBytes),11)
|
||||
icrc12=xor(icrc12, 42) ! TODO: jsherer - could change the crc here
|
||||
|
||||
@@ -94,7 +94,7 @@ allocate ( rxdata(N), llr(N) )
|
||||
checksum = xor(checksum, 42) ! TODO: jsherer - could change the crc here
|
||||
! For reference, the next 3 lines show how to check the CRC
|
||||
i1Msg8BitBytes(10)=checksum/256
|
||||
i1Msg8BitBytes(11)=iand (checksum,255)
|
||||
i1Msg8BitBytes(11)=iand(checksum,transfer(255,0_2))
|
||||
checksumok = crc12_check(c_loc (i1Msg8BitBytes), 11)
|
||||
if( checksumok ) write(*,*) 'Good checksum'
|
||||
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ do idb = 0, 30
|
||||
nhashflag=0
|
||||
imsg=0
|
||||
do i=1,16
|
||||
imsg=ishft(imsg,1)+iand(1,decoded(17-i))
|
||||
imsg=ishft(imsg,1)+iand(1_1,decoded(17-i))
|
||||
enddo
|
||||
nrxrpt=iand(imsg,15)
|
||||
nrxhash=(imsg-nrxrpt)/16
|
||||
|
||||
@@ -129,7 +129,7 @@ subroutine msk40decodeframe(c,mycall,hiscall,xsnr,bswl,nhasharray, &
|
||||
|
||||
imsg=0
|
||||
do i=1,16
|
||||
imsg=ishft(imsg,1)+iand(1,decoded(17-i))
|
||||
imsg=ishft(imsg,1)+iand(1_1,decoded(17-i))
|
||||
enddo
|
||||
nrxrpt=iand(imsg,15)
|
||||
nrxhash=(imsg-nrxrpt)/16
|
||||
|
||||
+15
-6
@@ -101,14 +101,17 @@ void ADIF::load()
|
||||
, extractField (record, "BAND")
|
||||
, extractField (record, "MODE")
|
||||
, extractField (record, "SUBMODE")
|
||||
, extractField (record, "QSO_DATE"));
|
||||
, extractField (record, "QSO_DATE")
|
||||
, extractField (record, "NAME")
|
||||
, extractField (record, "COMMENT")
|
||||
);
|
||||
}
|
||||
inputFile.close ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ADIF::add(QString const& call, QString const& band, QString const& mode, QString const& submode, QString const& date)
|
||||
void ADIF::add(QString const& call, QString const& band, QString const& mode, QString const& submode, QString const& date, QString const& name, QString const& comment)
|
||||
{
|
||||
QSO q;
|
||||
q.call = call;
|
||||
@@ -116,6 +119,9 @@ void ADIF::add(QString const& call, QString const& band, QString const& mode, QS
|
||||
q.mode = mode;
|
||||
q.submode = submode;
|
||||
q.date = date;
|
||||
q.name = name;
|
||||
q.comment = comment;
|
||||
|
||||
if (q.call.size ())
|
||||
{
|
||||
_data.insert(q.call,q);
|
||||
@@ -135,13 +141,18 @@ bool ADIF::match(QString const& call, QString const& band) const
|
||||
if ( (band.compare(q.band,Qt::CaseInsensitive) == 0)
|
||||
|| (band=="")
|
||||
|| (q.band==""))
|
||||
{
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
QList<ADIF::QSO> ADIF::find(QString const& call) const
|
||||
{
|
||||
return _data.values(call);
|
||||
}
|
||||
|
||||
QList<QString> ADIF::getCallList() const
|
||||
{
|
||||
@@ -154,8 +165,6 @@ QList<QString> ADIF::getCallList() const
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ADIF::getCount() const
|
||||
{
|
||||
|
||||
+8
-3
@@ -21,10 +21,14 @@ class QDateTime;
|
||||
class ADIF
|
||||
{
|
||||
public:
|
||||
|
||||
struct QSO;
|
||||
|
||||
void init(QString const& filename);
|
||||
void load();
|
||||
void add(QString const& call, QString const& band, QString const& mode, const QString &submode, QString const& date);
|
||||
void add(QString const& call, QString const& band, QString const& mode, const QString &submode, QString const& date, const QString &name, const QString &comment);
|
||||
bool match(QString const& call, QString const& band) const;
|
||||
QList<ADIF::QSO> find(QString const& call) const;
|
||||
QList<QString> getCallList() const;
|
||||
int getCount() const;
|
||||
|
||||
@@ -38,12 +42,13 @@ class ADIF
|
||||
, QString const& operator_call);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
struct QSO
|
||||
{
|
||||
QString call,band,mode,submode,date;
|
||||
QString call,band,mode,submode,date,name,comment;
|
||||
};
|
||||
|
||||
private:
|
||||
QMultiHash<QString, QSO> _data;
|
||||
QString _filename;
|
||||
|
||||
|
||||
+39
-13
@@ -59,25 +59,51 @@ void LogBook::match(/*in*/const QString call,
|
||||
bool &callWorkedBefore,
|
||||
bool &countryWorkedBefore) const
|
||||
{
|
||||
if (call.length() > 0)
|
||||
{
|
||||
QString currentBand = ""; // match any band
|
||||
callWorkedBefore = _log.match(call,currentBand);
|
||||
countryName = _countries.find(call);
|
||||
if(call.isEmpty()){
|
||||
return;
|
||||
}
|
||||
|
||||
if (countryName.length() > 0) // country was found
|
||||
QString currentBand = ""; // match any band
|
||||
callWorkedBefore = _log.match(call, currentBand);
|
||||
countryName = _countries.find(call);
|
||||
|
||||
if (countryName.length() > 0){ // country was found
|
||||
countryWorkedBefore = _worked.getHasWorked(countryName);
|
||||
else
|
||||
{
|
||||
countryName = "where?"; //error: prefix not found
|
||||
countryWorkedBefore = false;
|
||||
}
|
||||
} else {
|
||||
countryName = "where?"; //error: prefix not found
|
||||
countryWorkedBefore = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LogBook::addAsWorked(const QString call, const QString band, const QString mode, const QString submode, const QString date)
|
||||
bool LogBook::findCallDetails(
|
||||
/*in*/
|
||||
const QString call,
|
||||
/*out*/
|
||||
QString &date,
|
||||
QString &name,
|
||||
QString &comment) const
|
||||
{
|
||||
_log.add(call,band,mode,submode,date);
|
||||
if(call.isEmpty()){
|
||||
return false;
|
||||
}
|
||||
|
||||
auto qsos = _log.find(call);
|
||||
if(qsos.isEmpty()){
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach(auto qso, qsos){
|
||||
if(date.isEmpty() && !qso.date.isEmpty()) date = qso.date;
|
||||
if(name.isEmpty() && !qso.name.isEmpty()) name = qso.name;
|
||||
if(comment.isEmpty() && !qso.comment.isEmpty()) comment = qso.comment;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LogBook::addAsWorked(const QString call, const QString band, const QString mode, const QString submode, const QString date, const QString name, const QString comment)
|
||||
{
|
||||
_log.add(call,band,mode,submode,date,name,comment);
|
||||
QString countryName = _countries.find(call);
|
||||
if (countryName.length() > 0)
|
||||
_worked.setAsWorked(countryName);
|
||||
|
||||
+8
-1
@@ -25,7 +25,14 @@ public:
|
||||
/*out*/ QString &countryName,
|
||||
bool &callWorkedBefore,
|
||||
bool &countryWorkedBefore) const;
|
||||
void addAsWorked(const QString call, const QString band, const QString mode, const QString submode, const QString date);
|
||||
bool findCallDetails(
|
||||
/*in*/
|
||||
const QString call,
|
||||
/*out*/
|
||||
QString &date,
|
||||
QString &name,
|
||||
QString &comment) const;
|
||||
void addAsWorked(const QString call, const QString band, const QString mode, const QString submode, const QString date, const QString name, const QString comment);
|
||||
|
||||
private:
|
||||
CountryDat _countries;
|
||||
|
||||
+459
-140
File diff suppressed because it is too large
Load Diff
+19
-5
@@ -44,6 +44,7 @@
|
||||
#include "qpriorityqueue.h"
|
||||
#include "varicode.h"
|
||||
#include "MessageClient.hpp"
|
||||
#include "SpotClient.h"
|
||||
#include "APRSISClient.h"
|
||||
#include "keyeater.h"
|
||||
|
||||
@@ -176,6 +177,7 @@ private slots:
|
||||
void on_tx5_currentTextChanged (QString const&);
|
||||
void on_tx6_editingFinished();
|
||||
void on_menuControl_aboutToShow();
|
||||
void on_actionCheck_for_Updates_triggered();
|
||||
void on_actionEnable_Spotting_toggled(bool checked);
|
||||
void on_actionEnable_Auto_Reply_toggled(bool checked);
|
||||
void on_menuWindow_aboutToShow();
|
||||
@@ -282,7 +284,7 @@ private slots:
|
||||
void buildFrequencyMenu(QMenu *menu);
|
||||
void buildHeartbeatMenu(QMenu *menu);
|
||||
void buildCQMenu(QMenu *menu);
|
||||
void buildRepeatMenu(QMenu *menu, QPushButton * button, int * interval);
|
||||
void buildRepeatMenu(QMenu *menu, QPushButton * button, bool isLowInterval, int * interval);
|
||||
void sendHeartbeat();
|
||||
void sendHeartbeatAck(QString to, int snr, QString extra);
|
||||
void on_hbMacroButton_toggled(bool checked);
|
||||
@@ -383,6 +385,7 @@ private slots:
|
||||
void on_cbFirst_toggled(bool b);
|
||||
void on_cbAutoSeq_toggled(bool b);
|
||||
void emitPTT(bool on);
|
||||
void emitTones();
|
||||
void networkMessage(Message const &message);
|
||||
void sendNetworkMessage(QString const &type, QString const &message);
|
||||
void sendNetworkMessage(QString const &type, QString const &message, const QMap<QString, QVariant> ¶ms);
|
||||
@@ -411,7 +414,7 @@ private slots:
|
||||
void on_cbCQTx_toggled(bool b);
|
||||
void splash_done ();
|
||||
void on_measure_check_box_stateChanged (int);
|
||||
void checkExpiryWarningMessage ();
|
||||
void checkVersion(bool alertOnUpToDate);
|
||||
void checkStartupWarnings ();
|
||||
void clearCallsignSelected();
|
||||
void refreshTextDisplay();
|
||||
@@ -712,6 +715,7 @@ private:
|
||||
QString through;
|
||||
QString grid;
|
||||
int freq;
|
||||
QDateTime cqTimestamp;
|
||||
QDateTime ackTimestamp;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
@@ -759,6 +763,7 @@ private:
|
||||
QList<ActivityDetail> msgs;
|
||||
};
|
||||
|
||||
QString m_prevSelectedCallsign;
|
||||
int m_bandActivityWidth;
|
||||
int m_callActivityWidth;
|
||||
int m_textActivityWidth;
|
||||
@@ -826,12 +831,15 @@ private:
|
||||
|
||||
QMap<QString, int> m_rxInboxCountCache; // call -> count
|
||||
|
||||
QMap<QString, QMap<QString, CallDetail>> m_callActivityCache; // band -> call activity
|
||||
QMap<QString, QMap<int, QList<ActivityDetail>>> m_bandActivityCache; // band -> band activity
|
||||
QMap<QString, QString> m_rxTextCache; // band -> rx text
|
||||
QMap<QString, QMap<QString, CallDetail>> m_callActivityBandCache; // band -> call activity
|
||||
QMap<QString, QMap<int, QList<ActivityDetail>>> m_bandActivityBandCache; // band -> band activity
|
||||
QMap<QString, QString> m_rxTextBandCache; // band -> rx text
|
||||
QMap<QString, QMap<QString, QSet<QString>>> m_heardGraphOutgoingBandCache; // band -> heard in
|
||||
QMap<QString, QMap<QString, QSet<QString>>> m_heardGraphIncomingBandCache; // band -> heard out
|
||||
|
||||
JSCChecker * m_checker;
|
||||
|
||||
QMap<QString, QDateTime> m_callSelectedTime; // call -> timestamp when callsign was last selected
|
||||
QSet<QString> m_callSeenHeartbeat; // call
|
||||
int m_previousFreq;
|
||||
bool m_shouldRestoreFreq;
|
||||
@@ -856,6 +864,7 @@ private:
|
||||
QQueue<QString> m_foxQSOinProgress; //QSOs in progress: Fox has sent a report
|
||||
QQueue<qint64> m_foxRateQueue;
|
||||
|
||||
bool m_hbAutoAck;
|
||||
bool m_hbHidden;
|
||||
int m_hbInterval;
|
||||
int m_cqInterval;
|
||||
@@ -891,6 +900,7 @@ private:
|
||||
QProgressDialog m_optimizingProgress;
|
||||
MessageClient * m_messageClient;
|
||||
PSK_Reporter *psk_Reporter;
|
||||
SpotClient *m_spotClient;
|
||||
APRSISClient * m_aprsClient;
|
||||
DisplayManual m_manual;
|
||||
QHash<QString, QVariant> m_pwrBandTxMemory; // Remembers power level by band
|
||||
@@ -915,8 +925,11 @@ private:
|
||||
bool shortList(QString callsign);
|
||||
void transmit (double snr = 99.);
|
||||
void rigFailure (QString const& reason);
|
||||
void spotSetLocal();
|
||||
void pskSetLocal ();
|
||||
void aprsSetLocal ();
|
||||
void spotReport(int offset, int snr, QString callsign, QString grid);
|
||||
void spotCmd(CommandDetail cmd);
|
||||
void pskLogReport(QString mode, int offset, int snr, QString callsign, QString grid);
|
||||
void aprsLogReport(int offset, int snr, QString callsign, QString grid);
|
||||
Radio::Frequency dialFrequency();
|
||||
@@ -937,6 +950,7 @@ private:
|
||||
bool isAllCallIncluded(QString const &text);
|
||||
bool isGroupCallIncluded(const QString &text);
|
||||
QString callsignSelected(bool useInputText=false);
|
||||
void callsignSelectedChanged(QString old, QString current);
|
||||
bool isRecentOffset(int offset);
|
||||
void markOffsetRecent(int offset);
|
||||
bool isDirectedOffset(int offset, bool *pIsAllCall);
|
||||
|
||||
+33
-11
@@ -203,7 +203,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Current Frequency</string>
|
||||
<string>Set Current Frequency</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
@@ -297,7 +297,7 @@ QPushButton[oob="true"] {
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Current frequency offset</string>
|
||||
<string>Set Current Frequency Offset</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel {
|
||||
@@ -401,6 +401,12 @@ color : white;
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="mouseTracking">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set Callsign and Grid</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel {
|
||||
font-family: MS Shell Dlg 2;
|
||||
@@ -1242,14 +1248,6 @@ QTextEdit[transmitting="true"] {
|
||||
<string>Callsigns</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>✓</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignCenter</set>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Age</string>
|
||||
@@ -1280,6 +1278,24 @@ QTextEdit[transmitting="true"] {
|
||||
<string>Distance</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>✓</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Worked Before</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Comment</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
@@ -4597,7 +4613,7 @@ list. The list can be maintained in Settings (F2).</string>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>994</width>
|
||||
<height>22</height>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
@@ -4672,6 +4688,7 @@ list. The list can be maintained in Settings (F2).</string>
|
||||
<addaction name="actionShort_list_of_add_on_prefixes_and_suffixes"/>
|
||||
<addaction name="actionCopyright_Notice"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionCheck_for_Updates"/>
|
||||
<addaction name="actionAbout"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuMode">
|
||||
@@ -5661,6 +5678,11 @@ list. The list can be maintained in Settings (F2).</string>
|
||||
<string>Show Message Inbox...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionCheck_for_Updates">
|
||||
<property name="text">
|
||||
<string>Check for Updates</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<customwidgets>
|
||||
|
||||
+8
-7
@@ -50,8 +50,9 @@ QMap<QString, int> directed_cmds = {
|
||||
{" SNR?", 0 }, // query snr
|
||||
{"?", 0 }, // compat
|
||||
|
||||
//{" ", 1 }, // unused
|
||||
//{" ", 2 }, // unused
|
||||
{" DIT DIT", 1 }, // unused
|
||||
|
||||
{" NACK", 2 }, // negative acknowledge
|
||||
|
||||
{" HEARING?", 3 }, // query station calls heard
|
||||
|
||||
@@ -104,7 +105,7 @@ QMap<QString, int> directed_cmds = {
|
||||
};
|
||||
|
||||
// commands allowed to be processed
|
||||
QSet<int> allowed_cmds = {-1, 0, /*1,*/ /*2,*/ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
|
||||
QSet<int> allowed_cmds = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
|
||||
|
||||
// commands that result in an autoreply (which can be relayed)
|
||||
QSet<int> autoreply_cmds = {0, 3, 4, 6, 9, 10, 11, 12, 13, 16, 30};
|
||||
@@ -129,10 +130,10 @@ QMap<int, int> checksum_cmds = {
|
||||
};
|
||||
|
||||
QString callsign_pattern = QString("(?<callsign>[@]?[A-Z0-9/]+)");
|
||||
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:AGN[?]|QSL[?]|HW CPY[?]|APRS[:]|MSG TO[:]|SNR[?]|INFO[?]|GRID[?]|STATUS[?]|QUERY MSGS[?]|HEARING[?]|(?:(?:STATUS|HEARING|QUERY CALL|QUERY MSGS|QUERY|CMD|MSG|ACK|73|YES|NO|SNR|QSL|RR|SK|FB|INFO|GRID)(?=[ ]|$))|[?> ]))?");
|
||||
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:AGN[?]|QSL[?]|HW CPY[?]|APRS[:]|MSG TO[:]|SNR[?]|INFO[?]|GRID[?]|STATUS[?]|QUERY MSGS[?]|HEARING[?]|(?:(?:STATUS|HEARING|QUERY CALL|QUERY MSGS|QUERY|CMD|MSG|NACK|ACK|73|YES|NO|SNR|QSL|RR|SK|FB|INFO|GRID|DIT DIT)(?=[ ]|$))|[?> ]))?");
|
||||
QString optional_grid_pattern = QString("(?<grid>\\s?[A-R]{2}[0-9]{2})?");
|
||||
QString optional_extended_grid_pattern = QString("^(?<grid>\\s?(?:[A-R]{2}[0-9]{2}(?:[A-X]{2}(?:[0-9]{2})?)*))?");
|
||||
QString optional_num_pattern = QString("(?<num>(?<=SNR|ACK)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
|
||||
QString optional_num_pattern = QString("(?<num>(?<=SNR|\\bACK)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
|
||||
|
||||
QRegularExpression directed_re("^" +
|
||||
callsign_pattern +
|
||||
@@ -1545,8 +1546,8 @@ QStringList Varicode::unpackDirectedMessage(const QString &text, quint8 *pType){
|
||||
quint32 packed_to = Varicode::bitsToInt(bits.mid(31, 28));
|
||||
quint8 packed_cmd = Varicode::bitsToInt(bits.mid(59, 5));
|
||||
|
||||
bool portable_from = (extra >> 7) & 1 == 1;
|
||||
bool portable_to = (extra >> 6) & 1 == 1;
|
||||
bool portable_from = ((extra >> 7) & 1) == 1;
|
||||
bool portable_to = ((extra >> 6) & 1) == 1;
|
||||
extra = extra % 64;
|
||||
|
||||
QString from = Varicode::unpackCallsign(packed_from, portable_from);
|
||||
|
||||
Reference in New Issue
Block a user