| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | // -*- Mode: C++ -*-
 | 
					
						
							|  |  |  | #ifndef MAINWINDOW_H
 | 
					
						
							|  |  |  | #define MAINWINDOW_H
 | 
					
						
							|  |  |  | #ifdef QT5
 | 
					
						
							|  |  |  | #include <QtWidgets>
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #include <QtGui>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #include <QThread>
 | 
					
						
							|  |  |  | #include <QTimer>
 | 
					
						
							|  |  |  | #include <QDateTime>
 | 
					
						
							|  |  |  | #include <QList>
 | 
					
						
							|  |  |  | #include <QAudioDeviceInfo>
 | 
					
						
							|  |  |  | #include <QScopedPointer>
 | 
					
						
							|  |  |  | #include <QDir>
 | 
					
						
							|  |  |  | #include <QProgressDialog>
 | 
					
						
							|  |  |  | #include <QAbstractSocket>
 | 
					
						
							|  |  |  | #include <QHostAddress>
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  | #include <QPair>
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | #include <QPointer>
 | 
					
						
							|  |  |  | #include <QSet>
 | 
					
						
							|  |  |  | #include <QVector>
 | 
					
						
							|  |  |  | #include <QFuture>
 | 
					
						
							|  |  |  | #include <QFutureWatcher>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  | #include <functional>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | #include "AudioDevice.hpp"
 | 
					
						
							|  |  |  | #include "commons.h"
 | 
					
						
							|  |  |  | #include "Radio.hpp"
 | 
					
						
							|  |  |  | #include "Modes.hpp"
 | 
					
						
							|  |  |  | #include "FrequencyList.hpp"
 | 
					
						
							|  |  |  | #include "Configuration.hpp"
 | 
					
						
							|  |  |  | #include "WSPRBandHopping.hpp"
 | 
					
						
							|  |  |  | #include "Transceiver.hpp"
 | 
					
						
							|  |  |  | #include "DisplayManual.hpp"
 | 
					
						
							|  |  |  | #include "psk_reporter.h"
 | 
					
						
							|  |  |  | #include "logbook/logbook.h"
 | 
					
						
							|  |  |  | #include "commons.h"
 | 
					
						
							|  |  |  | #include "astro.h"
 | 
					
						
							|  |  |  | #include "MessageBox.hpp"
 | 
					
						
							|  |  |  | #include "NetworkAccessManager.hpp"
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  | #include "qorderedmap.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  | #include "qpriorityqueue.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-12 14:15:18 -04:00
										 |  |  | #include "varicode.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  | #include "MessageClient.hpp"
 | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  | #include "APRSISClient.h"
 | 
					
						
							| 
									
										
										
										
											2018-09-11 13:35:29 -04:00
										 |  |  | #include "keyeater.h"
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define NUM_JT4_SYMBOLS 206                //(72+31)*2, embedded sync
 | 
					
						
							|  |  |  | #define NUM_JT65_SYMBOLS 126               //63 data + 63 sync
 | 
					
						
							|  |  |  | #define NUM_JT9_SYMBOLS 85                 //69 data + 16 sync
 | 
					
						
							|  |  |  | #define NUM_WSPR_SYMBOLS 162               //(50+31)*2, embedded sync
 | 
					
						
							|  |  |  | #define NUM_WSPR_LF_SYMBOLS 412            //300 data + 109 sync + 3 ramp
 | 
					
						
							|  |  |  | #define NUM_ISCAT_SYMBOLS 1291             //30*11025/256
 | 
					
						
							|  |  |  | #define NUM_MSK144_SYMBOLS 144             //s8 + d48 + s8 + d80
 | 
					
						
							|  |  |  | #define NUM_QRA64_SYMBOLS 84               //63 data + 21 sync
 | 
					
						
							| 
									
										
										
										
											2018-09-23 10:22:28 -04:00
										 |  |  | #define NUM_FT8_SYMBOLS 79                 // 12.6 seconds, 15 seconds would be 93.75 symbols
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | #define NUM_CW_SYMBOLS 250
 | 
					
						
							|  |  |  | #define TX_SAMPLE_RATE 48000
 | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  | #define N_WIDGETS 33
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern int volatile itone[NUM_ISCAT_SYMBOLS];   //Audio tones for all Tx symbols
 | 
					
						
							|  |  |  | extern int volatile icw[NUM_CW_SYMBOLS];	    //Dits for CW ID
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //--------------------------------------------------------------- MainWindow
 | 
					
						
							|  |  |  | namespace Ui { | 
					
						
							|  |  |  |   class MainWindow; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class QSettings; | 
					
						
							|  |  |  | class QLineEdit; | 
					
						
							|  |  |  | class QFont; | 
					
						
							|  |  |  | class QHostInfo; | 
					
						
							|  |  |  | class EchoGraph; | 
					
						
							|  |  |  | class FastGraph; | 
					
						
							|  |  |  | class WideGraph; | 
					
						
							|  |  |  | class LogQSO; | 
					
						
							|  |  |  | class Transceiver; | 
					
						
							|  |  |  | class MessageAveraging; | 
					
						
							|  |  |  | class MessageClient; | 
					
						
							|  |  |  | class QTime; | 
					
						
							|  |  |  | class WSPRBandHopping; | 
					
						
							|  |  |  | class HelpTextWindow; | 
					
						
							|  |  |  | class WSPRNet; | 
					
						
							|  |  |  | class SoundOutput; | 
					
						
							|  |  |  | class Modulator; | 
					
						
							|  |  |  | class SoundInput; | 
					
						
							|  |  |  | class Detector; | 
					
						
							|  |  |  | class MultiSettings; | 
					
						
							|  |  |  | class EqualizationToolsDialog; | 
					
						
							|  |  |  | class DecodedText; | 
					
						
							| 
									
										
										
										
											2018-12-30 20:18:35 -05:00
										 |  |  | class JSCChecker; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  | using namespace std; | 
					
						
							|  |  |  | typedef std::function<void()> Callback; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 09:44:46 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | class MainWindow : public QMainWindow | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   Q_OBJECT; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |   struct CallDetail; | 
					
						
							| 
									
										
										
										
											2019-01-03 12:39:48 -05:00
										 |  |  |   struct CommandDetail; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | public: | 
					
						
							|  |  |  |   using Frequency = Radio::Frequency; | 
					
						
							|  |  |  |   using FrequencyDelta = Radio::FrequencyDelta; | 
					
						
							|  |  |  |   using Mode = Modes::Mode; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   explicit MainWindow(QDir const& temp_directory, bool multiple, MultiSettings *, | 
					
						
							|  |  |  |                       QSharedMemory *shdmem, unsigned downSampleFactor, | 
					
						
							|  |  |  |                       QSplashScreen *, | 
					
						
							|  |  |  |                       QWidget *parent = nullptr); | 
					
						
							|  |  |  |   ~MainWindow(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public slots: | 
					
						
							|  |  |  |   void showSoundInError(const QString& errorMsg); | 
					
						
							|  |  |  |   void showSoundOutError(const QString& errorMsg); | 
					
						
							|  |  |  |   void showStatusMessage(const QString& statusMsg); | 
					
						
							|  |  |  |   void dataSink(qint64 frames); | 
					
						
							|  |  |  |   void fastSink(qint64 frames); | 
					
						
							|  |  |  |   void diskDat(); | 
					
						
							|  |  |  |   void freezeDecode(int n); | 
					
						
							|  |  |  |   void guiUpdate(); | 
					
						
							|  |  |  |   void readFromStdout(); | 
					
						
							|  |  |  |   void p1ReadFromStdout(); | 
					
						
							|  |  |  |   void setXIT(int n, Frequency base = 0u); | 
					
						
							| 
									
										
										
										
											2018-09-09 17:18:07 -04:00
										 |  |  |   void qsy(int hzDelta); | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  |   void setFreqOffsetForRestore(int freq, bool shouldRestore); | 
					
						
							|  |  |  |   bool tryRestoreFreqOffset(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void setFreq4(int rxFreq, int txFreq); | 
					
						
							|  |  |  |   void msgAvgDecode2(); | 
					
						
							|  |  |  |   void fastPick(int x0, int x1, int y); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-15 15:03:05 -05:00
										 |  |  |   void playSoundNotification(const QString &path); | 
					
						
							| 
									
										
										
										
											2019-01-01 10:12:09 -05:00
										 |  |  |   bool hasExistingMessageBufferToMe(int *pOffset); | 
					
						
							| 
									
										
										
										
											2018-10-06 02:55:59 -04:00
										 |  |  |   bool hasExistingMessageBuffer(int offset, bool drift, int *pPrevOffset); | 
					
						
							| 
									
										
										
										
											2018-07-31 23:26:01 -04:00
										 |  |  |   void logCallActivity(CallDetail d, bool spot=true); | 
					
						
							| 
									
										
										
										
											2019-01-14 09:48:53 -05:00
										 |  |  |   void logHeardGraph(QString from, QString to); | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  |   QString lookupCallInCompoundCache(QString const &call); | 
					
						
							| 
									
										
										
										
											2018-08-28 15:45:23 -04:00
										 |  |  |   void cacheActivity(QString key); | 
					
						
							|  |  |  |   void restoreActivity(QString key); | 
					
						
							| 
									
										
										
										
											2018-07-06 16:54:26 -04:00
										 |  |  |   void clearActivity(); | 
					
						
							| 
									
										
										
										
											2018-10-27 10:09:40 -04:00
										 |  |  |   void createAllcallTableRows(QTableWidget *table, const QString &selectedCall); | 
					
						
							| 
									
										
										
										
											2018-08-11 18:05:36 -04:00
										 |  |  |   void displayTextForFreq(QString text, int freq, QDateTime date, bool isTx, bool isNewLine, bool isLast); | 
					
						
							| 
									
										
										
										
											2018-08-16 15:19:43 -04:00
										 |  |  |   void writeNoticeTextToUI(QDateTime date, QString text); | 
					
						
							| 
									
										
										
										
											2018-08-06 23:39:43 -04:00
										 |  |  |   int writeMessageTextToUI(QDateTime date, QString text, int freq, bool bold, int block=-1); | 
					
						
							| 
									
										
										
										
											2018-08-15 20:57:30 -04:00
										 |  |  |   bool isMessageQueuedForTransmit(); | 
					
						
							| 
									
										
										
										
											2018-09-09 12:40:02 -04:00
										 |  |  |   void prependMessageText(QString text); | 
					
						
							| 
									
										
										
										
											2018-08-29 12:08:22 -04:00
										 |  |  |   void addMessageText(QString text, bool clear=false, bool selectFirstPlaceholder=false); | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  |   void enqueueMessage(int priority, QString message, int freq, Callback c); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   void resetMessage(); | 
					
						
							|  |  |  |   void resetMessageUI(); | 
					
						
							| 
									
										
										
										
											2018-07-27 13:53:07 -04:00
										 |  |  |   void restoreMessage(); | 
					
						
							| 
									
										
										
										
											2018-09-07 11:15:58 -04:00
										 |  |  |   void initializeDummyData(); | 
					
						
							| 
									
										
										
										
											2018-08-23 23:59:15 -04:00
										 |  |  |   bool ensureCallsignSet(bool alert=true); | 
					
						
							| 
									
										
										
										
											2018-10-27 15:01:27 -04:00
										 |  |  |   bool ensureKeyNotStuck(QString const& text); | 
					
						
							| 
									
										
										
										
											2018-12-14 20:02:46 -05:00
										 |  |  |   bool ensureNotIdle(); | 
					
						
							| 
									
										
										
										
											2019-01-28 09:57:21 -05:00
										 |  |  |   bool ensureCreateMessageReady(const QString &text); | 
					
						
							|  |  |  |   QString createMessage(QString const& text); | 
					
						
							|  |  |  |   QString createMessageTransmitQueue(QString const& text, bool reset); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   void resetMessageTransmitQueue(); | 
					
						
							| 
									
										
										
										
											2018-10-29 03:26:10 -04:00
										 |  |  |   QPair<QString, int> popMessageFrame(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | protected: | 
					
						
							|  |  |  |   void keyPressEvent (QKeyEvent *) override; | 
					
						
							|  |  |  |   void closeEvent(QCloseEvent *) override; | 
					
						
							|  |  |  |   void childEvent(QChildEvent *) override; | 
					
						
							|  |  |  |   bool eventFilter(QObject *, QEvent *) override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private slots: | 
					
						
							|  |  |  |   void initialize_fonts (); | 
					
						
							|  |  |  |   void on_tx1_editingFinished(); | 
					
						
							|  |  |  |   void on_tx2_editingFinished(); | 
					
						
							|  |  |  |   void on_tx3_editingFinished(); | 
					
						
							|  |  |  |   void on_tx4_editingFinished(); | 
					
						
							|  |  |  |   void on_tx5_currentTextChanged (QString const&); | 
					
						
							|  |  |  |   void on_tx6_editingFinished(); | 
					
						
							| 
									
										
										
										
											2018-11-15 22:06:52 -05:00
										 |  |  |   void on_menuControl_aboutToShow(); | 
					
						
							|  |  |  |   void on_actionEnable_Spotting_toggled(bool checked); | 
					
						
							|  |  |  |   void on_actionEnable_Auto_Reply_toggled(bool checked); | 
					
						
							| 
									
										
										
										
											2018-08-10 09:35:40 -04:00
										 |  |  |   void on_menuWindow_aboutToShow(); | 
					
						
							| 
									
										
										
										
											2019-01-23 20:31:26 -05:00
										 |  |  |   void on_actionSetOffset_triggered(); | 
					
						
							| 
									
										
										
										
											2018-11-22 10:37:38 -05:00
										 |  |  |   void on_actionShow_Fullscreen_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2019-01-09 11:14:46 -05:00
										 |  |  |   void on_actionShow_Statusbar_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-11-12 16:34:31 -05:00
										 |  |  |   void on_actionShow_Frequency_Clock_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-08-10 09:35:40 -04:00
										 |  |  |   void on_actionShow_Band_Activity_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-12-10 09:44:03 -05:00
										 |  |  |   void on_actionShow_Band_Heartbeats_and_ACKs_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-08-10 09:35:40 -04:00
										 |  |  |   void on_actionShow_Call_Activity_triggered(bool checked); | 
					
						
							|  |  |  |   void on_actionShow_Waterfall_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-09-01 18:26:10 -04:00
										 |  |  |   void on_actionShow_Waterfall_Controls_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-09-18 18:07:49 -04:00
										 |  |  |   void on_actionShow_Time_Drift_Controls_triggered(bool checked); | 
					
						
							| 
									
										
										
										
											2018-08-10 09:35:40 -04:00
										 |  |  |   void on_actionReset_Window_Sizes_triggered(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionSettings_triggered(); | 
					
						
							| 
									
										
										
										
											2018-09-09 15:47:26 -04:00
										 |  |  |   void openSettings(int tab=0); | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  |   void prepareSpotting(); | 
					
						
							| 
									
										
										
										
											2018-07-09 16:31:37 -04:00
										 |  |  |   void on_spotButton_clicked(bool checked); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_monitorButton_clicked (bool); | 
					
						
							|  |  |  |   void on_actionAbout_triggered(); | 
					
						
							|  |  |  |   void on_autoButton_clicked (bool); | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   void on_labDialFreq_clicked(); | 
					
						
							| 
									
										
										
										
											2018-11-15 21:57:04 -05:00
										 |  |  |   void resetPushButtonToggleText(QPushButton *btn); | 
					
						
							| 
									
										
										
										
											2018-07-09 16:31:37 -04:00
										 |  |  |   void on_monitorTxButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_stopTxButton_clicked(); | 
					
						
							|  |  |  |   void on_stopButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-10-03 17:10:43 -04:00
										 |  |  |   void on_actionAdd_Log_Entry_triggered(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionRelease_Notes_triggered (); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void on_actionFT8_DXpedition_Mode_User_Guide_triggered(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionOnline_User_Guide_triggered(); | 
					
						
							|  |  |  |   void on_actionLocal_User_Guide_triggered(); | 
					
						
							|  |  |  |   void on_actionWide_Waterfall_triggered(); | 
					
						
							|  |  |  |   void on_actionOpen_triggered(); | 
					
						
							|  |  |  |   void on_actionOpen_next_in_directory_triggered(); | 
					
						
							|  |  |  |   void on_actionDecode_remaining_files_in_directory_triggered(); | 
					
						
							|  |  |  |   void on_actionDelete_all_wav_files_in_SaveDir_triggered(); | 
					
						
							|  |  |  |   void on_actionOpen_log_directory_triggered (); | 
					
						
							| 
									
										
										
										
											2018-10-06 09:06:47 -04:00
										 |  |  |   void on_actionOpen_Save_Directory_triggered(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionNone_triggered(); | 
					
						
							|  |  |  |   void on_actionSave_all_triggered(); | 
					
						
							|  |  |  |   void on_actionKeyboard_shortcuts_triggered(); | 
					
						
							|  |  |  |   void on_actionSpecial_mouse_commands_triggered(); | 
					
						
							|  |  |  |   void on_actionSolve_FreqCal_triggered(); | 
					
						
							|  |  |  |   void on_actionCopyright_Notice_triggered(); | 
					
						
							|  |  |  |   void on_DecodeButton_clicked (bool); | 
					
						
							|  |  |  |   void decode(); | 
					
						
							|  |  |  |   void decodeBusy(bool b); | 
					
						
							|  |  |  |   void on_EraseButton_clicked(); | 
					
						
							|  |  |  |   void set_dateTimeQSO(int m_ntx); | 
					
						
							|  |  |  |   void set_ntx(int n); | 
					
						
							|  |  |  |   void on_txrb1_toggled(bool status); | 
					
						
							|  |  |  |   void on_txrb1_doubleClicked (); | 
					
						
							|  |  |  |   void on_txrb2_toggled(bool status); | 
					
						
							|  |  |  |   void on_txrb3_toggled(bool status); | 
					
						
							|  |  |  |   void on_txrb4_toggled(bool status); | 
					
						
							|  |  |  |   void on_txrb4_doubleClicked (); | 
					
						
							|  |  |  |   void on_txrb5_toggled(bool status); | 
					
						
							|  |  |  |   void on_txrb5_doubleClicked (); | 
					
						
							|  |  |  |   void on_txrb6_toggled(bool status); | 
					
						
							|  |  |  |   void on_txb1_clicked(); | 
					
						
							|  |  |  |   void on_txb1_doubleClicked (); | 
					
						
							|  |  |  |   void on_txb2_clicked(); | 
					
						
							|  |  |  |   void on_txb3_clicked(); | 
					
						
							|  |  |  |   void on_txb4_clicked(); | 
					
						
							|  |  |  |   void on_txb4_doubleClicked (); | 
					
						
							|  |  |  |   void on_txb5_clicked(); | 
					
						
							|  |  |  |   void on_txb5_doubleClicked (); | 
					
						
							|  |  |  |   void on_txb6_clicked(); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   void on_startTxButton_toggled(bool checked); | 
					
						
							| 
									
										
										
										
											2018-07-24 15:19:02 -04:00
										 |  |  |   void toggleTx(bool start); | 
					
						
							| 
									
										
										
										
											2018-03-08 17:01:33 -05:00
										 |  |  |   void on_rbNextFreeTextMsg_toggled (bool status); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_lookupButton_clicked(); | 
					
						
							|  |  |  |   void on_addButton_clicked(); | 
					
						
							|  |  |  |   void on_dxCallEntry_textChanged (QString const&); | 
					
						
							|  |  |  |   void on_dxGridEntry_textChanged (QString const&); | 
					
						
							|  |  |  |   void on_dxCallEntry_returnPressed (); | 
					
						
							|  |  |  |   void on_genStdMsgsPushButton_clicked(); | 
					
						
							|  |  |  |   void on_logQSOButton_clicked(); | 
					
						
							|  |  |  |   void on_actionFT8_triggered(); | 
					
						
							|  |  |  |   void on_TxFreqSpinBox_valueChanged(int arg1); | 
					
						
							|  |  |  |   void on_actionSave_decoded_triggered(); | 
					
						
							|  |  |  |   void on_actionQuickDecode_toggled (bool); | 
					
						
							|  |  |  |   void on_actionMediumDecode_toggled (bool); | 
					
						
							| 
									
										
										
										
											2018-10-21 15:37:12 -04:00
										 |  |  |   void on_actionDeepDecode_toggled (bool); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionDeepestDecode_toggled (bool); | 
					
						
							|  |  |  |   void bumpFqso(int n); | 
					
						
							|  |  |  |   void on_actionErase_ALL_TXT_triggered(); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void on_actionErase_FoxQSO_txt_triggered(); | 
					
						
							| 
									
										
										
										
											2018-10-04 13:52:52 -04:00
										 |  |  |   void on_actionErase_js8call_log_adi_triggered(); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   void startTx(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void startTx2(); | 
					
						
							|  |  |  |   void startP1(); | 
					
						
							|  |  |  |   void stopTx(); | 
					
						
							|  |  |  |   void stopTx2(); | 
					
						
							|  |  |  |   void on_pbCallCQ_clicked(); | 
					
						
							|  |  |  |   void on_pbAnswerCaller_clicked(); | 
					
						
							|  |  |  |   void on_pbSendRRR_clicked(); | 
					
						
							|  |  |  |   void on_pbAnswerCQ_clicked(); | 
					
						
							|  |  |  |   void on_pbSendReport_clicked(); | 
					
						
							|  |  |  |   void on_pbSend73_clicked(); | 
					
						
							|  |  |  |   void on_rbGenMsg_clicked(bool checked); | 
					
						
							|  |  |  |   void on_rbFreeText_clicked(bool checked); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:57:49 -04:00
										 |  |  |   void on_clearAction_triggered(QObject * sender); | 
					
						
							| 
									
										
										
										
											2019-01-21 17:45:52 -05:00
										 |  |  |   void buildFrequencyMenu(QMenu *menu); | 
					
						
							| 
									
										
										
										
											2018-11-29 22:43:15 -05:00
										 |  |  |   void buildHeartbeatMenu(QMenu *menu); | 
					
						
							|  |  |  |   void buildCQMenu(QMenu *menu); | 
					
						
							| 
									
										
										
										
											2018-11-27 23:04:11 -05:00
										 |  |  |   void buildRepeatMenu(QMenu *menu, QPushButton * button, int * interval); | 
					
						
							|  |  |  |   void sendHeartbeat(); | 
					
						
							| 
									
										
										
										
											2019-02-01 01:46:01 -05:00
										 |  |  |   void sendHeartbeatAck(QString to, int snr, QString extra); | 
					
						
							| 
									
										
										
										
											2018-11-27 23:04:11 -05:00
										 |  |  |   void on_hbMacroButton_toggled(bool checked); | 
					
						
							| 
									
										
										
										
											2018-11-25 22:12:54 -05:00
										 |  |  |   void on_hbMacroButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-12-01 16:59:17 -05:00
										 |  |  |   void sendCQ(bool repeat=false); | 
					
						
							| 
									
										
										
										
											2018-11-27 23:04:11 -05:00
										 |  |  |   void on_cqMacroButton_toggled(bool checked); | 
					
						
							| 
									
										
										
										
											2018-07-05 04:45:55 -04:00
										 |  |  |   void on_cqMacroButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-08-28 16:04:49 -04:00
										 |  |  |   void on_replyMacroButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-10-28 12:37:47 -04:00
										 |  |  |   void on_snrMacroButton_clicked(); | 
					
						
							| 
									
										
										
										
											2019-02-08 16:57:42 -05:00
										 |  |  |   void on_infoMacroButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-09-24 16:46:33 -04:00
										 |  |  |   void setShowColumn(QString tableKey, QString columnKey, bool value); | 
					
						
							| 
									
										
										
										
											2018-11-03 01:59:21 -04:00
										 |  |  |   bool showColumn(QString tableKey, QString columnKey, bool default_=true); | 
					
						
							| 
									
										
										
										
											2018-09-24 16:46:33 -04:00
										 |  |  |   void buildShowColumnsMenu(QMenu *menu, QString tableKey); | 
					
						
							| 
									
										
										
										
											2018-08-23 11:59:20 -04:00
										 |  |  |   void setSortBy(QString key, QString value); | 
					
						
							|  |  |  |   QString getSortBy(QString key, QString defaultValue); | 
					
						
							| 
									
										
										
										
											2018-08-28 16:35:14 -04:00
										 |  |  |   void buildSortByMenu(QMenu * menu, QString key, QString defaultValue, QList<QPair<QString, QString> > values); | 
					
						
							| 
									
										
										
										
											2018-08-23 12:24:47 -04:00
										 |  |  |   void buildBandActivitySortByMenu(QMenu * menu); | 
					
						
							|  |  |  |   void buildCallActivitySortByMenu(QMenu * menu); | 
					
						
							| 
									
										
										
										
											2018-08-17 11:13:49 -04:00
										 |  |  |   void buildQueryMenu(QMenu *, QString callsign); | 
					
						
							| 
									
										
										
										
											2018-10-27 14:41:57 -04:00
										 |  |  |   QMap<QString, QString> buildMacroValues(); | 
					
						
							|  |  |  |   QString replaceMacros(QString const &text, QMap<QString, QString> values, bool prune); | 
					
						
							| 
									
										
										
										
											2018-12-30 20:18:35 -05:00
										 |  |  |   void buildSuggestionsMenu(QMenu *menu, QTextEdit *edit, const QPoint &point); | 
					
						
							| 
									
										
										
										
											2018-09-20 10:46:04 -04:00
										 |  |  |   void buildSavedMessagesMenu(QMenu *menu); | 
					
						
							| 
									
										
										
										
											2018-09-09 10:42:32 -04:00
										 |  |  |   void buildRelayMenu(QMenu *menu); | 
					
						
							| 
									
										
										
										
											2018-09-09 12:40:02 -04:00
										 |  |  |   QAction* buildRelayAction(QString call); | 
					
						
							| 
									
										
										
										
											2018-09-09 10:42:32 -04:00
										 |  |  |   void buildEditMenu(QMenu *, QTextEdit *); | 
					
						
							| 
									
										
										
										
											2018-07-13 04:44:41 -04:00
										 |  |  |   void on_queryButton_pressed(); | 
					
						
							| 
									
										
										
										
											2018-07-09 21:49:38 -04:00
										 |  |  |   void on_macrosMacroButton_pressed(); | 
					
						
							| 
									
										
										
										
											2018-09-07 10:33:53 -04:00
										 |  |  |   void on_deselectButton_pressed(); | 
					
						
							| 
									
										
										
										
											2018-07-03 15:34:03 -04:00
										 |  |  |   void on_tableWidgetRXAll_cellClicked(int row, int col); | 
					
						
							|  |  |  |   void on_tableWidgetRXAll_cellDoubleClicked(int row, int col); | 
					
						
							| 
									
										
										
										
											2018-07-05 04:45:55 -04:00
										 |  |  |   void on_tableWidgetRXAll_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); | 
					
						
							| 
									
										
										
										
											2019-01-16 00:08:09 -05:00
										 |  |  |   QString generateCallDetail(QString selectedCall); | 
					
						
							| 
									
										
										
										
											2018-07-03 15:34:03 -04:00
										 |  |  |   void on_tableWidgetCalls_cellClicked(int row, int col); | 
					
						
							|  |  |  |   void on_tableWidgetCalls_cellDoubleClicked(int row, int col); | 
					
						
							| 
									
										
										
										
											2018-07-05 04:45:55 -04:00
										 |  |  |   void on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_freeTextMsg_currentTextChanged (QString const&); | 
					
						
							| 
									
										
										
										
											2018-03-08 17:01:33 -05:00
										 |  |  |   void on_nextFreeTextMsg_currentTextChanged (QString const&); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   void on_extFreeTextMsgEdit_currentTextChanged (QString const&); | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  |   int currentFreqOffset(); | 
					
						
							| 
									
										
										
										
											2018-10-29 03:26:10 -04:00
										 |  |  |   QList<QPair<QString, int>> buildMessageFrames(QString const& text); | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   bool prepareNextMessageFrame(); | 
					
						
							| 
									
										
										
										
											2018-07-07 16:56:33 -04:00
										 |  |  |   bool isFreqOffsetFree(int f, int bw); | 
					
						
							|  |  |  |   int findFreeFreqOffset(int fmin, int fmax, int bw); | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   void checkRepeat(); | 
					
						
							| 
									
										
										
										
											2018-11-06 17:28:21 -05:00
										 |  |  |   QString calculateDistance(QString const& grid, int *pDistance=nullptr, int *pAzimuth=nullptr); | 
					
						
							| 
									
										
										
										
											2018-09-18 17:24:07 -04:00
										 |  |  |   void on_driftSpinBox_valueChanged(int n); | 
					
						
							|  |  |  |   void on_driftSyncButton_clicked(); | 
					
						
							|  |  |  |   void on_driftSyncEndButton_clicked(); | 
					
						
							|  |  |  |   void on_driftSyncResetButton_clicked(); | 
					
						
							|  |  |  |   void setDrift(int n); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_rptSpinBox_valueChanged(int n); | 
					
						
							|  |  |  |   void killFile(); | 
					
						
							|  |  |  |   void on_tuneButton_clicked (bool); | 
					
						
							|  |  |  |   void on_pbR2T_clicked(); | 
					
						
							|  |  |  |   void on_pbT2R_clicked(); | 
					
						
							| 
									
										
										
										
											2018-11-04 22:37:14 -05:00
										 |  |  |   void on_turboButton_clicked(); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void acceptQSO (QDateTime const&, QString const& call, QString const& grid | 
					
						
							| 
									
										
										
										
											2018-11-30 17:02:14 -05:00
										 |  |  |                   , Frequency dial_freq, QString const& mode, QString const& submode | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |                   , QString const& rpt_sent, QString const& rpt_received | 
					
						
							| 
									
										
										
										
											2019-02-10 09:37:26 -05:00
										 |  |  |                   , QString const& comments | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |                   , QString const& name, QDateTime const& QSO_date_on, QString const& operator_call | 
					
						
							|  |  |  |                   , QString const& my_call, QString const& my_grid, QByteArray const& ADIF); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_bandComboBox_currentIndexChanged (int index); | 
					
						
							|  |  |  |   void on_bandComboBox_activated (int index); | 
					
						
							|  |  |  |   void on_readFreq_clicked(); | 
					
						
							|  |  |  |   void on_pbTxMode_clicked(); | 
					
						
							|  |  |  |   void on_RxFreqSpinBox_valueChanged(int n); | 
					
						
							|  |  |  |   void on_outAttenuation_valueChanged (int); | 
					
						
							|  |  |  |   void rigOpen (); | 
					
						
							|  |  |  |   void handle_transceiver_update (Transceiver::TransceiverState const&); | 
					
						
							|  |  |  |   void handle_transceiver_failure (QString const& reason); | 
					
						
							|  |  |  |   void on_actionAstronomical_data_toggled (bool); | 
					
						
							|  |  |  |   void on_actionShort_list_of_add_on_prefixes_and_suffixes_triggered(); | 
					
						
							|  |  |  |   void band_changed (Frequency); | 
					
						
							|  |  |  |   void monitor (bool); | 
					
						
							|  |  |  |   void stop_tuning (); | 
					
						
							|  |  |  |   void stopTuneATU(); | 
					
						
							|  |  |  |   void auto_tx_mode(bool); | 
					
						
							| 
									
										
										
										
											2018-11-15 21:57:04 -05:00
										 |  |  |   void on_autoReplyButton_toggled(bool checked); | 
					
						
							|  |  |  |   void on_monitorButton_toggled(bool checked); | 
					
						
							|  |  |  |   void on_monitorTxButton_toggled(bool checked); | 
					
						
							|  |  |  |   void on_tuneButton_toggled(bool checked); | 
					
						
							|  |  |  |   void on_spotButton_toggled(bool checked); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionMessage_averaging_triggered(); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void on_actionFox_Log_triggered(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_actionInclude_averaging_toggled (bool); | 
					
						
							|  |  |  |   void on_actionInclude_correlation_toggled (bool); | 
					
						
							|  |  |  |   void on_actionEnable_AP_DXcall_toggled (bool); | 
					
						
							|  |  |  |   void VHF_features_enabled(bool b); | 
					
						
							|  |  |  |   void on_sbSubmode_valueChanged(int n); | 
					
						
							|  |  |  |   void on_cbShMsgs_toggled(bool b); | 
					
						
							|  |  |  |   void on_cbSWL_toggled(bool b); | 
					
						
							|  |  |  |   void on_cbTx6_toggled(bool b); | 
					
						
							|  |  |  |   void on_cbMenus_toggled(bool b); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void on_cbCQonly_toggled(bool b); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_cbFirst_toggled(bool b); | 
					
						
							|  |  |  |   void on_cbAutoSeq_toggled(bool b); | 
					
						
							| 
									
										
										
										
											2019-01-01 10:29:35 -05:00
										 |  |  |   void emitPTT(bool on); | 
					
						
							| 
									
										
										
										
											2019-02-23 09:50:02 -05:00
										 |  |  |   void emitTones(); | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  |   void networkMessage(Message const &message); | 
					
						
							| 
									
										
										
										
											2018-08-07 23:11:11 -04:00
										 |  |  |   void sendNetworkMessage(QString const &type, QString const &message); | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  |   void sendNetworkMessage(QString const &type, QString const &message, const QMap<QString, QVariant> ¶ms); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void networkError (QString const&); | 
					
						
							|  |  |  |   void on_ClrAvgButton_clicked(); | 
					
						
							|  |  |  |   void on_syncSpinBox_valueChanged(int n); | 
					
						
							|  |  |  |   void on_TxPowerComboBox_currentIndexChanged(const QString &arg1); | 
					
						
							|  |  |  |   void on_sbTxPercent_valueChanged(int n); | 
					
						
							|  |  |  |   void on_cbUploadWSPR_Spots_toggled(bool b); | 
					
						
							|  |  |  |   void WSPR_config(bool b); | 
					
						
							|  |  |  |   void uploadSpots(); | 
					
						
							|  |  |  |   void TxAgain(); | 
					
						
							|  |  |  |   void uploadResponse(QString response); | 
					
						
							|  |  |  |   void on_WSPRfreqSpinBox_valueChanged(int n); | 
					
						
							|  |  |  |   void on_pbTxNext_clicked(bool b); | 
					
						
							|  |  |  |   void on_actionEcho_Graph_triggered(); | 
					
						
							|  |  |  |   void on_actionFast_Graph_triggered(); | 
					
						
							|  |  |  |   void fast_decode_done(); | 
					
						
							|  |  |  |   void on_actionMeasure_reference_spectrum_triggered(); | 
					
						
							|  |  |  |   void on_actionErase_reference_spectrum_triggered(); | 
					
						
							|  |  |  |   void on_actionMeasure_phase_response_triggered(); | 
					
						
							|  |  |  |   void on_sbTR_valueChanged (int); | 
					
						
							|  |  |  |   void on_sbFtol_valueChanged (int); | 
					
						
							|  |  |  |   void on_cbFast9_clicked(bool b); | 
					
						
							|  |  |  |   void on_sbCQTxFreq_valueChanged(int n); | 
					
						
							|  |  |  |   void on_cbCQTx_toggled(bool b); | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   void splash_done ();  | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void on_measure_check_box_stateChanged (int); | 
					
						
							| 
									
										
										
										
											2018-10-07 11:01:01 -04:00
										 |  |  |   void checkExpiryWarningMessage (); | 
					
						
							|  |  |  |   void checkStartupWarnings (); | 
					
						
							| 
									
										
										
										
											2018-10-02 14:10:16 -04:00
										 |  |  |   void clearCallsignSelected(); | 
					
						
							| 
									
										
										
										
											2018-10-05 18:40:56 -04:00
										 |  |  |   void refreshTextDisplay(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo, | 
					
						
							|  |  |  |       unsigned channels, unsigned msBuffered) const; | 
					
						
							|  |  |  |   Q_SIGNAL void stopAudioOutputStream () const; | 
					
						
							|  |  |  |   Q_SIGNAL void startAudioInputStream (QAudioDeviceInfo const&, | 
					
						
							|  |  |  |       int framesPerBuffer, AudioDevice * sink, | 
					
						
							|  |  |  |       unsigned downSampleFactor, AudioDevice::Channel) const; | 
					
						
							|  |  |  |   Q_SIGNAL void suspendAudioInputStream () const; | 
					
						
							|  |  |  |   Q_SIGNAL void resumeAudioInputStream () const; | 
					
						
							|  |  |  |   Q_SIGNAL void startDetector (AudioDevice::Channel) const; | 
					
						
							|  |  |  |   Q_SIGNAL void FFTSize (unsigned) const; | 
					
						
							|  |  |  |   Q_SIGNAL void detectorClose () const; | 
					
						
							|  |  |  |   Q_SIGNAL void finished () const; | 
					
						
							|  |  |  |   Q_SIGNAL void transmitFrequency (double) const; | 
					
						
							|  |  |  |   Q_SIGNAL void endTransmitMessage (bool quick = false) const; | 
					
						
							|  |  |  |   Q_SIGNAL void tune (bool = true) const; | 
					
						
							|  |  |  |   Q_SIGNAL void sendMessage (unsigned symbolsLength, double framesPerSymbol, | 
					
						
							|  |  |  |       double frequency, double toneSpacing, | 
					
						
							|  |  |  |       SoundOutput *, AudioDevice::Channel = AudioDevice::Mono, | 
					
						
							|  |  |  |       bool synchronize = true, bool fastMode = false, double dBSNR = 99., | 
					
						
							|  |  |  |                              int TRperiod=60) const; | 
					
						
							|  |  |  |   Q_SIGNAL void outAttenuationChanged (qreal) const; | 
					
						
							|  |  |  |   Q_SIGNAL void toggleShorthand () const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   void astroUpdate (); | 
					
						
							| 
									
										
										
										
											2018-10-29 03:26:10 -04:00
										 |  |  |   void writeAllTxt(QString message, int bits); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void hideMenus(bool b); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   NetworkAccessManager m_network_manager; | 
					
						
							|  |  |  |   bool m_valid; | 
					
						
							|  |  |  |   QSplashScreen * m_splash; | 
					
						
							|  |  |  |   QString m_revision; | 
					
						
							|  |  |  |   bool m_multiple; | 
					
						
							|  |  |  |   MultiSettings * m_multi_settings; | 
					
						
							|  |  |  |   QPushButton * m_configurations_button; | 
					
						
							|  |  |  |   QSettings * m_settings; | 
					
						
							|  |  |  |   QScopedPointer<Ui::MainWindow> ui; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // other windows
 | 
					
						
							|  |  |  |   Configuration m_config; | 
					
						
							|  |  |  |   WSPRBandHopping m_WSPR_band_hopping; | 
					
						
							|  |  |  |   bool m_WSPR_tx_next; | 
					
						
							|  |  |  |   MessageBox m_rigErrorMessageBox; | 
					
						
							|  |  |  |   QScopedPointer<EqualizationToolsDialog> m_equalizationToolsDialog; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QScopedPointer<WideGraph> m_wideGraph; | 
					
						
							|  |  |  |   QScopedPointer<EchoGraph> m_echoGraph; | 
					
						
							|  |  |  |   QScopedPointer<FastGraph> m_fastGraph; | 
					
						
							|  |  |  |   QScopedPointer<LogQSO> m_logDlg; | 
					
						
							|  |  |  |   QScopedPointer<Astro> m_astroWidget; | 
					
						
							|  |  |  |   QScopedPointer<HelpTextWindow> m_shortcuts; | 
					
						
							|  |  |  |   QScopedPointer<HelpTextWindow> m_prefixes; | 
					
						
							|  |  |  |   QScopedPointer<HelpTextWindow> m_mouseCmnds; | 
					
						
							|  |  |  |   QScopedPointer<MessageAveraging> m_msgAvgWidget; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Transceiver::TransceiverState m_rigState; | 
					
						
							|  |  |  |   Frequency  m_lastDialFreq; | 
					
						
							|  |  |  |   QString m_lastBand; | 
					
						
							|  |  |  |   QString m_lastCallsign; | 
					
						
							|  |  |  |   Frequency  m_dialFreqRxWSPR;  // best guess at WSPR QRG
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Detector * m_detector; | 
					
						
							|  |  |  |   unsigned m_FFTSize; | 
					
						
							|  |  |  |   SoundInput * m_soundInput; | 
					
						
							|  |  |  |   Modulator * m_modulator; | 
					
						
							|  |  |  |   SoundOutput * m_soundOutput; | 
					
						
							|  |  |  |   QThread m_audioThread; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   qint64  m_msErase; | 
					
						
							|  |  |  |   qint64  m_secBandChanged; | 
					
						
							|  |  |  |   qint64  m_freqMoon; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   qint64  m_msec0; | 
					
						
							|  |  |  |   qint64  m_fullFoxCallTime; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   Frequency m_freqNominal; | 
					
						
							|  |  |  |   Frequency m_freqTxNominal; | 
					
						
							|  |  |  |   Astro::Correction m_astroCorrection; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   double  m_s6; | 
					
						
							|  |  |  |   double  m_tRemaining; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   float   m_DTtol; | 
					
						
							|  |  |  |   float   m_t0; | 
					
						
							|  |  |  |   float   m_t1; | 
					
						
							|  |  |  |   float   m_t0Pick; | 
					
						
							|  |  |  |   float   m_t1Pick; | 
					
						
							|  |  |  |   float   m_fCPUmskrtd; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   qint32  m_waterfallAvg; | 
					
						
							|  |  |  |   qint32  m_ntx; | 
					
						
							|  |  |  |   bool m_gen_message_is_cq; | 
					
						
							|  |  |  |   bool m_send_RR73; | 
					
						
							|  |  |  |   qint32  m_timeout; | 
					
						
							|  |  |  |   qint32  m_XIT; | 
					
						
							|  |  |  |   qint32  m_setftx; | 
					
						
							|  |  |  |   qint32  m_ndepth; | 
					
						
							|  |  |  |   qint32  m_sec0; | 
					
						
							|  |  |  |   qint32  m_RxLog; | 
					
						
							|  |  |  |   qint32  m_nutc0; | 
					
						
							|  |  |  |   qint32  m_ntr; | 
					
						
							|  |  |  |   qint32  m_tx; | 
					
						
							|  |  |  |   qint32  m_hsym; | 
					
						
							|  |  |  |   qint32  m_TRperiod; | 
					
						
							|  |  |  |   qint32  m_nsps; | 
					
						
							|  |  |  |   qint32  m_hsymStop; | 
					
						
							|  |  |  |   qint32  m_inGain; | 
					
						
							|  |  |  |   qint32  m_ncw; | 
					
						
							|  |  |  |   qint32  m_secID; | 
					
						
							|  |  |  |   qint32  m_idleMinutes; | 
					
						
							|  |  |  |   qint32  m_nSubMode; | 
					
						
							|  |  |  |   qint32  m_nclearave; | 
					
						
							|  |  |  |   qint32  m_minSync; | 
					
						
							|  |  |  |   qint32  m_dBm; | 
					
						
							|  |  |  |   qint32  m_pctx; | 
					
						
							|  |  |  |   qint32  m_nseq; | 
					
						
							|  |  |  |   qint32  m_nWSPRdecodes; | 
					
						
							|  |  |  |   qint32  m_k0; | 
					
						
							|  |  |  |   qint32  m_kdone; | 
					
						
							|  |  |  |   qint32  m_nPick; | 
					
						
							|  |  |  |   FrequencyList_v2::const_iterator m_frequency_list_fcal_iter; | 
					
						
							|  |  |  |   qint32  m_nTx73; | 
					
						
							|  |  |  |   qint32  m_UTCdisk; | 
					
						
							|  |  |  |   qint32  m_wait; | 
					
						
							|  |  |  |   qint32  m_i3bit; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   qint32  m_isort; | 
					
						
							|  |  |  |   qint32  m_max_dB; | 
					
						
							|  |  |  |   qint32  m_nDXped=0; | 
					
						
							|  |  |  |   qint32  m_nSortedHounds=0; | 
					
						
							|  |  |  |   qint32  m_nHoundsCalling=0; | 
					
						
							|  |  |  |   qint32  m_Nlist=12; | 
					
						
							|  |  |  |   qint32  m_Nslots=5; | 
					
						
							|  |  |  |   qint32  m_nFoxMsgTimes[5]={0,0,0,0,0}; | 
					
						
							|  |  |  |   qint32  m_tAutoOn; | 
					
						
							| 
									
										
										
										
											2018-08-05 11:33:30 -04:00
										 |  |  | //  qint32  m_maxQSOs;
 | 
					
						
							|  |  |  |   qint32  m_tFoxTx=0; | 
					
						
							|  |  |  |   qint32  m_tFoxTx0=0; | 
					
						
							|  |  |  |   qint32  m_maxStrikes=3;      //Max # of repeats: 3 strikes and you're out
 | 
					
						
							|  |  |  |   qint32  m_maxFoxWait=3;      //Max wait time for expected Hound replies
 | 
					
						
							|  |  |  |   qint32  m_foxCQtime=10;      //CQs at least every 5 minutes
 | 
					
						
							|  |  |  |   qint32  m_tFoxTxSinceCQ=999; //Fox Tx cycles since most recent CQ
 | 
					
						
							|  |  |  |   qint32  m_nFoxFreq;          //Audio freq at which Hound received a call from Fox
 | 
					
						
							|  |  |  |   qint32  m_nSentFoxRrpt=0;    //Serial number for next R+rpt Hound will send to Fox
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   bool    m_btxok;		//True if OK to transmit
 | 
					
						
							|  |  |  |   bool    m_diskData; | 
					
						
							|  |  |  |   bool    m_loopall; | 
					
						
							|  |  |  |   bool    m_decoderBusy; | 
					
						
							|  |  |  |   bool    m_auto; | 
					
						
							|  |  |  |   bool    m_restart; | 
					
						
							|  |  |  |   bool    m_startAnother; | 
					
						
							|  |  |  |   bool    m_saveDecoded; | 
					
						
							|  |  |  |   bool    m_saveAll; | 
					
						
							|  |  |  |   bool    m_widebandDecode; | 
					
						
							|  |  |  |   bool    m_call3Modified; | 
					
						
							|  |  |  |   bool    m_dataAvailable; | 
					
						
							|  |  |  |   bool    m_bDecoded; | 
					
						
							|  |  |  |   bool    m_noSuffix; | 
					
						
							|  |  |  |   bool    m_blankLine; | 
					
						
							|  |  |  |   bool    m_decodedText2; | 
					
						
							|  |  |  |   bool    m_freeText; | 
					
						
							|  |  |  |   bool    m_sentFirst73; | 
					
						
							|  |  |  |   int     m_currentMessageType; | 
					
						
							|  |  |  |   QString m_currentMessage; | 
					
						
							| 
									
										
										
										
											2018-10-29 03:26:10 -04:00
										 |  |  |   int     m_currentMessageBits; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   int     m_lastMessageType; | 
					
						
							|  |  |  |   QString m_lastMessageSent; | 
					
						
							|  |  |  |   bool    m_bShMsgs; | 
					
						
							|  |  |  |   bool    m_bSWL; | 
					
						
							|  |  |  |   bool    m_uploadSpots; | 
					
						
							|  |  |  |   bool    m_uploading; | 
					
						
							|  |  |  |   bool    m_txNext; | 
					
						
							|  |  |  |   bool    m_grid6; | 
					
						
							|  |  |  |   bool    m_tuneup; | 
					
						
							|  |  |  |   bool    m_bTxTime; | 
					
						
							|  |  |  |   bool    m_rxDone; | 
					
						
							|  |  |  |   bool    m_bSimplex; // not using split even if it is available
 | 
					
						
							|  |  |  |   bool    m_bEchoTxOK; | 
					
						
							|  |  |  |   bool    m_bTransmittedEcho; | 
					
						
							|  |  |  |   bool    m_bEchoTxed; | 
					
						
							|  |  |  |   bool    m_bFastMode; | 
					
						
							|  |  |  |   bool    m_bFast9; | 
					
						
							|  |  |  |   bool    m_bFastDecodeCalled; | 
					
						
							|  |  |  |   bool    m_bDoubleClickAfterCQnnn; | 
					
						
							|  |  |  |   bool    m_bRefSpec; | 
					
						
							|  |  |  |   bool    m_bClearRefSpec; | 
					
						
							|  |  |  |   bool    m_bTrain; | 
					
						
							|  |  |  |   bool    m_bUseRef; | 
					
						
							|  |  |  |   bool    m_bFastDone; | 
					
						
							|  |  |  |   bool    m_bAltV; | 
					
						
							|  |  |  |   bool    m_bNoMoreFiles; | 
					
						
							|  |  |  |   bool    m_bQRAsyncWarned; | 
					
						
							|  |  |  |   bool    m_bDoubleClicked; | 
					
						
							|  |  |  |   bool    m_bCallingCQ; | 
					
						
							|  |  |  |   bool    m_bAutoReply; | 
					
						
							|  |  |  |   bool    m_bCheckedContest; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   bool    m_bWarnedSplit=false; | 
					
						
							|  |  |  |   bool    m_bWarnedHound=false; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   enum | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       CALLING, | 
					
						
							|  |  |  |       REPLYING, | 
					
						
							|  |  |  |       REPORT, | 
					
						
							|  |  |  |       ROGER_REPORT, | 
					
						
							|  |  |  |       ROGERS, | 
					
						
							|  |  |  |       SIGNOFF | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     m_QSOProgress; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-08 17:01:33 -05:00
										 |  |  |   int           m_extFreeTxtPos; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   int			m_ihsym; | 
					
						
							|  |  |  |   int			m_nzap; | 
					
						
							|  |  |  |   int			m_npts8; | 
					
						
							|  |  |  |   float		m_px; | 
					
						
							|  |  |  |   float   m_pxmax; | 
					
						
							|  |  |  |   float		m_df3; | 
					
						
							|  |  |  |   int			m_iptt0; | 
					
						
							|  |  |  |   bool		m_btxok0; | 
					
						
							|  |  |  |   int			m_nsendingsh; | 
					
						
							|  |  |  |   double	m_onAirFreq0; | 
					
						
							|  |  |  |   bool		m_first_error; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   char    m_msg[100][80]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // labels in status bar
 | 
					
						
							|  |  |  |   QLabel tx_status_label; | 
					
						
							|  |  |  |   QLabel config_label; | 
					
						
							|  |  |  |   QLabel mode_label; | 
					
						
							|  |  |  |   QLabel last_tx_label; | 
					
						
							|  |  |  |   QLabel auto_tx_label; | 
					
						
							|  |  |  |   QLabel band_hopping_label; | 
					
						
							|  |  |  |   QProgressBar progressBar; | 
					
						
							|  |  |  |   QLabel watchdog_label; | 
					
						
							| 
									
										
										
										
											2018-10-01 09:57:37 -04:00
										 |  |  |   QLabel wpm_label; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   QFuture<void> m_wav_future; | 
					
						
							|  |  |  |   QFutureWatcher<void> m_wav_future_watcher; | 
					
						
							|  |  |  |   QFutureWatcher<void> watcher3; | 
					
						
							|  |  |  |   QFutureWatcher<QString> m_saveWAVWatcher; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 11:52:02 -04:00
										 |  |  |   QProcess proc_js8; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QProcess p1; | 
					
						
							|  |  |  |   QProcess p3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   WSPRNet *wsprNet; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QTimer m_guiTimer; | 
					
						
							|  |  |  |   QTimer ptt1Timer;                 //StartTx delay
 | 
					
						
							|  |  |  |   QTimer ptt0Timer;                 //StopTx delay
 | 
					
						
							|  |  |  |   QTimer logQSOTimer; | 
					
						
							|  |  |  |   QTimer killFileTimer; | 
					
						
							|  |  |  |   QTimer tuneButtonTimer; | 
					
						
							|  |  |  |   QTimer uploadTimer; | 
					
						
							|  |  |  |   QTimer tuneATU_Timer; | 
					
						
							|  |  |  |   QTimer TxAgainTimer; | 
					
						
							|  |  |  |   QTimer minuteTimer; | 
					
						
							|  |  |  |   QTimer splashTimer; | 
					
						
							|  |  |  |   QTimer p1Timer; | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   QTimer repeatTimer; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   QString m_path; | 
					
						
							|  |  |  |   QString m_baseCall; | 
					
						
							|  |  |  |   QString m_hisCall; | 
					
						
							|  |  |  |   QString m_hisGrid; | 
					
						
							|  |  |  |   QString m_appDir; | 
					
						
							|  |  |  |   QString m_palette; | 
					
						
							|  |  |  |   QString m_dateTime; | 
					
						
							|  |  |  |   QString m_mode; | 
					
						
							|  |  |  |   QString m_modeTx; | 
					
						
							|  |  |  |   QString m_fnameWE;            // save path without extension
 | 
					
						
							|  |  |  |   QString m_rpt; | 
					
						
							|  |  |  |   QString m_rptSent; | 
					
						
							|  |  |  |   QString m_rptRcvd; | 
					
						
							|  |  |  |   QString m_qsoStart; | 
					
						
							|  |  |  |   QString m_qsoStop; | 
					
						
							|  |  |  |   QString m_cmnd; | 
					
						
							|  |  |  |   QString m_cmndP1; | 
					
						
							|  |  |  |   QString m_msgSent0; | 
					
						
							|  |  |  |   QString m_fileToSave; | 
					
						
							|  |  |  |   QString m_calls; | 
					
						
							|  |  |  |   QString m_CQtype; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   QString m_opCall; | 
					
						
							|  |  |  |   QString m_houndCallers;        //Sorted list of Hound callers
 | 
					
						
							|  |  |  |   QString m_fm0; | 
					
						
							|  |  |  |   QString m_fm1; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   QSet<QString> m_pfx; | 
					
						
							|  |  |  |   QSet<QString> m_sfx; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   struct CallDetail | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     QString call; | 
					
						
							| 
									
										
										
										
											2018-07-24 15:19:02 -04:00
										 |  |  |     QString through; | 
					
						
							| 
									
										
										
										
											2018-07-03 11:38:16 -04:00
										 |  |  |     QString grid; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |     int freq; | 
					
						
							| 
									
										
										
										
											2018-09-29 17:04:05 -04:00
										 |  |  |     QDateTime ackTimestamp; | 
					
						
							| 
									
										
										
										
											2018-07-06 15:27:26 -04:00
										 |  |  |     QDateTime utcTimestamp; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |     int snr; | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |     int bits; | 
					
						
							| 
									
										
										
										
											2018-10-28 17:54:10 -04:00
										 |  |  |     float tdrift; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 04:44:41 -04:00
										 |  |  |   struct CommandDetail | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2018-08-01 22:36:50 -04:00
										 |  |  |     bool isCompound; | 
					
						
							|  |  |  |     bool isBuffered; | 
					
						
							| 
									
										
										
										
											2018-07-13 10:32:58 -04:00
										 |  |  |     QString from; | 
					
						
							|  |  |  |     QString to; | 
					
						
							| 
									
										
										
										
											2018-07-19 02:09:19 -04:00
										 |  |  |     QString cmd; | 
					
						
							| 
									
										
										
										
											2018-07-13 04:44:41 -04:00
										 |  |  |     int freq; | 
					
						
							|  |  |  |     QDateTime utcTimestamp; | 
					
						
							|  |  |  |     int snr; | 
					
						
							| 
									
										
										
										
											2018-07-30 17:16:45 -04:00
										 |  |  |     int bits; | 
					
						
							| 
									
										
										
										
											2018-07-31 23:26:01 -04:00
										 |  |  |     QString grid; | 
					
						
							| 
									
										
										
										
											2018-07-25 22:49:19 -04:00
										 |  |  |     QString text; | 
					
						
							| 
									
										
										
										
											2018-08-06 23:39:43 -04:00
										 |  |  |     QString extra; | 
					
						
							| 
									
										
										
										
											2018-10-28 17:54:10 -04:00
										 |  |  |     float tdrift; | 
					
						
							| 
									
										
										
										
											2018-12-18 21:28:31 -05:00
										 |  |  |     QString relayPath; | 
					
						
							| 
									
										
										
										
											2018-07-13 04:44:41 -04:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   struct ActivityDetail | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2018-07-06 18:25:27 -04:00
										 |  |  |     bool isFree; | 
					
						
							| 
									
										
										
										
											2018-07-09 21:49:38 -04:00
										 |  |  |     bool isLowConfidence; | 
					
						
							| 
									
										
										
										
											2018-07-24 15:19:02 -04:00
										 |  |  |     bool isCompound; | 
					
						
							| 
									
										
										
										
											2018-08-01 22:36:50 -04:00
										 |  |  |     bool isDirected; | 
					
						
							| 
									
										
										
										
											2018-08-07 09:19:18 -04:00
										 |  |  |     bool isBuffered; | 
					
						
							| 
									
										
										
										
											2018-07-18 16:45:27 -04:00
										 |  |  |     int bits; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |     int freq; | 
					
						
							|  |  |  |     QString text; | 
					
						
							| 
									
										
										
										
											2018-07-06 15:27:26 -04:00
										 |  |  |     QDateTime utcTimestamp; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |     int snr; | 
					
						
							| 
									
										
										
										
											2018-10-10 09:04:56 -04:00
										 |  |  |     bool shouldDisplay; | 
					
						
							| 
									
										
										
										
											2018-10-28 17:54:10 -04:00
										 |  |  |     float tdrift; | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 22:49:19 -04:00
										 |  |  |   struct MessageBuffer { | 
					
						
							|  |  |  |     CommandDetail cmd; | 
					
						
							| 
									
										
										
										
											2018-09-11 17:41:21 -04:00
										 |  |  |     QQueue<CallDetail> compound; | 
					
						
							| 
									
										
										
										
											2018-07-25 22:49:19 -04:00
										 |  |  |     QList<ActivityDetail> msgs; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-13 09:48:43 -05:00
										 |  |  |   int m_bandActivityWidth; | 
					
						
							|  |  |  |   int m_callActivityWidth; | 
					
						
							|  |  |  |   int m_textActivityWidth; | 
					
						
							|  |  |  |   int m_waterfallHeight; | 
					
						
							| 
									
										
										
										
											2018-10-06 01:56:55 -04:00
										 |  |  |   bool m_bandActivityWasVisible; | 
					
						
							| 
									
										
										
										
											2018-07-10 22:32:35 -04:00
										 |  |  |   bool m_rxDirty; | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  |   bool m_rxDisplayDirty; | 
					
						
							| 
									
										
										
										
											2018-10-05 09:01:25 -04:00
										 |  |  |   int m_txFrameCountEstimate; | 
					
						
							| 
									
										
										
										
											2018-07-02 22:54:26 -04:00
										 |  |  |   int m_txFrameCount; | 
					
						
							| 
									
										
										
										
											2018-10-02 09:44:46 -04:00
										 |  |  |   QTimer m_txTextDirtyDebounce; | 
					
						
							| 
									
										
										
										
											2018-10-01 13:04:50 -04:00
										 |  |  |   bool m_txTextDirty; | 
					
						
							| 
									
										
										
										
											2018-10-03 08:59:14 -04:00
										 |  |  |   QString m_txTextDirtyLastText; | 
					
						
							|  |  |  |   QString m_txTextDirtyLastSelectedCall; | 
					
						
							| 
									
										
										
										
											2018-07-24 21:04:04 -04:00
										 |  |  |   QString m_lastTxMessage; | 
					
						
							| 
									
										
										
										
											2018-07-18 09:04:58 -04:00
										 |  |  |   QDateTime m_lastTxTime; | 
					
						
							| 
									
										
										
										
											2018-10-29 02:02:58 -04:00
										 |  |  |   int m_timeDeltaMsMMA; | 
					
						
							|  |  |  |   int m_timeDeltaMsMMA_N; | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   enum Priority { | 
					
						
							| 
									
										
										
										
											2018-07-31 18:18:27 -04:00
										 |  |  |     PriorityLow    =   10, | 
					
						
							|  |  |  |     PriorityNormal =  100, | 
					
						
							|  |  |  |     PriorityHigh   = 1000 | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   struct PrioritizedMessage { | 
					
						
							|  |  |  |       QDateTime date; | 
					
						
							|  |  |  |       int priority; | 
					
						
							|  |  |  |       QString message; | 
					
						
							|  |  |  |       int freq; | 
					
						
							|  |  |  |       Callback callback; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       friend bool operator <(PrioritizedMessage const &a, PrioritizedMessage const &b){ | 
					
						
							|  |  |  |           if(a.priority < b.priority){ | 
					
						
							|  |  |  |               return true; | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           return a.date < b.date; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-16 11:31:10 -04:00
										 |  |  |   struct CachedDirectedType { | 
					
						
							|  |  |  |       bool isAllcall; | 
					
						
							|  |  |  |       QDateTime date; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-24 16:46:33 -04:00
										 |  |  |   QMap<QString, QVariant> m_showColumnsCache; // table column:key -> show boolean
 | 
					
						
							| 
									
										
										
										
											2018-08-23 11:59:20 -04:00
										 |  |  |   QMap<QString, QVariant> m_sortCache; // table key -> sort by
 | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  |   QPriorityQueue<PrioritizedMessage> m_txMessageQueue; // messages to be sent
 | 
					
						
							| 
									
										
										
										
											2018-10-29 03:26:10 -04:00
										 |  |  |   QQueue<QPair<QString, int>> m_txFrameQueue; // frames to be sent
 | 
					
						
							| 
									
										
										
										
											2018-07-31 23:26:01 -04:00
										 |  |  |   QQueue<ActivityDetail> m_rxActivityQueue; // all rx activity queue
 | 
					
						
							|  |  |  |   QQueue<CommandDetail> m_rxCommandQueue; // command queue for processing commands
 | 
					
						
							|  |  |  |   QQueue<CallDetail> m_rxCallQueue; // call detail queue for spots to pskreporter
 | 
					
						
							| 
									
										
										
										
											2018-07-24 02:53:01 -04:00
										 |  |  |   QMap<QString, QString> m_compoundCallCache; // base callsign -> compound callsign
 | 
					
						
							| 
									
										
										
										
											2018-07-14 09:26:39 -04:00
										 |  |  |   QCache<QString, QDateTime> m_txAllcallCommandCache; // callsign -> last tx
 | 
					
						
							|  |  |  |   QCache<int, QDateTime> m_rxRecentCache; // freq -> last rx
 | 
					
						
							| 
									
										
										
										
											2018-08-16 11:31:10 -04:00
										 |  |  |   QCache<int, CachedDirectedType> m_rxDirectedCache; // freq -> last directed rx
 | 
					
						
							| 
									
										
										
										
											2018-07-05 15:21:47 -04:00
										 |  |  |   QCache<QString, int> m_rxCallCache; // call -> last freq seen
 | 
					
						
							| 
									
										
										
										
											2018-07-05 04:45:55 -04:00
										 |  |  |   QMap<int, int> m_rxFrameBlockNumbers; // freq -> block
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   QMap<int, QList<ActivityDetail>> m_bandActivity; // freq -> [(text, last timestamp), ...]
 | 
					
						
							| 
									
										
										
										
											2018-07-25 22:49:19 -04:00
										 |  |  |   QMap<int, MessageBuffer> m_messageBuffer; // freq -> (cmd, [frames, ...])
 | 
					
						
							| 
									
										
										
										
											2018-07-02 15:08:26 -04:00
										 |  |  |   QMap<QString, CallDetail> m_callActivity; // call -> (last freq, last timestamp)
 | 
					
						
							| 
									
										
										
										
											2018-10-03 09:55:43 -04:00
										 |  |  |   QMap<QString, QDateTime> m_aprsCallCache; | 
					
						
							| 
									
										
										
										
											2018-08-28 15:45:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-03 12:39:48 -05:00
										 |  |  |   QMap<QString, QSet<QString>> m_heardGraphOutgoing; // callsign -> [stations who've this callsign has heard]
 | 
					
						
							|  |  |  |   QMap<QString, QSet<QString>> m_heardGraphIncoming; // callsign -> [stations who've heard this callsign]
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 12:27:16 -05:00
										 |  |  |   QMap<QString, int> m_rxInboxCountCache; // call -> count
 | 
					
						
							| 
									
										
										
										
											2018-12-18 21:28:31 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-28 15:45:23 -04:00
										 |  |  |   QMap<QString, QMap<QString, CallDetail>> m_callActivityCache; // band -> call activity
 | 
					
						
							|  |  |  |   QMap<QString, QMap<int, QList<ActivityDetail>>> m_bandActivityCache; // band -> band activity
 | 
					
						
							|  |  |  |   QMap<QString, QString> m_rxTextCache; // band -> rx text
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-30 20:18:35 -05:00
										 |  |  |   JSCChecker * m_checker; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-28 09:47:30 -04:00
										 |  |  |   QSet<QString> m_callSeenHeartbeat; // call
 | 
					
						
							| 
									
										
										
										
											2018-07-21 17:50:33 -04:00
										 |  |  |   int m_previousFreq; | 
					
						
							|  |  |  |   bool m_shouldRestoreFreq; | 
					
						
							| 
									
										
										
										
											2018-08-09 15:28:23 -04:00
										 |  |  |   bool m_bandHopped; | 
					
						
							|  |  |  |   Frequency m_bandHoppedFreq; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-05 11:33:30 -04:00
										 |  |  |   struct FoxQSO       //Everything we need to know about QSOs in progress (or recently logged).
 | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     QString grid;       //Hound's declared locator
 | 
					
						
							|  |  |  |     QString sent;       //Report sent to Hound
 | 
					
						
							|  |  |  |     QString rcvd;       //Report received from Hound
 | 
					
						
							|  |  |  |     qint32  ncall;      //Number of times report sent to Hound
 | 
					
						
							|  |  |  |     qint32  nRR73;      //Number of times RR73 sent to Hound
 | 
					
						
							|  |  |  |     qint32  tFoxRrpt;   //m_tFoxTx (Fox Tx cycle counter) when R+rpt was received from Hound
 | 
					
						
							|  |  |  |     qint32  tFoxTxRR73; //m_tFoxTx when RR73 was sent to Hound
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QMap<QString,FoxQSO> m_foxQSO;       //Key = HoundCall, value = parameters for QSO in progress
 | 
					
						
							|  |  |  |   QMap<QString,QString> m_loggedByFox; //Key = HoundCall, value = logged band
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   QQueue<QString> m_houndQueue;        //Selected Hounds available for starting a QSO
 | 
					
						
							|  |  |  |   QQueue<QString> m_foxQSOinProgress;  //QSOs in progress: Fox has sent a report
 | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   QQueue<qint64>  m_foxRateQueue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-29 22:34:39 -05:00
										 |  |  |   bool m_hbHidden; | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   int m_hbInterval; | 
					
						
							|  |  |  |   int m_cqInterval; | 
					
						
							| 
									
										
										
										
											2019-02-09 16:26:24 -05:00
										 |  |  |   bool m_hbPaused; | 
					
						
							|  |  |  |   bool m_cqPaused; | 
					
						
							| 
									
										
										
										
											2018-10-28 09:47:30 -04:00
										 |  |  |   QDateTime m_nextHeartbeat; | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   QDateTime m_nextCQ; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   QDateTime m_dateTimeQSOOn; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   QDateTime m_dateTimeLastTX; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 11:52:02 -04:00
										 |  |  |   QSharedMemory *mem_js8; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   LogBook m_logBook; | 
					
						
							|  |  |  |   QString m_QSOText; | 
					
						
							|  |  |  |   unsigned m_msAudioOutputBuffered; | 
					
						
							|  |  |  |   unsigned m_framesAudioInputBuffered; | 
					
						
							|  |  |  |   unsigned m_downSampleFactor; | 
					
						
							|  |  |  |   QThread::Priority m_audioThreadPriority; | 
					
						
							|  |  |  |   bool m_bandEdited; | 
					
						
							|  |  |  |   bool m_splitMode; | 
					
						
							|  |  |  |   bool m_monitoring; | 
					
						
							|  |  |  |   bool m_tx_when_ready; | 
					
						
							|  |  |  |   bool m_transmitting; | 
					
						
							|  |  |  |   bool m_tune; | 
					
						
							| 
									
										
										
										
											2018-10-29 17:56:31 -04:00
										 |  |  |   bool m_deadAirTone; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   bool m_tx_watchdog;           // true when watchdog triggered
 | 
					
						
							|  |  |  |   bool m_block_pwr_tooltip; | 
					
						
							|  |  |  |   bool m_PwrBandSetOK; | 
					
						
							|  |  |  |   bool m_bVHFwarned; | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   bool m_bDisplayedOnce; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   Frequency m_lastMonitoredFrequency; | 
					
						
							|  |  |  |   double m_toneSpacing; | 
					
						
							|  |  |  |   int m_firstDecode; | 
					
						
							|  |  |  |   QProgressDialog m_optimizingProgress; | 
					
						
							|  |  |  |   MessageClient * m_messageClient; | 
					
						
							|  |  |  |   PSK_Reporter *psk_Reporter; | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  |   APRSISClient * m_aprsClient; | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   DisplayManual m_manual; | 
					
						
							|  |  |  |   QHash<QString, QVariant> m_pwrBandTxMemory; // Remembers power level by band
 | 
					
						
							|  |  |  |   QHash<QString, QVariant> m_pwrBandTuneMemory; // Remembers power level by band for tuning
 | 
					
						
							|  |  |  |   QByteArray m_geometryNoControls; | 
					
						
							|  |  |  |   QVector<double> m_phaseEqCoefficients; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   //---------------------------------------------------- private functions
 | 
					
						
							|  |  |  |   void readSettings(); | 
					
						
							|  |  |  |   void set_application_font (QFont const&); | 
					
						
							|  |  |  |   void setDecodedTextFont (QFont const&); | 
					
						
							|  |  |  |   void writeSettings(); | 
					
						
							|  |  |  |   void createStatusBar(); | 
					
						
							|  |  |  |   void updateStatusBar(); | 
					
						
							|  |  |  |   void clearDX (); | 
					
						
							|  |  |  |   void lookup(); | 
					
						
							|  |  |  |   void ba2msg(QByteArray ba, char* message); | 
					
						
							|  |  |  |   void msgtype(QString t, QLineEdit* tx); | 
					
						
							|  |  |  |   void stub(); | 
					
						
							|  |  |  |   void statusChanged(); | 
					
						
							|  |  |  |   void fixStop(); | 
					
						
							|  |  |  |   bool shortList(QString callsign); | 
					
						
							|  |  |  |   void transmit (double snr = 99.); | 
					
						
							|  |  |  |   void rigFailure (QString const& reason); | 
					
						
							|  |  |  |   void pskSetLocal (); | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  |   void aprsSetLocal (); | 
					
						
							| 
									
										
										
										
											2018-07-20 23:09:17 -04:00
										 |  |  |   void pskLogReport(QString mode, int offset, int snr, QString callsign, QString grid); | 
					
						
							| 
									
										
										
										
											2018-08-27 21:19:38 -04:00
										 |  |  |   void aprsLogReport(int offset, int snr, QString callsign, QString grid); | 
					
						
							| 
									
										
										
										
											2018-08-08 17:15:49 -04:00
										 |  |  |   Radio::Frequency dialFrequency(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void displayDialFrequency (); | 
					
						
							|  |  |  |   void transmitDisplay (bool); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   void locationChange(QString const& location); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void replayDecodes (); | 
					
						
							|  |  |  |   void postDecode (bool is_new, QString const& message); | 
					
						
							| 
									
										
										
										
											2018-07-09 20:55:54 -04:00
										 |  |  |   void displayTransmit(); | 
					
						
							| 
									
										
										
										
											2018-07-13 04:44:41 -04:00
										 |  |  |   void updateButtonDisplay(); | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   void updateRepeatButtonDisplay(); | 
					
						
							| 
									
										
										
										
											2018-10-10 17:43:11 -04:00
										 |  |  |   void updateTextDisplay(); | 
					
						
							| 
									
										
										
										
											2018-10-05 09:01:25 -04:00
										 |  |  |   void updateFrameCountEstimate(int count); | 
					
						
							| 
									
										
										
										
											2018-12-30 20:18:35 -05:00
										 |  |  |   void updateTextWordCheckerDisplay(); | 
					
						
							| 
									
										
										
										
											2018-10-05 09:01:25 -04:00
										 |  |  |   void updateTextStatsDisplay(QString text, int count); | 
					
						
							| 
									
										
										
										
											2018-10-06 01:43:47 -04:00
										 |  |  |   void updateTxButtonDisplay(); | 
					
						
							| 
									
										
										
										
											2018-07-11 10:40:29 -04:00
										 |  |  |   bool isMyCallIncluded(QString const &text); | 
					
						
							| 
									
										
										
										
											2018-07-15 13:03:16 -04:00
										 |  |  |   bool isAllCallIncluded(QString const &text); | 
					
						
							| 
									
										
										
										
											2018-10-06 03:59:54 -04:00
										 |  |  |   bool isGroupCallIncluded(const QString &text); | 
					
						
							| 
									
										
										
										
											2018-10-03 16:54:25 -04:00
										 |  |  |   QString callsignSelected(bool useInputText=false); | 
					
						
							| 
									
										
										
										
											2018-07-14 09:26:39 -04:00
										 |  |  |   bool isRecentOffset(int offset); | 
					
						
							| 
									
										
										
										
											2018-08-11 18:05:36 -04:00
										 |  |  |   void markOffsetRecent(int offset); | 
					
						
							| 
									
										
										
										
											2018-08-16 11:31:10 -04:00
										 |  |  |   bool isDirectedOffset(int offset, bool *pIsAllCall); | 
					
						
							|  |  |  |   void markOffsetDirected(int offset, bool isAllCall); | 
					
						
							| 
									
										
										
										
											2018-09-21 22:41:20 -04:00
										 |  |  |   void clearOffsetDirected(int offset); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void processActivity(bool force=false); | 
					
						
							| 
									
										
										
										
											2018-10-29 02:02:58 -04:00
										 |  |  |   void observeTimeDeltaForAverage(float delta); | 
					
						
							|  |  |  |   void resetTimeDeltaAverage(); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void processRxActivity(); | 
					
						
							| 
									
										
										
										
											2018-12-22 22:47:48 -05:00
										 |  |  |   void processIdleActivity(); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void processCompoundActivity(); | 
					
						
							|  |  |  |   void processBufferedActivity(); | 
					
						
							| 
									
										
										
										
											2018-12-26 20:33:30 -05:00
										 |  |  |   QString generateStatus(); | 
					
						
							| 
									
										
										
										
											2019-01-14 10:15:45 -05:00
										 |  |  |   QStringList generateStatusFlags(); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void processCommandActivity(); | 
					
						
							| 
									
										
										
										
											2019-01-02 12:27:16 -05:00
										 |  |  |   QString inboxPath(); | 
					
						
							|  |  |  |   void refreshInboxCounts(); | 
					
						
							| 
									
										
										
										
											2019-02-07 12:19:07 -05:00
										 |  |  |   bool hasMessageHistory(QString call); | 
					
						
							| 
									
										
										
										
											2019-02-01 01:46:01 -05:00
										 |  |  |   int addCommandToMyInbox(CommandDetail d); | 
					
						
							| 
									
										
										
										
											2019-02-08 19:41:07 -05:00
										 |  |  |   int addCommandToStorage(QString type, CommandDetail d); | 
					
						
							| 
									
										
										
										
											2019-02-01 01:46:01 -05:00
										 |  |  |   int getNextMessageIdForCallsign(QString callsign); | 
					
						
							|  |  |  |   QStringList parseRelayPathCallsigns(QString from, QString text); | 
					
						
							| 
									
										
										
										
											2018-09-08 23:36:12 -04:00
										 |  |  |   void processAlertReplyForCommand(CommandDetail d, QString from, QString cmd); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void processSpots(); | 
					
						
							| 
									
										
										
										
											2018-07-31 17:48:33 -04:00
										 |  |  |   void processTxQueue(); | 
					
						
							| 
									
										
										
										
											2018-07-13 15:45:00 -04:00
										 |  |  |   void displayActivity(bool force=false); | 
					
						
							| 
									
										
										
										
											2018-07-31 14:34:36 -04:00
										 |  |  |   void displayBandActivity(); | 
					
						
							|  |  |  |   void displayCallActivity(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void postWSPRDecode (bool is_new, QStringList message_parts); | 
					
						
							|  |  |  |   void enable_DXCC_entity (bool on); | 
					
						
							|  |  |  |   void switch_mode (Mode); | 
					
						
							|  |  |  |   void WSPR_scheduling (); | 
					
						
							|  |  |  |   void freqCalStep(); | 
					
						
							|  |  |  |   void setRig (Frequency = 0);  // zero frequency means no change
 | 
					
						
							|  |  |  |   void WSPR_history(Frequency dialFreq, int ndecodes); | 
					
						
							|  |  |  |   QString WSPR_hhmm(int n); | 
					
						
							|  |  |  |   void fast_config(bool b); | 
					
						
							|  |  |  |   void CQTxFreq(); | 
					
						
							|  |  |  |   QString save_wave_file (QString const& name | 
					
						
							|  |  |  |                           , short const * data | 
					
						
							|  |  |  |                           , int seconds | 
					
						
							|  |  |  |                           , QString const& my_callsign | 
					
						
							|  |  |  |                           , QString const& my_grid | 
					
						
							|  |  |  |                           , QString const& mode | 
					
						
							|  |  |  |                           , qint32 sub_mode | 
					
						
							|  |  |  |                           , Frequency frequency | 
					
						
							|  |  |  |                           , QString const& his_call | 
					
						
							|  |  |  |                           , QString const& his_grid) const; | 
					
						
							|  |  |  |   void read_wav_file (QString const& fname); | 
					
						
							| 
									
										
										
										
											2018-11-28 22:53:18 -05:00
										 |  |  |   QDateTime nextTransmitCycle(); | 
					
						
							|  |  |  |   void resetAutomaticIntervalTransmissions(bool stopCQ, bool stopHB); | 
					
						
							|  |  |  |   void resetCQTimer(bool stop); | 
					
						
							|  |  |  |   void resetHeartbeatTimer(bool stop); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void decodeDone (); | 
					
						
							|  |  |  |   void subProcessFailed (QProcess *, int exit_code, QProcess::ExitStatus); | 
					
						
							|  |  |  |   void subProcessError (QProcess *, QProcess::ProcessError); | 
					
						
							|  |  |  |   void statusUpdate () const; | 
					
						
							|  |  |  |   void update_watchdog_label (); | 
					
						
							|  |  |  |   void on_the_minute (); | 
					
						
							| 
									
										
										
										
											2018-08-09 12:52:48 -04:00
										 |  |  |   void tryBandHop(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void add_child_to_event_filter (QObject *); | 
					
						
							|  |  |  |   void remove_child_from_event_filter (QObject *); | 
					
						
							|  |  |  |   void setup_status_bar (bool vhf); | 
					
						
							| 
									
										
										
										
											2018-10-28 12:06:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   void resetIdleTimer(); | 
					
						
							|  |  |  |   void incrementIdleTimer(); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void tx_watchdog (bool triggered); | 
					
						
							| 
									
										
										
										
											2018-03-05 14:49:51 -05:00
										 |  |  |   qint64  nWidgets(QString t); | 
					
						
							|  |  |  |   void displayWidgets(qint64 n); | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   void vhfWarning(); | 
					
						
							|  |  |  |   QChar current_submode () const; // returns QChar {0} if sub mode is
 | 
					
						
							|  |  |  |                                   // not appropriate
 | 
					
						
							|  |  |  |   void write_transmit_entry (QString const& file_name); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int killbyname(const char* progName); | 
					
						
							|  |  |  | extern void getDev(int* numDevices,char hostAPI_DeviceName[][50], | 
					
						
							|  |  |  |                    int minChan[], int maxChan[], | 
					
						
							|  |  |  |                    int minSpeed[], int maxSpeed[]); | 
					
						
							|  |  |  | extern int next_tx_state(int pctx); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // MAINWINDOW_H
 |