1 // ----------------------------------------------------------------------------
2 // globals.h  --  constants, variables, arrays & functions that need to be
3 //                  outside of any thread
4 //
5 // Copyright (C) 2006-2007
6 //		Dave Freese, W1HKJ
7 // Copyright (C) 2007-2010
8 //		Stelios Bounanos, M0GLD
9 //
10 // This file is part of fldigi.  Adapted in part from code contained in gmfsk
11 // source code distribution.
12 //
13 // Fldigi is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU General Public License as published by
15 // the Free Software Foundation, either version 3 of the License, or
16 // (at your option) any later version.
17 //
18 // Fldigi is distributed in the hope that it will be useful,
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 // GNU General Public License for more details.
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with fldigi.  If not, see <http://www.gnu.org/licenses/>.
25 // ----------------------------------------------------------------------------
26 
27 #ifndef _GLOBALS_H
28 #define _GLOBALS_H
29 
30 #include <stdint.h>
31 #include <string>
32 
33 enum state_t {
34 	STATE_PAUSE = 0,
35 	STATE_RX,
36 	STATE_TX,
37 	STATE_RESTART,
38 	STATE_TUNE,
39 	STATE_ABORT,
40 	STATE_FLUSH,
41 	STATE_NOOP,
42 	STATE_EXIT,
43 	STATE_ENDED,
44 	STATE_IDLE,
45 	STATE_NEW_MODEM
46 };
47 
48 enum {
49 	MODE_PREV = -2,
50 	MODE_NEXT,
51 
52 	MODE_NULL,
53 
54 	MODE_CW,
55 
56 	MODE_CONTESTIA,
57 	MODE_CONTESTIA_4_125,   MODE_CONTESTIA_4_250,
58 	MODE_CONTESTIA_4_500,   MODE_CONTESTIA_4_1000,   MODE_CONTESTIA_4_2000,
59 	MODE_CONTESTIA_8_125,   MODE_CONTESTIA_8_250,
60 	MODE_CONTESTIA_8_500,   MODE_CONTESTIA_8_1000,   MODE_CONTESTIA_8_2000,
61 	MODE_CONTESTIA_16_250,  MODE_CONTESTIA_16_500,
62 	MODE_CONTESTIA_16_1000, MODE_CONTESTIA_16_2000,
63 	MODE_CONTESTIA_32_1000, MODE_CONTESTIA_32_2000,
64 	MODE_CONTESTIA_64_500,  MODE_CONTESTIA_64_1000,  MODE_CONTESTIA_64_2000,
65 	MODE_CONTESTIA_FIRST =  MODE_CONTESTIA_4_125,
66 	MODE_CONTESTIA_LAST  =  MODE_CONTESTIA_64_2000,
67 
68 	MODE_DOMINOEXMICRO,
69 	MODE_DOMINOEX4,
70 	MODE_DOMINOEX5,
71 	MODE_DOMINOEX8,
72 	MODE_DOMINOEX11,
73 	MODE_DOMINOEX16,
74 	MODE_DOMINOEX22,
75 	MODE_DOMINOEX44,
76 	MODE_DOMINOEX88,
77 	MODE_DOMINOEX_FIRST = MODE_DOMINOEXMICRO,
78 	MODE_DOMINOEX_LAST = MODE_DOMINOEX88,
79 
80 	MODE_FELDHELL,
81 	MODE_SLOWHELL,
82 	MODE_HELLX5,
83 	MODE_HELLX9,
84 	MODE_FSKH245,
85 	MODE_FSKH105,
86 	MODE_HELL80,
87 	MODE_HELL_FIRST = MODE_FELDHELL,
88 	MODE_HELL_LAST = MODE_HELL80,
89 
90 	MODE_MFSK8,
91 	MODE_MFSK16,
92 	MODE_MFSK32,
93 	MODE_MFSK4,
94 	MODE_MFSK11,
95 	MODE_MFSK22,
96 	MODE_MFSK31,
97 	MODE_MFSK64,
98 	MODE_MFSK128,
99 	MODE_MFSK64L,
100 	MODE_MFSK128L,
101 	MODE_MFSK_FIRST = MODE_MFSK8,
102 	MODE_MFSK_LAST = MODE_MFSK128L,
103 
104 	MODE_WEFAX_576,
105 	MODE_WEFAX_288,
106 	MODE_WEFAX_FIRST = MODE_WEFAX_576,
107 	MODE_WEFAX_LAST = MODE_WEFAX_288,
108 
109 	MODE_NAVTEX,
110 	MODE_SITORB,
111 	MODE_NAVTEX_FIRST = MODE_NAVTEX,
112 	MODE_NAVTEX_LAST = MODE_SITORB,
113 
114 	MODE_MT63_500S,
115 	MODE_MT63_500L,
116 	MODE_MT63_1000S,
117 	MODE_MT63_1000L,
118 	MODE_MT63_2000S,
119 	MODE_MT63_2000L,
120 	MODE_MT63_FIRST = MODE_MT63_500S,
121 	MODE_MT63_LAST = MODE_MT63_2000L,
122 
123 	MODE_PSK31,
124 	MODE_PSK63,
125 	MODE_PSK63F,
126 	MODE_PSK125,
127 	MODE_PSK250,
128 	MODE_PSK500,
129 	MODE_PSK1000,
130 
131 	MODE_12X_PSK125,
132 	MODE_6X_PSK250,
133 	MODE_2X_PSK500,
134 	MODE_4X_PSK500,
135 	MODE_2X_PSK800,
136 	MODE_2X_PSK1000,
137 
138 	MODE_PSK_FIRST = MODE_PSK31,
139 	MODE_PSK_LAST = MODE_2X_PSK1000,
140 
141 	MODE_QPSK31,
142 	MODE_QPSK63,
143 	MODE_QPSK125,
144 	MODE_QPSK250,
145 	MODE_QPSK500,
146 
147 	MODE_QPSK_FIRST = MODE_QPSK31,
148 	MODE_QPSK_LAST = MODE_QPSK500,
149 
150 	MODE_8PSK125,
151 	MODE_8PSK125FL,
152 	MODE_8PSK125F,
153 	MODE_8PSK250,
154 	MODE_8PSK250FL,
155 	MODE_8PSK250F,
156 	MODE_8PSK500,
157 	MODE_8PSK500F,
158 	MODE_8PSK1000,
159 	MODE_8PSK1000F,
160 	MODE_8PSK1200F,
161 	MODE_8PSK_FIRST = MODE_8PSK125,
162 	MODE_8PSK_LAST = MODE_8PSK1200F,
163 
164 	MODE_OFDM_500F,
165 	MODE_OFDM_750F,
166 	MODE_OFDM_2000F,
167 	MODE_OFDM_2000,
168 	MODE_OFDM_3500,
169 
170 	MODE_OLIVIA,
171 	MODE_OLIVIA_4_125,
172 	MODE_OLIVIA_4_250,
173 	MODE_OLIVIA_4_500,
174 	MODE_OLIVIA_4_1000,
175 	MODE_OLIVIA_4_2000,
176 	MODE_OLIVIA_8_125,
177 	MODE_OLIVIA_8_250,
178 	MODE_OLIVIA_8_500,
179 	MODE_OLIVIA_8_1000,
180 	MODE_OLIVIA_8_2000,
181 	MODE_OLIVIA_16_500,
182 	MODE_OLIVIA_16_1000,
183 	MODE_OLIVIA_16_2000,
184 	MODE_OLIVIA_32_1000,
185 	MODE_OLIVIA_32_2000,
186 	MODE_OLIVIA_64_500,
187 	MODE_OLIVIA_64_1000,
188 	MODE_OLIVIA_64_2000,
189 	MODE_OLIVIA_FIRST = MODE_OLIVIA,
190 	MODE_OLIVIA_LAST = MODE_OLIVIA_64_2000,
191 
192 	MODE_RTTY,
193 
194 	MODE_THORMICRO,
195 	MODE_THOR4,
196 	MODE_THOR5,
197 	MODE_THOR8,
198 	MODE_THOR11,
199 	MODE_THOR16,
200 	MODE_THOR22,
201 	MODE_THOR25x4,
202 	MODE_THOR50x1,
203 	MODE_THOR50x2,
204 	MODE_THOR100,
205 	MODE_THOR_FIRST = MODE_THORMICRO,
206 	MODE_THOR_LAST = MODE_THOR100,
207 
208 	MODE_THROB1,
209 	MODE_THROB2,
210 	MODE_THROB4,
211 	MODE_THROBX1,
212 	MODE_THROBX2,
213 	MODE_THROBX4,
214 	MODE_THROB_FIRST = MODE_THROB1,
215 	MODE_THROB_LAST = MODE_THROBX4,
216 
217 //	MODE_PACKET,
218 // high speed && multiple carrier modes
219 
220 	MODE_PSK125R,
221 	MODE_PSK250R,
222 	MODE_PSK500R,
223 	MODE_PSK1000R,
224 
225 	MODE_4X_PSK63R,
226 	MODE_5X_PSK63R,
227 	MODE_10X_PSK63R,
228 	MODE_20X_PSK63R,
229 	MODE_32X_PSK63R,
230 
231 	MODE_4X_PSK125R,
232 	MODE_5X_PSK125R,
233 	MODE_10X_PSK125R,
234 	MODE_12X_PSK125R,
235 	MODE_16X_PSK125R,
236 
237 	MODE_2X_PSK250R,
238 	MODE_3X_PSK250R,
239 	MODE_5X_PSK250R,
240 	MODE_6X_PSK250R,
241 	MODE_7X_PSK250R,
242 
243 	MODE_2X_PSK500R,
244 	MODE_3X_PSK500R,
245 	MODE_4X_PSK500R,
246 
247 	MODE_2X_PSK800R,
248 	MODE_2X_PSK1000R,
249 
250 	MODE_PSKR_FIRST = MODE_PSK125R,
251 	MODE_PSKR_LAST = MODE_2X_PSK1000R,
252 
253 	MODE_FSQ,
254 	MODE_IFKP,
255 
256 	MODE_SSB,
257 	MODE_WWV,
258 	MODE_ANALYSIS,
259 	MODE_FMT,
260 
261 	NUM_MODES,
262 	NUM_RXTX_MODES = NUM_MODES - 2
263 };
264 
265 typedef intptr_t trx_mode;
266 
267 struct mode_info_t {
268 	trx_mode mode;
269 	class modem **modem;
270 	const char *sname;
271 	const char *name;
272 	const char *pskmail_name;
273 	const char *adif_name;
274 	const char *export_mode;
275 	const char *export_submode;
276 	const char *vid_name;
277 	const unsigned int iface_io; // Some modes are not usable for a given interface.
278 };
279 extern const struct mode_info_t mode_info[NUM_MODES];
280 
281 class qrg_mode_t
282 {
283 public:
284 	long long rfcarrier;
285 	std::string rmode;
286 	int carrier;
287 	trx_mode mode;
288 	std::string usage;
289 
qrg_mode_t()290 	qrg_mode_t() :
291 		rfcarrier(0),
292 		rmode("NONE"),
293 		carrier(0),
294 		mode(NUM_MODES),
295 		usage("") { }
296 	qrg_mode_t(long long rfc_, std::string rm_, int c_, trx_mode m_, std::string use_ = "")
rfcarrier(rfc_)297                 : rfcarrier(rfc_), rmode(rm_), carrier(c_), mode(m_), usage(use_) { }
298 	bool operator<(const qrg_mode_t& rhs) const
299         {
300 		return rfcarrier < rhs.rfcarrier;
301 	}
302 	bool operator==(const qrg_mode_t& rhs) const
303 	{
304 		return rfcarrier == rhs.rfcarrier && rmode == rhs.rmode &&
305 		       carrier == rhs.carrier && mode == rhs.mode;
306 	}
307 	std::string str(void);
308 };
309 std::ostream& operator<<(std::ostream& s, const qrg_mode_t& m);
310 std::istream& operator>>(std::istream& s, qrg_mode_t& m);
311 
312 #include <bitset>
313 class mode_set_t : public std::bitset<NUM_MODES> {};
314 
315 enum band_t {
316 	BAND_160M, BAND_80M, BAND_75M, BAND_60M, BAND_40M, BAND_30M, BAND_20M,
317 	BAND_17M, BAND_15M, BAND_12M, BAND_10M, BAND_6M, BAND_4M, BAND_2M, BAND_125CM,
318 	BAND_70CM, BAND_33CM, BAND_23CM, BAND_13CM, BAND_9CM, BAND_6CM, BAND_3CM, BAND_125MM,
319 	BAND_6MM, BAND_4MM, BAND_2P5MM, BAND_2MM, BAND_1MM, BAND_OTHER, NUM_BANDS
320 };
321 
322 band_t band(long long freq_hz);
323 band_t band(const char* freq_mhz);
324 const char* band_name(band_t b);
325 const char* band_name(const char* freq_mhz);
326 const char* band_freq(band_t b);
327 const char* band_freq(const char* band_name);
328 
329 // psk_browser enums
330 enum { VIEWER_LABEL_OFF, VIEWER_LABEL_AF, VIEWER_LABEL_RF, VIEWER_LABEL_CH, VIEWER_LABEL_NTYPES };
331 
332 extern std::string adif2export(std::string adif);
333 extern std::string adif2submode(std::string adif);
334 
335 #endif
336