sms: SMS where cropped (from VTY), concatenation of SMS where not possible
[osmocom-bb.git] / src / codec / gsm620.c
1 /* GSM 06.20 - GSM HR 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 HR unvoiced (mode=0) frames - subjective importance bit ordering */
27         /* This array encode mapping between GSM 05.03 Table 3a (bits
28          * ordering before channel coding on TCH) and GSM 06.20 Table B.1
29          * (bit ordering on A-bis */
30 uint16_t gsm620_unvoiced_bitorder[112] = {
31         3,      /* R0:1 */
32         25,     /* LPC 3:7 */
33         52,     /* GSP 0-1:2 */
34         71,     /* GSP 0-2:2 */
35         90,     /* GSP 0-3:2 */
36         109,    /* GSP 0-4:2 */
37         15,     /* LPC 1:0 */
38         23,     /* LPC 2:1 */
39         22,     /* LPC 2:2 */
40         21,     /* LPC 2:3 */
41         20,     /* LPC 2:4 */
42         19,     /* LPC 2:5 */
43         31,     /* LPC 3:1 */
44         30,     /* LPC 3:2 */
45         29,     /* LPC 3:3 */
46         28,     /* LPC 3:4 */
47         27,     /* LPC 3:5 */
48         26,     /* LPC 3:6 */
49         61,     /* Code 1-2:0 */
50         68,     /* Code 2-2:0 */
51         67,     /* Code 2-2:1 */
52         66,     /* Code 2-2:2 */
53         65,     /* Code 2-2:3 */
54         64,     /* Code 2-2:4 */
55         63,     /* Code 2-2:5 */
56         62,     /* Code 2-2:6 */
57         80,     /* Code 1-3:0 */
58         79,     /* Code 1-3:1 */
59         78,     /* Code 1-3:2 */
60         77,     /* Code 1-3:3 */
61         76,     /* Code 1-3:4 */
62         75,     /* Code 1-3:5 */
63         74,     /* Code 1-3:6 */
64         84,     /* Code 2-3:3 */
65         83,     /* Code 2-3:4 */
66         82,     /* Code 2-3:5 */
67         81,     /* Code 2-3:6 */
68         32,     /* LPC 3:0 */
69         4,      /* R0:0 */
70         33,     /* INT-LPC:0 */
71         60,     /* Code 1-2:1 */
72         59,     /* Code 1-2:2 */
73         58,     /* Code 1-2:3 */
74         57,     /* Code 1-2:4 */
75         56,     /* Code 1-2:5 */
76         55,     /* Code 1-2:6 */
77         49,     /* Code 2-1:0 */
78         48,     /* Code 2-1:1 */
79         47,     /* Code 2-1:2 */
80         46,     /* Code 2-1:3 */
81         45,     /* Code 2-1:4 */
82         44,     /* Code 2-1:5 */
83         43,     /* Code 2-1:6 */
84         42,     /* Code 1-1:0 */
85         41,     /* Code 1-1:1 */
86         40,     /* Code 1-1:2 */
87         39,     /* Code 1-1:3 */
88         38,     /* Code 1-1:4 */
89         37,     /* Code 1-1:5 */
90         36,     /* Code 1-1:6 */
91         111,    /* GSP 0-4:0 */
92         92,     /* GSP 0-3:0 */
93         73,     /* GSP 0-2:0 */
94         54,     /* GSP 0-1:0 */
95         24,     /* LPC 2:0 */
96         110,    /* GSP 0-4:1 */
97         91,     /* GSP 0-3:1 */
98         72,     /* GSP 0-2:1 */
99         53,     /* GSP 0-1:1 */
100         14,     /* LPC 1:1 */
101         13,     /* LPC 1:2 */
102         12,     /* LPC 1:3 */
103         11,     /* LPC 1:4 */
104         10,     /* LPC 1:5 */
105         108,    /* GSP 0-4:3 */
106         89,     /* GSP 0-3:3 */
107         70,     /* GSP 0-2:3 */
108         51,     /* GSP 0-1:3 */
109         18,     /* LPC 2:6 */
110         17,     /* LPC 2:7 */
111         16,     /* LPC 2:8 */
112         107,    /* GSP 0-4:4 */
113         88,     /* GSP 0-3:4 */
114         69,     /* GSP 0-2:4 */
115         50,     /* GSP 0-1:4 */
116         9,      /* LPC 1:6 */
117         8,      /* LPC 1:7 */
118         7,      /* LPC 1:8 */
119         6,      /* LPC 1:9 */
120         2,      /* R0:2 */
121         5,      /* LPC 1:10 */
122         1,      /* R0:3 */
123         0,      /* R0:4 */
124         35,     /* Mode:0 */
125         34,     /* Mode:1 */
126         106,    /* Code 2-4:0 */
127         105,    /* Code 2-4:1 */
128         104,    /* Code 2-4:2 */
129         103,    /* Code 2-4:3 */
130         102,    /* Code 2-4:4 */
131         101,    /* Code 2-4:5 */
132         100,    /* Code 2-4:6 */
133         99,     /* Code 1-4:0 */
134         98,     /* Code 1-4:1 */
135         97,     /* Code 1-4:2 */
136         96,     /* Code 1-4:3 */
137         95,     /* Code 1-4:4 */
138         94,     /* Code 1-4:5 */
139         93,     /* Code 1-4:6 */
140         87,     /* Code 2-3:0 */
141         86,     /* Code 2-3:1 */
142         85,     /* Code 2-3:2 */
143 };
144
145 /* GSM HR voiced (mode=1,2,3) frames - subjective importance bit ordering */
146         /* This array encode mapping between GSM 05.03 Table 3b (bits
147          * ordering before channel coding on TCH) and GSM 06.20 Table B.2
148          * (bit ordering on A-bis */
149 uint16_t gsm620_voiced_bitorder[112] = {
150         13,     /* LPC 1:2 */
151         14,     /* LPC 1:1 */
152         20,     /* LPC 2:4 */
153         19,     /* LPC 2:5 */
154         18,     /* LPC 2:6 */
155         53,     /* GSP 0-1:4 */
156         71,     /* GSP 0-2:4 */
157         89,     /* GSP 0-3:4 */
158         107,    /* GSP 0-4:4 */
159         54,     /* GSP 0-1:3 */
160         72,     /* GSP 0-2:3 */
161         90,     /* GSP 0-3:3 */
162         108,    /* GSP 0-4:3 */
163         55,     /* GSP 0-1:2 */
164         73,     /* GSP 0-2:2 */
165         91,     /* GSP 0-3:2 */
166         109,    /* GSP 0-4:2 */
167         52,     /* Code 1:0 */
168         51,     /* Code 1:1 */
169         50,     /* Code 1:2 */
170         49,     /* Code 1:3 */
171         48,     /* Code 1:4 */
172         47,     /* Code 1:5 */
173         46,     /* Code 1:6 */
174         45,     /* Code 1:7 */
175         44,     /* Code 1:8 */
176         65,     /* Code 2:5 */
177         64,     /* Code 2:6 */
178         63,     /* Code 2:7 */
179         62,     /* Code 2:8 */
180         70,     /* Code 2:0 */
181         69,     /* Code 2:1 */
182         68,     /* Code 2:2 */
183         80,     /* Code 3:8 */
184         66,     /* Code 2:4 */
185         67,     /* Code 2:3 */
186         56,     /* GSP 0-1:1 */
187         74,     /* GSP 0-2:1 */
188         92,     /* GSP 0-3:1 */
189         110,    /* GSP 0-4:1 */
190         57,     /* GSP 0-1:0 */
191         75,     /* GSP 0-2:0 */
192         93,     /* GSP 0-3:0 */
193         111,    /* GSP 0-4:0 */
194         33,     /* INT-LPC:0 */
195         24,     /* LPC 2:0 */
196         32,     /* LPC 3:0 */
197         97,     /* LAG 4:0 */
198         31,     /* LPC 3:1 */
199         23,     /* LPC 2:1 */
200         96,     /* LAG 4:1 */
201         79,     /* LAG 3:0 */
202         61,     /* LAG 2:0 */
203         43,     /* LAG 1:0 */
204         95,     /* LAG 4:2 */
205         78,     /* LAG 3:1 */
206         60,     /* LAG 2:1 */
207         42,     /* LAG 1:1 */
208         30,     /* LPC 3:2 */
209         29,     /* LPC 3:3 */
210         28,     /* LPC 3:4 */
211         22,     /* LPC 2:2 */
212         27,     /* LPC 3:5 */
213         26,     /* LPC 3:6 */
214         21,     /* LPC 2:3 */
215         4,      /* R0:0 */
216         25,     /* LPC 3:7 */
217         15,     /* LPC 1:0 */
218         94,     /* LAG 4:3 */
219         77,     /* LAG 3:2 */
220         59,     /* LAG 2:2 */
221         41,     /* LAG 1:2 */
222         3,      /* R0:1 */
223         76,     /* LAG 3:3 */
224         58,     /* LAG 2:3 */
225         40,     /* LAG 1:3 */
226         39,     /* LAG 1:4 */
227         17,     /* LPC 2:7 */
228         16,     /* LPC 2:8 */
229         12,     /* LPC 1:3 */
230         11,     /* LPC 1:4 */
231         10,     /* LPC 1:5 */
232         9,      /* LPC 1:6 */
233         2,      /* R0:2 */
234         38,     /* LAG 1:5 */
235         37,     /* LAG 1:6 */
236         36,     /* LAG 1:7 */
237         8,      /* LPC 1:7 */
238         7,      /* LPC 1:8 */
239         6,      /* LPC 1:9 */
240         5,      /* LPC 1:10 */
241         1,      /* R0:3 */
242         0,      /* R0:4 */
243         35,     /* Mode:0 */
244         34,     /* Mode:1 */
245         106,    /* Code 4:0 */
246         105,    /* Code 4:1 */
247         104,    /* Code 4:2 */
248         103,    /* Code 4:3 */
249         102,    /* Code 4:4 */
250         101,    /* Code 4:5 */
251         100,    /* Code 4:6 */
252         99,     /* Code 4:7 */
253         98,     /* Code 4:8 */
254         88,     /* Code 3:0 */
255         87,     /* Code 3:1 */
256         86,     /* Code 3:2 */
257         85,     /* Code 3:3 */
258         84,     /* Code 3:4 */
259         83,     /* Code 3:5 */
260         82,     /* Code 3:6 */
261         81,     /* Code 3:7 */
262 };