Compare commits

..

61 Commits

Author SHA1 Message Date
Jordan Sherer 8529ef0982 Fixed allcall and groupcall counts to respect aging 2018-10-18 10:51:53 -04:00
Jordan Sherer 8bba574963 Fixed issue where whitespace broke ACKd messages 2018-10-17 14:36:15 -04:00
Jordan Sherer 80d798d7e3 Fixed APRS passcode warning 2018-10-17 14:31:23 -04:00
Jordan Sherer 23a554220b Fixed APRS passcode warning 2018-10-17 14:30:32 -04:00
Jordan Sherer 7e903349ae Added QTC, QTH, and Saved messages to the 'immediately transmit' setting 2018-10-17 14:23:17 -04:00
Jordan Sherer 55810e63a6 Transmit entry should be JS8 not FT8 2018-10-17 14:17:53 -04:00
Jordan Sherer 9162d851d4 Made some adjustments to the tx cycling...should help those having trouble with their audio interface not working fast enough. 2018-10-17 11:19:27 -04:00
Jordan Sherer 2022908509 Bump to 0.7.5 2018-10-17 09:11:05 -04:00
Jordan Sherer 2e2551519d Added ACTIVE/IDLE query. Fixed CQ start transmission. 2018-10-17 09:08:37 -04:00
Jordan Sherer 18052773f1 Added clarification labels to the configuration 2018-10-17 08:58:54 -04:00
Jordan Sherer 51010e7310 Allow out of period starts toggles 2018-10-16 20:15:04 -04:00
Jordan Sherer a3eaf1cf74 Fixed BEACON ACK printing overwrite 2018-10-16 17:47:38 -04:00
Jordan Sherer c731fa51ce Fixed menu shortkeys 2018-10-16 17:23:12 -04:00
Jordan Sherer a5f59019d3 Remove unused count message frames function 2018-10-16 17:09:19 -04:00
Jordan Sherer 4a87edc4c7 Fixed compound callsigns and directed messages (SNR reports) 2018-10-16 16:11:28 -04:00
Jordan Sherer 2da25c3171 Move around the force update to be more reliable 2018-10-16 09:49:53 -04:00
Jordan Sherer 87a6e10bd6 Added async frame counting 2018-10-15 22:06:31 -04:00
Jordan Sherer cf9c74b99e Fixed issue with multiple beacon acks not displaying in rx window 2018-10-15 12:43:49 -04:00
Jordan Sherer dae50d3a99 Added constants for NEAR thresholds 2018-10-15 12:10:13 -04:00
Jordan Sherer 83268fbdaf Added groupcall and allcall callsign counts 2018-10-15 12:01:28 -04:00
Jordan Sherer 3b2242e258 Fixed display of APRS frames where a space after the colon causes concern 2018-10-15 11:53:54 -04:00
Jordan Sherer c42c3b7ad1 Added lookup cache to the lookup function 2018-10-15 03:03:26 -04:00
Jordan Sherer 9496d5ed81 Deslect callsign on click cq button 2018-10-15 02:41:35 -04:00
Jordan Sherer 83174bc6fa Fixed stations heard ordering (by time) 2018-10-15 02:37:21 -04:00
Jordan Sherer d74850b8e1 Fixed reversed qtc qth macro buttons 2018-10-15 02:30:46 -04:00
Jordan Sherer 2f1dca3c49 Updated comments 2018-10-15 02:29:40 -04:00
Jordan Sherer 4a38778808 Removed single shot timer from gui loop 2018-10-15 02:10:48 -04:00
Jordan Sherer 960b9b14d1 Rip out fox/hound junk 2018-10-15 01:04:57 -04:00
Jordan Sherer 9e93745587 Instrumentation and pull ui update async 2018-10-15 00:59:38 -04:00
Jordan Sherer 8aa28108ea Fixed font dialog for OSX 2018-10-11 10:49:48 -04:00
Jordan Sherer 4168e1937c Fixed beacon scheduling with a beacon now context menu item 2018-10-11 01:11:48 -04:00
Jordan Sherer f4b640df75 Fixed incremental directed decode for compound calls 2018-10-11 01:01:38 -04:00
Jordan Sherer cf1cece11c Added log button back in. Moved halt button up to balance. Added pressed state 2018-10-11 00:21:34 -04:00
Jordan Sherer 59893f6dfa Fixed label for relay dialog message notifications 2018-10-11 00:16:07 -04:00
Jordan Sherer ead5c225b5 Fixed separator for restore previous message action 2018-10-11 00:15:52 -04:00
Jordan Sherer 4744952a1a Fixed issue with button and text display in the gui event loop 2018-10-10 17:43:11 -04:00
Jordan Sherer a30bff5589 Bump to 0.7.3 2018-10-10 16:01:54 -04:00
Jordan Sherer e7e2f8357f Fixed idle timer alert 2018-10-10 15:36:53 -04:00
Jordan Sherer 4ffa82f695 Fixed default idle timer 2018-10-10 15:29:48 -04:00
Jordan Sherer 3e38067561 Fixed incremental directed message receipt for ALLCALL and GROUPCALL 2018-10-10 13:35:52 -04:00
Jordan Sherer 52177a0513 Fixed parsing of commands to not split up command words 2018-10-10 10:10:30 -04:00
Jordan Sherer f79ca47a93 Fixed incremental print for directed messages.
Fixed compound calls in the heard list
2018-10-10 09:04:56 -04:00
Jordan Sherer f0e30dc7b0 Fixed compound calls / beacon / cq differentiation 2018-10-09 20:09:53 -04:00
Jordan Sherer d20fe46447 Fixed tx first dependence on checkbox and potential delay caused by event processing 2018-10-09 17:44:36 -04:00
Jordan Sherer aa2c41f124 Initial tx cycle cleanup 2018-10-09 17:33:30 -04:00
Jordan Sherer ad563c0aed LDPC codeword update 2018-10-09 15:36:50 -04:00
Jordan Sherer 60b58fb50f Fixed display of beacons and beacon acks when not beaconining 2018-10-09 15:26:13 -04:00
Jordan Sherer ca79a450ca Fixed beacon queue reset on beacon toggle 2018-10-09 15:03:30 -04:00
Jordan Sherer 3c8c80a5d7 Fixed side-effect of double space fix, where F characters were not being encoded correctly 2018-10-09 14:12:00 -04:00
Jordan Sherer fc43c7fbb4 Fixed issue with directed commands splitting up words that appear in the command. E.g., 'NO' 'T' 2018-10-09 09:31:33 -04:00
Jordan Sherer 353d75ac49 Fixed double space compression issue by word replacement for a space character 2018-10-08 15:36:09 -04:00
Jordan Sherer 2d392dd676 Fixed trimming of trailing whitespace for configuration messages and grids 2018-10-08 15:04:10 -04:00
Jordan Sherer 18fac2e4ba Fixed BEACON ACK replies to CQs 2018-10-08 15:00:54 -04:00
Jordan Sherer 5275c0916f Fixed window frame on windows 2018-10-07 11:30:02 -04:00
Jordan Sherer 676aa3c78e Don't close the app when expired...just be really annoying 2018-10-07 11:01:01 -04:00
Jordan Sherer 4e8a65b5ee Move EOL to Oct 31 2018-10-07 10:52:03 -04:00
Jordan Sherer 329ca0b23f Bump to 0.7.2 2018-10-07 10:51:30 -04:00
Jordan Sherer 29cb01697a Bump to 25Hz buffer 2018-10-07 10:51:08 -04:00
Jordan Sherer e27e7baec9 Added groupcall to compound parsing. 2018-10-07 08:44:47 -04:00
Jordan Sherer 9cd17a4441 Only one beacon ack per frame 2018-10-06 23:37:32 -04:00
Jordan Sherer 9d371c474a Fixed truncated grid issue 2018-10-06 23:28:00 -04:00
13 changed files with 636 additions and 1330 deletions
+22 -13
View File
@@ -922,7 +922,7 @@ QString Configuration::my_grid() const
if (m_->use_dynamic_info_ && m_->dynamic_grid_.size () >= 4) {
grid = m_->dynamic_grid_;
}
return grid;
return grid.trimmed();
}
QString Configuration::my_station() const
@@ -931,22 +931,22 @@ QString Configuration::my_station() const
if(m_->use_dynamic_info_ && !m_->dynamic_qtc_.isEmpty()){
station = m_->dynamic_qtc_;
}
return station;
return station.trimmed();
}
QString Configuration::my_qth() const
{
return m_->my_qth_;
return m_->my_qth_.trimmed();
}
QString Configuration::cq_message() const
{
return m_->cq_;
return m_->cq_.trimmed();
}
QString Configuration::reply_message() const
{
return m_->reply_;
return m_->reply_.trimmed();
}
int Configuration::callsign_aging() const
@@ -1650,7 +1650,7 @@ void Configuration::impl::read_settings ()
quick_call_ = settings_->value ("QuickCall", false).toBool ();
disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool ();
beacon_ = settings_->value ("TxBeacon", 30).toInt ();
watchdog_ = settings_->value ("TxWatchdog", 0).toInt ();
watchdog_ = settings_->value ("TxIdleWatchdog", 60).toInt ();
if(watchdog_){
watchdog_ = qMax(5, watchdog_);
}
@@ -1783,7 +1783,7 @@ void Configuration::impl::write_settings ()
settings_->setValue ("QuickCall", quick_call_);
settings_->setValue ("73TxDisable", disable_TX_on_73_);
settings_->setValue ("TxBeacon", beacon_);
settings_->setValue ("TxWatchdog", watchdog_);
settings_->setValue ("TxIdleWatchdog", watchdog_);
settings_->setValue ("Tx2QSO", TX_messages_);
settings_->setValue ("CATForceDTR", rig_params_.force_dtr);
settings_->setValue ("DTR", rig_params_.dtr_high);
@@ -2338,14 +2338,23 @@ void Configuration::impl::reject ()
void Configuration::impl::on_font_push_button_clicked ()
{
next_font_ = QFontDialog::getFont (0, next_font_, this);
next_font_ = QFontDialog::getFont (0, next_font_, this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, QFontDialog::DontUseNativeDialog
#endif
);
ui_->font_push_button->setText(QString("Application Font (%1 %2)").arg(next_font_.family()).arg(next_font_.pointSize()));
}
void Configuration::impl::on_tableFontButton_clicked ()
{
next_table_font_ = QFontDialog::getFont (0, next_table_font_, this);
next_table_font_ = QFontDialog::getFont (0, next_table_font_, this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, QFontDialog::DontUseNativeDialog
#endif
);
ui_->tableFontButton->setText(QString("Table Font (%1 %2)").arg(next_table_font_.family()).arg(next_table_font_.pointSize()));
}
@@ -2453,7 +2462,7 @@ void Configuration::impl::on_rxFontButton_clicked ()
next_rx_text_font_ = QFontDialog::getFont (0, next_rx_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
, QFontDialog::DontUseNativeDialog
#endif
);
ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize()));
@@ -2495,7 +2504,7 @@ void Configuration::impl::on_txFontButton_clicked ()
next_tx_text_font_ = QFontDialog::getFont (0, next_tx_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
, QFontDialog::DontUseNativeDialog
#endif
);
@@ -2507,7 +2516,7 @@ void Configuration::impl::on_composeFontButton_clicked ()
next_compose_text_font_ = QFontDialog::getFont (0, next_compose_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
, QFontDialog::DontUseNativeDialog
#endif
);
ui_->composeFontButton->setText(QString("Font (%1 %2)").arg(next_compose_text_font_.family()).arg(next_compose_text_font_.pointSize()));
+32 -30
View File
@@ -195,7 +195,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Station location message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTH Message:</string>
<string>Station Location (QTH) Message:</string>
</property>
</widget>
</item>
@@ -212,7 +212,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Station Description Message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTC Message:</string>
<string>Station Detail (QTC) Message:</string>
</property>
</widget>
</item>
@@ -269,6 +269,19 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="monitor_off_check_box">
<property name="toolTip">
<string>Don't start decoding until the monitor button is clicked.</string>
</property>
<property name="text">
<string>Mon&amp;itor (RX) off at startup</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="autoreply_off_check_box">
<property name="text">
@@ -283,19 +296,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="monitor_off_check_box">
<property name="toolTip">
<string>Don't start decoding until the monitor button is clicked.</string>
</property>
<property name="text">
<string>Mon&amp;itor (RX) off at startup</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="monitor_last_used_check_box">
<property name="visible">
@@ -309,13 +309,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="transmit_directed_check_box">
<property name="text">
<string>Immediately transmit directed responses from the menu</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="tx_qsy_check_box">
<property name="enabled">
@@ -349,6 +342,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="transmit_directed_check_box">
<property name="text">
<string>Immediately transmit CQ, Reply, QTC, QTH, Saved, and Directed messages from the menu</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_155">
<item>
@@ -457,7 +457,7 @@
<string/>
</property>
<property name="minimum">
<number>10</number>
<number>5</number>
</property>
<property name="maximum">
<number>1440</number>
@@ -466,7 +466,7 @@
<number>1</number>
</property>
<property name="value">
<number>30</number>
<number>15</number>
</property>
</widget>
</item>
@@ -498,6 +498,9 @@
<property name="prefix">
<string/>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>1440</number>
</property>
@@ -505,7 +508,7 @@
<number>1</number>
</property>
<property name="value">
<number>0</number>
<number>60</number>
</property>
</widget>
</item>
@@ -2562,7 +2565,7 @@ QListView::item:hover {
<item row="1" column="0">
<widget class="QLabel" name="sound_am_path_label">
<property name="text">
<string>Reply Message Received:</string>
<string>Reply Dialog Message Received:</string>
</property>
<property name="buddy">
<cstring>azel_path_select_push_button</cstring>
@@ -3479,7 +3482,6 @@ soundcard changes</string>
<tabstop>use_dynamic_grid</tabstop>
<tabstop>region_combo_box</tabstop>
<tabstop>type_2_msg_gen_combo_box</tabstop>
<tabstop>monitor_off_check_box</tabstop>
<tabstop>monitor_last_used_check_box</tabstop>
<tabstop>quick_call_check_box</tabstop>
<tabstop>tx_watchdog_spin_box</tabstop>
@@ -3615,12 +3617,12 @@ soundcard changes</string>
</connection>
</connections>
<buttongroups>
<buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
</buttongroups>
</ui>
+1 -1
View File
@@ -1,6 +1,6 @@
# Version number components
set (WSJTX_VERSION_MAJOR 0)
set (WSJTX_VERSION_MINOR 7)
set (WSJTX_VERSION_PATCH 1)
set (WSJTX_VERSION_PATCH 5)
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
+2
View File
@@ -197,6 +197,8 @@ bool DecodedText::tryUnpackDirected(){
message_ = QString(parts.join(""));
}
message_ = message_.replace("APRS: ", "APRS:");
directed_ = parts;
frameType_ = type;
return true;
+34 -10
View File
@@ -23,6 +23,10 @@
#include <cmath>
#include <QDebug>
#include <QCache>
QMap<QString, quint32> LOOKUP_CACHE;
Codeword JSC::codeword(quint32 index, bool separate, quint32 bytesize, quint32 s, quint32 c){
QList<Codeword> out;
@@ -52,9 +56,19 @@ QList<CodewordPair> JSC::compress(QString text){
const quint32 s = 7;
const quint32 c = pow(2, 4) - s;
foreach(QString w, text.split(" ", QString::SkipEmptyParts)){
QString space(" ");
foreach(QString w, text.split(" ", QString::KeepEmptyParts)){
bool ok = false;
bool isSpaceCharacter = false;
// if this is an empty part, it should be a space.
if(w.isEmpty()){
w = space;
isSpaceCharacter = true;
}
while(!w.isEmpty()){
// this does both prefix and full match lookup
auto index = lookup(w, &ok);
@@ -63,10 +77,11 @@ QList<CodewordPair> JSC::compress(QString text){
}
auto t = JSC::map[index];
w = QString(w.mid(t.size));
w = QString(w).mid(t.size);
bool isLast = w.isEmpty();
out.append({ codeword(index, isLast, b, s, c), (quint32)t.size + (isLast ? 1 : 0) /* for the space that follows */});
bool shouldAppendSpace = isLast && !isSpaceCharacter;
out.append({ codeword(index, shouldAppendSpace, b, s, c), (quint32)t.size + (shouldAppendSpace ? 1 : 0) /* for the space that follows */});
}
}
@@ -118,7 +133,9 @@ QString JSC::decompress(Codeword const& bitvec){
j = j*s + bytes[start + k] + base[k];
out.append(QString(JSC::map[j].str));
auto word = QString(JSC::map[j].str);
out.append(word);
if(!separators.isEmpty() && separators.first() == start + k){
out.append(" ");
separators.removeFirst();
@@ -131,7 +148,19 @@ QString JSC::decompress(Codeword const& bitvec){
}
quint32 JSC::lookup(QString w, bool * ok){
return lookup(w.toLatin1().data(), ok);
if(LOOKUP_CACHE.contains(w)){
if(ok) *ok = true;
return LOOKUP_CACHE[w];
}
bool found = false;
quint32 result = lookup(w.toLatin1().data(), &found);
if(found){
LOOKUP_CACHE[w] = result;
}
if(ok) *ok = found;
return result;
}
quint32 JSC::lookup(char const* b, bool *ok){
@@ -167,11 +196,6 @@ quint32 JSC::lookup(char const* b, bool *ok){
// now that we have the first index in the list, let's just iterate through the list, comparing words along the way
for(quint32 i = index; i < index + count; i++){
// if we're no longer a prefix match, end.
if(b[0] != JSC::list[i].str[0]){
break;
}
quint32 len = JSC::list[i].size;
if(strncmp(b, JSC::list[i].str, len) == 0){
if(ok) *ok = true;
+2 -2
View File
@@ -39,8 +39,8 @@ public:
static const Tuple map[262144];
static const Tuple list[262144];
static const quint32 prefixSize = 68;
static const Tuple prefix[68];
static const quint32 prefixSize = 69;
static const Tuple prefix[69];
};
#endif // JSC_H
+8 -7
View File
@@ -29,7 +29,7 @@ const Tuple JSC::list[262144] = {
{"_", 1, 48},
{"^", 1, 64},
{"]", 1, 59},
{"\\", 1, 67},
{" ", 1, 67},
{"[", 1, 58},
{"ZZZZ", 4, 91474},
{"ZZZ", 3, 70901},
@@ -180080,8 +180080,8 @@ const Tuple JSC::list[262144] = {
{"FTAD", 4, 112460},
{"FTAC", 4, 68872},
{"FTAB", 4, 72752},
{"FT8CALL", 7, 69},
{"FT8", 3, 68},
{"\\", 1, 69},
{"FT8", 3, 68},
{"FSYW", 4, 155790},
{"FSYT", 4, 186523},
{"FSYS", 4, 69541},
@@ -262164,10 +262164,10 @@ const Tuple JSC::list[262144] = {
{"$", 1, 51},
{"#", 1, 53},
{"\"", 1, 26},
{"!", 1, 28},
{"!", 1, 28},
};
const Tuple JSC::prefix[68] = {
const Tuple JSC::prefix[69] = {
{"!", 1, 262143},
{"\"", 1, 262142},
{"#", 1, 262141},
@@ -262204,7 +262204,8 @@ const Tuple JSC::prefix[68] = {
{"B", 13306, 233869},
{"C", 17608, 216261},
{"D", 13749, 202512},
{"E", 12403, 190109},
{"E", 12403, 190109},
{"\\", 1, 180059},
{"F", 11252, 178857},
{"G", 10672, 168185},
{"H", 9060, 159125},
@@ -262227,7 +262228,7 @@ const Tuple JSC::prefix[68] = {
{"Y", 4348, 2264},
{"Z", 2254, 10},
{"[", 1, 9},
{"\\", 1, 8},
{" ", 1, 8},
{"]", 1, 7},
{"^", 1, 6},
{"_", 1, 5},
+3 -3
View File
@@ -88,9 +88,9 @@ const Tuple JSC::map[262144] = {
{"^", 1, 64},
{"`", 1, 65},
{"~", 1, 66},
{"\\", 1, 67},
{"FT8", 3, 68},
{"FT8CALL", 7, 69},
{" ", 1, 67},
{"FT8", 3, 68},
{"\\", 1, 69},
{"JS8", 3, 70},
{"JS8CALL", 7, 71},
{"JSQSO", 5, 72},
+1 -1
View File
@@ -65,7 +65,7 @@ write(*,*) "niter= ",max_iterations," s= ",s
allocate ( codeword(N), decoded(K), message(K) )
allocate ( rxdata(N), llr(N) )
msg="K1JT K9AN EN50"
msg="0123456789012"
! msg="G4WJS K9AN EN50"
call packmsg(msg,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes
call unpackmsg(i4Msg6BitWords,msgsent,.false.,grid) !Unpack to get msgsent
+322 -1092
View File
File diff suppressed because it is too large Load Diff
+4 -14
View File
@@ -120,8 +120,6 @@ public slots:
void diskDat();
void freezeDecode(int n);
void guiUpdate();
void doubleClickOnCall (Qt::KeyboardModifiers);
void doubleClickOnCall2(Qt::KeyboardModifiers);
void readFromStdout();
void p1ReadFromStdout();
void setXIT(int n, Frequency base = 0u);
@@ -213,7 +211,6 @@ private slots:
void on_EraseButton_clicked();
void band_activity_cleared ();
void rx_frequency_activity_cleared ();
void on_txFirstCheckBox_stateChanged(int arg1);
void set_dateTimeQSO(int m_ntx);
void set_ntx(int n);
void on_txrb1_toggled(bool status);
@@ -257,7 +254,6 @@ private slots:
void startTx();
void startTx2();
void startP1();
void continueTx();
void stopTx();
void stopTx2();
void on_pbCallCQ_clicked();
@@ -299,7 +295,6 @@ private slots:
void on_nextFreeTextMsg_currentTextChanged (QString const&);
void on_extFreeTextMsgEdit_currentTextChanged (QString const&);
int currentFreqOffset();
int countMessageFrames(QString const& text);
QStringList buildMessageFrames(QString const& text);
bool prepareNextMessageFrame();
bool isFreqOffsetFree(int f, int bw);
@@ -385,8 +380,8 @@ private slots:
void on_cbCQTx_toggled(bool b);
void splash_done ();
void on_measure_check_box_stateChanged (int);
void expiry_warning_message ();
void not_GA_warning_message ();
void checkExpiryWarningMessage ();
void checkStartupWarnings ();
void clearCallsignSelected();
void refreshTextDisplay();
@@ -417,7 +412,6 @@ private:
private:
void astroUpdate ();
void writeAllTxt(QString message);
void auto_sequence (DecodedText const& message, unsigned start_tolerance, unsigned stop_tolerance);
void hideMenus(bool b);
NetworkAccessManager m_network_manager;
@@ -539,7 +533,6 @@ private:
bool m_diskData;
bool m_loopall;
bool m_decoderBusy;
bool m_txFirst;
bool m_auto;
bool m_restart;
bool m_startAnother;
@@ -721,6 +714,7 @@ private:
QString text;
QDateTime utcTimestamp;
int snr;
bool shouldDisplay;
};
struct MessageBuffer {
@@ -860,8 +854,6 @@ private:
void writeSettings();
void createStatusBar();
void updateStatusBar();
void genStdMsgs(QString rpt, bool unconditional = false);
void genCQMsg();
void clearDX ();
void lookup();
void ba2msg(QByteArray ba, char* message);
@@ -874,19 +866,17 @@ private:
void rigFailure (QString const& reason);
void pskSetLocal ();
void aprsSetLocal ();
void pskPost(DecodedText const& decodedtext);
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();
void displayDialFrequency ();
void transmitDisplay (bool);
void processMessage(DecodedText const&, Qt::KeyboardModifiers = 0);
void replyToCQ (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode, QString const& message_text, bool low_confidence, quint8 modifiers);
void locationChange(QString const& location);
void replayDecodes ();
void postDecode (bool is_new, QString const& message);
void displayTransmit();
void updateButtonDisplay();
void updateTextDisplay();
void updateFrameCountEstimate(int count);
void updateTextStatsDisplay(QString text, int count);
void updateTxButtonDisplay();
+171 -129
View File
@@ -309,7 +309,7 @@ QPushButton[oob=&quot;true&quot;] {
<string notr="true">QFrame, QLabel { background-color : black; }</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
@@ -948,7 +948,7 @@ background-color: #00ff00;
</size>
</property>
<property name="visible">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Insert a new entry into the log&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@@ -969,6 +969,9 @@ min-height:30px;
/*max-width:60px;*/
max-height:30px;
}
QPushButton:pressed {
background-color: darkgray;
}
QPushButton[state=&quot;error&quot;] {
background-color: red;
}
@@ -1113,6 +1116,51 @@ background-color: #6699ff;
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QPushButton" name="stopTxButton">
<property name="minimumSize">
<size>
<width>75</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Stop transmitting&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true">QPushButton {
font-family: helvetica;
font-weight: bold;
background-color: lightgray;
color: black;
border-style: solid;
border-radius:2px;
border-width:0px;
border-color: gray;
font-size:90%;
min-width:75px;
min-height:30px;
/*max-width:60px;*/
max-height:30px;
}
QPushButton:pressed {
background-color: darkgray;
}
QPushButton[state=&quot;error&quot;] {
background-color: red;
}
QPushButton[state=&quot;warning&quot;] {
background-color: orange;
}
QPushButton[state=&quot;ok&quot;] {
background-color: #00ff00;
}</string>
</property>
<property name="text">
<string>HALT</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@@ -1420,7 +1468,39 @@ QTextEdit[transmitting=&quot;true&quot;] {
<property name="bottomMargin">
<number>0</number>
</property>
<item row="1" column="10">
<item row="1" column="2">
<widget class="QPushButton" name="replyMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reply to a CQ&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Reply</string>
</property>
</widget>
</item>
<item row="1" column="13">
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="11">
<widget class="QPushButton" name="queryButton">
<property name="minimumSize">
<size>
@@ -1437,7 +1517,58 @@ QTextEdit[transmitting=&quot;true&quot;] {
</widget>
</item>
<item row="1" column="12">
<spacer name="horizontalSpacer_5">
<widget class="QPushButton" name="deselectButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Deselect the current callsign for directed messaging&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Deselect</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="qthMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station location message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTH</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="cqMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a CQ message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>CQ</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="7">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -1452,7 +1583,23 @@ QTextEdit[transmitting=&quot;true&quot;] {
</property>
</spacer>
</item>
<item row="1" column="13">
<item row="1" column="5">
<widget class="QPushButton" name="qtcMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTC</string>
</property>
</widget>
</item>
<item row="1" column="14">
<widget class="QPushButton" name="startTxButton">
<property name="enabled">
<bool>false</bool>
@@ -1484,39 +1631,7 @@ color:#555;
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="qthMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station location message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTH</string>
</property>
</widget>
</item>
<item row="1" column="14">
<widget class="QPushButton" name="stopTxButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Stop transmitting&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Halt</string>
</property>
</widget>
</item>
<item row="1" column="8">
<item row="1" column="6">
<widget class="QPushButton" name="macrosMacroButton">
<property name="minimumSize">
<size>
@@ -1532,89 +1647,6 @@ color:#555;
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="replyMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reply to a CQ&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Reply</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="cqMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a CQ message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>CQ</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="11">
<widget class="QPushButton" name="deselectButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Deselect the current callsign for directed messaging&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Deselect</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="qtcMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTC</string>
</property>
</widget>
</item>
<item row="1" column="6">
<spacer name="horizontalSpacer_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QFrame" name="frame_5">
@@ -4593,7 +4625,7 @@ list. The list can be maintained in Settings (F2).</string>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
<string>&amp;File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionOpen_next_in_directory"/>
@@ -4638,7 +4670,7 @@ list. The list can be maintained in Settings (F2).</string>
</widget>
<widget class="QMenu" name="menuSave">
<property name="title">
<string>Save</string>
<string>&amp;Save</string>
</property>
<addaction name="actionNone"/>
<addaction name="actionSave_decoded"/>
@@ -4650,18 +4682,16 @@ list. The list can be maintained in Settings (F2).</string>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
<string>&amp;Help</string>
</property>
<addaction name="actionRelease_Notes"/>
<addaction name="actionOnline_User_Guide"/>
<addaction name="actionLocal_User_Guide"/>
<addaction name="actionFT8_DXpedition_Mode_User_Guide"/>
<addaction name="download_samples_action"/>
<addaction name="separator"/>
<addaction name="actionKeyboard_shortcuts"/>
<addaction name="actionSpecial_mouse_commands"/>
<addaction name="actionShort_list_of_add_on_prefixes_and_suffixes"/>
<addaction name="separator"/>
<addaction name="actionCopyright_Notice"/>
<addaction name="separator"/>
<addaction name="actionAbout"/>
@@ -4692,7 +4722,7 @@ list. The list can be maintained in Settings (F2).</string>
</widget>
<widget class="QMenu" name="menuConfig">
<property name="title">
<string>Configurations</string>
<string>&amp;Configurations</string>
</property>
</widget>
<widget class="QMenu" name="menuTools">
@@ -4710,7 +4740,7 @@ list. The list can be maintained in Settings (F2).</string>
</widget>
<widget class="QMenu" name="menuWindow">
<property name="title">
<string>Window</string>
<string>&amp;Window</string>
</property>
<addaction name="actionShow_Band_Activity"/>
<addaction name="actionShow_Band_Activity_Columns"/>
@@ -4728,7 +4758,7 @@ list. The list can be maintained in Settings (F2).</string>
</widget>
<widget class="QMenu" name="menu_Log">
<property name="title">
<string>Log</string>
<string>&amp;Log</string>
</property>
<addaction name="actionAdd_Log_Entry"/>
<addaction name="separator"/>
@@ -4873,6 +4903,9 @@ list. The list can be maintained in Settings (F2).</string>
</property>
</action>
<action name="actionKeyboard_shortcuts">
<property name="visible">
<bool>false</bool>
</property>
<property name="enabled">
<bool>false</bool>
</property>
@@ -4884,6 +4917,9 @@ list. The list can be maintained in Settings (F2).</string>
</property>
</action>
<action name="actionSpecial_mouse_commands">
<property name="visible">
<bool>false</bool>
</property>
<property name="enabled">
<bool>false</bool>
</property>
@@ -5206,6 +5242,9 @@ list. The list can be maintained in Settings (F2).</string>
</property>
</action>
<action name="download_samples_action">
<property name="visible">
<bool>false</bool>
</property>
<property name="enabled">
<bool>false</bool>
</property>
@@ -5233,6 +5272,9 @@ list. The list can be maintained in Settings (F2).</string>
</property>
</action>
<action name="actionRelease_Notes">
<property name="visible">
<bool>false</bool>
</property>
<property name="enabled">
<bool>false</bool>
</property>
+34 -28
View File
@@ -46,14 +46,14 @@ QMap<QString, int> directed_cmds = {
{"$", 3 }, // query station(s) heard
{"^", 4 }, // query grid
{">", 5 }, // relay message
//{"|", 6 }, // retransmit message
{"*", 6 }, // query idle message
//{"!", 7 }, // alert message
{"#", 8 }, // all or nothing message
// {"=", 9 }, // unused
// {"/", 10 }, // unused
{" ACTIVE", 10 }, // i have been active in the past 10 minutes
{" IDLE", 11 }, // i have not been active in the past 10 minutes
{" BEACON", -1 }, // this is my beacon (unused except for faux processing of beacons as directed commands)
{" BEACON ACK", 12 }, // i received your beacon at this snr
@@ -81,7 +81,7 @@ QMap<QString, int> directed_cmds = {
{" ", 31 }, // send freetext
};
QSet<int> allowed_cmds = {-1, 0, 1, 2, 3, 4, 5, /*6,*/ /*7,*/ 8, /*...*/ 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};
QSet<int> buffered_cmds = {3, 5, /*6,*/ /*7,*/ 8, 13, 14, 15};
@@ -96,10 +96,10 @@ QMap<int, int> checksum_cmds = {
};
QString callsign_pattern = QString("(?<callsign>[A-Z0-9/]+)");
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:AGN[?]|ACK|73|YES|NO|SNR|QSL[?]?|RR|HEARING|HW CPY[?]|FB|QTH|QTC|GRID|APRS[:]|BEACON (ACK|REQ)|QRZ[?]|[?@&$%#^> ]))?");
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:BEACON (ACK|REQ)|AGN[?]|QSL[?]|HW CPY[?]|APRS[:]|QRZ[?]|(?:(?:ACK|73|YES|NO|SNR|QSL|RR|HEARING|FB|QTH|QTC|GRID|ACTIVE|IDLE)(?=[ ]|$))|[?@&$%#^>* ]))?");
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|HEARING|BEACON ACK)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
QString optional_num_pattern = QString("(?<num>(?<=SNR|BEACON ACK)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
QRegularExpression directed_re("^" +
callsign_pattern +
@@ -108,13 +108,13 @@ QRegularExpression directed_re("^" +
QRegularExpression beacon_re(R"(^\s*(?<type>CQCQCQ|CQ QRPP?|CQ DX|CQ TEST|CQ( CQ){0,2}|BEACON)(?:\s(?<grid>[A-R]{2}[0-9]{2}))?\b)");
QRegularExpression compound_re("^\\s*[<]" +
QRegularExpression compound_re("^\\s*[`]" +
callsign_pattern +
"(?<extra>" +
optional_grid_pattern +
optional_grid_pattern + // there's a reason this is first (see: buildMessageFrames)
optional_cmd_pattern +
optional_num_pattern +
")[>]");
")");
QMap<QString, QString> hufftable = {
// char code weight
@@ -333,7 +333,7 @@ QStringList Varicode::parseCallsigns(QString const &input){
if(!match.hasMatch()){
continue;
}
QString callsign = match.captured("callsign");
QString callsign = match.captured("callsign").trimmed();
QRegularExpression m(grid_pattern);
if(m.match(callsign).hasMatch()){
continue;
@@ -1021,6 +1021,7 @@ QString Varicode::packCompoundMessage(QString const &text, int *n){
qDebug() << "trying to pack compound message" << text;
auto parsedText = compound_re.match(text);
if(!parsedText.hasMatch()){
qDebug() << "no match for compound message";
if(n) *n = 0;
return frame;
}
@@ -1061,6 +1062,8 @@ QString Varicode::packCompoundMessage(QString const &text, int *n){
quint8 type = FrameCompound;
quint16 extra = nmaxgrid;
qDebug() << "try pack cmd" << cmd << directed_cmds.contains(cmd) << Varicode::isCommandAllowed(cmd);
if (!cmd.isEmpty() && directed_cmds.contains(cmd) && Varicode::isCommandAllowed(cmd)){
bool packedNum = false;
qint8 inum = Varicode::packNum(num, nullptr);
@@ -1206,7 +1209,7 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
QString from = callsign;
QString to = match.captured("callsign");
QString cmd = match.captured("cmd");
QString num = match.captured("num").trimmed();
QString num = match.captured("num");
// ensure we have a directed command
if(cmd.isEmpty()){
@@ -1240,8 +1243,11 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
}
// packing general number...
quint8 inum = Varicode::packNum(num, nullptr);
if(pNum) *pNum = num;
bool numOK = false;
quint8 inum = Varicode::packNum(num.trimmed(), &numOK);
if(numOK){
if(pNum) *pNum = num;
}
quint32 packed_from = Varicode::packCallsign(from);
quint32 packed_to = Varicode::packCallsign(to);
@@ -1251,12 +1257,15 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
return frame;
}
QString cmdOut;
quint8 packed_cmd = 0;
if(directed_cmds.contains(cmd)){
packed_cmd = directed_cmds[cmd];
cmdOut = cmd;
packed_cmd = directed_cmds[cmdOut];
}
if(directed_cmds.contains(cmd.trimmed())){
packed_cmd = directed_cmds[cmd.trimmed()];
cmdOut = cmd.trimmed();
packed_cmd = directed_cmds[cmdOut];
}
quint8 packed_flag = FrameDirected;
quint8 packed_extra = inum;
@@ -1269,7 +1278,7 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
Varicode::intToBits(packed_cmd % 32, 5)
);
if(pCmd) *pCmd = cmd;
if(pCmd) *pCmd = cmdOut;
if(n) *n = match.captured(0).length();
return Varicode::pack72bits(Varicode::bitsToInt(bits), packed_extra % 64);
}
@@ -1501,17 +1510,18 @@ QStringList Varicode::buildMessageFrames(
#if AUTO_PREPEND_DIRECTED
// see if we need to prepend the directed call to the line...
// if we have a selected call and the text doesn't start with that call...
// and if this isn't a raw message (starting with "<")... then...
if(!selectedCall.isEmpty() && !line.startsWith(selectedCall) && !line.startsWith("<")){
// and if this isn't a raw message (starting with "`")... then...
if(!selectedCall.isEmpty() && !line.startsWith(selectedCall) && !line.startsWith("`")){
auto calls = Varicode::parseCallsigns(line);
bool lineStartsWithBaseCall = (
line.startsWith("ALLCALL") ||
line.startsWith("GROUPCALL") ||
line.startsWith("BEACON") ||
Varicode::startsWithCQ(line)
);
bool lineStartsWithStandardCall = !calls.isEmpty() && line.startsWith(calls.first());
bool lineStartsWithStandardCall = !calls.isEmpty() && line.startsWith(calls.first()) && calls.first().length() > 2;
if(lineStartsWithBaseCall || lineStartsWithStandardCall){
// pass
@@ -1550,6 +1560,9 @@ QStringList Varicode::buildMessageFrames(
QString dirNum;
QString dirFrame = Varicode::packDirectedMessage(line, basecall, &dirTo, &dirCmd, &dirNum, &n);
bool dirToCompound = dirTo.contains("/");
if(dirToCompound){
qDebug() << "directed message to field is compound" << dirTo;
}
int m = 0;
QString datFrame = Varicode::packDataMessage(line, &m);
@@ -1618,14 +1631,14 @@ QStringList Varicode::buildMessageFrames(
bool shouldUseStandardFrame = true;
if(compound || dirToCompound){
// Cases 1, 2, 3 all send a standard compound frame first...
QString deCompoundMessage = QString("<%1 %2>").arg(mycall).arg(mygrid);
QString deCompoundMessage = QString("`%1 %2").arg(mycall).arg(mygrid);
QString deCompoundFrame = Varicode::packCompoundMessage(deCompoundMessage, nullptr);
if(!deCompoundFrame.isEmpty()){
frames.append(deCompoundFrame);
}
// Followed, by a standard OR compound directed message...
QString dirCompoundMessage = QString("<%1%2%3>").arg(dirTo).arg(dirCmd).arg(dirNum);
QString dirCompoundMessage = QString("`%1%2%3").arg(dirTo).arg(dirCmd).arg(dirNum); //.replace(" ", " ");
QString dirCompoundFrame = Varicode::packCompoundMessage(dirCompoundMessage, nullptr);
if(!dirCompoundFrame.isEmpty()){
frames.append(dirCompoundFrame);
@@ -1660,13 +1673,6 @@ QStringList Varicode::buildMessageFrames(
}
qDebug() << "after:" << line;
}
#if 0
// APRS:
if(dirCmd.trimmed() == "APRS:" && !m_aprsClient->isPasscodeValid()){
MessageBox::warning_message(this, tr ("Please enter a valid APRS passcode in the settings to send an APRS packet."));
}
#endif
}
if(useDat){