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