# HG changeset patch # User Mychaela Falconia # Date 1713067202 0 # Node ID 37dc5c84bbe9b0d4009972f25a6a29edfcfddf3a # Parent e4ca04586118c1d2c7b395e0597db6a6aa2e8cd1 dev: generate RTP-packed GSM-FR DHF diff -r e4ca04586118 -r 37dc5c84bbe9 .hgignore --- a/.hgignore Sun Apr 14 03:38:09 2024 +0000 +++ b/.hgignore Sun Apr 14 04:00:02 2024 +0000 @@ -19,6 +19,8 @@ ^dev/efr-tidsp\.out$ ^dev/gsm0611-silence-fr$ ^dev/gsm0611-silence-fr\.out$ +^dev/gsmfr-dhf$ +^dev/gsmfr-dhf\.out$ ^dev/mk-256bytes$ ^dev/s2a-regen$ ^dev/s2a-regen\.out$ diff -r e4ca04586118 -r 37dc5c84bbe9 dev/Makefile --- a/dev/Makefile Sun Apr 14 03:38:09 2024 +0000 +++ b/dev/Makefile Sun Apr 14 04:00:02 2024 +0000 @@ -1,10 +1,11 @@ CC= gcc CFLAGS= -O2 PROGS= a2s-regen efr-bit-packing efr-sid-insert efr-tidsp gsm0611-silence-fr \ - mk-256bytes s2a-regen s2u-regen s2u-regen-plus4 u2s-regen xmaxc-tables + gsmfr-dhf mk-256bytes s2a-regen s2u-regen s2u-regen-plus4 u2s-regen \ + xmaxc-tables DATAOUT=a2s-regen.out efr-bit-packing.out efr-sid-insert.out efr-tidsp.out \ - gsm0611-silence-fr.out s2a-regen.out s2u-regen.out s2u-regen-plus4.out \ - u2s-regen.out xmaxc-tables.out + gsm0611-silence-fr.out gsmfr-dhf.out s2a-regen.out s2u-regen.out \ + s2u-regen-plus4.out u2s-regen.out xmaxc-tables.out all: ${PROGS} ${DATAOUT} @@ -38,6 +39,12 @@ gsm0611-silence-fr.out: gsm0611-silence-fr ./gsm0611-silence-fr > $@ +gsmfr-dhf: gsmfr-dhf.o pack_gsmfr_rtp.o + ${CC} ${CFLAGS} -o $@ $@.o pack_gsmfr_rtp.o + +gsmfr-dhf.out: gsmfr-dhf + ./gsmfr-dhf > $@ + mk-256bytes: mk-256bytes.c ${CC} ${CFLAGS} -o $@ $@.c diff -r e4ca04586118 -r 37dc5c84bbe9 dev/gsmfr-dhf.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/gsmfr-dhf.c Sun Apr 14 04:00:02 2024 +0000 @@ -0,0 +1,50 @@ +/* + * This program is meant to be run only once by the developer - it + * generates RTP-packed form of the decoder homing frame for GSM-FR, + * as specified in more recent versions of GSM 06.10 spec. + */ + +#include +#include +#include +#include +#include + +extern void gsmfr_pack_to_rtp(const int16_t *params, uint8_t *frame); + +static const int16_t larc[8] = {9, 23, 15, 8, 7, 3, 3, 2}; + +main(argc, argv) + char **argv; +{ + int16_t params[76], *pp; + uint8_t frame[33]; + unsigned m, n; + + /* gather params */ + bcopy(larc, params, sizeof(int16_t) * 8); + pp = params + 8; + for (m = 0; m < 4; m++) { + *pp++ = 40; + *pp++ = 0; + *pp++ = 0; + *pp++ = 0; + for (n = 0; n < 13; n++) { + if (m == 3 && n == 4) + *pp++ = 3; + else + *pp++ = 4; + } + } + /* generate frame */ + gsmfr_pack_to_rtp(params, frame); + /* print the frame */ + for (n = 0; n < 33; n++) { + printf("0x%02X,", frame[n]); + if (n == 4 || n == 11 || n == 18 || n == 25 || n == 32) + putchar('\n'); + else + putchar(' '); + } + exit(0); +}