Added large checksum message processing

This commit is contained in:
Jordan Sherer 2018-08-02 02:03:04 -04:00
parent e649a375cf
commit 5f3ca913b7
2 changed files with 37 additions and 17 deletions

View File

@ -254,19 +254,21 @@ namespace
QString rstrip(const QString& str) { QString rstrip(const QString& str) {
int n = str.size() - 1; int n = str.size() - 1;
for (; n >= 0; --n) { for (; n >= 0; --n) {
if (!str.at(n).isSpace()) { if (str.at(n).isSpace()) {
return str.left(n + 1); continue;
} }
return str.left(n + 1);
} }
return ""; return "";
} }
QString lstrip(const QString& str) { QString lstrip(const QString& str) {
int len = str.size() - 1; int len = str.size();
for (int n = 0; n < len; n++) { for (int n = 0; n < len; n++) {
if (!str.at(n).isSpace()) { if(str.at(n).isSpace()){
continue;
}
return str.mid(n); return str.mid(n);
}
} }
return ""; return "";
} }
@ -6009,12 +6011,18 @@ QStringList MainWindow::buildFT8MessageFrames(QString const& text){
// generate a checksum for buffered commands with line data // generate a checksum for buffered commands with line data
if(Varicode::isCommandBuffered(dirCmd) && !line.isEmpty()){ if(Varicode::isCommandBuffered(dirCmd) && !line.isEmpty()){
qDebug() << "generating checksum for line" << line << line.mid(1);
// strip leading whitespace after a buffered directed command // strip leading whitespace after a buffered directed command
line = lstrip(line); line = lstrip(line);
// TODO: jsherer - this is how we can add 16-bit checksum to the message, just encode it in the data...
qDebug() << "generating checksum for line" << line; qDebug() << "before:" << line;
line = line + " " + Varicode::checksum16(line); if(dirCmd == "#"){
qDebug() << line; line = line + " " + Varicode::checksum32(line);
} else {
line = line + " " + Varicode::checksum16(line);
}
qDebug() << "after:" << line;
} }
} }
@ -8889,10 +8897,21 @@ void MainWindow::processBufferedActivity() {
} }
message = rstrip(message); message = rstrip(message);
QString checksum = message.right(3); QString checksum;
message = message.left(message.length() - 4);
if (Varicode::checksum16Valid(checksum, message)) { bool valid = false;
if(buffer.cmd.cmd == "#"){
checksum = message.right(6);
message = message.left(message.length() - 7);
valid = Varicode::checksum32Valid(checksum, message);
} else {
checksum = message.right(3);
message = message.left(message.length() - 4);
valid = Varicode::checksum16Valid(checksum, message);
}
if (valid) {
buffer.cmd.text = message; buffer.cmd.text = message;
buffer.cmd.isBuffered = true; buffer.cmd.isBuffered = true;
m_rxCommandQueue.append(buffer.cmd); m_rxCommandQueue.append(buffer.cmd);

View File

@ -47,9 +47,10 @@ QMap<QString, int> directed_cmds = {
{"%", 5 }, // query pwr {"%", 5 }, // query pwr
{"|", 6 }, // relay message? {"|", 6 }, // relay message?
{"!", 7 }, // alert message? {"!", 7 }, // alert message?
{"#", 8 }, // all or nothing message
// {"=", 8 }, // unused? (can we even use equals?) // {"=", 9 }, // unused? (can we even use equals?)
// {"/", 9 }, // unused? (can we even use stroke?) // {"/", 10 }, // unused? (can we even use stroke?)
// directed responses // directed responses
{" ACK", 23 }, // acknowledged {" ACK", 23 }, // acknowledged
@ -63,13 +64,13 @@ QMap<QString, int> directed_cmds = {
{" ", 31 }, // send freetext {" ", 31 }, // send freetext
}; };
QSet<int> allowed_cmds = {0, 1, 2, 3, 4, 5, 6, 7, 23, 24, 25, 26, 27, 28, 29, 30, 31}; QSet<int> allowed_cmds = {0, 1, 2, 3, 4, 5, 6, 7, 8, 23, 24, 25, 26, 27, 28, 29, 30, 31};
QSet<int> buffered_cmds = {6, 7}; QSet<int> buffered_cmds = {6, 7, 8};
QRegularExpression directed_re("^" QRegularExpression directed_re("^"
"(?<to>[A-Z0-9/]+)" "(?<to>[A-Z0-9/]+)"
"(?<cmd>\\s?(?:AGN[?]|RR|73|YES|NO|SNR|PWR|ACK|[?@&$^%|! ]))" "(?<cmd>\\s?(?:AGN[?]|RR|73|YES|NO|SNR|PWR|ACK|[?@&$^%|!# ]))"
"(?<pwr>\\s?\\d+\\s?[KM]?W)?" "(?<pwr>\\s?\\d+\\s?[KM]?W)?"
"(?<num>\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?" "(?<num>\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?"
); );