changeset 511:a5d61331b675

libgsmhr1: generate packed version of DHF
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 25 Aug 2024 02:50:43 +0000
parents 5bf71b091323
children 4f0ab833bec0
files .hgignore libgsmhr1/Makefile libgsmhr1/gen-dhf-pack.c
diffstat 3 files changed, 57 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Sun Aug 25 02:19:37 2024 +0000
+++ b/.hgignore	Sun Aug 25 02:50:43 2024 +0000
@@ -72,7 +72,10 @@
 ^frtest/gsmfr-encode-r$
 ^frtest/gsmfr-preproc$
 
+^libgsmhr1/dhf_packed\.c$
+^libgsmhr1/gen-dhf-pack$
 ^libgsmhr1/namespace\.h$
+
 ^libtwamr/namespace\.h$
 
 ^miscutil/amrts-pcm8-compact$
--- a/libgsmhr1/Makefile	Sun Aug 25 02:19:37 2024 +0000
+++ b/libgsmhr1/Makefile	Sun Aug 25 02:50:43 2024 +0000
@@ -1,17 +1,25 @@
-OBJS=	dhf_params.o enc_out_order.o mathdp31.o mathhalf.o pack_frame.o \
-	rtp_in.o rtp_in_direct.o sid_detect.o sid_reset.o sp_rom.o twts002_in.o\
-	twts002_out.o unpack_frame.o
+OBJS=	dhf_packed.o dhf_params.o enc_out_order.o mathdp31.o mathhalf.o \
+	pack_frame.o rtp_in.o rtp_in_direct.o sid_detect.o sid_reset.o sp_rom.o\
+	twts002_in.o twts002_out.o unpack_frame.o
 HDRS=	enc_out_order.h mathdp31.h mathhalf.h namespace.h sp_rom.h tw_gsmhr.h \
 	typedefs.h
 LIB=	libgsmhr1.a
 
 include ../config.defs
 
+DHF_PACK_OBJS=	gen-dhf-pack.o dhf_params.o pack_frame.o
+
 all:	${LIB}
 
 namespace.h:	namespace.awk namespace.list
 	awk -f namespace.awk namespace.list > $@
 
+gen-dhf-pack:	${DHF_PACK_OBJS}
+	${CC} ${CFLAGS} -o $@ ${DHF_PACK_OBJS}
+
+dhf_packed.c:	gen-dhf-pack
+	./gen-dhf-pack > $@
+
 ${OBJS}:	${HDRS}
 
 ${LIB}:	${OBJS}
@@ -25,4 +33,4 @@
 #	install -c -m 444 ${LIB} ${DESTDIR}${libdir}
 
 clean:
-	rm -f *.[oa] namespace.h errs
+	rm -f *.[oa] namespace.h dhf_packed.c gen-dhf-pack errs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgsmhr1/gen-dhf-pack.c	Sun Aug 25 02:50:43 2024 +0000
@@ -0,0 +1,42 @@
+/*
+ * This helper program is built and executed during libgsmhr1 compilation
+ * process.  It converts the spec-fixed decoder homing frame (DHF)
+ * from array-of-parameters form into the packed format of TS 101 318.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include "tw_gsmhr.h"
+
+static void emit_frame_body(const uint8_t *frame)
+{
+	int i;
+
+	for (i = 0; i < GSMHR_FRAME_LEN_RPF; i++) {
+		if (i == 0 || i == 7)
+			putchar('\t');
+		else
+			putchar(' ');
+		printf("0x%02X,", frame[i]);
+		if (i == 6 || i == 13)
+			putchar('\n');
+	}
+}
+
+int main(int argc, char **argv)
+{
+	uint8_t frame[GSMHR_FRAME_LEN_RPF];
+
+	gsmhr_pack_ts101318(gsmhr_dhf_params, frame);
+
+	puts("/* This C module is auto-generated - do not edit! */");
+	putchar('\n');
+	puts("#include <stdint.h>");
+	puts("#include \"tw_gsmhr.h\"");
+	putchar('\n');
+	puts("const uint8_t gsmhr_dhf_ts101318[GSMHR_FRAME_LEN_RPF] = {");
+	emit_frame_body(frame);
+	puts("};");
+	exit(0);
+}