|
1 /* |
|
2 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische |
|
3 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for |
|
4 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. |
|
5 */ |
|
6 |
|
7 /* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_encode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */ |
|
8 |
|
9 #include "private.h" |
|
10 #include "gsm.h" |
|
11 #include "proto.h" |
|
12 |
|
13 void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) |
|
14 { |
|
15 word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; |
|
16 |
|
17 Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); |
|
18 |
|
19 |
|
20 /* variable size |
|
21 |
|
22 GSM_MAGIC 4 |
|
23 |
|
24 LARc[0] 6 |
|
25 LARc[1] 6 |
|
26 LARc[2] 5 |
|
27 LARc[3] 5 |
|
28 LARc[4] 4 |
|
29 LARc[5] 4 |
|
30 LARc[6] 3 |
|
31 LARc[7] 3 |
|
32 |
|
33 Nc[0] 7 |
|
34 bc[0] 2 |
|
35 Mc[0] 2 |
|
36 xmaxc[0] 6 |
|
37 xmc[0] 3 |
|
38 xmc[1] 3 |
|
39 xmc[2] 3 |
|
40 xmc[3] 3 |
|
41 xmc[4] 3 |
|
42 xmc[5] 3 |
|
43 xmc[6] 3 |
|
44 xmc[7] 3 |
|
45 xmc[8] 3 |
|
46 xmc[9] 3 |
|
47 xmc[10] 3 |
|
48 xmc[11] 3 |
|
49 xmc[12] 3 |
|
50 |
|
51 Nc[1] 7 |
|
52 bc[1] 2 |
|
53 Mc[1] 2 |
|
54 xmaxc[1] 6 |
|
55 xmc[13] 3 |
|
56 xmc[14] 3 |
|
57 xmc[15] 3 |
|
58 xmc[16] 3 |
|
59 xmc[17] 3 |
|
60 xmc[18] 3 |
|
61 xmc[19] 3 |
|
62 xmc[20] 3 |
|
63 xmc[21] 3 |
|
64 xmc[22] 3 |
|
65 xmc[23] 3 |
|
66 xmc[24] 3 |
|
67 xmc[25] 3 |
|
68 |
|
69 Nc[2] 7 |
|
70 bc[2] 2 |
|
71 Mc[2] 2 |
|
72 xmaxc[2] 6 |
|
73 xmc[26] 3 |
|
74 xmc[27] 3 |
|
75 xmc[28] 3 |
|
76 xmc[29] 3 |
|
77 xmc[30] 3 |
|
78 xmc[31] 3 |
|
79 xmc[32] 3 |
|
80 xmc[33] 3 |
|
81 xmc[34] 3 |
|
82 xmc[35] 3 |
|
83 xmc[36] 3 |
|
84 xmc[37] 3 |
|
85 xmc[38] 3 |
|
86 |
|
87 Nc[3] 7 |
|
88 bc[3] 2 |
|
89 Mc[3] 2 |
|
90 xmaxc[3] 6 |
|
91 xmc[39] 3 |
|
92 xmc[40] 3 |
|
93 xmc[41] 3 |
|
94 xmc[42] 3 |
|
95 xmc[43] 3 |
|
96 xmc[44] 3 |
|
97 xmc[45] 3 |
|
98 xmc[46] 3 |
|
99 xmc[47] 3 |
|
100 xmc[48] 3 |
|
101 xmc[49] 3 |
|
102 xmc[50] 3 |
|
103 xmc[51] 3 |
|
104 */ |
|
105 |
|
106 #ifdef WAV49 |
|
107 |
|
108 if (s->wav_fmt) { |
|
109 s->frame_index = !s->frame_index; |
|
110 if (s->frame_index) { |
|
111 |
|
112 uword sr; |
|
113 |
|
114 sr = 0; |
|
115 sr = sr >> 6 | LARc[0] << 10; |
|
116 sr = sr >> 6 | LARc[1] << 10; |
|
117 *c++ = sr >> 4; |
|
118 sr = sr >> 5 | LARc[2] << 11; |
|
119 *c++ = sr >> 7; |
|
120 sr = sr >> 5 | LARc[3] << 11; |
|
121 sr = sr >> 4 | LARc[4] << 12; |
|
122 *c++ = sr >> 6; |
|
123 sr = sr >> 4 | LARc[5] << 12; |
|
124 sr = sr >> 3 | LARc[6] << 13; |
|
125 *c++ = sr >> 7; |
|
126 sr = sr >> 3 | LARc[7] << 13; |
|
127 sr = sr >> 7 | Nc[0] << 9; |
|
128 *c++ = sr >> 5; |
|
129 sr = sr >> 2 | bc[0] << 14; |
|
130 sr = sr >> 2 | Mc[0] << 14; |
|
131 sr = sr >> 6 | xmaxc[0] << 10; |
|
132 *c++ = sr >> 3; |
|
133 sr = sr >> 3 | xmc[0] << 13; |
|
134 *c++ = sr >> 8; |
|
135 sr = sr >> 3 | xmc[1] << 13; |
|
136 sr = sr >> 3 | xmc[2] << 13; |
|
137 sr = sr >> 3 | xmc[3] << 13; |
|
138 *c++ = sr >> 7; |
|
139 sr = sr >> 3 | xmc[4] << 13; |
|
140 sr = sr >> 3 | xmc[5] << 13; |
|
141 sr = sr >> 3 | xmc[6] << 13; |
|
142 *c++ = sr >> 6; |
|
143 sr = sr >> 3 | xmc[7] << 13; |
|
144 sr = sr >> 3 | xmc[8] << 13; |
|
145 *c++ = sr >> 8; |
|
146 sr = sr >> 3 | xmc[9] << 13; |
|
147 sr = sr >> 3 | xmc[10] << 13; |
|
148 sr = sr >> 3 | xmc[11] << 13; |
|
149 *c++ = sr >> 7; |
|
150 sr = sr >> 3 | xmc[12] << 13; |
|
151 sr = sr >> 7 | Nc[1] << 9; |
|
152 *c++ = sr >> 5; |
|
153 sr = sr >> 2 | bc[1] << 14; |
|
154 sr = sr >> 2 | Mc[1] << 14; |
|
155 sr = sr >> 6 | xmaxc[1] << 10; |
|
156 *c++ = sr >> 3; |
|
157 sr = sr >> 3 | xmc[13] << 13; |
|
158 *c++ = sr >> 8; |
|
159 sr = sr >> 3 | xmc[14] << 13; |
|
160 sr = sr >> 3 | xmc[15] << 13; |
|
161 sr = sr >> 3 | xmc[16] << 13; |
|
162 *c++ = sr >> 7; |
|
163 sr = sr >> 3 | xmc[17] << 13; |
|
164 sr = sr >> 3 | xmc[18] << 13; |
|
165 sr = sr >> 3 | xmc[19] << 13; |
|
166 *c++ = sr >> 6; |
|
167 sr = sr >> 3 | xmc[20] << 13; |
|
168 sr = sr >> 3 | xmc[21] << 13; |
|
169 *c++ = sr >> 8; |
|
170 sr = sr >> 3 | xmc[22] << 13; |
|
171 sr = sr >> 3 | xmc[23] << 13; |
|
172 sr = sr >> 3 | xmc[24] << 13; |
|
173 *c++ = sr >> 7; |
|
174 sr = sr >> 3 | xmc[25] << 13; |
|
175 sr = sr >> 7 | Nc[2] << 9; |
|
176 *c++ = sr >> 5; |
|
177 sr = sr >> 2 | bc[2] << 14; |
|
178 sr = sr >> 2 | Mc[2] << 14; |
|
179 sr = sr >> 6 | xmaxc[2] << 10; |
|
180 *c++ = sr >> 3; |
|
181 sr = sr >> 3 | xmc[26] << 13; |
|
182 *c++ = sr >> 8; |
|
183 sr = sr >> 3 | xmc[27] << 13; |
|
184 sr = sr >> 3 | xmc[28] << 13; |
|
185 sr = sr >> 3 | xmc[29] << 13; |
|
186 *c++ = sr >> 7; |
|
187 sr = sr >> 3 | xmc[30] << 13; |
|
188 sr = sr >> 3 | xmc[31] << 13; |
|
189 sr = sr >> 3 | xmc[32] << 13; |
|
190 *c++ = sr >> 6; |
|
191 sr = sr >> 3 | xmc[33] << 13; |
|
192 sr = sr >> 3 | xmc[34] << 13; |
|
193 *c++ = sr >> 8; |
|
194 sr = sr >> 3 | xmc[35] << 13; |
|
195 sr = sr >> 3 | xmc[36] << 13; |
|
196 sr = sr >> 3 | xmc[37] << 13; |
|
197 *c++ = sr >> 7; |
|
198 sr = sr >> 3 | xmc[38] << 13; |
|
199 sr = sr >> 7 | Nc[3] << 9; |
|
200 *c++ = sr >> 5; |
|
201 sr = sr >> 2 | bc[3] << 14; |
|
202 sr = sr >> 2 | Mc[3] << 14; |
|
203 sr = sr >> 6 | xmaxc[3] << 10; |
|
204 *c++ = sr >> 3; |
|
205 sr = sr >> 3 | xmc[39] << 13; |
|
206 *c++ = sr >> 8; |
|
207 sr = sr >> 3 | xmc[40] << 13; |
|
208 sr = sr >> 3 | xmc[41] << 13; |
|
209 sr = sr >> 3 | xmc[42] << 13; |
|
210 *c++ = sr >> 7; |
|
211 sr = sr >> 3 | xmc[43] << 13; |
|
212 sr = sr >> 3 | xmc[44] << 13; |
|
213 sr = sr >> 3 | xmc[45] << 13; |
|
214 *c++ = sr >> 6; |
|
215 sr = sr >> 3 | xmc[46] << 13; |
|
216 sr = sr >> 3 | xmc[47] << 13; |
|
217 *c++ = sr >> 8; |
|
218 sr = sr >> 3 | xmc[48] << 13; |
|
219 sr = sr >> 3 | xmc[49] << 13; |
|
220 sr = sr >> 3 | xmc[50] << 13; |
|
221 *c++ = sr >> 7; |
|
222 sr = sr >> 3 | xmc[51] << 13; |
|
223 sr = sr >> 4; |
|
224 *c = sr >> 8; |
|
225 s->frame_chain = *c; |
|
226 } |
|
227 else { |
|
228 uword sr; |
|
229 |
|
230 sr = 0; |
|
231 sr = sr >> 4 | s->frame_chain << 12; |
|
232 sr = sr >> 6 | LARc[0] << 10; |
|
233 *c++ = sr >> 6; |
|
234 sr = sr >> 6 | LARc[1] << 10; |
|
235 *c++ = sr >> 8; |
|
236 sr = sr >> 5 | LARc[2] << 11; |
|
237 sr = sr >> 5 | LARc[3] << 11; |
|
238 *c++ = sr >> 6; |
|
239 sr = sr >> 4 | LARc[4] << 12; |
|
240 sr = sr >> 4 | LARc[5] << 12; |
|
241 *c++ = sr >> 6; |
|
242 sr = sr >> 3 | LARc[6] << 13; |
|
243 sr = sr >> 3 | LARc[7] << 13; |
|
244 *c++ = sr >> 8; |
|
245 sr = sr >> 7 | Nc[0] << 9; |
|
246 sr = sr >> 2 | bc[0] << 14; |
|
247 *c++ = sr >> 7; |
|
248 sr = sr >> 2 | Mc[0] << 14; |
|
249 sr = sr >> 6 | xmaxc[0] << 10; |
|
250 *c++ = sr >> 7; |
|
251 sr = sr >> 3 | xmc[0] << 13; |
|
252 sr = sr >> 3 | xmc[1] << 13; |
|
253 sr = sr >> 3 | xmc[2] << 13; |
|
254 *c++ = sr >> 6; |
|
255 sr = sr >> 3 | xmc[3] << 13; |
|
256 sr = sr >> 3 | xmc[4] << 13; |
|
257 *c++ = sr >> 8; |
|
258 sr = sr >> 3 | xmc[5] << 13; |
|
259 sr = sr >> 3 | xmc[6] << 13; |
|
260 sr = sr >> 3 | xmc[7] << 13; |
|
261 *c++ = sr >> 7; |
|
262 sr = sr >> 3 | xmc[8] << 13; |
|
263 sr = sr >> 3 | xmc[9] << 13; |
|
264 sr = sr >> 3 | xmc[10] << 13; |
|
265 *c++ = sr >> 6; |
|
266 sr = sr >> 3 | xmc[11] << 13; |
|
267 sr = sr >> 3 | xmc[12] << 13; |
|
268 *c++ = sr >> 8; |
|
269 sr = sr >> 7 | Nc[1] << 9; |
|
270 sr = sr >> 2 | bc[1] << 14; |
|
271 *c++ = sr >> 7; |
|
272 sr = sr >> 2 | Mc[1] << 14; |
|
273 sr = sr >> 6 | xmaxc[1] << 10; |
|
274 *c++ = sr >> 7; |
|
275 sr = sr >> 3 | xmc[13] << 13; |
|
276 sr = sr >> 3 | xmc[14] << 13; |
|
277 sr = sr >> 3 | xmc[15] << 13; |
|
278 *c++ = sr >> 6; |
|
279 sr = sr >> 3 | xmc[16] << 13; |
|
280 sr = sr >> 3 | xmc[17] << 13; |
|
281 *c++ = sr >> 8; |
|
282 sr = sr >> 3 | xmc[18] << 13; |
|
283 sr = sr >> 3 | xmc[19] << 13; |
|
284 sr = sr >> 3 | xmc[20] << 13; |
|
285 *c++ = sr >> 7; |
|
286 sr = sr >> 3 | xmc[21] << 13; |
|
287 sr = sr >> 3 | xmc[22] << 13; |
|
288 sr = sr >> 3 | xmc[23] << 13; |
|
289 *c++ = sr >> 6; |
|
290 sr = sr >> 3 | xmc[24] << 13; |
|
291 sr = sr >> 3 | xmc[25] << 13; |
|
292 *c++ = sr >> 8; |
|
293 sr = sr >> 7 | Nc[2] << 9; |
|
294 sr = sr >> 2 | bc[2] << 14; |
|
295 *c++ = sr >> 7; |
|
296 sr = sr >> 2 | Mc[2] << 14; |
|
297 sr = sr >> 6 | xmaxc[2] << 10; |
|
298 *c++ = sr >> 7; |
|
299 sr = sr >> 3 | xmc[26] << 13; |
|
300 sr = sr >> 3 | xmc[27] << 13; |
|
301 sr = sr >> 3 | xmc[28] << 13; |
|
302 *c++ = sr >> 6; |
|
303 sr = sr >> 3 | xmc[29] << 13; |
|
304 sr = sr >> 3 | xmc[30] << 13; |
|
305 *c++ = sr >> 8; |
|
306 sr = sr >> 3 | xmc[31] << 13; |
|
307 sr = sr >> 3 | xmc[32] << 13; |
|
308 sr = sr >> 3 | xmc[33] << 13; |
|
309 *c++ = sr >> 7; |
|
310 sr = sr >> 3 | xmc[34] << 13; |
|
311 sr = sr >> 3 | xmc[35] << 13; |
|
312 sr = sr >> 3 | xmc[36] << 13; |
|
313 *c++ = sr >> 6; |
|
314 sr = sr >> 3 | xmc[37] << 13; |
|
315 sr = sr >> 3 | xmc[38] << 13; |
|
316 *c++ = sr >> 8; |
|
317 sr = sr >> 7 | Nc[3] << 9; |
|
318 sr = sr >> 2 | bc[3] << 14; |
|
319 *c++ = sr >> 7; |
|
320 sr = sr >> 2 | Mc[3] << 14; |
|
321 sr = sr >> 6 | xmaxc[3] << 10; |
|
322 *c++ = sr >> 7; |
|
323 sr = sr >> 3 | xmc[39] << 13; |
|
324 sr = sr >> 3 | xmc[40] << 13; |
|
325 sr = sr >> 3 | xmc[41] << 13; |
|
326 *c++ = sr >> 6; |
|
327 sr = sr >> 3 | xmc[42] << 13; |
|
328 sr = sr >> 3 | xmc[43] << 13; |
|
329 *c++ = sr >> 8; |
|
330 sr = sr >> 3 | xmc[44] << 13; |
|
331 sr = sr >> 3 | xmc[45] << 13; |
|
332 sr = sr >> 3 | xmc[46] << 13; |
|
333 *c++ = sr >> 7; |
|
334 sr = sr >> 3 | xmc[47] << 13; |
|
335 sr = sr >> 3 | xmc[48] << 13; |
|
336 sr = sr >> 3 | xmc[49] << 13; |
|
337 *c++ = sr >> 6; |
|
338 sr = sr >> 3 | xmc[50] << 13; |
|
339 sr = sr >> 3 | xmc[51] << 13; |
|
340 *c++ = sr >> 8; |
|
341 } |
|
342 } |
|
343 |
|
344 else |
|
345 |
|
346 #endif /* WAV49 */ |
|
347 { |
|
348 |
|
349 *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ |
|
350 | ((LARc[0] >> 2) & 0xF); |
|
351 *c++ = ((LARc[0] & 0x3) << 6) |
|
352 | (LARc[1] & 0x3F); |
|
353 *c++ = ((LARc[2] & 0x1F) << 3) |
|
354 | ((LARc[3] >> 2) & 0x7); |
|
355 *c++ = ((LARc[3] & 0x3) << 6) |
|
356 | ((LARc[4] & 0xF) << 2) |
|
357 | ((LARc[5] >> 2) & 0x3); |
|
358 *c++ = ((LARc[5] & 0x3) << 6) |
|
359 | ((LARc[6] & 0x7) << 3) |
|
360 | (LARc[7] & 0x7); |
|
361 *c++ = ((Nc[0] & 0x7F) << 1) |
|
362 | ((bc[0] >> 1) & 0x1); |
|
363 *c++ = ((bc[0] & 0x1) << 7) |
|
364 | ((Mc[0] & 0x3) << 5) |
|
365 | ((xmaxc[0] >> 1) & 0x1F); |
|
366 *c++ = ((xmaxc[0] & 0x1) << 7) |
|
367 | ((xmc[0] & 0x7) << 4) |
|
368 | ((xmc[1] & 0x7) << 1) |
|
369 | ((xmc[2] >> 2) & 0x1); |
|
370 *c++ = ((xmc[2] & 0x3) << 6) |
|
371 | ((xmc[3] & 0x7) << 3) |
|
372 | (xmc[4] & 0x7); |
|
373 *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ |
|
374 | ((xmc[6] & 0x7) << 2) |
|
375 | ((xmc[7] >> 1) & 0x3); |
|
376 *c++ = ((xmc[7] & 0x1) << 7) |
|
377 | ((xmc[8] & 0x7) << 4) |
|
378 | ((xmc[9] & 0x7) << 1) |
|
379 | ((xmc[10] >> 2) & 0x1); |
|
380 *c++ = ((xmc[10] & 0x3) << 6) |
|
381 | ((xmc[11] & 0x7) << 3) |
|
382 | (xmc[12] & 0x7); |
|
383 *c++ = ((Nc[1] & 0x7F) << 1) |
|
384 | ((bc[1] >> 1) & 0x1); |
|
385 *c++ = ((bc[1] & 0x1) << 7) |
|
386 | ((Mc[1] & 0x3) << 5) |
|
387 | ((xmaxc[1] >> 1) & 0x1F); |
|
388 *c++ = ((xmaxc[1] & 0x1) << 7) |
|
389 | ((xmc[13] & 0x7) << 4) |
|
390 | ((xmc[14] & 0x7) << 1) |
|
391 | ((xmc[15] >> 2) & 0x1); |
|
392 *c++ = ((xmc[15] & 0x3) << 6) |
|
393 | ((xmc[16] & 0x7) << 3) |
|
394 | (xmc[17] & 0x7); |
|
395 *c++ = ((xmc[18] & 0x7) << 5) |
|
396 | ((xmc[19] & 0x7) << 2) |
|
397 | ((xmc[20] >> 1) & 0x3); |
|
398 *c++ = ((xmc[20] & 0x1) << 7) |
|
399 | ((xmc[21] & 0x7) << 4) |
|
400 | ((xmc[22] & 0x7) << 1) |
|
401 | ((xmc[23] >> 2) & 0x1); |
|
402 *c++ = ((xmc[23] & 0x3) << 6) |
|
403 | ((xmc[24] & 0x7) << 3) |
|
404 | (xmc[25] & 0x7); |
|
405 *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ |
|
406 | ((bc[2] >> 1) & 0x1); |
|
407 *c++ = ((bc[2] & 0x1) << 7) |
|
408 | ((Mc[2] & 0x3) << 5) |
|
409 | ((xmaxc[2] >> 1) & 0x1F); |
|
410 *c++ = ((xmaxc[2] & 0x1) << 7) |
|
411 | ((xmc[26] & 0x7) << 4) |
|
412 | ((xmc[27] & 0x7) << 1) |
|
413 | ((xmc[28] >> 2) & 0x1); |
|
414 *c++ = ((xmc[28] & 0x3) << 6) |
|
415 | ((xmc[29] & 0x7) << 3) |
|
416 | (xmc[30] & 0x7); |
|
417 *c++ = ((xmc[31] & 0x7) << 5) |
|
418 | ((xmc[32] & 0x7) << 2) |
|
419 | ((xmc[33] >> 1) & 0x3); |
|
420 *c++ = ((xmc[33] & 0x1) << 7) |
|
421 | ((xmc[34] & 0x7) << 4) |
|
422 | ((xmc[35] & 0x7) << 1) |
|
423 | ((xmc[36] >> 2) & 0x1); |
|
424 *c++ = ((xmc[36] & 0x3) << 6) |
|
425 | ((xmc[37] & 0x7) << 3) |
|
426 | (xmc[38] & 0x7); |
|
427 *c++ = ((Nc[3] & 0x7F) << 1) |
|
428 | ((bc[3] >> 1) & 0x1); |
|
429 *c++ = ((bc[3] & 0x1) << 7) |
|
430 | ((Mc[3] & 0x3) << 5) |
|
431 | ((xmaxc[3] >> 1) & 0x1F); |
|
432 *c++ = ((xmaxc[3] & 0x1) << 7) |
|
433 | ((xmc[39] & 0x7) << 4) |
|
434 | ((xmc[40] & 0x7) << 1) |
|
435 | ((xmc[41] >> 2) & 0x1); |
|
436 *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ |
|
437 | ((xmc[42] & 0x7) << 3) |
|
438 | (xmc[43] & 0x7); |
|
439 *c++ = ((xmc[44] & 0x7) << 5) |
|
440 | ((xmc[45] & 0x7) << 2) |
|
441 | ((xmc[46] >> 1) & 0x3); |
|
442 *c++ = ((xmc[46] & 0x1) << 7) |
|
443 | ((xmc[47] & 0x7) << 4) |
|
444 | ((xmc[48] & 0x7) << 1) |
|
445 | ((xmc[49] >> 2) & 0x1); |
|
446 *c++ = ((xmc[49] & 0x3) << 6) |
|
447 | ((xmc[50] & 0x7) << 3) |
|
448 | (xmc[51] & 0x7); |
|
449 |
|
450 } |
|
451 } |