FreeCalypso > hg > gsm-codec-lib
annotate hrutil/tfo-xfrm.c @ 589:e414d138c607
amrconv: new program amr-ietf2hexoa
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 06 Nov 2025 21:18:59 +0000 |
| parents | fc7a59deb3c3 |
| children |
| rev | line source |
|---|---|
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program exercises our ThemWi implementation of TFO transform for |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
3 * GSM-HR. It reads a stream of radio leg A Rx frames from a TW-TS-005 Annex B |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * hex file and writes the "pristine" stream intended for radio leg B Tx |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
5 * into another TW-TS-005 Annex B hex file. DTXd can be enabled or disabled; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
6 * the output can be in either TS 101 318 or RFC 5993 format. |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 */ |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdio.h> |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdint.h> |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdlib.h> |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
12 #include <unistd.h> |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
13 #include "../libgsmhr1/tw_gsmhr.h" |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "../libtest/tw5reader.h" |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 main(argc, argv) |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 char **argv; |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 char *infname, *outfname; |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 FILE *inf, *outf; |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 unsigned lineno; |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
22 struct gsmhr_rxfe_state *state; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
23 uint8_t frame_in[TWTS005_MAX_FRAME]; |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 unsigned frame_in_len; |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
25 int16_t prm_in[GSMHR_NUM_PARAMS_DEC], prm_out[GSMHR_NUM_PARAMS_ENC]; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
26 int opt, rc, dtxd = 0, emit_5993 = 0; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
27 extern int optind; |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
29 while ((opt = getopt(argc, argv, "dx")) != EOF) { |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
30 switch (opt) { |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
31 case 'd': |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
32 dtxd = 1; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
33 continue; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
34 case 'x': |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
35 emit_5993 = 1; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
36 continue; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
37 default: |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
38 usage: |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
39 fprintf(stderr, |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
40 "usage: %s [-d] [-x] input.hex output.hex\n", |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
41 argv[0]); |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
42 exit(1); |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
43 } |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 } |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
45 if (argc != optind + 2) |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
46 goto usage; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
47 infname = argv[optind]; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
48 outfname = argv[optind+1]; |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
49 |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 inf = fopen(infname, "r"); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 if (!inf) { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 perror(infname); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 exit(1); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 } |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 lineno = 0; |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 outf = fopen(outfname, "w"); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (!outf) { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 perror(outfname); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 exit(1); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
61 state = gsmhr_rxfe_create(); |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
62 if (!state) { |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
63 fprintf(stderr, "gsmhr_rxfe_create() failed!\n"); |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 exit(1); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 for (;;) { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 rc = twts005_read_frame(inf, &lineno, frame_in, &frame_in_len); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 if (rc < 0) { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 fprintf(stderr, "%s line %u: not valid TW-TS-005\n", |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 argv[1], lineno); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 exit(1); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 } |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 if (!rc) |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 break; |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
75 rc = gsmhr_rtp_in_direct(frame_in, frame_in_len, prm_in); |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 if (rc < 0) { |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 fprintf(stderr, |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
78 "%s line %u: not a valid GSM-HR frame\n", |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
79 infname, lineno); |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 exit(1); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 } |
|
584
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
82 gsmhr_tfo_xfrm(state, dtxd, prm_in, prm_out); |
|
fc7a59deb3c3
hrutil: new program gsmhr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
546
diff
changeset
|
83 emit_cod_to_tw5b(outf, prm_out, emit_5993); |
|
546
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 fclose(outf); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 exit(0); |
|
b26df31124a4
frtest: new program gsmfr-tfo-xfrm
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 } |
