From 7b409a6ff45bf7e395b132aab1405db71c7988dc Mon Sep 17 00:00:00 2001 From: Jordan Sherer Date: Fri, 20 Jul 2018 09:38:34 -0400 Subject: [PATCH] Fix varicode bug with empty messages --- mainwindow.cpp | 6 +++--- varicode.cpp | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 7c7c44c..e041c9e 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -163,8 +163,8 @@ QVector g_ColorTbl; namespace { Radio::Frequency constexpr default_frequency {14074000}; - QRegExp message_alphabet {"[- A-Za-z0-9+./?]*"}; - QRegExp message_input_alphabet {"[- A-Za-z0-9+./?\\n:@&]*"}; + QRegExp message_alphabet {"[- A-Za-z0-9+./?:!^]*"}; + QRegExp message_input_alphabet {"[- A-Za-z0-9+./?\\n:!^@&]*"}; // grid exact match excluding RR73 QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; @@ -5525,7 +5525,7 @@ QPair MainWindow::buildFT8MessageFrames(QString const& } } -#if 0 +#if 1 qDebug() << "parsed frames:"; foreach(auto frame, frames){ qDebug() << "->" << frame << Varicode::unpackDataMessage(frame); diff --git a/varicode.cpp b/varicode.cpp index dc11dfd..aa58d42 100644 --- a/varicode.cpp +++ b/varicode.cpp @@ -38,9 +38,10 @@ QString callsign_alphabet = {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "}; QMap directed_cmds = { // any changes here need to be made also in the directed regular xpression for parsing {"?", 0 }, // query snr - //{"$", 1 }, // query stations heard - {"@", 2 }, // query qth - {"&", 3 }, // query station message + {"@", 1 }, // query qth + {"&", 2 }, // query station message + + //{"$", 3 }, // query stations heard //{"|", 4 }, // relay message // ... @@ -188,6 +189,8 @@ QString Varicode::huffDecode(QVector const& bitvec, int pad){ foreach(auto key, huff.keys()){ if(bits.startsWith(huff[key])){ if(key == huffeot){ + out.append(" "); + found = false; break; } out.append(key); @@ -640,7 +643,7 @@ QString Varicode::packDataMessage(const QString &text, int *n){ int pad = 64 - frameBits.length(); if(pad){ - frameBits += Varicode::intToBits(1, pad); + frameBits += Varicode::intToBits(0, pad); } frame = Varicode::pack64bits(Varicode::bitsToInt(frameBits)) + Varicode::pack5bits(pad & 31);