FreeCalypso > hg > gsm-codec-lib
view frtest/tfo-xfrm.c @ 550:de333989a12b
document gsm[e]fr-decode-tw5[-r] utilities
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 05 Oct 2024 02:16:48 +0000 |
parents | b26df31124a4 |
children |
line wrap: on
line source
/* * This program exercises our ThemWi implementation of TFO transform for * GSM-FR. It reads a stream of radio leg A Rx frames from a TW-TS-005 Annex A * hex file and writes the "pristine" stream intended for radio leg B Tx * into another TW-TS-005 Annex A hex file. The output is in basic RTP format. */ #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include "../libgsmfr2/tw_gsmfr.h" #include "../libtest/tw5reader.h" #include "../libtest/tw5writer.h" main(argc, argv) char **argv; { char *infname, *outfname; FILE *inf, *outf; unsigned lineno; struct gsmfr_preproc_state *pp_state; uint8_t frame_in[TWTS005_MAX_FRAME], frame_out[GSMFR_RTP_FRAME_LEN]; unsigned frame_in_len; int dtxd, rc; if (argc == 3 && argv[1][0] != '-') { dtxd = 0; infname = argv[1]; outfname = argv[2]; } else if (argc == 4 && !strcmp(argv[1], "-d")) { dtxd = 1; infname = argv[2]; outfname = argv[3]; } else { fprintf(stderr, "usage: %s [-d] input.hex output.hex\n", argv[0]); exit(1); } inf = fopen(infname, "r"); if (!inf) { perror(infname); exit(1); } lineno = 0; outf = fopen(outfname, "w"); if (!outf) { perror(outfname); exit(1); } pp_state = gsmfr_preproc_create(); if (!pp_state) { fprintf(stderr, "gsmfr_preproc_create() failed!\n"); exit(1); } for (;;) { rc = twts005_read_frame(inf, &lineno, frame_in, &frame_in_len); if (rc < 0) { fprintf(stderr, "%s line %u: not valid TW-TS-005\n", argv[1], lineno); exit(1); } if (!rc) break; rc = gsmfr_tfo_xfrm_main(pp_state, frame_in, frame_in_len, frame_out); if (rc < 0) { fprintf(stderr, "%s line %u: not a valid GSM-FR frame\n", argv[1], lineno); exit(1); } if (dtxd) gsmfr_tfo_xfrm_dtxd(pp_state, frame_out); emit_hex_frame(outf, frame_out, GSMFR_RTP_FRAME_LEN); } fclose(outf); exit(0); }