FreeCalypso > hg > gsm-codec-lib
annotate frtest/dlcap-gsmx.c @ 351:97c699f40ab3
libtwamr: generate namespace.h from namespace.list
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Sun, 05 May 2024 20:34:55 +0000 | 
| parents | 6e39fc0134da | 
| children | 
| rev | line source | 
|---|---|
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
1 /* | 
| 
139
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
2 * This program reads a TCH/FS downlink capture produced with FreeCalypso tools | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
3 * (fw version with TCH downlink sniffing feature and fc-shell tch record) | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
4 * and converts it into our extended-libgsm binary format, to be further | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
5 * fed to gsmfr-decode. | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
6 */ | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
7 | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
8 #include <ctype.h> | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
9 #include <stdio.h> | 
| 
139
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
10 #include <stdint.h> | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
11 #include <stdlib.h> | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
12 #include <string.h> | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
13 #include <strings.h> | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
14 | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
15 main(argc, argv) | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
16 char **argv; | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
17 { | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
18 FILE *inf, *outf; | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
19 char linebuf[128]; | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
20 int lineno, rc; | 
| 
139
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
21 uint16_t status_words[3]; | 
| 
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
22 uint8_t tidsp_bytes[33], libgsm_bytes[33], bfi[2]; | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
23 unsigned fn_mod_104; | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
24 | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
25 if (argc != 3) { | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 fprintf(stderr, "usage: %s infile outfile\n", argv[0]); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 exit(1); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 } | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 inf = fopen(argv[1], "r"); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
30 if (!inf) { | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 perror(argv[1]); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 exit(1); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 } | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 outf = fopen(argv[2], "w"); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 if (!outf) { | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 perror(argv[2]); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
37 exit(1); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 } | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) { | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
40 /* support both old and new formats */ | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
41 if (isxdigit(linebuf[0]) && isxdigit(linebuf[1]) && | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
42 isxdigit(linebuf[2]) && isxdigit(linebuf[3])) { | 
| 
139
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
43 rc = parse_dlcap_common(linebuf, status_words, | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
44 tidsp_bytes); | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
45 if (rc < 0) { | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
46 invalid: fprintf(stderr, | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
47 "error: %s is not in the expected format\n", | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
48 argv[1]); | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
49 exit(1); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 } | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
51 fn_mod_104 = 0; /* won't have TAF */ | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
52 } else if (!strncmp(linebuf, "FR ", 3)) { | 
| 
139
 
be57e06bed84
factor out common part of gsmfr-cvt-dlcap, in prep for EFR
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
137 
diff
changeset
 | 
53 rc = parse_dlcap_common(linebuf + 3, status_words, | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
54 tidsp_bytes); | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
55 if (rc < 0) | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
56 goto invalid; | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
57 if (linebuf[84] != ' ') | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
58 goto invalid; | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
59 if (!isdigit(linebuf[85])) | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
60 goto invalid; | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
61 fn_mod_104 = strtoul(linebuf + 85, 0, 10); | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
62 } else | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
63 goto invalid; | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
64 /* | 
| 
179
 
6e39fc0134da
[e]frtest/dlcap-gsmx.c: fix comment pointing to description of DSP flags
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
166 
diff
changeset
 | 
65 * DSP flags are documented in the TCH-tap-modes article | 
| 
 
6e39fc0134da
[e]frtest/dlcap-gsmx.c: fix comment pointing to description of DSP flags
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
166 
diff
changeset
 | 
66 * in freecalypso-docs. | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
67 */ | 
| 
166
 
500f3e93964f
gsmfr-dlcap-gsmx: handle DSP flags consistently with EFR version
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
165 
diff
changeset
 | 
68 if ((status_words[0] & 0xC004) == 0xC000) { | 
| 
 
500f3e93964f
gsmfr-dlcap-gsmx: handle DSP flags consistently with EFR version
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
165 
diff
changeset
 | 
69 gsm0610_tidsp_to_libgsm(tidsp_bytes, libgsm_bytes); | 
| 
 
500f3e93964f
gsmfr-dlcap-gsmx: handle DSP flags consistently with EFR version
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
165 
diff
changeset
 | 
70 fwrite(libgsm_bytes, 1, 33, outf); | 
| 
 
500f3e93964f
gsmfr-dlcap-gsmx: handle DSP flags consistently with EFR version
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
165 
diff
changeset
 | 
71 } else { | 
| 
137
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
72 bfi[0] = 0xBF; | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
73 bfi[1] = fn_mod_104 == 60; | 
| 
 
b7ea278390eb
gsmfr-cvt-dlcap: support new FC TCH DL recording format
 
Mychaela Falconia <falcon@freecalypso.org> 
parents: 
19 
diff
changeset
 | 
74 fwrite(bfi, 1, 2, outf); | 
| 
19
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
75 } | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
76 } | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
77 exit(0); | 
| 
 
7960744ba19c
frtest: gsmfr-cvt-dlcap program based on fc-tch2fr
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
78 } | 
