comparison trau-decode/parse-amr.c @ 90:31e17dd64fc1

trau-parse AMR: invalidate saved mode if CRC1 is bad
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 05 Mar 2025 00:40:43 +0000
parents 865b104ffbab
children bbb28d5447f9
comparison
equal deleted inserted replaced
89:865b104ffbab 90:31e17dd64fc1
74 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, d_bits + 135, 2, 74 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, d_bits + 135, 2,
75 d_bits + 148); 75 d_bits + 148);
76 printf(" CRC %s %s %s %s\n", 76 printf(" CRC %s %s %s %s\n",
77 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 77 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
78 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 78 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
79 if (crc1)
80 saved_mode_valid = 0;
79 } 81 }
80 82
81 static void 83 static void
82 decode_mode_1(c_bits, d_bits) 84 decode_mode_1(c_bits, d_bits)
83 ubit_t *c_bits, *d_bits; 85 ubit_t *c_bits, *d_bits;
104 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7, 106 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7,
105 d_bits + 158); 107 d_bits + 158);
106 printf(" CRC %s %s %s %s\n", 108 printf(" CRC %s %s %s %s\n",
107 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 109 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
108 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 110 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
111 if (crc1)
112 saved_mode_valid = 0;
109 } 113 }
110 114
111 static void 115 static void
112 decode_mode_2(c_bits, d_bits) 116 decode_mode_2(c_bits, d_bits)
113 ubit_t *c_bits, *d_bits; 117 ubit_t *c_bits, *d_bits;
134 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7, 138 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7,
135 d_bits + 168); 139 d_bits + 168);
136 printf(" CRC %s %s %s %s\n", 140 printf(" CRC %s %s %s %s\n",
137 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 141 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
138 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 142 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
143 if (crc1)
144 saved_mode_valid = 0;
139 } 145 }
140 146
141 static void 147 static void
142 decode_mode_3(c_bits, d_bits) 148 decode_mode_3(c_bits, d_bits)
143 ubit_t *c_bits, *d_bits; 149 ubit_t *c_bits, *d_bits;
166 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 9, 172 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 9,
167 d_bits + 180); 173 d_bits + 180);
168 printf(" CRC %s %s %s %s\n", 174 printf(" CRC %s %s %s %s\n",
169 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 175 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
170 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 176 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
177 if (crc1)
178 saved_mode_valid = 0;
171 } 179 }
172 180
173 static void 181 static void
174 decode_mode_4(c_bits, d_bits) 182 decode_mode_4(c_bits, d_bits)
175 ubit_t *c_bits, *d_bits; 183 ubit_t *c_bits, *d_bits;
201 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7, 209 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 7,
202 d_bits + 191); 210 d_bits + 191);
203 printf(" CRC %s %s %s %s\n", 211 printf(" CRC %s %s %s %s\n",
204 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 212 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
205 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 213 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
214 if (crc1)
215 saved_mode_valid = 0;
206 } 216 }
207 217
208 static void 218 static void
209 decode_mode_5(c_bits, d_bits) 219 decode_mode_5(c_bits, d_bits)
210 ubit_t *c_bits, *d_bits; 220 ubit_t *c_bits, *d_bits;
235 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 10, 245 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 10,
236 d_bits + 199); 246 d_bits + 199);
237 printf(" CRC %s %s %s %s\n", 247 printf(" CRC %s %s %s %s\n",
238 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 248 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
239 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 249 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
250 if (crc1)
251 saved_mode_valid = 0;
240 } 252 }
241 253
242 static void 254 static void
243 decode_mode_6(c_bits, d_bits) 255 decode_mode_6(c_bits, d_bits)
244 ubit_t *c_bits, *d_bits; 256 ubit_t *c_bits, *d_bits;
270 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 28, 282 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 28,
271 d_bits + 253); 283 d_bits + 253);
272 printf(" CRC %s %s %s %s\n", 284 printf(" CRC %s %s %s %s\n",
273 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 285 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
274 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 286 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
287 if (crc1)
288 saved_mode_valid = 0;
275 } 289 }
276 290
277 static void 291 static void
278 decode_mode_7(c_bits, d_bits) 292 decode_mode_7(c_bits, d_bits)
279 ubit_t *c_bits, *d_bits; 293 ubit_t *c_bits, *d_bits;
301 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 11, 315 crc4 = osmo_crc8gen_check_bits(&gsm0860_amr_crc3, crc_collect, 11,
302 d_bits + 253); 316 d_bits + 253);
303 printf(" CRC %s %s %s %s\n", 317 printf(" CRC %s %s %s %s\n",
304 crc1 ? "bad" : "good", crc2 ? "bad" : "good", 318 crc1 ? "bad" : "good", crc2 ? "bad" : "good",
305 crc3 ? "bad" : "good", crc4 ? "bad" : "good"); 319 crc3 ? "bad" : "good", crc4 ? "bad" : "good");
320 if (crc1)
321 saved_mode_valid = 0;
306 } 322 }
307 323
308 static void (*per_mode_decode[8])() = { 324 static void (*per_mode_decode[8])() = {
309 decode_mode_0, 325 decode_mode_0,
310 decode_mode_1, 326 decode_mode_1,