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.
7
/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_implode.c,v 1.2 1996/07/02 14:32:43 jutta Exp jutta $ */
14
void gsm_implode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
16
/* variable size index
102
/* There are 76 parameters per frame. The first eight are
103
* unique. The remaining 68 are four identical subframes of
104
* 17 parameters each. gsm_implode converts from a representation
105
* of these parameters as values in one array of signed words
106
* to the "packed" version of a GSM frame.
110
# define Nc *((gsm_signal (*) [17])(source + 8))
111
# define bc *((gsm_signal (*) [17])(source + 9))
112
# define Mc *((gsm_signal (*) [17])(source + 10))
113
# define xmaxc *((gsm_signal (*) [17])(source + 11))
119
if (s->frame_index) {
120
sr = sr >> 6 | LARc[0] << 10;
121
sr = sr >> 6 | LARc[1] << 10;
123
sr = sr >> 5 | LARc[2] << 11;
125
sr = sr >> 5 | LARc[3] << 11;
126
sr = sr >> 4 | LARc[4] << 12;
128
sr = sr >> 4 | LARc[5] << 12;
129
sr = sr >> 3 | LARc[6] << 13;
131
sr = sr >> 3 | LARc[7] << 13;
132
sr = sr >> 7 | Nc[0] << 9;
134
sr = sr >> 2 | bc[0] << 14;
135
sr = sr >> 2 | Mc[0] << 14;
136
sr = sr >> 6 | xmaxc[0] << 10;
139
#define xmc (source + 12)
141
sr = sr >> 3 | xmc[0] << 13;
143
sr = sr >> 3 | xmc[1] << 13;
144
sr = sr >> 3 | xmc[2] << 13;
145
sr = sr >> 3 | xmc[3] << 13;
147
sr = sr >> 3 | xmc[4] << 13;
148
sr = sr >> 3 | xmc[5] << 13;
149
sr = sr >> 3 | xmc[6] << 13;
151
sr = sr >> 3 | xmc[7] << 13;
152
sr = sr >> 3 | xmc[8] << 13;
154
sr = sr >> 3 | xmc[9] << 13;
155
sr = sr >> 3 | xmc[10] << 13;
156
sr = sr >> 3 | xmc[11] << 13;
158
sr = sr >> 3 | xmc[12] << 13;
159
sr = sr >> 7 | Nc[1] << 9;
161
sr = sr >> 2 | bc[1] << 14;
162
sr = sr >> 2 | Mc[1] << 14;
163
sr = sr >> 6 | xmaxc[1] << 10;
166
#define xmc (source + 29 - 13)
168
sr = sr >> 3 | xmc[13] << 13;
170
sr = sr >> 3 | xmc[14] << 13;
171
sr = sr >> 3 | xmc[15] << 13;
172
sr = sr >> 3 | xmc[16] << 13;
174
sr = sr >> 3 | xmc[17] << 13;
175
sr = sr >> 3 | xmc[18] << 13;
176
sr = sr >> 3 | xmc[19] << 13;
178
sr = sr >> 3 | xmc[20] << 13;
179
sr = sr >> 3 | xmc[21] << 13;
181
sr = sr >> 3 | xmc[22] << 13;
182
sr = sr >> 3 | xmc[23] << 13;
183
sr = sr >> 3 | xmc[24] << 13;
185
sr = sr >> 3 | xmc[25] << 13;
186
sr = sr >> 7 | Nc[2] << 9;
188
sr = sr >> 2 | bc[2] << 14;
189
sr = sr >> 2 | Mc[2] << 14;
190
sr = sr >> 6 | xmaxc[2] << 10;
193
#define xmc (source + 46 - 26)
195
sr = sr >> 3 | xmc[26] << 13;
197
sr = sr >> 3 | xmc[27] << 13;
198
sr = sr >> 3 | xmc[28] << 13;
199
sr = sr >> 3 | xmc[29] << 13;
201
sr = sr >> 3 | xmc[30] << 13;
202
sr = sr >> 3 | xmc[31] << 13;
203
sr = sr >> 3 | xmc[32] << 13;
205
sr = sr >> 3 | xmc[33] << 13;
206
sr = sr >> 3 | xmc[34] << 13;
208
sr = sr >> 3 | xmc[35] << 13;
209
sr = sr >> 3 | xmc[36] << 13;
210
sr = sr >> 3 | xmc[37] << 13;
212
sr = sr >> 3 | xmc[38] << 13;
213
sr = sr >> 7 | Nc[3] << 9;
215
sr = sr >> 2 | bc[3] << 14;
216
sr = sr >> 2 | Mc[3] << 14;
217
sr = sr >> 6 | xmaxc[3] << 10;
220
#define xmc (source + 63 - 39)
222
sr = sr >> 3 | xmc[39] << 13;
224
sr = sr >> 3 | xmc[40] << 13;
225
sr = sr >> 3 | xmc[41] << 13;
226
sr = sr >> 3 | xmc[42] << 13;
228
sr = sr >> 3 | xmc[43] << 13;
229
sr = sr >> 3 | xmc[44] << 13;
230
sr = sr >> 3 | xmc[45] << 13;
232
sr = sr >> 3 | xmc[46] << 13;
233
sr = sr >> 3 | xmc[47] << 13;
235
sr = sr >> 3 | xmc[48] << 13;
236
sr = sr >> 3 | xmc[49] << 13;
237
sr = sr >> 3 | xmc[50] << 13;
239
sr = sr >> 3 | xmc[51] << 13;
245
sr = sr >> 4 | s->frame_chain << 12;
246
sr = sr >> 6 | LARc[0] << 10;
248
sr = sr >> 6 | LARc[1] << 10;
250
sr = sr >> 5 | LARc[2] << 11;
251
sr = sr >> 5 | LARc[3] << 11;
253
sr = sr >> 4 | LARc[4] << 12;
254
sr = sr >> 4 | LARc[5] << 12;
256
sr = sr >> 3 | LARc[6] << 13;
257
sr = sr >> 3 | LARc[7] << 13;
259
sr = sr >> 7 | Nc[0] << 9;
260
sr = sr >> 2 | bc[0] << 14;
262
sr = sr >> 2 | Mc[0] << 14;
263
sr = sr >> 6 | xmaxc[0] << 10;
266
#define xmc (source + 12)
268
sr = sr >> 3 | xmc[0] << 13;
269
sr = sr >> 3 | xmc[1] << 13;
270
sr = sr >> 3 | xmc[2] << 13;
272
sr = sr >> 3 | xmc[3] << 13;
273
sr = sr >> 3 | xmc[4] << 13;
275
sr = sr >> 3 | xmc[5] << 13;
276
sr = sr >> 3 | xmc[6] << 13;
277
sr = sr >> 3 | xmc[7] << 13;
279
sr = sr >> 3 | xmc[8] << 13;
280
sr = sr >> 3 | xmc[9] << 13;
281
sr = sr >> 3 | xmc[10] << 13;
283
sr = sr >> 3 | xmc[11] << 13;
284
sr = sr >> 3 | xmc[12] << 13;
286
sr = sr >> 7 | Nc[1] << 9;
287
sr = sr >> 2 | bc[1] << 14;
289
sr = sr >> 2 | Mc[1] << 14;
290
sr = sr >> 6 | xmaxc[1] << 10;
293
#define xmc (source + 29 - 13)
295
sr = sr >> 3 | xmc[13] << 13;
296
sr = sr >> 3 | xmc[14] << 13;
297
sr = sr >> 3 | xmc[15] << 13;
299
sr = sr >> 3 | xmc[16] << 13;
300
sr = sr >> 3 | xmc[17] << 13;
302
sr = sr >> 3 | xmc[18] << 13;
303
sr = sr >> 3 | xmc[19] << 13;
304
sr = sr >> 3 | xmc[20] << 13;
306
sr = sr >> 3 | xmc[21] << 13;
307
sr = sr >> 3 | xmc[22] << 13;
308
sr = sr >> 3 | xmc[23] << 13;
310
sr = sr >> 3 | xmc[24] << 13;
311
sr = sr >> 3 | xmc[25] << 13;
313
sr = sr >> 7 | Nc[2] << 9;
314
sr = sr >> 2 | bc[2] << 14;
316
sr = sr >> 2 | Mc[2] << 14;
317
sr = sr >> 6 | xmaxc[2] << 10;
320
#define xmc (source + 46 - 26)
322
sr = sr >> 3 | xmc[26] << 13;
323
sr = sr >> 3 | xmc[27] << 13;
324
sr = sr >> 3 | xmc[28] << 13;
326
sr = sr >> 3 | xmc[29] << 13;
327
sr = sr >> 3 | xmc[30] << 13;
329
sr = sr >> 3 | xmc[31] << 13;
330
sr = sr >> 3 | xmc[32] << 13;
331
sr = sr >> 3 | xmc[33] << 13;
333
sr = sr >> 3 | xmc[34] << 13;
334
sr = sr >> 3 | xmc[35] << 13;
335
sr = sr >> 3 | xmc[36] << 13;
337
sr = sr >> 3 | xmc[37] << 13;
338
sr = sr >> 3 | xmc[38] << 13;
340
sr = sr >> 7 | Nc[3] << 9;
341
sr = sr >> 2 | bc[3] << 14;
343
sr = sr >> 2 | Mc[3] << 14;
344
sr = sr >> 6 | xmaxc[3] << 10;
347
#define xmc (source + 63 - 39)
349
sr = sr >> 3 | xmc[39] << 13;
350
sr = sr >> 3 | xmc[40] << 13;
351
sr = sr >> 3 | xmc[41] << 13;
353
sr = sr >> 3 | xmc[42] << 13;
354
sr = sr >> 3 | xmc[43] << 13;
356
sr = sr >> 3 | xmc[44] << 13;
357
sr = sr >> 3 | xmc[45] << 13;
358
sr = sr >> 3 | xmc[46] << 13;
360
sr = sr >> 3 | xmc[47] << 13;
361
sr = sr >> 3 | xmc[48] << 13;
362
sr = sr >> 3 | xmc[49] << 13;
364
sr = sr >> 3 | xmc[50] << 13;
365
sr = sr >> 3 | xmc[51] << 13;
373
*c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */
374
| ((LARc[0] >> 2) & 0xF);
375
*c++ = ((LARc[0] & 0x3) << 6)
377
*c++ = ((LARc[2] & 0x1F) << 3)
378
| ((LARc[3] >> 2) & 0x7);
379
*c++ = ((LARc[3] & 0x3) << 6)
380
| ((LARc[4] & 0xF) << 2)
381
| ((LARc[5] >> 2) & 0x3);
382
*c++ = ((LARc[5] & 0x3) << 6)
383
| ((LARc[6] & 0x7) << 3)
387
*c++ = ((Nc[0] & 0x7F) << 1)
390
| ((bc[0] >> 1) & 0x1);
391
*c++ = ((bc[0] & 0x1) << 7)
394
| ((Mc[0] & 0x3) << 5)
396
| ((xmaxc[0] >> 1) & 0x1F);
397
*c++ = ((xmaxc[0] & 0x1) << 7)
400
#define xmc (source + 12)
402
| ((xmc[0] & 0x7) << 4)
403
| ((xmc[1] & 0x7) << 1)
404
| ((xmc[2] >> 2) & 0x1);
405
*c++ = ((xmc[2] & 0x3) << 6)
406
| ((xmc[3] & 0x7) << 3)
408
*c++ = ((xmc[5] & 0x7) << 5) /* 10 */
409
| ((xmc[6] & 0x7) << 2)
410
| ((xmc[7] >> 1) & 0x3);
411
*c++ = ((xmc[7] & 0x1) << 7)
412
| ((xmc[8] & 0x7) << 4)
413
| ((xmc[9] & 0x7) << 1)
414
| ((xmc[10] >> 2) & 0x1);
415
*c++ = ((xmc[10] & 0x3) << 6)
416
| ((xmc[11] & 0x7) << 3)
420
*c++ = ((Nc[1] & 0x7F) << 1)
423
| ((bc[1] >> 1) & 0x1);
424
*c++ = ((bc[1] & 0x1) << 7)
427
| ((Mc[1] & 0x3) << 5)
430
| ((xmaxc[1] >> 1) & 0x1F);
431
*c++ = ((xmaxc[1] & 0x1) << 7)
434
#define xmc (source + 29 - 13)
436
| ((xmc[13] & 0x7) << 4)
437
| ((xmc[14] & 0x7) << 1)
438
| ((xmc[15] >> 2) & 0x1);
439
*c++ = ((xmc[15] & 0x3) << 6)
440
| ((xmc[16] & 0x7) << 3)
442
*c++ = ((xmc[18] & 0x7) << 5)
443
| ((xmc[19] & 0x7) << 2)
444
| ((xmc[20] >> 1) & 0x3);
445
*c++ = ((xmc[20] & 0x1) << 7)
446
| ((xmc[21] & 0x7) << 4)
447
| ((xmc[22] & 0x7) << 1)
448
| ((xmc[23] >> 2) & 0x1);
449
*c++ = ((xmc[23] & 0x3) << 6)
450
| ((xmc[24] & 0x7) << 3)
454
*c++ = ((Nc[2] & 0x7F) << 1) /* 20 */
457
| ((bc[2] >> 1) & 0x1);
458
*c++ = ((bc[2] & 0x1) << 7)
461
| ((Mc[2] & 0x3) << 5)
464
| ((xmaxc[2] >> 1) & 0x1F);
465
*c++ = ((xmaxc[2] & 0x1) << 7)
468
#define xmc (source + 46 - 26)
470
| ((xmc[26] & 0x7) << 4)
471
| ((xmc[27] & 0x7) << 1)
472
| ((xmc[28] >> 2) & 0x1);
473
*c++ = ((xmc[28] & 0x3) << 6)
474
| ((xmc[29] & 0x7) << 3)
476
*c++ = ((xmc[31] & 0x7) << 5)
477
| ((xmc[32] & 0x7) << 2)
478
| ((xmc[33] >> 1) & 0x3);
479
*c++ = ((xmc[33] & 0x1) << 7)
480
| ((xmc[34] & 0x7) << 4)
481
| ((xmc[35] & 0x7) << 1)
482
| ((xmc[36] >> 2) & 0x1);
483
*c++ = ((xmc[36] & 0x3) << 6)
484
| ((xmc[37] & 0x7) << 3)
488
*c++ = ((Nc[3] & 0x7F) << 1)
491
| ((bc[3] >> 1) & 0x1);
492
*c++ = ((bc[3] & 0x1) << 7)
495
| ((Mc[3] & 0x3) << 5)
498
| ((xmaxc[3] >> 1) & 0x1F);
499
*c++ = ((xmaxc[3] & 0x1) << 7)
502
#define xmc (source + 63 - 39)
504
| ((xmc[39] & 0x7) << 4)
505
| ((xmc[40] & 0x7) << 1)
506
| ((xmc[41] >> 2) & 0x1);
507
*c++ = ((xmc[41] & 0x3) << 6) /* 30 */
508
| ((xmc[42] & 0x7) << 3)
510
*c++ = ((xmc[44] & 0x7) << 5)
511
| ((xmc[45] & 0x7) << 2)
512
| ((xmc[46] >> 1) & 0x3);
513
*c++ = ((xmc[46] & 0x1) << 7)
514
| ((xmc[47] & 0x7) << 4)
515
| ((xmc[48] & 0x7) << 1)
516
| ((xmc[49] >> 2) & 0x1);
517
*c++ = ((xmc[49] & 0x3) << 6)
518
| ((xmc[50] & 0x7) << 3)