625 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			625 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // -*- 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> | ||
|  | #include <QPointer> | ||
|  | #include <QSet> | ||
|  | #include <QVector> | ||
|  | #include <QFuture> | ||
|  | #include <QFutureWatcher> | ||
|  | 
 | ||
|  | #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 "decodedtext.h" | ||
|  | #include "commons.h" | ||
|  | #include "astro.h" | ||
|  | #include "MessageBox.hpp" | ||
|  | #include "NetworkAccessManager.hpp" | ||
|  | 
 | ||
|  | #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 | ||
|  | #define NUM_FT8_SYMBOLS 79 | ||
|  | #define NUM_CW_SYMBOLS 250 | ||
|  | #define TX_SAMPLE_RATE 48000 | ||
|  | #define N_WIDGETS 24 | ||
|  | 
 | ||
|  | 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 SampleDownloader; | ||
|  | class MultiSettings; | ||
|  | class PhaseEqualizationDialog; | ||
|  | 
 | ||
|  | class MainWindow : public QMainWindow | ||
|  | { | ||
|  |   Q_OBJECT; | ||
|  | 
 | ||
|  | 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 doubleClickOnCall(bool shift, bool ctrl); | ||
|  |   void doubleClickOnCall2(bool shift, bool ctrl); | ||
|  |   void readFromStdout(); | ||
|  |   void p1ReadFromStdout(); | ||
|  |   void setXIT(int n, Frequency base = 0u); | ||
|  |   void setFreq4(int rxFreq, int txFreq); | ||
|  |   void msgAvgDecode2(); | ||
|  |   void fastPick(int x0, int x1, int y); | ||
|  | 
 | ||
|  | protected: | ||
|  |   void keyPressEvent (QKeyEvent *) override; | ||
|  |   void closeEvent(QCloseEvent *) override; | ||
|  |   void childEvent(QChildEvent *) override; | ||
|  |   bool eventFilter(QObject *, QEvent *) override; | ||
|  | 
 | ||
|  | private slots: | ||
|  |   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(); | ||
|  |   void on_actionSettings_triggered(); | ||
|  |   void on_monitorButton_clicked (bool); | ||
|  |   void on_actionAbout_triggered(); | ||
|  |   void on_autoButton_clicked (bool); | ||
|  |   void on_stopTxButton_clicked(); | ||
|  |   void on_stopButton_clicked(); | ||
|  |   void on_actionRelease_Notes_triggered (); | ||
|  |   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 (); | ||
|  |   void on_actionNone_triggered(); | ||
|  |   void on_actionSave_all_triggered(); | ||
|  |   void on_actionKeyboard_shortcuts_triggered(); | ||
|  |   void on_actionSpecial_mouse_commands_triggered(); | ||
|  |   void on_DecodeButton_clicked (bool); | ||
|  |   void decode(); | ||
|  |   void decodeBusy(bool b); | ||
|  |   void on_EraseButton_clicked(); | ||
|  |   void on_txFirstCheckBox_stateChanged(int arg1); | ||
|  |   void set_dateTimeQSO(int m_ntx); | ||
|  |   void set_ntx(int n); | ||
|  |   void on_txrb1_toggled(bool status); | ||
|  |   void on_txrb2_toggled(bool status); | ||
|  |   void on_txrb3_toggled(bool status); | ||
|  |   void on_txrb4_toggled(bool status); | ||
|  |   void on_txrb5_toggled(bool status); | ||
|  |   void on_txrb6_toggled(bool status); | ||
|  |   void on_txb1_clicked(); | ||
|  |   void on_txb2_clicked(); | ||
|  |   void on_txb3_clicked(); | ||
|  |   void on_txb4_clicked(); | ||
|  |   void on_txb5_clicked(); | ||
|  |   void on_txb6_clicked(); | ||
|  |   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_actionJT9_triggered(); | ||
|  |   void on_actionJT65_triggered(); | ||
|  |   void on_actionJT9_JT65_triggered(); | ||
|  |   void on_actionJT4_triggered(); | ||
|  |   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); | ||
|  |   void on_actionDeepestDecode_toggled (bool); | ||
|  |   void on_inGain_valueChanged(int n); | ||
|  |   void bumpFqso(int n); | ||
|  |   void on_actionErase_ALL_TXT_triggered(); | ||
|  |   void on_actionErase_wsjtx_log_adi_triggered(); | ||
|  |   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); | ||
|  |   void on_freeTextMsg_currentTextChanged (QString const&); | ||
|  |   void on_rptSpinBox_valueChanged(int n); | ||
|  |   void killFile(); | ||
|  |   void on_tuneButton_clicked (bool); | ||
|  |   void on_pbR2T_clicked(); | ||
|  |   void on_pbT2R_clicked(); | ||
|  |   void acceptQSO2(QDateTime const&, QString const& call, QString const& grid | ||
|  |                   , Frequency dial_freq, QString const& mode | ||
|  |                   , QString const& rpt_sent, QString const& rpt_received | ||
|  |                   , QString const& tx_power, QString const& comments | ||
|  |                   , QString const& name, QDateTime const&); | ||
|  |   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_cbTxLock_clicked(bool checked); | ||
|  |   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); | ||
|  |   void on_actionMessage_averaging_triggered(); | ||
|  |   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); | ||
|  |   void on_cbFirst_toggled(bool b); | ||
|  |   void on_cbWeak_toggled(bool b); | ||
|  |   void networkError (QString const&); | ||
|  |   void on_ClrAvgButton_clicked(); | ||
|  |   void on_actionWSPR_triggered(); | ||
|  |   void on_actionWSPR_LF_triggered(); | ||
|  |   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_actionEcho_triggered(); | ||
|  |   void on_actionISCAT_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); | ||
|  |   void on_actionMSK144_triggered(); | ||
|  |   void on_actionQRA64_triggered(); | ||
|  |   void on_actionFreqCal_triggered(); | ||
|  |   void splash_done (); | ||
|  | 
 | ||
