1
#if !defined(PSKTablesXYZ)
3
//////////////////////////////////////////////////////////////////////
4
// Copyright 1999. Moe Wheatley AE4JY <ae4jy@mindspring.com>
6
//This program is free software; you can redistribute it and/or
7
//modify it under the terms of the GNU General Public License
8
//as published by the Free Software Foundation; either version 2
9
//of the License, or any later version.
11
//This program is distributed in the hope that it will be useful,
12
//but WITHOUT ANY WARRANTY; without even the implied warranty of
13
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
//GNU General Public License for more details.
16
//You should have received a copy of the GNU General Public License
17
//along with this program; if not, write to the Free Software
18
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
//////////////////////////////////////////////////////////////////////
22
//////////////////// Various constant tabels //////////////////////////
23
// The word in the CW table is divided into 8 groups of two bits starting
24
// at the msb side. The two bits represent one of four possible states.
25
// 00 - end of character
28
// 11 - SPACE of two dot times
29
const unsigned short int CW_TABLE[59]=
31
0xF000, // 1111 0000 0000 0000b ( 32) WORD SPACE
32
0x0000, // 0000 0000 0000 0000b ( 33) !
33
0x0000, // 0000 0000 0000 0000b ( 34) "
34
0x0000, // 0000 0000 0000 0000b ( 35) #
35
0x0000, // 0000 0000 0000 0000b ( 36) $
36
0x0000, // 0000 0000 0000 0000b ( 37) %
37
0x0000, // 0000 0000 0000 0000b ( 38) &
38
0x0000, // 0000 0000 0000 0000b ( 39) '
39
0x0000, // 0000 0000 0000 0000b ( 40) (
40
0x0000, // 0000 0000 0000 0000b ( 41) )
41
0x566C, // 0101 0110 0110 1100b ( 42) * ...-.- SK
42
0x6670, // 0110 0110 0111 0000b ( 43) + .-.-. AR
43
0xA5AC, // 1010 0101 1010 1100b ( 44) , --..--
44
0x0000, // 0000 0000 0000 0000b ( 45) -
45
0x666C, // 0110 0110 0110 1100b ( 46) . .-.-.-
46
0x9670, // 1001 0110 0111 0000b ( 47) / -..-.
47
0xAAB0, // 1010 1010 1011 0000b ( 48) 0 -----
48
0x6AB0, // 0110 1010 1011 0000b ( 49) 1 .----
49
0x5AB0, // 0101 1010 1011 0000b ( 50) 2 ..---
50
0x56B0, // 0101 0110 1011 0000b ( 51) 3 ...--
51
0x55B0, // 0101 0101 1011 0000b ( 52) 4 ....-
52
0x5570, // 0101 0101 0111 0000b ( 53) 5 .....
53
0x9570, // 1001 0101 0111 0000b ( 54) 6 -....
54
0xA570, // 1010 0101 0111 0000b ( 55) 7 --...
55
0xA970, // 1010 1001 0111 0000b ( 56) 8 ---..
56
0xAA70, // 1010 1010 0111 0000b ( 57) 9 ----.
57
0x0000, // 0000 0000 0000 0000b ( 58) :
58
0x0000, // 0000 0000 0000 0000b ( 59) ;
59
0x0000, // 0000 0000 0000 0000b ( 60) <
60
0x95B0, // 1001 0101 1011 0000b ( 61) = -...- BT
61
0x0000, // 0000 0000 0000 0000b ( 62) >
62
0x5A5C, // 0101 1010 0101 1100b ( 63) ? ..--..
63
0x0000, // 0000 0000 0000 0000b ( 64) @
64
0x6C00, // 0110 1100 0000 0000b ( 65) A .-
65
0x95C0, // 1001 0101 1100 0000b ( 66) B -...
66
0x99C0, // 1001 1001 1100 0000b ( 67) C -.-.
67
0x9700, // 1001 0111 0000 0000b ( 68) D -..
68
0x7000, // 0111 0000 0000 0000b ( 69) E .
69
0x59C0, // 0101 1001 1100 0000b ( 70) F ..-.
70
0xA700, // 1010 0111 0000 0000b ( 71) G --.
71
0x55C0, // 0101 0101 1100 0000b ( 72) H ....
72
0x5C00, // 0101 1100 0000 0000b ( 73) I ..
73
0x6AC0, // 0110 1010 1100 0000b ( 74) J .---
74
0x9B00, // 1001 1011 0000 0000b ( 75) K -.-
75
0x65C0, // 0110 0101 1100 0000b ( 76) L .-..
76
0xAC00, // 1010 1100 0000 0000b ( 77) M --
77
0x9C00, // 1001 1100 0000 0000b ( 78) N -.
78
0xAB00, // 1010 1011 0000 0000b ( 79) O ---
79
0x69C0, // 0110 1001 1100 0000b ( 80) P .--.
80
0xA6C0, // 1010 0110 1100 0000b ( 81) Q --.-
81
0x6700, // 0110 0111 0000 0000b ( 82) R .-.
82
0x5700, // 0101 0111 0000 0000b ( 83) S ...
83
0xB000, // 1011 0000 0000 0000b ( 84) T -
84
0x5B00, // 0101 1011 0000 0000b ( 85) U ..-
85
0x56C0, // 0101 0110 1100 0000b ( 86) V ...-
86
0x6B00, // 0110 1011 0000 0000b ( 87) W .--
87
0x96C0, // 1001 0110 1100 0000b ( 88) X -..-
88
0x9AC0, // 1001 1010 1100 0000b ( 89) Y -.--
89
0xA5C0 // 1010 0101 1100 0000b ( 90) Z --..
92
// each character is separated by two zeros. The bits are sent msbit first.
93
const unsigned short int VARICODE_TABLE[256] = {
94
0xAAC0, // ASCII = 0 1010101011
95
0xB6C0, // ASCII = 1 1011011011
96
0xBB40, // ASCII = 2 1011101101
97
0xDDC0, // ASCII = 3 1101110111
98
0xBAC0, // ASCII = 4 1011101011
99
0xD7C0, // ASCII = 5 1101011111
100
0xBBC0, // ASCII = 6 1011101111
101
0xBF40, // ASCII = 7 1011111101
102
0xBFC0, // ASCII = 8 1011111111
103
0xEF00, // ASCII = 9 11101111
104
0xE800, // ASCII = 10 11101
105
0xDBC0, // ASCII = 11 1101101111
106
0xB740, // ASCII = 12 1011011101
107
0xF800, // ASCII = 13 11111
108
0xDD40, // ASCII = 14 1101110101
109
0xEAC0, // ASCII = 15 1110101011
110
0xBDC0, // ASCII = 16 1011110111
111
0xBD40, // ASCII = 17 1011110101
112
0xEB40, // ASCII = 18 1110101101
113
0xEBC0, // ASCII = 19 1110101111
114
0xD6C0, // ASCII = 20 1101011011
115
0xDAC0, // ASCII = 21 1101101011
116
0xDB40, // ASCII = 22 1101101101
117
0xD5C0, // ASCII = 23 1101010111
118
0xDEC0, // ASCII = 24 1101111011
119
0xDF40, // ASCII = 25 1101111101
120
0xEDC0, // ASCII = 26 1110110111
121
0xD540, // ASCII = 27 1101010101
122
0xD740, // ASCII = 28 1101011101
123
0xEEC0, // ASCII = 29 1110111011
124
0xBEC0, // ASCII = 30 1011111011
125
0xDFC0, // ASCII = 31 1101111111
126
0x8000, // ASCII = ' ' 1
127
0xFF80, // ASCII = '!' 111111111
128
0xAF80, // ASCII = '"' 101011111
129
0xFA80, // ASCII = '#' 111110101
130
0xED80, // ASCII = '$' 111011011
131
0xB540, // ASCII = '%' 1011010101
132
0xAEC0, // ASCII = '&' 1010111011
133
0xBF80, // ASCII = ''' 101111111
134
0xFB00, // ASCII = '(' 11111011
135
0xF700, // ASCII = ')' 11110111
136
0xB780, // ASCII = '*' 101101111
137
0xEF80, // ASCII = '+' 111011111
138
0xEA00, // ASCII = ',' 1110101
139
0xD400, // ASCII = '-' 110101
140
0xAE00, // ASCII = '.' 1010111
141
0xD780, // ASCII = '/' 110101111
142
0xB700, // ASCII = '0' 10110111
143
0xBD00, // ASCII = '1' 10111101
144
0xED00, // ASCII = '2' 11101101
145
0xFF00, // ASCII = '3' 11111111
146
0xBB80, // ASCII = '4' 101110111
147
0xAD80, // ASCII = '5' 101011011
148
0xB580, // ASCII = '6' 101101011
149
0xD680, // ASCII = '7' 110101101
150
0xD580, // ASCII = '8' 110101011
151
0xDB80, // ASCII = '9' 110110111
152
0xF500, // ASCII = ':' 11110101
153
0xDE80, // ASCII = ';' 110111101
154
0xF680, // ASCII = '<' 111101101
155
0xAA00, // ASCII = '=' 1010101
156
0xEB80, // ASCII = '>' 111010111
157
0xABC0, // ASCII = '?' 1010101111
158
0xAF40, // ASCII = '@' 1010111101
159
0xFA00, // ASCII = 'A' 1111101
160
0xEB00, // ASCII = 'B' 11101011
161
0xAD00, // ASCII = 'C' 10101101
162
0xB500, // ASCII = 'D' 10110101
163
0xEE00, // ASCII = 'E' 1110111
164
0xDB00, // ASCII = 'F' 11011011
165
0xFD00, // ASCII = 'G' 11111101
166
0xAA80, // ASCII = 'H' 101010101
167
0xFE00, // ASCII = 'I' 1111111
168
0xFE80, // ASCII = 'J' 111111101
169
0xBE80, // ASCII = 'K' 101111101
170
0xD700, // ASCII = 'L' 11010111
171
0xBB00, // ASCII = 'M' 10111011
172
0xDD00, // ASCII = 'N' 11011101
173
0xAB00, // ASCII = 'O' 10101011
174
0xD500, // ASCII = 'P' 11010101
175
0xEE80, // ASCII = 'Q' 111011101
176
0xAF00, // ASCII = 'R' 10101111
177
0xDE00, // ASCII = 'S' 1101111
178
0xDA00, // ASCII = 'T' 1101101
179
0xAB80, // ASCII = 'U' 101010111
180
0xDA80, // ASCII = 'V' 110110101
181
0xAE80, // ASCII = 'W' 101011101
182
0xBA80, // ASCII = 'X' 101110101
183
0xBD80, // ASCII = 'Y' 101111011
184
0xAB40, // ASCII = 'Z' 1010101101
185
0xFB80, // ASCII = '[' 111110111
186
0xF780, // ASCII = '\' 111101111
187
0xFD80, // ASCII = ']' 111111011
188
0xAFC0, // ASCII = '^' 1010111111
189
0xB680, // ASCII = '_' 101101101
190
0xB7C0, // ASCII = '`' 1011011111
191
0xB000, // ASCII = 'a' 1011
192
0xBE00, // ASCII = 'b' 1011111
193
0xBC00, // ASCII = 'c' 101111
194
0xB400, // ASCII = 'd' 101101
195
0xC000, // ASCII = 'e' 11
196
0xF400, // ASCII = 'f' 111101
197
0xB600, // ASCII = 'g' 1011011
198
0xAC00, // ASCII = 'h' 101011
199
0xD000, // ASCII = 'i' 1101
200
0xF580, // ASCII = 'j' 111101011
201
0xBF00, // ASCII = 'k' 10111111
202
0xD800, // ASCII = 'l' 11011
203
0xEC00, // ASCII = 'm' 111011
204
0xF000, // ASCII = 'n' 1111
205
0xE000, // ASCII = 'o' 111
206
0xFC00, // ASCII = 'p' 111111
207
0xDF80, // ASCII = 'q' 110111111
208
0xA800, // ASCII = 'r' 10101
209
0xB800, // ASCII = 's' 10111
210
0xA000, // ASCII = 't' 101
211
0xDC00, // ASCII = 'u' 110111
212
0xF600, // ASCII = 'v' 1111011
213
0xD600, // ASCII = 'w' 1101011
214
0xDF00, // ASCII = 'x' 11011111
215
0xBA00, // ASCII = 'y' 1011101
216
0xEA80, // ASCII = 'z' 111010101
217
0xADC0, // ASCII = '{' 1010110111
219
0xDD80, // ASCII = '|' 110111011
220
0xAD40, // ASCII = '}' 1010110101
221
0xB5C0, // ASCII = '~' 1011010111
222
0xED40, // ASCII = 127 1110110101
223
0xEF40, // ASCII = 128 1110111101
224
0xEFC0, // ASCII = 129 1110111111
225
0xF540, // ASCII = 130 1111010101
226
0xF5C0, // ASCII = 131 1111010111
227
0xF6C0, // ASCII = 132 1111011011
228
0xF740, // ASCII = 133 1111011101
229
0xF7C0, // ASCII = 134 1111011111
230
0xFAC0, // ASCII = 135 1111101011
231
0xFB40, // ASCII = 136 1111101101
232
0xFBC0, // ASCII = 137 1111101111
233
0xFD40, // ASCII = 138 1111110101
234
0xFDC0, // ASCII = 139 1111110111
235
0xFEC0, // ASCII = 140 1111111011
236
0xFF40, // ASCII = 141 1111111101
237
0xFFC0, // ASCII = 142 1111111111
238
0xAAA0, // ASCII = 143 10101010101
239
0xAAE0, // ASCII = 144 10101010111
240
0xAB60, // ASCII = 145 10101011011
241
0xABA0, // ASCII = 146 10101011101
242
0xABE0, // ASCII = 147 10101011111
243
0xAD60, // ASCII = 148 10101101011
244
0xADA0, // ASCII = 149 10101101101
245
0xADE0, // ASCII = 150 10101101111
246
0xAEA0, // ASCII = 151 10101110101
247
0xAEE0, // ASCII = 152 10101110111
248
0xAF60, // ASCII = 153 10101111011
249
0xAFA0, // ASCII = 154 10101111101
250
0xAFE0, // ASCII = 155 10101111111
251
0xB560, // ASCII = 156 10110101011
252
0xB5A0, // ASCII = 157 10110101101
253
0xB5E0, // ASCII = 158 10110101111
254
0xB6A0, // ASCII = 159 10110110101
255
0xB6E0, // ASCII = 160 10110110111
256
0xB760, // ASCII = 161 10110111011
257
0xB7A0, // ASCII = 162 10110111101
258
0xB7E0, // ASCII = 163 10110111111
259
0xBAA0, // ASCII = 164 10111010101
260
0xBAE0, // ASCII = 165 10111010111
261
0xBB60, // ASCII = 166 10111011011
262
0xBBA0, // ASCII = 167 10111011101
263
0xBBE0, // ASCII = 168 10111011111
264
0xBD60, // ASCII = 169 10111101011
265
0xBDA0, // ASCII = 170 10111101101
266
0xBDE0, // ASCII = 171 10111101111
267
0xBEA0, // ASCII = 172 10111110101
268
0xBEE0, // ASCII = 173 10111110111
269
0xBF60, // ASCII = 174 10111111011
270
0xBFA0, // ASCII = 175 10111111101
271
0xBFE0, // ASCII = 176 10111111111
272
0xD560, // ASCII = 177 11010101011
273
0xD5A0, // ASCII = 178 11010101101
274
0xD5E0, // ASCII = 179 11010101111
275
0xD6A0, // ASCII = 180 11010110101
276
0xD6E0, // ASCII = 181 11010110111
277
0xD760, // ASCII = 182 11010111011
278
0xD7A0, // ASCII = 183 11010111101
279
0xD7E0, // ASCII = 184 11010111111
280
0xDAA0, // ASCII = 185 11011010101
281
0xDAE0, // ASCII = 186 11011010111
282
0xDB60, // ASCII = 187 11011011011
283
0xDBA0, // ASCII = 188 11011011101
284
0xDBE0, // ASCII = 189 11011011111
285
0xDD60, // ASCII = 190 11011101011
286
0xDDA0, // ASCII = 191 11011101101
287
0xDDE0, // ASCII = 192 11011101111
288
0xDEA0, // ASCII = 193 11011110101
289
0xDEE0, // ASCII = 194 11011110111
290
0xDF60, // ASCII = 195 11011111011
291
0xDFA0, // ASCII = 196 11011111101
292
0xDFE0, // ASCII = 197 11011111111
293
0xEAA0, // ASCII = 198 11101010101
294
0xEAE0, // ASCII = 199 11101010111
295
0xEB60, // ASCII = 200 11101011011
296
0xEBA0, // ASCII = 201 11101011101
297
0xEBE0, // ASCII = 202 11101011111
298
0xED60, // ASCII = 203 11101101011
299
0xEDA0, // ASCII = 204 11101101101
300
0xEDE0, // ASCII = 205 11101101111
301
0xEEA0, // ASCII = 206 11101110101
302
0xEEE0, // ASCII = 207 11101110111
303
0xEF60, // ASCII = 208 11101111011
304
0xEFA0, // ASCII = 209 11101111101
305
0xEFE0, // ASCII = 210 11101111111
306
0xF560, // ASCII = 211 11110101011
307
0xF5A0, // ASCII = 212 11110101101
308
0xF5E0, // ASCII = 213 11110101111
309
0xF6A0, // ASCII = 214 11110110101
310
0xF6E0, // ASCII = 215 11110110111
311
0xF760, // ASCII = 216 11110111011
312
0xF7A0, // ASCII = 217 11110111101
313
0xF7E0, // ASCII = 218 11110111111
314
0xFAA0, // ASCII = 219 11111010101
315
0xFAE0, // ASCII = 220 11111010111
316
0xFB60, // ASCII = 221 11111011011
317
0xFBA0, // ASCII = 222 11111011101
318
0xFBE0, // ASCII = 223 11111011111
319
0xFD60, // ASCII = 224 11111101011
320
0xFDA0, // ASCII = 225 11111101101
321
0xFDE0, // ASCII = 226 11111101111
322
0xFEA0, // ASCII = 227 11111110101
323
0xFEE0, // ASCII = 228 11111110111
324
0xFF60, // ASCII = 229 11111111011
325
0xFFA0, // ASCII = 230 11111111101
326
0xFFE0, // ASCII = 231 11111111111
327
0xAAB0, // ASCII = 232 101010101011
328
0xAAD0, // ASCII = 233 101010101101
329
0xAAF0, // ASCII = 234 101010101111
330
0xAB50, // ASCII = 235 101010110101
331
0xAB70, // ASCII = 236 101010110111
332
0xABB0, // ASCII = 237 101010111011
333
0xABD0, // ASCII = 238 101010111101
334
0xABF0, // ASCII = 239 101010111111
335
0xAD50, // ASCII = 240 101011010101
336
0xAD70, // ASCII = 241 101011010111
337
0xADB0, // ASCII = 242 101011011011
338
0xADD0, // ASCII = 243 101011011101
339
0xADF0, // ASCII = 244 101011011111
340
0xAEB0, // ASCII = 245 101011101011
341
0xAED0, // ASCII = 246 101011101101
342
0xAEF0, // ASCII = 247 101011101111
343
0xAF50, // ASCII = 248 101011110101
344
0xAF70, // ASCII = 249 101011110111
345
0xAFB0, // ASCII = 250 101011111011
346
0xAFD0, // ASCII = 251 101011111101
347
0xAFF0, // ASCII = 252 101011111111
348
0xB550, // ASCII = 253 101101010101
349
0xB570, // ASCII = 254 101101010111
350
0xB5B0 // ASCII = 255 101101011011
353
// For the QPSK modulator/demodulator, rate 1/2 constraint length 5
354
// convolutional FEC coding is used.
355
// The generator polynomials used are:
356
// g1(x) = x^4 + x^3 + 1 = 0x19
357
// g0(x) = x^4 + x^2 + x + 1 = 0x17
360
// /----+--------+--------------------------+
362
// symbol msb --- --- --- --- ---
363
// | b4|<---| b3|<---| b2|<---| b1|<---| b0| <-- inverted data in
364
// symbol lsb --- --- --- --- ---
366
// \----+-----------------+--------+--------+
369
// Lookup table to get symbol from non-inverted data stream
370
static const unsigned char ConvolutionCodeTable[32] =
372
2, 1, 3, 0, 3, 0, 2, 1,
373
0, 3, 1, 2, 1, 2, 0, 3,
374
1, 2, 0, 3, 0, 3, 1, 2,
375
3, 0, 2, 1, 2, 1, 3, 0