From c5451a2029aa0ea4e4779b7804e626c7c2b98cf6 Mon Sep 17 00:00:00 2001 From: Jordan Sherer Date: Fri, 27 Sep 2019 22:44:27 -0400 Subject: [PATCH] Fixed the data frame creation for buffered messages --- TransmitTextEdit.cpp | 1 + TransmitTextEdit.h | 12 ++++++ mainwindow.cpp | 91 +++++++++++++++++++++++--------------------- mainwindow.h | 1 + varicode.cpp | 7 +++- 5 files changed, 68 insertions(+), 44 deletions(-) diff --git a/TransmitTextEdit.cpp b/TransmitTextEdit.cpp index 5a4c316..7cfa8c4 100644 --- a/TransmitTextEdit.cpp +++ b/TransmitTextEdit.cpp @@ -224,6 +224,7 @@ void TransmitTextEdit::on_textContentsChanged(int /*pos*/, int rem, int add){ //qDebug() << "sent:" << sentText(); //qDebug() << "unsent:" << unsentText(); + m_dirty = true; m_lastText = text; } } diff --git a/TransmitTextEdit.h b/TransmitTextEdit.h index 447a15d..2deee6d 100644 --- a/TransmitTextEdit.h +++ b/TransmitTextEdit.h @@ -46,6 +46,17 @@ public: } void setProtected(bool protect); bool cursorShouldBeProtected(QTextCursor c); + + bool isEmpty() const { + return toPlainText().isEmpty(); + } + bool isDirty() const { + return m_dirty; + } + void setClean(){ + m_dirty = false; + } + void highlightBase(); void highlightCharsSent(); void highlight(); @@ -61,6 +72,7 @@ private: int m_sent; QString m_textSent; bool m_protected; + bool m_dirty; QFont m_font; QColor m_fg; QColor m_bg; diff --git a/mainwindow.cpp b/mainwindow.cpp index 54615d0..e5052e5 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -463,6 +463,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, m_i3bit {0}, m_manual {&m_network_manager}, m_txFrameCount {0}, + m_txFrameCountSent {0}, m_txTextDirty {false}, m_txFrameCountEstimate {0}, m_previousFreq {0}, @@ -4936,7 +4937,6 @@ void MainWindow::guiUpdate() // 0: [000] <- this is standard set // 1: [001] <- this is fox/hound //m_i3bit=0; - qDebug() << "gen tones" << message; char ft8msgbits[75 + 12]; //packed 75 bit ft8 message plus 12-bit CRC if(m_nSubMode == Varicode::JS8CallNormal){ @@ -4949,6 +4949,9 @@ void MainWindow::guiUpdate() const_cast (itone), 22, 6, 22); } + qDebug() << "-> msg:" << message; + qDebug() << "-> bit:" << m_i3bit; + msgibits = m_i3bit; msgsent[22]=0; @@ -5276,6 +5279,10 @@ void MainWindow::startTx() return; } #endif + auto text = ui->extFreeTextMsgEdit->toPlainText(); + if(!ensureCreateMessageReady(text)){ + return; + } if(!prepareNextMessageFrame()){ return; @@ -6210,6 +6217,7 @@ void MainWindow::restoreMessage(){ void MainWindow::resetMessageTransmitQueue(){ m_txFrameCount = 0; + m_txFrameCountSent = 0; m_txFrameQueue.clear(); m_txMessageQueue.clear(); @@ -6334,7 +6342,7 @@ QList> MainWindow::buildMessageFrames(const QString &text){ bool forceIdentify = !m_config.avoid_forced_identify(); // TODO: might want to be more explicit? - bool forceData = !m_totalTxMessage.isEmpty(); + bool forceData = m_txFrameCountSent > 0; auto frames = Varicode::buildMessageFrames( mycall, @@ -6361,10 +6369,7 @@ bool MainWindow::prepareNextMessageFrame() m_i3bit = Varicode::JS8Call; // typeahead - static QString lastText; - auto text = ui->extFreeTextMsgEdit->toPlainText(); - if(!text.isEmpty() && (lastText == "" || lastText != text)){ -#if 1 + if(ui->extFreeTextMsgEdit->isDirty() && !ui->extFreeTextMsgEdit->isEmpty()){ auto sent = ui->extFreeTextMsgEdit->sentText(); auto unsent = ui->extFreeTextMsgEdit->unsentText(); qDebug() << "text dirty for typeahead\n" << sent << "\n" << unsent; @@ -6372,45 +6377,44 @@ bool MainWindow::prepareNextMessageFrame() m_txFrameCount = 0; auto newText = appendMessage(unsent); ui->extFreeTextMsgEdit->replaceUnsentText(newText); -#else - m_txFrameQueue.clear(); - auto newText = appendMessage(text); - for(int i = 0; i < m_txFrameCount; i++){ - if(m_txFrameQueue.isEmpty()){ - break; - } - m_txFrameQueue.removeFirst(); - } - ui->extFreeTextMsgEdit->replacePlainText(newText); -#endif - lastText = text; + ui->extFreeTextMsgEdit->setClean(); } QPair f = popMessageFrame(); auto frame = f.first; auto bits = f.second; - // append this frame to the total message sent so far - auto dt = DecodedText(frame, bits, m_nSubMode); - m_totalTxMessage.append(dt.message()); - ui->extFreeTextMsgEdit->setCharsSent(m_totalTxMessage.length()); - qDebug() << "total sent:\n" << m_totalTxMessage; + // if not the first frame, ensure first bit is not set + if(m_txFrameCountSent > 0){ + bits &= ~Varicode::JS8CallFirst; + } + + // if last frame, ensure the last bit is set + if(m_txFrameQueue.isEmpty()){ + bits |= Varicode::JS8CallLast; + } if(frame.isEmpty()){ ui->nextFreeTextMsg->clear(); updateTxButtonDisplay(); - return false; - } else { - ui->nextFreeTextMsg->setText(frame); - m_i3bit = bits; - - updateTxButtonDisplay(); - - // TODO: bump heartbeat - - return true; } + + // append this frame to the total message sent so far + auto dt = DecodedText(frame, bits, m_nSubMode); + m_totalTxMessage.append(dt.message()); + ui->extFreeTextMsgEdit->setCharsSent(m_totalTxMessage.length()); + m_txFrameCountSent += 1; + qDebug() << "total sent:" << m_txFrameCountSent << "\n" << m_totalTxMessage; + + ui->nextFreeTextMsg->setText(frame); + m_i3bit = bits; + + updateTxButtonDisplay(); + + // TODO: bump heartbeat + + return true; } bool MainWindow::isFreqOffsetFree(int f, int bw){ @@ -6618,16 +6622,17 @@ QString MainWindow::calculateDistance(QString const& value, int *pDistance, int void MainWindow::on_startTxButton_toggled(bool checked) { if(checked){ - auto text = ui->extFreeTextMsgEdit->toPlainText(); - if(ensureCreateMessageReady(text)){ - - auto txText = createMessage(text); - if(txText != text){ - ui->extFreeTextMsgEdit->setPlainText(txText); - } - - startTx(); - } + // auto text = ui->extFreeTextMsgEdit->toPlainText(); + // if(ensureCreateMessageReady(text)){ + // + // auto txText = createMessage(text); + // if(txText != text){ + // ui->extFreeTextMsgEdit->setPlainText(txText); + // } + // + // startTx(); + // } + startTx(); } else { resetMessage(); on_stopTxButton_clicked(); diff --git a/mainwindow.h b/mainwindow.h index faaaceb..d265407 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -791,6 +791,7 @@ private: bool m_rxDisplayDirty; int m_txFrameCountEstimate; int m_txFrameCount; + int m_txFrameCountSent; QTimer m_txTextDirtyDebounce; bool m_txTextDirty; QString m_txTextDirtyLastText; diff --git a/varicode.cpp b/varicode.cpp index e898385..ebbfd43 100644 --- a/varicode.cpp +++ b/varicode.cpp @@ -2044,7 +2044,12 @@ QList> Varicode::buildMessageFrames(QString const& mycall, line = lstrip(line); qDebug() << "before:" << line; + +#if 1 int checksumSize = Varicode::isCommandChecksumed(dirCmd); +#else + int checksumSize = 0; +#endif if(checksumSize == 32){ line = line + " " + Varicode::checksum32(line); @@ -2111,7 +2116,7 @@ void BuildMessageFramesThread::run(){ qDebug() << "frames:"; foreach(auto frame, results){ auto dt = DecodedText(frame.first, frame.second, m_submode); - qDebug() << "->" << frame << dt.message() << Varicode::frameTypeString(dt.frameType()) << m_submode; + qDebug() << "->" << frame << dt.message() << Varicode::frameTypeString(dt.frameType()) << "submode:" << m_submode; textList.append(dt.message()); }