FreeCalypso > hg > gsm-codec-lib
annotate hrutil/tfo-xfrm.c @ 584:fc7a59deb3c3 default tip
hrutil: new program gsmhr-tfo-xfrm
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 Feb 2025 01:34:48 +0000 |
parents | frtest/tfo-xfrm.c@b26df31124a4 |
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 } |