diff --git a/mainwindow.cpp b/mainwindow.cpp index 7a93947..fde3241 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -716,6 +716,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, TxAgainTimer.setSingleShot(true); connect(&TxAgainTimer, SIGNAL(timeout()), this, SLOT(TxAgain())); + beaconTimer.setSingleShot(true); + connect(&beaconTimer, &QTimer::timeout, this, &MainWindow::prepareBeacon); + connect(m_wideGraph.data (), SIGNAL(setFreq3(int,int)),this, SLOT(setFreq4(int,int))); @@ -4965,6 +4968,14 @@ void MainWindow::resetMessageUI(){ } } +void MainWindow::createMessage(QString const& text){ + //resetMessage(); + + //ui->extFreeTextMsgEdit->setPlainText(text); + + //createMessageTransmitQueue(text); +} + void MainWindow::createMessageTransmitQueue(QString const& text){ resetMessageTransmitQueue(); @@ -5044,6 +5055,23 @@ void MainWindow::on_extFreeTextMsgEdit_currentTextChanged (QString const& text) } } +void MainWindow::on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ + /* + if(selected.isEmpty()){ + return; + } + QString selectedCall = ui->tableWidgetCalls->selectedItems().first()->text(); + int offset = m_callActivity[selectedCall].freq; + + QList items = ui->tableWidgetRXAll->findItems(QString("%1").arg(offset), Qt::MatchExactly); + if(items.isEmpty()){ + return; + } + + ui->tableWidgetRXAll->setItemSelected(items.first(), true); + */ +} + QStringList MainWindow::buildFT8MessageFrames(QString const& text){ QStringList frames; QString input = QString(text).replace("\n", " ").replace(" ", " "); @@ -5142,6 +5170,33 @@ bool MainWindow::prepareNextMessageFrame() } +void MainWindow::scheduleBeacon(){ + int timestamp = QDateTime::currentDateTimeUtc().addSecs(300).toSecsSinceEpoch(); + m_nextBeacon = QDateTime::fromSecsSinceEpoch(roundUp(timestamp, 15) + 1, QTimeZone::utc()); + beaconTimer.start(QDateTime::currentDateTimeUtc().msecsTo(m_nextBeacon) - 2*1000); +} + +void MainWindow::prepareBeacon(){ + if(!ui->beaconButton->isChecked()){ + return; + } + + if(QDateTime::currentDateTimeUtc().msecsTo(m_nextBeacon) > 15*1000){ + return; + } + + if(!m_txFrameQueue.isEmpty()){ + beaconTimer.start(15*1000); + return; + } + + QString message = QString("DE %1 %2\nDE %1 %2").arg(m_config.my_callsign()).arg(m_config.my_grid().mid(0, 4)); + ui->extFreeTextMsgEdit->setPlainText(message); + ui->startTxButton->setChecked(true); + + scheduleBeacon(); +} + // this function is called by auto_tx_mode, which is called by autoButton.clicked void MainWindow::on_startTxButton_toggled(bool checked) { @@ -6320,26 +6375,13 @@ void MainWindow::on_pbT2R_clicked() } } -static int roundUp(int numToRound, int multiple) -{ - if(multiple == 0) - { - return numToRound; - } - - int roundDown = ( (int) (numToRound) / multiple) * multiple; - return roundDown + multiple; -} - void MainWindow::on_beaconButton_clicked() { if(ui->beaconButton->isChecked()){ - int timestamp = QDateTime::currentDateTimeUtc().addSecs(300).toSecsSinceEpoch(); - m_nextBeacon = QDateTime::fromSecsSinceEpoch(roundUp(timestamp, 15) + 1, QTimeZone::utc()); + scheduleBeacon(); } } - void MainWindow::on_readFreq_clicked() { if (m_transmitting) return; diff --git a/mainwindow.h b/mainwindow.h index 0c08b0b..885b2ac 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -121,6 +121,7 @@ public slots: void resetMessage(); void resetMessageUI(); + void createMessage(QString const& text); void createMessageTransmitQueue(QString const& text); void resetMessageTransmitQueue(); QString popMessageFrame(); @@ -188,6 +189,7 @@ private slots: void on_txb5_clicked(); void on_txb5_doubleClicked (); void on_txb6_clicked(); + void on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void on_startTxButton_toggled(bool checked); void splitAndSendNextMessage(); void on_rbNextFreeTextMsg_toggled (bool status); @@ -234,6 +236,8 @@ private slots: QString parseFT8Message(QString input); int countFreeTextMsgs(QString input); bool prepareNextMessageFrame(); + void scheduleBeacon(); + void prepareBeacon(); void on_rptSpinBox_valueChanged(int n); void killFile(); void on_tuneButton_clicked (bool); @@ -567,6 +571,7 @@ private: QTimer minuteTimer; QTimer splashTimer; QTimer p1Timer; + QTimer beaconTimer; QString m_path; QString m_baseCall; @@ -760,6 +765,18 @@ protected: } }; + +static int roundUp(int numToRound, int multiple) +{ + if(multiple == 0) + { + return numToRound; + } + + int roundDown = ( (int) (numToRound) / multiple) * multiple; + return roundDown + multiple; +} + extern int killbyname(const char* progName); extern void getDev(int* numDevices,char hostAPI_DeviceName[][50], int minChan[], int maxChan[], diff --git a/mainwindow.ui b/mainwindow.ui index b0f26d6..aad4679 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -254,6 +254,19 @@ o 0 + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -316,6 +329,19 @@ color : white; + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -394,7 +420,7 @@ background-color: #00ff00; - + true @@ -836,6 +862,12 @@ QTextEdit[readOnly="true"] { + + QAbstractItemView::NoEditTriggers + + + false + QAbstractItemView::SingleSelection @@ -3507,7 +3539,7 @@ list. The list can be maintained in Settings (F2). - + 50