sms: SMS where cropped (from VTY), concatenation of SMS where not possible
[osmocom-bb.git] / src / codec / gsm610.c
1 /* GSM 06.10 - GSM FR codec */
2
3 /*
4  * (C) 2010 Sylvain Munaut <tnt@246tNt.com>
5  *
6  * All Rights Reserved
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  *
22  */
23
24 #include <stdint.h>
25
26 /* GSM FR - subjective importance bit ordering */
27         /* This array encodes GSM 05.03 Table 2.
28          * It's also GSM 06.10 Table A.2.1a
29          *
30          * It converts between serial parameter output by the encoder and the
31          * order needed before channel encoding.
32          */
33 uint16_t gsm610_bitorder[260] = {
34         0,      /* LARc0:5 */
35         47,     /* Xmaxc0:5 */
36         103,    /* Xmaxc1:5 */
37         159,    /* Xmaxc2:5 */
38         215,    /* Xmaxc3:5 */
39         1,      /* LARc0:4 */
40         6,      /* LARc1:5 */
41         12,     /* LARc2:4 */
42         2,      /* LARc0:3 */
43         7,      /* LARc1:4 */
44         13,     /* LARc2:3 */
45         17,     /* LARc3:4 */
46         36,     /* Nc0:6 */
47         92,     /* Nc1:6 */
48         148,    /* Nc2:6 */
49         204,    /* Nc3:6 */
50         48,     /* Xmaxc0:4 */
51         104,    /* Xmaxc1:4 */
52         160,    /* Xmaxc2:4 */
53         216,    /* Xmaxc3:4 */
54         8,      /* LARc1:3 */
55         22,     /* LARc4:3 */
56         26,     /* LARc5:3 */
57         37,     /* Nc0:5 */
58         93,     /* Nc1:5 */
59         149,    /* Nc2:5 */
60         205,    /* Nc3:5 */
61         38,     /* Nc0:4 */
62         94,     /* Nc1:4 */
63         150,    /* Nc2:4 */
64         206,    /* Nc3:4 */
65         39,     /* Nc0:3 */
66         95,     /* Nc1:3 */
67         151,    /* Nc2:3 */
68         207,    /* Nc3:3 */
69         40,     /* Nc0:2 */
70         96,     /* Nc1:2 */
71         152,    /* Nc2:2 */
72         208,    /* Nc3:2 */
73         49,     /* Xmaxc0:3 */
74         105,    /* Xmaxc1:3 */
75         161,    /* Xmaxc2:3 */
76         217,    /* Xmaxc3:3 */
77         3,      /* LARc0:2 */
78         18,     /* LARc3:3 */
79         30,     /* LARc6:2 */
80         41,     /* Nc0:1 */
81         97,     /* Nc1:1 */
82         153,    /* Nc2:1 */
83         209,    /* Nc3:1 */
84         23,     /* LARc4:2 */
85         27,     /* LARc5:2 */
86         43,     /* bc0:1 */
87         99,     /* bc1:1 */
88         155,    /* bc2:1 */
89         211,    /* bc3:1 */
90         42,     /* Nc0:0 */
91         98,     /* Nc1:0 */
92         154,    /* Nc2:0 */
93         210,    /* Nc3:0 */
94         45,     /* Mc0:1 */
95         101,    /* Mc1:1 */
96         157,    /* Mc2:1 */
97         213,    /* Mc3:1 */
98         4,      /* LARc0:1 */
99         9,      /* LARc1:2 */
100         14,     /* LARc2:2 */
101         33,     /* LARc7:2 */
102         19,     /* LARc3:2 */
103         24,     /* LARc4:1 */
104         31,     /* LARc6:1 */
105         44,     /* bc0:0 */
106         100,    /* bc1:0 */
107         156,    /* bc2:0 */
108         212,    /* bc3:0 */
109         50,     /* Xmaxc0:2 */
110         106,    /* Xmaxc1:2 */
111         162,    /* Xmaxc2:2 */
112         218,    /* Xmaxc3:2 */
113         53,     /* xmc0_0:2 */
114         56,     /* xmc0_1:2 */
115         59,     /* xmc0_2:2 */
116         62,     /* xmc0_3:2 */
117         65,     /* xmc0_4:2 */
118         68,     /* xmc0_5:2 */
119         71,     /* xmc0_6:2 */
120         74,     /* xmc0_7:2 */
121         77,     /* xmc0_8:2 */
122         80,     /* xmc0_9:2 */
123         83,     /* xmc0_10:2 */
124         86,     /* xmc0_11:2 */
125         89,     /* xmc0_12:2 */
126         109,    /* xmc1_0:2 */
127         112,    /* xmc1_1:2 */
128         115,    /* xmc1_2:2 */
129         118,    /* xmc1_3:2 */
130         121,    /* xmc1_4:2 */
131         124,    /* xmc1_5:2 */
132         127,    /* xmc1_6:2 */
133         130,    /* xmc1_7:2 */
134         133,    /* xmc1_8:2 */
135         136,    /* xmc1_9:2 */
136         139,    /* xmc1_10:2 */
137         142,    /* xmc1_11:2 */
138         145,    /* xmc1_12:2 */
139         165,    /* xmc2_0:2 */
140         168,    /* xmc2_1:2 */
141         171,    /* xmc2_2:2 */
142         174,    /* xmc2_3:2 */
143         177,    /* xmc2_4:2 */
144         180,    /* xmc2_5:2 */
145         183,    /* xmc2_6:2 */
146         186,    /* xmc2_7:2 */
147         189,    /* xmc2_8:2 */
148         192,    /* xmc2_9:2 */
149         195,    /* xmc2_10:2 */
150         198,    /* xmc2_11:2 */
151         201,    /* xmc2_12:2 */
152         221,    /* xmc3_0:2 */
153         224,    /* xmc3_1:2 */
154         227,    /* xmc3_2:2 */
155         230,    /* xmc3_3:2 */
156         233,    /* xmc3_4:2 */
157         236,    /* xmc3_5:2 */
158         239,    /* xmc3_6:2 */
159         242,    /* xmc3_7:2 */
160         245,    /* xmc3_8:2 */
161         248,    /* xmc3_9:2 */
162         251,    /* xmc3_10:2 */
163         254,    /* xmc3_11:2 */
164         257,    /* xmc3_12:2 */
165         46,     /* Mc0:0 */
166         102,    /* Mc1:0 */
167         158,    /* Mc2:0 */
168         214,    /* Mc3:0 */
169         51,     /* Xmaxc0:1 */
170         107,    /* Xmaxc1:1 */
171         163,    /* Xmaxc2:1 */
172         219,    /* Xmaxc3:1 */
173         54,     /* xmc0_0:1 */
174         57,     /* xmc0_1:1 */
175         60,     /* xmc0_2:1 */
176         63,     /* xmc0_3:1 */
177         66,     /* xmc0_4:1 */
178         69,     /* xmc0_5:1 */
179         72,     /* xmc0_6:1 */
180         75,     /* xmc0_7:1 */
181         78,     /* xmc0_8:1 */
182         81,     /* xmc0_9:1 */
183         84,     /* xmc0_10:1 */
184         87,     /* xmc0_11:1 */
185         90,     /* xmc0_12:1 */
186         110,    /* xmc1_0:1 */
187         113,    /* xmc1_1:1 */
188         116,    /* xmc1_2:1 */
189         119,    /* xmc1_3:1 */
190         122,    /* xmc1_4:1 */
191         125,    /* xmc1_5:1 */
192         128,    /* xmc1_6:1 */
193         131,    /* xmc1_7:1 */
194         134,    /* xmc1_8:1 */
195         137,    /* xmc1_9:1 */
196         140,    /* xmc1_10:1 */
197         143,    /* xmc1_11:1 */
198         146,    /* xmc1_12:1 */
199         166,    /* xmc2_0:1 */
200         169,    /* xmc2_1:1 */
201         172,    /* xmc2_2:1 */
202         175,    /* xmc2_3:1 */
203         178,    /* xmc2_4:1 */
204         181,    /* xmc2_5:1 */
205         184,    /* xmc2_6:1 */
206         187,    /* xmc2_7:1 */
207         190,    /* xmc2_8:1 */
208         193,    /* xmc2_9:1 */
209         196,    /* xmc2_10:1 */
210         199,    /* xmc2_11:1 */
211         202,    /* xmc2_12:1 */
212         222,    /* xmc3_0:1 */
213         225,    /* xmc3_1:1 */
214         228,    /* xmc3_2:1 */
215         231,    /* xmc3_3:1 */
216         234,    /* xmc3_4:1 */
217         237,    /* xmc3_5:1 */
218         240,    /* xmc3_6:1 */
219         243,    /* xmc3_7:1 */
220         246,    /* xmc3_8:1 */
221         249,    /* xmc3_9:1 */
222         252,    /* xmc3_10:1 */
223         255,    /* xmc3_11:1 */
224         258,    /* xmc3_12:1 */
225         5,      /* LARc0:0 */
226         10,     /* LARc1:1 */
227         15,     /* LARc2:1 */
228         28,     /* LARc5:1 */
229         32,     /* LARc6:0 */
230         34,     /* LARc7:1 */
231         35,     /* LARc7:0 */
232         16,     /* LARc2:0 */
233         20,     /* LARc3:1 */
234         21,     /* LARc3:0 */
235         25,     /* LARc4:0 */
236         52,     /* Xmaxc0:0 */
237         108,    /* Xmaxc1:0 */
238         164,    /* Xmaxc2:0 */
239         220,    /* Xmaxc3:0 */
240         55,     /* xmc0_0:0 */
241         58,     /* xmc0_1:0 */
242         61,     /* xmc0_2:0 */
243         64,     /* xmc0_3:0 */
244         67,     /* xmc0_4:0 */
245         70,     /* xmc0_5:0 */
246         73,     /* xmc0_6:0 */
247         76,     /* xmc0_7:0 */
248         79,     /* xmc0_8:0 */
249         82,     /* xmc0_9:0 */
250         85,     /* xmc0_10:0 */
251         88,     /* xmc0_11:0 */
252         91,     /* xmc0_12:0 */
253         111,    /* xmc1_0:0 */
254         114,    /* xmc1_1:0 */
255         117,    /* xmc1_2:0 */
256         120,    /* xmc1_3:0 */
257         123,    /* xmc1_4:0 */
258         126,    /* xmc1_5:0 */
259         129,    /* xmc1_6:0 */
260         132,    /* xmc1_7:0 */
261         135,    /* xmc1_8:0 */
262         138,    /* xmc1_9:0 */
263         141,    /* xmc1_10:0 */
264         144,    /* xmc1_11:0 */
265         147,    /* xmc1_12:0 */
266         167,    /* xmc2_0:0 */
267         170,    /* xmc2_1:0 */
268         173,    /* xmc2_2:0 */
269         176,    /* xmc2_3:0 */
270         179,    /* xmc2_4:0 */
271         182,    /* xmc2_5:0 */
272         185,    /* xmc2_6:0 */
273         188,    /* xmc2_7:0 */
274         191,    /* xmc2_8:0 */
275         194,    /* xmc2_9:0 */
276         197,    /* xmc2_10:0 */
277         200,    /* xmc2_11:0 */
278         203,    /* xmc2_12:0 */
279         223,    /* xmc3_0:0 */
280         226,    /* xmc3_1:0 */
281         229,    /* xmc3_2:0 */
282         232,    /* xmc3_3:0 */
283         235,    /* xmc3_4:0 */
284         238,    /* xmc3_5:0 */
285         241,    /* xmc3_6:0 */
286         244,    /* xmc3_7:0 */
287         247,    /* xmc3_8:0 */
288         250,    /* xmc3_9:0 */
289         253,    /* xmc3_10:0 */
290         256,    /* xmc3_11:0 */
291         259,    /* xmc3_12:0 */
292         11,     /* LARc1:0 */
293         29,     /* LARc5:0 */
294 };