Wed Jan 8 2020 09:49:48

Asterisk developer's documentation


msgsm.h
Go to the documentation of this file.
1 /* Conversion routines derived from code by guido@sienanet.it */
2 
3 #define GSM_MAGIC 0xD
4 
5 #ifndef GSM_H
6 typedef unsigned char gsm_byte;
7 #endif
8 typedef unsigned char wav_byte;
9 typedef unsigned int uword;
10 
11 #define readGSM_33(c1) { \
12  gsm_byte *__c = (c1); \
13  LARc[0] = (*__c++ & 0xF) << 2; /* 1 */ \
14  LARc[0] |= (*__c >> 6) & 0x3; \
15  LARc[1] = *__c++ & 0x3F; \
16  LARc[2] = (*__c >> 3) & 0x1F; \
17  LARc[3] = (*__c++ & 0x7) << 2; \
18  LARc[3] |= (*__c >> 6) & 0x3; \
19  LARc[4] = (*__c >> 2) & 0xF; \
20  LARc[5] = (*__c++ & 0x3) << 2; \
21  LARc[5] |= (*__c >> 6) & 0x3; \
22  LARc[6] = (*__c >> 3) & 0x7; \
23  LARc[7] = *__c++ & 0x7; \
24  Nc[0] = (*__c >> 1) & 0x7F; \
25  bc[0] = (*__c++ & 0x1) << 1; \
26  bc[0] |= (*__c >> 7) & 0x1; \
27  Mc[0] = (*__c >> 5) & 0x3; \
28  xmaxc[0] = (*__c++ & 0x1F) << 1; \
29  xmaxc[0] |= (*__c >> 7) & 0x1; \
30  xmc[0] = (*__c >> 4) & 0x7; \
31  xmc[1] = (*__c >> 1) & 0x7; \
32  xmc[2] = (*__c++ & 0x1) << 2; \
33  xmc[2] |= (*__c >> 6) & 0x3; \
34  xmc[3] = (*__c >> 3) & 0x7; \
35  xmc[4] = *__c++ & 0x7; \
36  xmc[5] = (*__c >> 5) & 0x7; \
37  xmc[6] = (*__c >> 2) & 0x7; \
38  xmc[7] = (*__c++ & 0x3) << 1; /* 10 */ \
39  xmc[7] |= (*__c >> 7) & 0x1; \
40  xmc[8] = (*__c >> 4) & 0x7; \
41  xmc[9] = (*__c >> 1) & 0x7; \
42  xmc[10] = (*__c++ & 0x1) << 2; \
43  xmc[10] |= (*__c >> 6) & 0x3; \
44  xmc[11] = (*__c >> 3) & 0x7; \
45  xmc[12] = *__c++ & 0x7; \
46  Nc[1] = (*__c >> 1) & 0x7F; \
47  bc[1] = (*__c++ & 0x1) << 1; \
48  bc[1] |= (*__c >> 7) & 0x1; \
49  Mc[1] = (*__c >> 5) & 0x3; \
50  xmaxc[1] = (*__c++ & 0x1F) << 1; \
51  xmaxc[1] |= (*__c >> 7) & 0x1; \
52  xmc[13] = (*__c >> 4) & 0x7; \
53  xmc[14] = (*__c >> 1) & 0x7; \
54  xmc[15] = (*__c++ & 0x1) << 2; \
55  xmc[15] |= (*__c >> 6) & 0x3; \
56  xmc[16] = (*__c >> 3) & 0x7; \
57  xmc[17] = *__c++ & 0x7; \
58  xmc[18] = (*__c >> 5) & 0x7; \
59  xmc[19] = (*__c >> 2) & 0x7; \
60  xmc[20] = (*__c++ & 0x3) << 1; \
61  xmc[20] |= (*__c >> 7) & 0x1; \
62  xmc[21] = (*__c >> 4) & 0x7; \
63  xmc[22] = (*__c >> 1) & 0x7; \
64  xmc[23] = (*__c++ & 0x1) << 2; \
65  xmc[23] |= (*__c >> 6) & 0x3; \
66  xmc[24] = (*__c >> 3) & 0x7; \
67  xmc[25] = *__c++ & 0x7; \
68  Nc[2] = (*__c >> 1) & 0x7F; \
69  bc[2] = (*__c++ & 0x1) << 1; /* 20 */ \
70  bc[2] |= (*__c >> 7) & 0x1; \
71  Mc[2] = (*__c >> 5) & 0x3; \
72  xmaxc[2] = (*__c++ & 0x1F) << 1; \
73  xmaxc[2] |= (*__c >> 7) & 0x1; \
74  xmc[26] = (*__c >> 4) & 0x7; \
75  xmc[27] = (*__c >> 1) & 0x7; \
76  xmc[28] = (*__c++ & 0x1) << 2; \
77  xmc[28] |= (*__c >> 6) & 0x3; \
78  xmc[29] = (*__c >> 3) & 0x7; \
79  xmc[30] = *__c++ & 0x7; \
80  xmc[31] = (*__c >> 5) & 0x7; \
81  xmc[32] = (*__c >> 2) & 0x7; \
82  xmc[33] = (*__c++ & 0x3) << 1; \
83  xmc[33] |= (*__c >> 7) & 0x1; \
84  xmc[34] = (*__c >> 4) & 0x7; \
85  xmc[35] = (*__c >> 1) & 0x7; \
86  xmc[36] = (*__c++ & 0x1) << 2; \
87  xmc[36] |= (*__c >> 6) & 0x3; \
88  xmc[37] = (*__c >> 3) & 0x7; \
89  xmc[38] = *__c++ & 0x7; \
90  Nc[3] = (*__c >> 1) & 0x7F; \
91  bc[3] = (*__c++ & 0x1) << 1; \
92  bc[3] |= (*__c >> 7) & 0x1; \
93  Mc[3] = (*__c >> 5) & 0x3; \
94  xmaxc[3] = (*__c++ & 0x1F) << 1; \
95  xmaxc[3] |= (*__c >> 7) & 0x1; \
96  xmc[39] = (*__c >> 4) & 0x7; \
97  xmc[40] = (*__c >> 1) & 0x7; \
98  xmc[41] = (*__c++ & 0x1) << 2; \
99  xmc[41] |= (*__c >> 6) & 0x3; \
100  xmc[42] = (*__c >> 3) & 0x7; \
101  xmc[43] = *__c++ & 0x7; /* 30 */ \
102  xmc[44] = (*__c >> 5) & 0x7; \
103  xmc[45] = (*__c >> 2) & 0x7; \
104  xmc[46] = (*__c++ & 0x3) << 1; \
105  xmc[46] |= (*__c >> 7) & 0x1; \
106  xmc[47] = (*__c >> 4) & 0x7; \
107  xmc[48] = (*__c >> 1) & 0x7; \
108  xmc[49] = (*__c++ & 0x1) << 2; \
109  xmc[49] |= (*__c >> 6) & 0x3; \
110  xmc[50] = (*__c >> 3) & 0x7; \
111  xmc[51] = *__c & 0x7; /* 33 */ \
112 }
113 
114 static inline void conv66(gsm_byte * d, wav_byte * c) {
115  gsm_byte frame_chain;
116  unsigned int sr;
117  unsigned int LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
118 
119  readGSM_33(d);
120  sr = 0;
121  sr = (sr >> 6) | (LARc[0] << 10);
122  sr = (sr >> 6) | (LARc[1] << 10);
123  *c++ = sr >> 4;
124  sr = (sr >> 5) | (LARc[2] << 11);
125  *c++ = sr >> 7;
126  sr = (sr >> 5) | (LARc[3] << 11);
127  sr = (sr >> 4) | (LARc[4] << 12);
128  *c++ = sr >> 6;
129  sr = (sr >> 4) | (LARc[5] << 12);
130  sr = (sr >> 3) | (LARc[6] << 13);
131  *c++ = sr >> 7;
132  sr = (sr >> 3) | (LARc[7] << 13);
133  sr = (sr >> 7) | (Nc[0] << 9);
134  *c++ = sr >> 5;
135  sr = (sr >> 2) | (bc[0] << 14);
136  sr = (sr >> 2) | (Mc[0] << 14);
137  sr = (sr >> 6) | (xmaxc[0] << 10);
138  *c++ = sr >> 3;
139  sr = (sr >> 3 )|( xmc[0] << 13);
140  *c++ = sr >> 8;
141  sr = (sr >> 3 )|( xmc[1] << 13);
142  sr = (sr >> 3 )|( xmc[2] << 13);
143  sr = (sr >> 3 )|( xmc[3] << 13);
144  *c++ = sr >> 7;
145  sr = (sr >> 3 )|( xmc[4] << 13);
146  sr = (sr >> 3 )|( xmc[5] << 13);
147  sr = (sr >> 3 )|( xmc[6] << 13);
148  *c++ = sr >> 6;
149  sr = (sr >> 3 )|( xmc[7] << 13);
150  sr = (sr >> 3 )|( xmc[8] << 13);
151  *c++ = sr >> 8;
152  sr = (sr >> 3 )|( xmc[9] << 13);
153  sr = (sr >> 3 )|( xmc[10] << 13);
154  sr = (sr >> 3 )|( xmc[11] << 13);
155  *c++ = sr >> 7;
156  sr = (sr >> 3 )|( xmc[12] << 13);
157  sr = (sr >> 7 )|( Nc[1] << 9);
158  *c++ = sr >> 5;
159  sr = (sr >> 2 )|( bc[1] << 14);
160  sr = (sr >> 2 )|( Mc[1] << 14);
161  sr = (sr >> 6 )|( xmaxc[1] << 10);
162  *c++ = sr >> 3;
163  sr = (sr >> 3 )|( xmc[13] << 13);
164  *c++ = sr >> 8;
165  sr = (sr >> 3 )|( xmc[14] << 13);
166  sr = (sr >> 3 )|( xmc[15] << 13);
167  sr = (sr >> 3 )|( xmc[16] << 13);
168  *c++ = sr >> 7;
169  sr = (sr >> 3 )|( xmc[17] << 13);
170  sr = (sr >> 3 )|( xmc[18] << 13);
171  sr = (sr >> 3 )|( xmc[19] << 13);
172  *c++ = sr >> 6;
173  sr = (sr >> 3 )|( xmc[20] << 13);
174  sr = (sr >> 3 )|( xmc[21] << 13);
175  *c++ = sr >> 8;
176  sr = (sr >> 3 )|( xmc[22] << 13);
177  sr = (sr >> 3 )|( xmc[23] << 13);
178  sr = (sr >> 3 )|( xmc[24] << 13);
179  *c++ = sr >> 7;
180  sr = (sr >> 3 )|( xmc[25] << 13);
181  sr = (sr >> 7 )|( Nc[2] << 9);
182  *c++ = sr >> 5;
183  sr = (sr >> 2 )|( bc[2] << 14);
184  sr = (sr >> 2 )|( Mc[2] << 14);
185  sr = (sr >> 6 )|( xmaxc[2] << 10);
186  *c++ = sr >> 3;
187  sr = (sr >> 3 )|( xmc[26] << 13);
188  *c++ = sr >> 8;
189  sr = (sr >> 3 )|( xmc[27] << 13);
190  sr = (sr >> 3 )|( xmc[28] << 13);
191  sr = (sr >> 3 )|( xmc[29] << 13);
192  *c++ = sr >> 7;
193  sr = (sr >> 3 )|( xmc[30] << 13);
194  sr = (sr >> 3 )|( xmc[31] << 13);
195  sr = (sr >> 3 )|( xmc[32] << 13);
196  *c++ = sr >> 6;
197  sr = (sr >> 3 )|( xmc[33] << 13);
198  sr = (sr >> 3 )|( xmc[34] << 13);
199  *c++ = sr >> 8;
200  sr = (sr >> 3 )|( xmc[35] << 13);
201  sr = (sr >> 3 )|( xmc[36] << 13);
202  sr = (sr >> 3 )|( xmc[37] << 13);
203  *c++ = sr >> 7;
204  sr = (sr >> 3 )|( xmc[38] << 13);
205  sr = (sr >> 7 )|( Nc[3] << 9);
206  *c++ = sr >> 5;
207  sr = (sr >> 2 )|( bc[3] << 14);
208  sr = (sr >> 2 )|( Mc[3] << 14);
209  sr = (sr >> 6 )|( xmaxc[3] << 10);
210  *c++ = sr >> 3;
211  sr = (sr >> 3 )|( xmc[39] << 13);
212  *c++ = sr >> 8;
213  sr = (sr >> 3 )|( xmc[40] << 13);
214  sr = (sr >> 3 )|( xmc[41] << 13);
215  sr = (sr >> 3 )|( xmc[42] << 13);
216  *c++ = sr >> 7;
217  sr = (sr >> 3 )|( xmc[43] << 13);
218  sr = (sr >> 3 )|( xmc[44] << 13);
219  sr = (sr >> 3 )|( xmc[45] << 13);
220  *c++ = sr >> 6;
221  sr = (sr >> 3 )|( xmc[46] << 13);
222  sr = (sr >> 3 )|( xmc[47] << 13);
223  *c++ = sr >> 8;
224  sr = (sr >> 3 )|( xmc[48] << 13);
225  sr = (sr >> 3 )|( xmc[49] << 13);
226  sr = (sr >> 3 )|( xmc[50] << 13);
227  *c++ = sr >> 7;
228  sr = (sr >> 3 )|( xmc[51] << 13);
229  sr = sr >> 4;
230  *c = sr >> 8;
231  frame_chain = *c;
232  readGSM_33(d+33); /* puts all the parameters into LARc etc. */
233 
234 
235  sr = 0;
236 /* sr = (sr >> 4 )|( s->frame_chain << 12); */
237  sr = (sr >> 4 )|( frame_chain << 12);
238 
239  sr = (sr >> 6 )|( LARc[0] << 10);
240  *c++ = sr >> 6;
241  sr = (sr >> 6 )|( LARc[1] << 10);
242  *c++ = sr >> 8;
243  sr = (sr >> 5 )|( LARc[2] << 11);
244  sr = (sr >> 5 )|( LARc[3] << 11);
245  *c++ = sr >> 6;
246  sr = (sr >> 4 )|( LARc[4] << 12);
247  sr = (sr >> 4 )|( LARc[5] << 12);
248  *c++ = sr >> 6;
249  sr = (sr >> 3 )|( LARc[6] << 13);
250  sr = (sr >> 3 )|( LARc[7] << 13);
251  *c++ = sr >> 8;
252  sr = (sr >> 7 )|( Nc[0] << 9);
253  sr = (sr >> 2 )|( bc[0] << 14);
254  *c++ = sr >> 7;
255  sr = (sr >> 2 )|( Mc[0] << 14);
256  sr = (sr >> 6 )|( xmaxc[0] << 10);
257  *c++ = sr >> 7;
258  sr = (sr >> 3 )|( xmc[0] << 13);
259  sr = (sr >> 3 )|( xmc[1] << 13);
260  sr = (sr >> 3 )|( xmc[2] << 13);
261  *c++ = sr >> 6;
262  sr = (sr >> 3 )|( xmc[3] << 13);
263  sr = (sr >> 3 )|( xmc[4] << 13);
264  *c++ = sr >> 8;
265  sr = (sr >> 3 )|( xmc[5] << 13);
266  sr = (sr >> 3 )|( xmc[6] << 13);
267  sr = (sr >> 3 )|( xmc[7] << 13);
268  *c++ = sr >> 7;
269  sr = (sr >> 3 )|( xmc[8] << 13);
270  sr = (sr >> 3 )|( xmc[9] << 13);
271  sr = (sr >> 3 )|( xmc[10] << 13);
272  *c++ = sr >> 6;
273  sr = (sr >> 3 )|( xmc[11] << 13);
274  sr = (sr >> 3 )|( xmc[12] << 13);
275  *c++ = sr >> 8;
276  sr = (sr >> 7 )|( Nc[1] << 9);
277  sr = (sr >> 2 )|( bc[1] << 14);
278  *c++ = sr >> 7;
279  sr = (sr >> 2 )|( Mc[1] << 14);
280  sr = (sr >> 6 )|( xmaxc[1] << 10);
281  *c++ = sr >> 7;
282  sr = (sr >> 3 )|( xmc[13] << 13);
283  sr = (sr >> 3 )|( xmc[14] << 13);
284  sr = (sr >> 3 )|( xmc[15] << 13);
285  *c++ = sr >> 6;
286  sr = (sr >> 3 )|( xmc[16] << 13);
287  sr = (sr >> 3 )|( xmc[17] << 13);
288  *c++ = sr >> 8;
289  sr = (sr >> 3 )|( xmc[18] << 13);
290  sr = (sr >> 3 )|( xmc[19] << 13);
291  sr = (sr >> 3 )|( xmc[20] << 13);
292  *c++ = sr >> 7;
293  sr = (sr >> 3 )|( xmc[21] << 13);
294  sr = (sr >> 3 )|( xmc[22] << 13);
295  sr = (sr >> 3 )|( xmc[23] << 13);
296  *c++ = sr >> 6;
297  sr = (sr >> 3 )|( xmc[24] << 13);
298  sr = (sr >> 3 )|( xmc[25] << 13);
299  *c++ = sr >> 8;
300  sr = (sr >> 7 )|( Nc[2] << 9);
301  sr = (sr >> 2 )|( bc[2] << 14);
302  *c++ = sr >> 7;
303  sr = (sr >> 2 )|( Mc[2] << 14);
304  sr = (sr >> 6 )|( xmaxc[2] << 10);
305  *c++ = sr >> 7;
306  sr = (sr >> 3 )|( xmc[26] << 13);
307  sr = (sr >> 3 )|( xmc[27] << 13);
308  sr = (sr >> 3 )|( xmc[28] << 13);
309  *c++ = sr >> 6;
310  sr = (sr >> 3 )|( xmc[29] << 13);
311  sr = (sr >> 3 )|( xmc[30] << 13);
312  *c++ = sr >> 8;
313  sr = (sr >> 3 )|( xmc[31] << 13);
314  sr = (sr >> 3 )|( xmc[32] << 13);
315  sr = (sr >> 3 )|( xmc[33] << 13);
316  *c++ = sr >> 7;
317  sr = (sr >> 3 )|( xmc[34] << 13);
318  sr = (sr >> 3 )|( xmc[35] << 13);
319  sr = (sr >> 3 )|( xmc[36] << 13);
320  *c++ = sr >> 6;
321  sr = (sr >> 3 )|( xmc[37] << 13);
322  sr = (sr >> 3 )|( xmc[38] << 13);
323  *c++ = sr >> 8;
324  sr = (sr >> 7 )|( Nc[3] << 9);
325  sr = (sr >> 2 )|( bc[3] << 14);
326  *c++ = sr >> 7;
327  sr = (sr >> 2 )|( Mc[3] << 14);
328  sr = (sr >> 6 )|( xmaxc[3] << 10);
329  *c++ = sr >> 7;
330  sr = (sr >> 3 )|( xmc[39] << 13);
331  sr = (sr >> 3 )|( xmc[40] << 13);
332  sr = (sr >> 3 )|( xmc[41] << 13);
333  *c++ = sr >> 6;
334  sr = (sr >> 3 )|( xmc[42] << 13);
335  sr = (sr >> 3 )|( xmc[43] << 13);
336  *c++ = sr >> 8;
337  sr = (sr >> 3 )|( xmc[44] << 13);
338  sr = (sr >> 3 )|( xmc[45] << 13);
339  sr = (sr >> 3 )|( xmc[46] << 13);
340  *c++ = sr >> 7;
341  sr = (sr >> 3 )|( xmc[47] << 13);
342  sr = (sr >> 3 )|( xmc[48] << 13);
343  sr = (sr >> 3 )|( xmc[49] << 13);
344  *c++ = sr >> 6;
345  sr = (sr >> 3 )|( xmc[50] << 13);
346  sr = (sr >> 3 )|( xmc[51] << 13);
347  *c++ = sr >> 8;
348 
349 }
350 
351 #define writeGSM_33(c1) { \
352  gsm_byte *__c = (c1); \
353  *__c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ \
354  | ((LARc[0] >> 2) & 0xF); \
355  *__c++ = ((LARc[0] & 0x3) << 6) \
356  | (LARc[1] & 0x3F); \
357  *__c++ = ((LARc[2] & 0x1F) << 3) \
358  | ((LARc[3] >> 2) & 0x7); \
359  *__c++ = ((LARc[3] & 0x3) << 6) \
360  | ((LARc[4] & 0xF) << 2) \
361  | ((LARc[5] >> 2) & 0x3); \
362  *__c++ = ((LARc[5] & 0x3) << 6) \
363  | ((LARc[6] & 0x7) << 3) \
364  | (LARc[7] & 0x7); \
365  *__c++ = ((Nc[0] & 0x7F) << 1) \
366  | ((bc[0] >> 1) & 0x1); \
367  *__c++ = ((bc[0] & 0x1) << 7) \
368  | ((Mc[0] & 0x3) << 5) \
369  | ((xmaxc[0] >> 1) & 0x1F); \
370  *__c++ = ((xmaxc[0] & 0x1) << 7) \
371  | ((xmc[0] & 0x7) << 4) \
372  | ((xmc[1] & 0x7) << 1) \
373  | ((xmc[2] >> 2) & 0x1); \
374  *__c++ = ((xmc[2] & 0x3) << 6) \
375  | ((xmc[3] & 0x7) << 3) \
376  | (xmc[4] & 0x7); \
377  *__c++ = ((xmc[5] & 0x7) << 5) /* 10 */ \
378  | ((xmc[6] & 0x7) << 2) \
379  | ((xmc[7] >> 1) & 0x3); \
380  *__c++ = ((xmc[7] & 0x1) << 7) \
381  | ((xmc[8] & 0x7) << 4) \
382  | ((xmc[9] & 0x7) << 1) \
383  | ((xmc[10] >> 2) & 0x1); \
384  *__c++ = ((xmc[10] & 0x3) << 6) \
385  | ((xmc[11] & 0x7) << 3) \
386  | (xmc[12] & 0x7); \
387  *__c++ = ((Nc[1] & 0x7F) << 1) \
388  | ((bc[1] >> 1) & 0x1); \
389  *__c++ = ((bc[1] & 0x1) << 7) \
390  | ((Mc[1] & 0x3) << 5) \
391  | ((xmaxc[1] >> 1) & 0x1F); \
392  *__c++ = ((xmaxc[1] & 0x1) << 7) \
393  | ((xmc[13] & 0x7) << 4) \
394  | ((xmc[14] & 0x7) << 1) \
395  | ((xmc[15] >> 2) & 0x1); \
396  *__c++ = ((xmc[15] & 0x3) << 6) \
397  | ((xmc[16] & 0x7) << 3) \
398  | (xmc[17] & 0x7); \
399  *__c++ = ((xmc[18] & 0x7) << 5) \
400  | ((xmc[19] & 0x7) << 2) \
401  | ((xmc[20] >> 1) & 0x3); \
402  *__c++ = ((xmc[20] & 0x1) << 7) \
403  | ((xmc[21] & 0x7) << 4) \
404  | ((xmc[22] & 0x7) << 1) \
405  | ((xmc[23] >> 2) & 0x1); \
406  *__c++ = ((xmc[23] & 0x3) << 6) \
407  | ((xmc[24] & 0x7) << 3) \
408  | (xmc[25] & 0x7); \
409  *__c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ \
410  | ((bc[2] >> 1) & 0x1); \
411  *__c++ = ((bc[2] & 0x1) << 7) \
412  | ((Mc[2] & 0x3) << 5) \
413  | ((xmaxc[2] >> 1) & 0x1F); \
414  *__c++ = ((xmaxc[2] & 0x1) << 7) \
415  | ((xmc[26] & 0x7) << 4) \
416  | ((xmc[27] & 0x7) << 1) \
417  | ((xmc[28] >> 2) & 0x1); \
418  *__c++ = ((xmc[28] & 0x3) << 6) \
419  | ((xmc[29] & 0x7) << 3) \
420  | (xmc[30] & 0x7); \
421  *__c++ = ((xmc[31] & 0x7) << 5) \
422  | ((xmc[32] & 0x7) << 2) \
423  | ((xmc[33] >> 1) & 0x3); \
424  *__c++ = ((xmc[33] & 0x1) << 7) \
425  | ((xmc[34] & 0x7) << 4) \
426  | ((xmc[35] & 0x7) << 1) \
427  | ((xmc[36] >> 2) & 0x1); \
428  *__c++ = ((xmc[36] & 0x3) << 6) \
429  | ((xmc[37] & 0x7) << 3) \
430  | (xmc[38] & 0x7); \
431  *__c++ = ((Nc[3] & 0x7F) << 1) \
432  | ((bc[3] >> 1) & 0x1); \
433  *__c++ = ((bc[3] & 0x1) << 7) \
434  | ((Mc[3] & 0x3) << 5) \
435  | ((xmaxc[3] >> 1) & 0x1F); \
436  *__c++ = ((xmaxc[3] & 0x1) << 7) \
437  | ((xmc[39] & 0x7) << 4) \
438  | ((xmc[40] & 0x7) << 1) \
439  | ((xmc[41] >> 2) & 0x1); \
440  *__c++ = ((xmc[41] & 0x3) << 6) /* 30 */ \
441  | ((xmc[42] & 0x7) << 3) \
442  | (xmc[43] & 0x7); \
443  *__c++ = ((xmc[44] & 0x7) << 5) \
444  | ((xmc[45] & 0x7) << 2) \
445  | ((xmc[46] >> 1) & 0x3); \
446  *__c++ = ((xmc[46] & 0x1) << 7) \
447  | ((xmc[47] & 0x7) << 4) \
448  | ((xmc[48] & 0x7) << 1) \
449  | ((xmc[49] >> 2) & 0x1); \
450  *__c++ = ((xmc[49] & 0x3) << 6) \
451  | ((xmc[50] & 0x7) << 3) \
452  | (xmc[51] & 0x7); \
453 }
454 
455 static inline void conv65( wav_byte * c, gsm_byte * d){
456 
457  unsigned int sr = 0;
458  unsigned int frame_chain;
459  unsigned int LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4];
460  /* silence bogus compiler warning */
461  unsigned int xmc[13*4] = { 0, };
462 
463  sr = *c++;
464  LARc[0] = sr & 0x3f; sr >>= 6;
465  sr |= (uword)*c++ << 2;
466  LARc[1] = sr & 0x3f; sr >>= 6;
467  sr |= (uword)*c++ << 4;
468  LARc[2] = sr & 0x1f; sr >>= 5;
469  LARc[3] = sr & 0x1f; sr >>= 5;
470  sr |= (uword)*c++ << 2;
471  LARc[4] = sr & 0xf; sr >>= 4;
472  LARc[5] = sr & 0xf; sr >>= 4;
473  sr |= (uword)*c++ << 2; /* 5 */
474  LARc[6] = sr & 0x7; sr >>= 3;
475  LARc[7] = sr & 0x7; sr >>= 3;
476  sr |= (uword)*c++ << 4;
477  Nc[0] = sr & 0x7f; sr >>= 7;
478  bc[0] = sr & 0x3; sr >>= 2;
479  Mc[0] = sr & 0x3; sr >>= 2;
480  sr |= (uword)*c++ << 1;
481  xmaxc[0] = sr & 0x3f; sr >>= 6;
482  xmc[0] = sr & 0x7; sr >>= 3;
483  sr = *c++;
484  xmc[1] = sr & 0x7; sr >>= 3;
485  xmc[2] = sr & 0x7; sr >>= 3;
486  sr |= (uword)*c++ << 2;
487  xmc[3] = sr & 0x7; sr >>= 3;
488  xmc[4] = sr & 0x7; sr >>= 3;
489  xmc[5] = sr & 0x7; sr >>= 3;
490  sr |= (uword)*c++ << 1; /* 10 */
491  xmc[6] = sr & 0x7; sr >>= 3;
492  xmc[7] = sr & 0x7; sr >>= 3;
493  xmc[8] = sr & 0x7; sr >>= 3;
494  sr = *c++;
495  xmc[9] = sr & 0x7; sr >>= 3;
496  xmc[10] = sr & 0x7; sr >>= 3;
497  sr |= (uword)*c++ << 2;
498  xmc[11] = sr & 0x7; sr >>= 3;
499  xmc[12] = sr & 0x7; sr >>= 3;
500  sr |= (uword)*c++ << 4;
501  Nc[1] = sr & 0x7f; sr >>= 7;
502  bc[1] = sr & 0x3; sr >>= 2;
503  Mc[1] = sr & 0x3; sr >>= 2;
504  sr |= (uword)*c++ << 1;
505  xmaxc[1] = sr & 0x3f; sr >>= 6;
506  xmc[13] = sr & 0x7; sr >>= 3;
507  sr = *c++; /* 15 */
508  xmc[14] = sr & 0x7; sr >>= 3;
509  xmc[15] = sr & 0x7; sr >>= 3;
510  sr |= (uword)*c++ << 2;
511  xmc[16] = sr & 0x7; sr >>= 3;
512  xmc[17] = sr & 0x7; sr >>= 3;
513  xmc[18] = sr & 0x7; sr >>= 3;
514  sr |= (uword)*c++ << 1;
515  xmc[19] = sr & 0x7; sr >>= 3;
516  xmc[20] = sr & 0x7; sr >>= 3;
517  xmc[21] = sr & 0x7; sr >>= 3;
518  sr = *c++;
519  xmc[22] = sr & 0x7; sr >>= 3;
520  xmc[23] = sr & 0x7; sr >>= 3;
521  sr |= (uword)*c++ << 2;
522  xmc[24] = sr & 0x7; sr >>= 3;
523  xmc[25] = sr & 0x7; sr >>= 3;
524  sr |= (uword)*c++ << 4; /* 20 */
525  Nc[2] = sr & 0x7f; sr >>= 7;
526  bc[2] = sr & 0x3; sr >>= 2;
527  Mc[2] = sr & 0x3; sr >>= 2;
528  sr |= (uword)*c++ << 1;
529  xmaxc[2] = sr & 0x3f; sr >>= 6;
530  xmc[26] = sr & 0x7; sr >>= 3;
531  sr = *c++;
532  xmc[27] = sr & 0x7; sr >>= 3;
533  xmc[28] = sr & 0x7; sr >>= 3;
534  sr |= (uword)*c++ << 2;
535  xmc[29] = sr & 0x7; sr >>= 3;
536  xmc[30] = sr & 0x7; sr >>= 3;
537  xmc[31] = sr & 0x7; sr >>= 3;
538  sr |= (uword)*c++ << 1;
539  xmc[32] = sr & 0x7; sr >>= 3;
540  xmc[33] = sr & 0x7; sr >>= 3;
541  xmc[34] = sr & 0x7; sr >>= 3;
542  sr = *c++; /* 25 */
543  xmc[35] = sr & 0x7; sr >>= 3;
544  xmc[36] = sr & 0x7; sr >>= 3;
545  sr |= (uword)*c++ << 2;
546  xmc[37] = sr & 0x7; sr >>= 3;
547  xmc[38] = sr & 0x7; sr >>= 3;
548  sr |= (uword)*c++ << 4;
549  Nc[3] = sr & 0x7f; sr >>= 7;
550  bc[3] = sr & 0x3; sr >>= 2;
551  Mc[3] = sr & 0x3; sr >>= 2;
552  sr |= (uword)*c++ << 1;
553  xmaxc[3] = sr & 0x3f; sr >>= 6;
554  xmc[39] = sr & 0x7; sr >>= 3;
555  sr = *c++;
556  xmc[40] = sr & 0x7; sr >>= 3;
557  xmc[41] = sr & 0x7; sr >>= 3;
558  sr |= (uword)*c++ << 2; /* 30 */
559  xmc[42] = sr & 0x7; sr >>= 3;
560  xmc[43] = sr & 0x7; sr >>= 3;
561  xmc[44] = sr & 0x7; sr >>= 3;
562  sr |= (uword)*c++ << 1;
563  xmc[45] = sr & 0x7; sr >>= 3;
564  xmc[46] = sr & 0x7; sr >>= 3;
565  xmc[47] = sr & 0x7; sr >>= 3;
566  sr = *c++;
567  xmc[49] = sr & 0x7; sr >>= 3;
568  sr |= (uword)*c++ << 2;
569  xmc[50] = sr & 0x7; sr >>= 3;
570  xmc[51] = sr & 0x7; sr >>= 3;
571 
572  frame_chain = sr & 0xf;
573 
574 
575  writeGSM_33(d);/* LARc etc. -> array of 33 GSM bytes */
576 
577 
578  sr = frame_chain;
579  sr |= (uword)*c++ << 4; /* 1 */
580  LARc[0] = sr & 0x3f; sr >>= 6;
581  LARc[1] = sr & 0x3f; sr >>= 6;
582  sr = *c++;
583  LARc[2] = sr & 0x1f; sr >>= 5;
584  sr |= (uword)*c++ << 3;
585  LARc[3] = sr & 0x1f; sr >>= 5;
586  LARc[4] = sr & 0xf; sr >>= 4;
587  sr |= (uword)*c++ << 2;
588  LARc[5] = sr & 0xf; sr >>= 4;
589  LARc[6] = sr & 0x7; sr >>= 3;
590  LARc[7] = sr & 0x7; sr >>= 3;
591  sr = *c++; /* 5 */
592  Nc[0] = sr & 0x7f; sr >>= 7;
593  sr |= (uword)*c++ << 1;
594  bc[0] = sr & 0x3; sr >>= 2;
595  Mc[0] = sr & 0x3; sr >>= 2;
596  sr |= (uword)*c++ << 5;
597  xmaxc[0] = sr & 0x3f; sr >>= 6;
598  xmc[0] = sr & 0x7; sr >>= 3;
599  xmc[1] = sr & 0x7; sr >>= 3;
600  sr |= (uword)*c++ << 1;
601  xmc[2] = sr & 0x7; sr >>= 3;
602  xmc[3] = sr & 0x7; sr >>= 3;
603  xmc[4] = sr & 0x7; sr >>= 3;
604  sr = *c++;
605  xmc[5] = sr & 0x7; sr >>= 3;
606  xmc[6] = sr & 0x7; sr >>= 3;
607  sr |= (uword)*c++ << 2; /* 10 */
608  xmc[7] = sr & 0x7; sr >>= 3;
609  xmc[8] = sr & 0x7; sr >>= 3;
610  xmc[9] = sr & 0x7; sr >>= 3;
611  sr |= (uword)*c++ << 1;
612  xmc[10] = sr & 0x7; sr >>= 3;
613  xmc[11] = sr & 0x7; sr >>= 3;
614  xmc[12] = sr & 0x7; sr >>= 3;
615  sr = *c++;
616  Nc[1] = sr & 0x7f; sr >>= 7;
617  sr |= (uword)*c++ << 1;
618  bc[1] = sr & 0x3; sr >>= 2;
619  Mc[1] = sr & 0x3; sr >>= 2;
620  sr |= (uword)*c++ << 5;
621  xmaxc[1] = sr & 0x3f; sr >>= 6;
622  xmc[13] = sr & 0x7; sr >>= 3;
623  xmc[14] = sr & 0x7; sr >>= 3;
624  sr |= (uword)*c++ << 1; /* 15 */
625  xmc[15] = sr & 0x7; sr >>= 3;
626  xmc[16] = sr & 0x7; sr >>= 3;
627  xmc[17] = sr & 0x7; sr >>= 3;
628  sr = *c++;
629  xmc[18] = sr & 0x7; sr >>= 3;
630  xmc[19] = sr & 0x7; sr >>= 3;
631  sr |= (uword)*c++ << 2;
632  xmc[20] = sr & 0x7; sr >>= 3;
633  xmc[21] = sr & 0x7; sr >>= 3;
634  xmc[22] = sr & 0x7; sr >>= 3;
635  sr |= (uword)*c++ << 1;
636  xmc[23] = sr & 0x7; sr >>= 3;
637  xmc[24] = sr & 0x7; sr >>= 3;
638  xmc[25] = sr & 0x7; sr >>= 3;
639  sr = *c++;
640  Nc[2] = sr & 0x7f; sr >>= 7;
641  sr |= (uword)*c++ << 1; /* 20 */
642  bc[2] = sr & 0x3; sr >>= 2;
643  Mc[2] = sr & 0x3; sr >>= 2;
644  sr |= (uword)*c++ << 5;
645  xmaxc[2] = sr & 0x3f; sr >>= 6;
646  xmc[26] = sr & 0x7; sr >>= 3;
647  xmc[27] = sr & 0x7; sr >>= 3;
648  sr |= (uword)*c++ << 1;
649  xmc[28] = sr & 0x7; sr >>= 3;
650  xmc[29] = sr & 0x7; sr >>= 3;
651  xmc[30] = sr & 0x7; sr >>= 3;
652  sr = *c++;
653  xmc[31] = sr & 0x7; sr >>= 3;
654  xmc[32] = sr & 0x7; sr >>= 3;
655  sr |= (uword)*c++ << 2;
656  xmc[33] = sr & 0x7; sr >>= 3;
657  xmc[34] = sr & 0x7; sr >>= 3;
658  xmc[35] = sr & 0x7; sr >>= 3;
659  sr |= (uword)*c++ << 1; /* 25 */
660  xmc[36] = sr & 0x7; sr >>= 3;
661  xmc[37] = sr & 0x7; sr >>= 3;
662  xmc[38] = sr & 0x7; sr >>= 3;
663  sr = *c++;
664  Nc[3] = sr & 0x7f; sr >>= 7;
665  sr |= (uword)*c++ << 1;
666  bc[3] = sr & 0x3; sr >>= 2;
667  Mc[3] = sr & 0x3; sr >>= 2;
668  sr |= (uword)*c++ << 5;
669  xmaxc[3] = sr & 0x3f; sr >>= 6;
670  xmc[39] = sr & 0x7; sr >>= 3;
671  xmc[40] = sr & 0x7; sr >>= 3;
672  sr |= (uword)*c++ << 1;
673  xmc[41] = sr & 0x7; sr >>= 3;
674  xmc[42] = sr & 0x7; sr >>= 3;
675  xmc[43] = sr & 0x7; sr >>= 3;
676  sr = *c++; /* 30 */
677  xmc[44] = sr & 0x7; sr >>= 3;
678  xmc[45] = sr & 0x7; sr >>= 3;
679  sr |= (uword)*c++ << 2;
680  xmc[46] = sr & 0x7; sr >>= 3;
681  xmc[47] = sr & 0x7; sr >>= 3;
682  xmc[48] = sr & 0x7; sr >>= 3;
683  sr |= (uword)*c++ << 1;
684  xmc[49] = sr & 0x7; sr >>= 3;
685  xmc[50] = sr & 0x7; sr >>= 3;
686  xmc[51] = sr & 0x7; sr >>= 3;
687  writeGSM_33(d+33);
688 
689 }
unsigned char wav_byte
Definition: msgsm.h:8
#define writeGSM_33(c1)
Definition: msgsm.h:351
static void conv65(wav_byte *c, gsm_byte *d)
Definition: msgsm.h:455
unsigned int uword
Definition: msgsm.h:9
static void conv66(gsm_byte *d, wav_byte *c)
Definition: msgsm.h:114
unsigned char gsm_byte
Definition: msgsm.h:6
#define readGSM_33(c1)
Definition: msgsm.h:11