|  | 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 (); | ||
|  |   void writeAllTxt(QString message); | ||
|  |   void FT8_AutoSeq(QString message); | ||
|  |   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<SampleDownloader> m_sampleDownloader; | ||
|  |   QScopedPointer<PhaseEqualizationDialog> m_phaseEqualizationDialog; | ||
|  | 
 | ||
|  |   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; | ||
|  |   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; | ||
|  |   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; | ||
|  |   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::const_iterator m_frequency_list_fcal_iter; | ||
|  |   qint32  m_nTx73; | ||
|  |   qint32  m_UTCdisk; | ||
|  |   qint32  m_wait; | ||
|  | 
 | ||
|  |   bool    m_btxok;		//True if OK to transmit | ||
|  |   bool    m_diskData; | ||
|  |   bool    m_loopall; | ||
|  |   bool    m_decoderBusy; | ||
|  |   bool    m_txFirst; | ||
|  |   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; | ||
|  |   int     m_lastMessageType; | ||
|  |   QString m_lastMessageSent; | ||
|  |   bool    m_lockTxFreq; | ||
|  |   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; | ||
|  | 
 | ||
|  |   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; | ||
|  | 
 | ||
|  |   QFuture<void> m_wav_future; | ||
|  |   QFutureWatcher<void> m_wav_future_watcher; | ||
|  |   QFutureWatcher<void> watcher3; | ||
|  |   QFutureWatcher<QString> m_saveWAVWatcher; | ||
|  | 
 | ||
|  |   QProcess proc_jt9; | ||
|  |   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; | ||
|  | 
 | ||
|  |   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; | ||
|  | 
 | ||
|  |   QSet<QString> m_pfx; | ||
|  |   QSet<QString> m_sfx; | ||
|  | 
 | ||
|  |   QDateTime m_dateTimeQSOOn; | ||
|  | 
 | ||
|  |   QSharedMemory *mem_jt9; | ||
|  |   LogBook m_logBook; | ||
|  |   DecodedText 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; | ||
|  |   bool m_tx_watchdog;           // true when watchdog triggered | ||
|  |   bool m_block_pwr_tooltip; | ||
|  |   bool m_PwrBandSetOK; | ||
|  |   bool m_bVHFwarned; | ||
|  |   Frequency m_lastMonitoredFrequency; | ||
|  |   double m_toneSpacing; | ||
|  |   int m_firstDecode; | ||
|  |   QProgressDialog m_optimizingProgress; | ||
|  |   QTimer m_heartbeat; | ||
|  |   MessageClient * m_messageClient; | ||
|  |   PSK_Reporter *psk_Reporter; | ||
|  |   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 setDecodedTextFont (QFont const&); | ||
|  |   void writeSettings(); | ||
|  |   void createStatusBar(); | ||
|  |   void updateStatusBar(); | ||
|  |   void genStdMsgs(QString rpt); | ||
|  |   void genCQMsg(); | ||
|  |   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 (); | ||
|  |   void pskPost(DecodedText decodedtext); | ||
|  |   void displayDialFrequency (); | ||
|  |   void transmitDisplay (bool); | ||
|  |   void processMessage(QString const& messages, qint32 position, bool ctrl); | ||
|  |   void replyToCQ (QTime, qint32 snr, float delta_time, quint32 delta_frequency, QString const& mode, QString const& message_text); | ||
|  |   void replayDecodes (); | ||
|  |   void postDecode (bool is_new, QString const& message); | ||
|  |   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); | ||
|  |   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 (); | ||
|  |   void add_child_to_event_filter (QObject *); | ||
|  |   void remove_child_from_event_filter (QObject *); | ||
|  |   void setup_status_bar (bool vhf); | ||
|  |   void tx_watchdog (bool triggered); | ||
|  |   int  nWidgets(QString t); | ||
|  |   void displayWidgets(int n); | ||
|  |   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 |