annotate trau-decode/extr-efr.c @ 60:eeb28c9c633a

d144: generate A-TRAU dump from Nokia TCSM2 capture
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 25 Sep 2024 17:55:08 +0000
parents 0565aaa84b17
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
9
0565aaa84b17 trau-decode: implement trau-extr program
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
2 * This module implements the EFR decoding part of trau-extr.
4
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 */
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 #include <stdio.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <stdint.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdlib.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <string.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <strings.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <gsm_efr.h>
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include "osmo_bits.h"
d9c095357c32 trau-parse: check and report EFR CRC
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12
5
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
13 static void
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
14 dbits_to_frame(d_bits, frame)
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
15 ubit_t *d_bits;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
16 uint8_t *frame;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
17 {
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
18 ubit_t intermed[248], *ip;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
19 uint8_t *op, mask;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
20 unsigned nb;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
21
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
22 intermed[0] = 1;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
23 intermed[1] = 1;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
24 intermed[2] = 0;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
25 intermed[3] = 0;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
26 bcopy(d_bits + 1, intermed + 4, 38);
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
27 bcopy(d_bits + 42, intermed + 42, 53);
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
28 bcopy(d_bits + 98, intermed + 95, 50);
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
29 bcopy(d_bits + 151, intermed + 145, 53);
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
30 bcopy(d_bits + 207, intermed + 198, 50);
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
31 ip = intermed;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
32 op = frame;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
33 for (nb = 0; nb < EFR_RTP_FRAME_LEN; nb++) {
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
34 *op = 0;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
35 for (mask = 0x80; mask; mask >>= 1) {
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
36 if (*ip)
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
37 *op |= mask;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
38 ip++;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
39 }
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
40 op++;
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
41 }
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
42 }
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
43
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
44 void
9
0565aaa84b17 trau-decode: implement trau-extr program
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
45 convert_efr_frame(d_bits, outf)
5
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
46 ubit_t *d_bits;
9
0565aaa84b17 trau-decode: implement trau-extr program
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
47 FILE *outf;
5
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
48 {
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
49 uint8_t frame[EFR_RTP_FRAME_LEN];
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
50
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
51 dbits_to_frame(d_bits, frame);
9
0565aaa84b17 trau-decode: implement trau-extr program
Mychaela Falconia <falcon@freecalypso.org>
parents: 5
diff changeset
52 fwrite(frame, 1, EFR_RTP_FRAME_LEN, outf);
5
bf5c9fb431b8 trau-parse: implement EFR decoding
Mychaela Falconia <falcon@freecalypso.org>
parents: 4
diff changeset
53 }