1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 #include <QtGui> 4 #include <QtWidgets> 5 #include <QPointer> 6 #include <QScopedPointer> 7 #include <QLabel> 8 #include <QDateTime> 9 #include <QHash> 10 #include <QProcess> 11 #include "getfile.h" 12 #include "soundin.h" 13 #include "soundout.h" 14 #include "signalmeter.h" 15 #include "commons.h" 16 #include "sleep.h" 17 #include <QtConcurrent/QtConcurrent> 18 19 #define NFFT 32768 20 #define NSMAX 5760000 21 22 //--------------------------------------------------------------- MainWindow 23 namespace Ui { 24 class MainWindow; 25 } 26 27 class QTimer; 28 class Astro; 29 class BandMap; 30 class Messages; 31 class WideGraph; 32 33 class MainWindow : public QMainWindow 34 { 35 Q_OBJECT 36 37 public: 38 explicit MainWindow(QWidget *parent = 0); 39 ~MainWindow(); 40 bool m_network; 41 42 public slots: 43 void showSoundInError(const QString& errorMsg); 44 void showStatusMessage(const QString& statusMsg); 45 void dataSink(int k); 46 void diskDat(); 47 void diskWriteFinished(); 48 void freezeDecode(int n); 49 void readFromStdout(); 50 void m65_error (QProcess::ProcessError); 51 void editor_error(); 52 void guiUpdate(); 53 void doubleClickOnCall(QString hiscall, bool ctrl); 54 void doubleClickOnMessages(QString hiscall, QString t2, bool ctrl); 55 56 private: 57 virtual void keyPressEvent (QKeyEvent *) override; 58 virtual bool eventFilter (QObject *, QEvent *) override; 59 virtual void closeEvent (QCloseEvent *) override; 60 61 private slots: 62 void on_tx1_editingFinished(); 63 void on_tx2_editingFinished(); 64 void on_tx3_editingFinished(); 65 void on_tx4_editingFinished(); 66 void on_tx5_editingFinished(); 67 void on_tx6_editingFinished(); 68 void on_actionDeviceSetup_triggered(); 69 void on_monitorButton_clicked(); 70 void on_actionExit_triggered(); 71 void on_actionAbout_triggered(); 72 void on_actionLinrad_triggered(); 73 void on_actionCuteSDR_triggered(); 74 void on_autoButton_clicked(); 75 void on_stopTxButton_clicked(); 76 void on_tolSpinBox_valueChanged(int arg1); 77 void on_actionAstro_Data_triggered(); 78 void on_stopButton_clicked(); 79 void on_actionRelease_Notes_triggered(); 80 void on_actionOnline_Users_Guide_triggered(); 81 void on_actionQSG_Q65_triggered(); 82 void on_actionQSG_MAP65_v3_triggered(); 83 void on_actionQ65_Sensitivity_in_MAP65_3_0_triggered(); 84 void on_actionWide_Waterfall_triggered(); 85 void on_actionBand_Map_triggered(); 86 void on_actionMessages_triggered(); 87 void on_actionOpen_triggered(); 88 void on_actionOpen_next_in_directory_triggered(); 89 void on_actionDecode_remaining_files_in_directory_triggered(); 90 void on_actionDelete_all_tf2_files_in_SaveDir_triggered(); 91 void on_actionErase_Band_Map_and_Messages_triggered(); 92 void on_actionFind_Delta_Phi_triggered(); 93 void on_actionF4_sets_Tx6_triggered(); 94 void on_actionOnly_EME_calls_triggered(); 95 void on_actionNo_shorthands_if_Tx1_triggered(); 96 void on_actionNo_Deep_Search_triggered(); 97 void on_actionNormal_Deep_Search_triggered(); 98 void on_actionAggressive_Deep_Search_triggered(); 99 void on_actionNone_triggered(); 100 void on_actionSave_all_triggered(); 101 void on_actionKeyboard_shortcuts_triggered(); 102 void on_actionSpecial_mouse_commands_triggered(); 103 void on_actionAvailable_suffixes_and_add_on_prefixes_triggered(); 104 void on_DecodeButton_clicked(); 105 void decode(); 106 void decodeBusy(bool b); 107 void on_EraseButton_clicked(); 108 void on_txb1_clicked(); 109 void on_txFirstCheckBox_stateChanged(int arg1); 110 void set_ntx(int n); 111 void on_txb2_clicked(); 112 void on_txb3_clicked(); 113 void on_txb4_clicked(); 114 void on_txb5_clicked(); 115 void on_txb6_clicked(); 116 void on_lookupButton_clicked(); 117 void on_addButton_clicked(); 118 void on_setTxFreqButton_clicked(); 119 void on_dxCallEntry_textChanged(const QString &arg1); 120 void on_dxGridEntry_textChanged(const QString &arg1); 121 void selectCall2(bool ctrl); 122 void on_genStdMsgsPushButton_clicked(); 123 void bumpDF(int n); 124 void on_logQSOButton_clicked(); 125 void on_actionErase_map65_rx_log_triggered(); 126 void on_actionErase_map65_tx_log_triggered(); 127 void on_NBcheckBox_toggled(bool checked); 128 void on_actionJT65A_triggered(); 129 void on_actionJT65B_triggered(); 130 void on_actionJT65C_triggered(); 131 void on_NBslider_valueChanged(int value); 132 void on_actionAdjust_IQ_Calibration_triggered(); 133 void on_actionApply_IQ_Calibration_triggered(); 134 void on_actionAFMHot_triggered(); 135 void on_actionBlue_triggered(); 136 void on_actionFUNcube_Dongle_triggered(); 137 void on_actionEdit_wsjt_log_triggered(); 138 void on_actionTx_Tune_triggered(); 139 void on_actionQ65A_triggered(); 140 void on_actionQ65B_triggered(); 141 void on_actionNoJT65_triggered(); 142 void on_actionNoQ65_triggered(); 143 void on_actionQ65C_triggered(); 144 void on_actionQ65D_triggered(); 145 void on_actionQ65E_triggered(); 146 147 void on_pbTxMode_clicked(); 148 149 private: 150 Ui::MainWindow *ui; 151 QString m_appDir; 152 QString m_settings_filename; 153 QScopedPointer<Astro> m_astro_window; 154 QScopedPointer<BandMap> m_band_map_window; 155 QScopedPointer<Messages> m_messages_window; 156 QScopedPointer<WideGraph> m_wide_graph_window; 157 QPointer<QTimer> m_gui_timer; 158 qint64 m_msErase; 159 qint32 m_nDevIn; 160 qint32 m_nDevOut; 161 qint32 m_idInt; 162 qint32 m_waterfallAvg; 163 qint32 m_DF; 164 qint32 m_tol; 165 qint32 m_QSOfreq0; 166 qint32 m_ntx; 167 qint32 m_pttPort; 168 qint32 m_astroFont; 169 qint32 m_timeout; 170 qint32 m_dPhi; 171 qint32 m_fCal; 172 qint32 m_txFreq; 173 qint32 m_setftx; 174 qint32 m_ndepth; 175 qint32 m_sec0; 176 qint32 m_map65RxLog; 177 qint32 m_nutc0; 178 qint32 m_mode65; 179 qint32 m_nrx; 180 qint32 m_hsym0; 181 qint32 m_paInDevice; 182 qint32 m_paOutDevice; 183 qint32 m_udpPort; 184 qint32 m_NBslider; 185 qint32 m_adjustIQ; 186 qint32 m_applyIQcal; 187 qint32 m_mult570; 188 qint32 m_mult570Tx; 189 qint32 m_nsum; 190 qint32 m_nsave; 191 qint32 m_TRperiod; 192 qint32 m_modeJT65; 193 qint32 m_modeQ65; 194 qint32 m_RxState; 195 196 197 double m_fAdd; 198 // double m_IQamp; 199 // double m_IQphase; 200 double m_cal570; 201 double m_TxOffset; 202 203 bool m_monitoring; 204 bool m_transmitting; 205 bool m_diskData; 206 bool m_loopall; 207 bool m_decoderBusy; 208 bool m_txFirst; 209 bool m_auto; 210 bool m_txMute; 211 bool m_restart; 212 bool m_xpol; 213 bool m_xpolx; 214 bool m_call3Modified; 215 bool m_startAnother; 216 bool m_saveAll; 217 bool m_onlyEME; 218 bool m_widebandDecode; 219 bool m_kb8rq; 220 bool m_NB; 221 bool m_fs96000; 222 bool m_IQswap; 223 bool m_10db; 224 bool m_initIQplus; 225 bool m_bIQxt; 226 227 float m_gainx; 228 float m_gainy; 229 float m_phasex; 230 float m_phasey; 231 float m_pctZap; 232 233 QRect m_wideGraphGeom; 234 235 QLabel* lab1; // labels in status bar 236 QLabel* lab2; 237 QLabel* lab3; 238 QLabel* lab4; 239 QLabel* lab5; 240 QLabel* lab6; 241 QLabel* lab7; 242 243 QMessageBox msgBox0; 244 245 QFuture<void>* future1; 246 QFuture<void>* future2; 247 QFutureWatcher<void>* watcher1; 248 QFutureWatcher<void>* watcher2; 249 250 QProcess proc_m65; 251 QProcess proc_qthid; 252 QProcess proc_editor; 253 254 255 QString m_path; 256 QString m_pbdecoding_style1; 257 QString m_pbmonitor_style; 258 QString m_pbAutoOn_style; 259 QString m_messagesText; 260 QString m_bandmapText; 261 QString m_myCall; 262 QString m_myGrid; 263 QString m_hisCall; 264 QString m_hisGrid; 265 QString m_saveDir; 266 QString m_azelDir; 267 QString m_dxccPfx; 268 QString m_palette; 269 QString m_dateTime; 270 QString m_mode; 271 QString m_colors; 272 QString m_editorCommand; 273 QString m_modeTx; 274 275 QHash<QString,bool> m_worked; 276 277 SignalMeter *xSignalMeter; 278 SignalMeter *ySignalMeter; 279 280 281 SoundInThread soundInThread; //Instantiate the audio threads 282 SoundOutThread soundOutThread; 283 284 //---------------------------------------------------- private functions 285 void readSettings(); 286 void writeSettings(); 287 void createStatusBar(); 288 void updateStatusBar(); 289 void msgBox(QString t); 290 void genStdMsgs(QString rpt); 291 void lookup(); 292 void ba2msg(QByteArray ba, char* message); 293 void msgtype(QString t, QLineEdit* tx); 294 void stub(); 295 bool isGrid4(QString g); 296 bool subProcessFailed (QProcess *, int exit_code, QProcess::ExitStatus); 297 }; 298 299 extern void getfile(QString fname, bool xpol, int idInt); 300 extern void savetf2(QString fname, bool xpol); 301 extern int killbyname(const char* progName); 302 extern void getDev(int* numDevices,char hostAPI_DeviceName[][50], 303 int minChan[], int maxChan[], 304 int minSpeed[], int maxSpeed[]); 305 306 extern "C" { 307 //----------------------------------------------------- C and Fortran routines 308 void symspec_(int* k, int* nxpol, int* ndiskdat, int* nb, 309 int* m_NBslider, int* idphi, int* nfsample, float* fgreen, 310 int* iqadjust, int* iqapply, float* gainx, float* gainy, 311 float* phasex, float* phasey, float* rejectx, float* rejecty, 312 float* px, float* py, float s[], int* nkhz, int* nhsym, 313 int* nzap, float* slimit, uchar lstrong[]); 314 315 void gen65_(char* msg, int* mode65, double* samfac, 316 int* nsendingsh, char* msgsent, short iwave[], int* nwave, 317 int len1, int len2); 318 319 void gen_q65_wave_(char* msg, int* ntxFreq, int* mode64, 320 char* msgsent, short iwave[], int* nwave, 321 int len1, int len2); 322 323 int ptt_(int* nport, int* itx, int* iptt); 324 } 325 326 #endif // MAINWINDOW_H 327