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