1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2014
3 //              David Freese, W1HKJ
4 //
5 // This file is part of fldigi
6 //
7 // fldigi is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // fldigi is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 // ----------------------------------------------------------------------------
20 
21 // Syntax: ELEM_(rsid_code, rsid_tag, fldigi_mode)
22 // fldigi_mode is NUM_MODES if mode is not available in fldigi,
23 // otherwise one of the tags defined in globals.h.
24 // rsid_tag is stringified and may be shown to the user.
25 /*
26         ELEM_(263, ESCAPE, NUM_MODES)                   \
27 */
28 #undef ELEM_
29 #define RSID_LIST                                       \
30                                                         \
31 /* ESCAPE used to transition to 2nd RSID set */         \
32                                                         \
33         ELEM_(6, ESCAPE, NUM_MODES)                     \
34                                                         \
35         ELEM_(1, BPSK31, MODE_PSK31)                    \
36         ELEM_(110, QPSK31, MODE_QPSK31)                 \
37         ELEM_(2, BPSK63, MODE_PSK63)                    \
38         ELEM_(3, QPSK63, MODE_QPSK63)                   \
39         ELEM_(4, BPSK125, MODE_PSK125)                  \
40         ELEM_(5, QPSK125, MODE_QPSK125)                 \
41         ELEM_(126, BPSK250, MODE_PSK250)                \
42         ELEM_(127, QPSK250, MODE_QPSK250)               \
43         ELEM_(173, BPSK500, MODE_PSK500)                \
44                                                         \
45         ELEM_(183, PSK125R, MODE_PSK125R)               \
46         ELEM_(186, PSK250R, MODE_PSK250R)               \
47         ELEM_(187, PSK500R, MODE_PSK500R)               \
48                                                         \
49         ELEM_(7, PSKFEC31, NUM_MODES)                   \
50         ELEM_(8, PSK10, NUM_MODES)                      \
51                                                         \
52         ELEM_(9, MT63_500_LG, MODE_MT63_500L)           \
53         ELEM_(10, MT63_500_ST, MODE_MT63_500S)          \
54         ELEM_(11, MT63_500_VST, NUM_MODES)              \
55         ELEM_(12, MT63_1000_LG, MODE_MT63_1000L)        \
56         ELEM_(13, MT63_1000_ST, MODE_MT63_1000S)        \
57         ELEM_(14, MT63_1000_VST, NUM_MODES)             \
58         ELEM_(15, MT63_2000_LG, MODE_MT63_2000L)        \
59         ELEM_(17, MT63_2000_ST, MODE_MT63_2000S)        \
60         ELEM_(18, MT63_2000_VST, NUM_MODES)             \
61                                                         \
62         ELEM_(19, PSKAM10, NUM_MODES)                   \
63         ELEM_(20, PSKAM31, NUM_MODES)                   \
64         ELEM_(21, PSKAM50, NUM_MODES)                   \
65                                                         \
66         ELEM_(22, PSK63F, MODE_PSK63F)                  \
67         ELEM_(23, PSK220F, NUM_MODES)                   \
68                                                         \
69         ELEM_(24, CHIP64, NUM_MODES)                    \
70         ELEM_(25, CHIP128, NUM_MODES)                   \
71                                                         \
72         ELEM_(26, CW, MODE_CW)                          \
73                                                         \
74         ELEM_(27, CCW_OOK_12, NUM_MODES)                \
75         ELEM_(28, CCW_OOK_24, NUM_MODES)                \
76         ELEM_(29, CCW_OOK_48, NUM_MODES)                \
77         ELEM_(30, CCW_FSK_12, NUM_MODES)                \
78         ELEM_(31, CCW_FSK_24, NUM_MODES)                \
79         ELEM_(33, CCW_FSK_48, NUM_MODES)                \
80                                                         \
81         ELEM_(34, PACTOR1_FEC, NUM_MODES)               \
82                                                         \
83         ELEM_(113, PACKET_110, NUM_MODES)               \
84         ELEM_(35, PACKET_300, NUM_MODES)                \
85         ELEM_(36, PACKET_1200, NUM_MODES)               \
86                                                         \
87         ELEM_(37, RTTY_ASCII_7, MODE_RTTY)              \
88         ELEM_(38, RTTY_ASCII_8, MODE_RTTY)              \
89         ELEM_(39, RTTY_45, MODE_RTTY)                   \
90         ELEM_(40, RTTY_50, MODE_RTTY)                   \
91         ELEM_(41, RTTY_75, MODE_RTTY)                   \
92                                                         \
93         ELEM_(42, AMTOR_FEC, NUM_MODES)                 \
94                                                         \
95         ELEM_(43, THROB_1, MODE_THROB1)                 \
96         ELEM_(44, THROB_2, MODE_THROB2)                 \
97         ELEM_(45, THROB_4, MODE_THROB4)                 \
98         ELEM_(46, THROBX_1, MODE_THROBX1)               \
99         ELEM_(47, THROBX_2, MODE_THROBX2)               \
100         ELEM_(146, THROBX_4, MODE_THROBX4)              \
101                                                         \
102         ELEM_(204, CONTESTIA_4_125, MODE_CONTESTIA_4_125)   \
103         ELEM_(55,  CONTESTIA_4_250, MODE_CONTESTIA_4_250)   \
104         ELEM_(54,  CONTESTIA_4_500, MODE_CONTESTIA_4_500)   \
105         ELEM_(255, CONTESTIA_4_1000, MODE_CONTESTIA_4_1000) \
106         ELEM_(254, CONTESTIA_4_2000, MODE_CONTESTIA_4_2000) \
107                                                         \
108         ELEM_(169, CONTESTIA_8_125, MODE_CONTESTIA_8_125)   \
109         ELEM_(49,  CONTESTIA_8_250, MODE_CONTESTIA_8_250)   \
110         ELEM_(52,  CONTESTIA_8_500, MODE_CONTESTIA_8_500)   \
111         ELEM_(117, CONTESTIA_8_1000, MODE_CONTESTIA_8_1000) \
112         ELEM_(247, CONTESTIA_8_2000, MODE_CONTESTIA_8_2000) \
113                                                         \
114         ELEM_(275, CONTESTIA_16_250, MODE_CONTESTIA_16_250)   \
115         ELEM_(50,  CONTESTIA_16_500, MODE_CONTESTIA_16_500)   \
116         ELEM_(53,  CONTESTIA_16_1000, MODE_CONTESTIA_16_1000) \
117         ELEM_(259, CONTESTIA_16_2000, MODE_CONTESTIA_16_2000) \
118                                                         \
119         ELEM_(51,  CONTESTIA_32_1000, MODE_CONTESTIA_32_1000) \
120         ELEM_(201, CONTESTIA_32_2000, MODE_CONTESTIA_32_2000) \
121                                                         \
122         ELEM_(194, CONTESTIA_64_500, MODE_CONTESTIA_64_500)   \
123         ELEM_(193, CONTESTIA_64_1000, MODE_CONTESTIA_64_1000) \
124         ELEM_(191, CONTESTIA_64_2000, MODE_CONTESTIA_64_2000) \
125                                                         \
126         ELEM_(56, VOICE, NUM_MODES)                     \
127                                                         \
128         ELEM_(60, MFSK8, MODE_MFSK8)                    \
129         ELEM_(57, MFSK16, MODE_MFSK16)                  \
130         ELEM_(147, MFSK32, MODE_MFSK32)                 \
131                                                         \
132         ELEM_(148, MFSK11, MODE_MFSK11)                 \
133         ELEM_(152, MFSK22, MODE_MFSK22)                 \
134                                                         \
135         ELEM_(61, RTTYM_8_250, NUM_MODES)               \
136         ELEM_(62, RTTYM_16_500, NUM_MODES)              \
137         ELEM_(63, RTTYM_32_1000, NUM_MODES)             \
138         ELEM_(65, RTTYM_8_500, NUM_MODES)               \
139         ELEM_(66, RTTYM_16_1000, NUM_MODES)             \
140         ELEM_(67, RTTYM_4_500, NUM_MODES)               \
141         ELEM_(68, RTTYM_4_250, NUM_MODES)               \
142         ELEM_(119, RTTYM_8_1000, NUM_MODES)             \
143         ELEM_(170, RTTYM_8_125, NUM_MODES)              \
144                                                         \
145         ELEM_(203, OLIVIA_4_125, MODE_OLIVIA_4_125)     \
146         ELEM_(75,  OLIVIA_4_250, MODE_OLIVIA_4_250)     \
147         ELEM_(74,  OLIVIA_4_500, MODE_OLIVIA_4_500)     \
148         ELEM_(229, OLIVIA_4_1000, MODE_OLIVIA_4_1000)   \
149         ELEM_(238, OLIVIA_4_2000, MODE_OLIVIA_4_2000)   \
150                                                         \
151         ELEM_(163, OLIVIA_8_125, MODE_OLIVIA_8_125)     \
152         ELEM_(69,  OLIVIA_8_250, MODE_OLIVIA_8_250)     \
153         ELEM_(72,  OLIVIA_8_500, MODE_OLIVIA_8_500)     \
154         ELEM_(116, OLIVIA_8_1000, MODE_OLIVIA_8_1000)   \
155         ELEM_(214, OLIVIA_8_2000, MODE_OLIVIA_8_2000)   \
156                                                         \
157         ELEM_(70,  OLIVIA_16_500, MODE_OLIVIA_16_500)   \
158         ELEM_(73,  OLIVIA_16_1000, MODE_OLIVIA_16_1000) \
159         ELEM_(234, OLIVIA_16_2000, MODE_OLIVIA_16_2000) \
160                                                         \
161         ELEM_(71,  OLIVIA_32_1000, MODE_OLIVIA_32_1000) \
162         ELEM_(221, OLIVIA_32_2000, MODE_OLIVIA_32_2000) \
163                                                         \
164         ELEM_(211, OLIVIA_64_2000, MODE_OLIVIA_64_2000) \
165                                                         \
166         ELEM_(76, PAX, NUM_MODES)                       \
167         ELEM_(77, PAX2, NUM_MODES)                      \
168         ELEM_(78, DOMINOF, NUM_MODES)                   \
169         ELEM_(79, FAX, NUM_MODES)                       \
170         ELEM_(81, SSTV, NUM_MODES)                      \
171                                                         \
172         ELEM_(84, DOMINOEX_4, MODE_DOMINOEX4)           \
173         ELEM_(85, DOMINOEX_5, MODE_DOMINOEX5)           \
174         ELEM_(86, DOMINOEX_8, MODE_DOMINOEX8)           \
175         ELEM_(87, DOMINOEX_11, MODE_DOMINOEX11)         \
176         ELEM_(88, DOMINOEX_16, MODE_DOMINOEX16)         \
177         ELEM_(90, DOMINOEX_22, MODE_DOMINOEX22)         \
178         ELEM_(92, DOMINOEX_4_FEC, MODE_DOMINOEX4)       \
179         ELEM_(93, DOMINOEX_5_FEC, MODE_DOMINOEX5)       \
180         ELEM_(97, DOMINOEX_8_FEC, MODE_DOMINOEX8)       \
181         ELEM_(98, DOMINOEX_11_FEC, MODE_DOMINOEX11)     \
182         ELEM_(99, DOMINOEX_16_FEC, MODE_DOMINOEX16)     \
183         ELEM_(101, DOMINOEX_22_FEC, MODE_DOMINOEX22)    \
184                                                         \
185         ELEM_(104, FELD_HELL, MODE_FELDHELL)            \
186         ELEM_(105, PSK_HELL, NUM_MODES)                 \
187         ELEM_(106, HELL_80, MODE_HELL80)                \
188         ELEM_(107, FM_HELL_105, MODE_FSKH105)           \
189         ELEM_(108, FM_HELL_245, MODE_FSKH245)           \
190                                                         \
191         ELEM_(114, MODE_141A, NUM_MODES)                \
192         ELEM_(123, DTMF, NUM_MODES)                     \
193         ELEM_(125, ALE400, NUM_MODES)                   \
194         ELEM_(131, FDMDV, NUM_MODES)                    \
195                                                         \
196         ELEM_(132, JT65_A, NUM_MODES)                   \
197         ELEM_(134, JT65_B, NUM_MODES)                   \
198         ELEM_(135, JT65_C, NUM_MODES)                   \
199                                                         \
200         ELEM_(136, THOR_4, MODE_THOR4)                  \
201         ELEM_(137, THOR_8, MODE_THOR8)                  \
202         ELEM_(138, THOR_16, MODE_THOR16)                \
203         ELEM_(139, THOR_5, MODE_THOR5)                  \
204         ELEM_(143, THOR_11, MODE_THOR11)                \
205         ELEM_(145, THOR_22, MODE_THOR22)                \
206                                                         \
207         ELEM_(153, CALL_ID, NUM_MODES)                  \
208                                                         \
209         ELEM_(155, PACKET_PSK1200, NUM_MODES)           \
210         ELEM_(156, PACKET_PSK250, NUM_MODES)            \
211         ELEM_(159, PACKET_PSK63, NUM_MODES)             \
212                                                         \
213         ELEM_(172, MODE_188_110A_8N1, NUM_MODES)        \
214                                                         \
215         /* NONE must be the last element */             \
216         ELEM_(0, NONE, NUM_MODES)
217 
218 #define ELEM_(code_, tag_, mode_) RSID_ ## tag_ = code_,
219 enum { RSID_LIST };
220 #undef ELEM_
221 
222 #define ELEM_(code_, tag_, mode_) { RSID_ ## tag_, mode_, #tag_ },
223 const RSIDs cRsId::rsid_ids_1[] = { RSID_LIST };
224 #undef ELEM_
225 
226 const int cRsId::rsid_ids_size1 = sizeof(rsid_ids_1)/sizeof(*rsid_ids_1) - 1;
227 
228 //======================================================================
229 /*        ELEM_(6, ESCAPE2, NUM_MODES)                  \ */
230 
231 #define RSID_LIST2                                      \
232         ELEM2_(450, PSK63RX4, MODE_4X_PSK63R)           \
233         ELEM2_(457, PSK63RX5, MODE_5X_PSK63R)           \
234         ELEM2_(458, PSK63RX10, MODE_10X_PSK63R)         \
235         ELEM2_(460, PSK63RX20, MODE_20X_PSK63R)         \
236         ELEM2_(462, PSK63RX32, MODE_32X_PSK63R)         \
237                                                         \
238         ELEM2_(467, PSK125RX4, MODE_4X_PSK125R)         \
239         ELEM2_(497, PSK125RX5, MODE_5X_PSK125R)         \
240         ELEM2_(513, PSK125RX10, MODE_10X_PSK125R)       \
241         ELEM2_(519, PSK125X12, MODE_12X_PSK125)         \
242         ELEM2_(522, PSK125RX12, MODE_12X_PSK125R)       \
243         ELEM2_(527, PSK125RX16, MODE_16X_PSK125R)       \
244                                                         \
245         ELEM2_(529, PSK250RX2, MODE_2X_PSK250R)         \
246         ELEM2_(533, PSK250RX3, MODE_3X_PSK250R)         \
247         ELEM2_(539, PSK250RX5, MODE_5X_PSK250R)         \
248         ELEM2_(541, PSK250X6, MODE_6X_PSK250)           \
249         ELEM2_(545, PSK250RX6, MODE_6X_PSK250R)         \
250         ELEM2_(551, PSK250RX7, MODE_7X_PSK250R)         \
251                                                         \
252         ELEM2_(553, PSK500RX2, MODE_2X_PSK500R)         \
253         ELEM2_(558, PSK500RX3, MODE_3X_PSK500R)         \
254         ELEM2_(564, PSK500RX4, MODE_4X_PSK500R)         \
255         ELEM2_(566, PSK500X2, MODE_2X_PSK500)           \
256         ELEM2_(569, PSK500X4, MODE_4X_PSK500)           \
257                                                         \
258         ELEM2_(570, PSK1000, MODE_PSK1000)              \
259         ELEM2_(580, PSK1000R, MODE_PSK1000R)            \
260         ELEM2_(587, PSK1000X2, MODE_2X_PSK1000)         \
261         ELEM2_(595, PSK1000RX2, MODE_2X_PSK1000R)       \
262         ELEM2_(604, PSK800RX2, MODE_2X_PSK800R)         \
263         ELEM2_(610, PSK800X2, MODE_2X_PSK800)           \
264                                                         \
265         ELEM2_(620, MFSK64, MODE_MFSK64)                \
266         ELEM2_(625, MFSK128, MODE_MFSK128)              \
267                                                         \
268         ELEM2_(639, THOR25x4, MODE_THOR25x4)            \
269         ELEM2_(649, THOR50x1, MODE_THOR50x1)            \
270         ELEM2_(653, THOR50x2, MODE_THOR50x2)            \
271         ELEM2_(658, THOR100, MODE_THOR100)              \
272                                                         \
273         ELEM2_(662, DOMINOEX_44, MODE_DOMINOEX44)       \
274         ELEM2_(681, DOMINOEX_88, MODE_DOMINOEX88)       \
275                                                         \
276         ELEM2_(687, MFSK31, MODE_MFSK31)                \
277                                                         \
278         ELEM2_(691, DOMINOEX_MICRO, MODE_DOMINOEXMICRO) \
279         ELEM2_(693, THOR_MICRO, MODE_THORMICRO)         \
280                                                         \
281         ELEM2_(1026, MFSK64L, MODE_MFSK64L)             \
282         ELEM2_(1029, MFSK128L, MODE_MFSK128L)           \
283                                                         \
284         ELEM2_(1066, PSK8P125, MODE_8PSK125)            \
285         ELEM2_(1071, PSK8P250, MODE_8PSK250)            \
286         ELEM2_(1076, PSK8P500, MODE_8PSK500)            \
287         ELEM2_(1047, PSK8P1000, MODE_8PSK1000)          \
288                                                         \
289         ELEM2_(1037, PSK8P125F, MODE_8PSK125F)          \
290         ELEM2_(1038, PSK8P250F, MODE_8PSK250F)          \
291         ELEM2_(1043, PSK8P500F, MODE_8PSK500F)          \
292         ELEM2_(1078, PSK8P1000F, MODE_8PSK1000F)        \
293         ELEM2_(1058, PSK8P1200F, MODE_8PSK1200F)        \
294                                                         \
295         ELEM2_(1239, PSK8P125FL, MODE_8PSK125FL)        \
296         ELEM2_(2052, PSK8P250FL, MODE_8PSK250FL)        \
297                                                         \
298         ELEM2_(2053, OFDM500F, MODE_OFDM_500F)          \
299         ELEM2_(2094, OFDM7F0F, MODE_OFDM_750F)          \
300         ELEM2_(2118, OFDM2000, MODE_OFDM_2000)          \
301         ELEM2_(2110, OFDM2000F, MODE_OFDM_2000F)        \
302                                                         \
303         ELEM2_(1171, IFKP, MODE_IFKP)                   \
304                                                         \
305         ELEM2_(0, NONE2, NUM_MODES)
306 
307 #define ELEM2_(code_, tag_, mode_) RSID_ ## tag_ = code_,
308 enum { RSID_LIST2 };
309 #undef ELEM2_
310 
311 #define ELEM2_(code_, tag_, mode_) { RSID_ ## tag_, mode_, #tag_ },
312 const RSIDs cRsId::rsid_ids_2[] = { RSID_LIST2 };
313 #undef ELEM2_
314 
315 const int cRsId::rsid_ids_size2 = sizeof(rsid_ids_2)/sizeof(*rsid_ids_2) - 1;
316 
317