changeset 76:d4ee42801cdc

trau-decode: factor out parse-fr-common.c
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 08 Feb 2025 04:57:15 +0000
parents b518ab15b518
children 729dbac9df82
files trau-decode/Makefile trau-decode/parse-fr-common.c trau-decode/parse-main.c trau-decode/parse-tfo16.c
diffstat 4 files changed, 61 insertions(+), 81 deletions(-) [+]
line wrap: on
line diff
--- a/trau-decode/Makefile	Sat Feb 08 03:38:54 2025 +0000
+++ b/trau-decode/Makefile	Sat Feb 08 04:57:15 2025 +0000
@@ -8,7 +8,7 @@
 dump-1bit:	dump-1bit.c
 	${CC} ${CFLAGS} -o $@ $@.c
 
-tfo-parse-fr16:	crc8gen.o parse-fr.o parse-efr.o parse-tfo16.o
+tfo-parse-fr16:	crc8gen.o parse-fr.o parse-fr-common.o parse-efr.o parse-tfo16.o
 	${CC} ${CFLAGS} -o $@ $^ -lgsmfr2 -lgsmefr
 
 trau-extr:	extr-fr.o extr-efr.o extr-main.o
@@ -20,7 +20,7 @@
 trau-hr-dump-hex:	crc8gen.o gsmhr_unpack.o hr-guts.o trau-hr-dump-hex.o
 	${CC} ${CFLAGS} -o $@ $^
 
-trau-parse:	crc8gen.o parse-fr.o parse-efr.o parse-main.o
+trau-parse:	crc8gen.o parse-fr.o parse-fr-common.o parse-efr.o parse-main.o
 	${CC} ${CFLAGS} -o $@ $^ -lgsmfr2 -lgsmefr
 
 trau-sync8:	trau-sync8.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trau-decode/parse-fr-common.c	Sat Feb 08 04:57:15 2025 +0000
@@ -0,0 +1,55 @@
+/*
+ * This module contains a bit of code that has been factored out of
+ * trau-parse and tfo-parse-fr16 programs; it handles FR and EFR codecs.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+
+static void
+collect_d_bits(frame_bits, d_bits)
+	uint8_t *frame_bits, *d_bits;
+{
+	bcopy(frame_bits + 33, d_bits, 15);
+	bcopy(frame_bits + 49, d_bits + 15, 15);
+	bcopy(frame_bits + 65, d_bits + 30, 15);
+	bcopy(frame_bits + 81, d_bits + 45, 15);
+	bcopy(frame_bits + 97, d_bits + 60, 15);
+	bcopy(frame_bits + 113, d_bits + 75, 15);
+	bcopy(frame_bits + 129, d_bits + 90, 15);
+	bcopy(frame_bits + 145, d_bits + 105, 15);
+	bcopy(frame_bits + 161, d_bits + 120, 15);
+	bcopy(frame_bits + 177, d_bits + 135, 15);
+	bcopy(frame_bits + 193, d_bits + 150, 15);
+	bcopy(frame_bits + 209, d_bits + 165, 15);
+	bcopy(frame_bits + 225, d_bits + 180, 15);
+	bcopy(frame_bits + 241, d_bits + 195, 15);
+	bcopy(frame_bits + 257, d_bits + 210, 15);
+	bcopy(frame_bits + 273, d_bits + 225, 15);
+	bcopy(frame_bits + 289, d_bits + 240, 15);
+	bcopy(frame_bits + 305, d_bits + 255, 5);
+}
+
+void
+print_fr_efr_frame(frame_bits, c1_5)
+	uint8_t *frame_bits;
+	unsigned c1_5;
+{
+	uint8_t d_bits[260];
+
+	switch (c1_5) {
+	case 0x02:
+	case 0x1C:
+		collect_d_bits(frame_bits, d_bits);
+		print_fr_frame(d_bits);
+		break;
+	case 0x1A:
+		collect_d_bits(frame_bits, d_bits);
+		check_efr_crc(d_bits);
+		print_efr_frame(d_bits);
+		break;
+	}
+}
--- a/trau-decode/parse-main.c	Sat Feb 08 03:38:54 2025 +0000
+++ b/trau-decode/parse-main.c	Sat Feb 08 04:57:15 2025 +0000
@@ -25,7 +25,7 @@
 	D144_EDATA,
 } d144_state;
 static unsigned hunt_for_0_count, frame_pos_count;
-static uint8_t in_frame_2bit[160], frame_bits[320], d_bits[260];
+static uint8_t in_frame_2bit[160], frame_bits[320];
 
 static void
 unpack_dibits()
@@ -66,47 +66,6 @@
 }
 
 static void
-collect_d_bits()
-{
-	bcopy(frame_bits + 33, d_bits, 15);
-	bcopy(frame_bits + 49, d_bits + 15, 15);
-	bcopy(frame_bits + 65, d_bits + 30, 15);
-	bcopy(frame_bits + 81, d_bits + 45, 15);
-	bcopy(frame_bits + 97, d_bits + 60, 15);
-	bcopy(frame_bits + 113, d_bits + 75, 15);
-	bcopy(frame_bits + 129, d_bits + 90, 15);
-	bcopy(frame_bits + 145, d_bits + 105, 15);
-	bcopy(frame_bits + 161, d_bits + 120, 15);
-	bcopy(frame_bits + 177, d_bits + 135, 15);
-	bcopy(frame_bits + 193, d_bits + 150, 15);
-	bcopy(frame_bits + 209, d_bits + 165, 15);
-	bcopy(frame_bits + 225, d_bits + 180, 15);
-	bcopy(frame_bits + 241, d_bits + 195, 15);
-	bcopy(frame_bits + 257, d_bits + 210, 15);
-	bcopy(frame_bits + 273, d_bits + 225, 15);
-	bcopy(frame_bits + 289, d_bits + 240, 15);
-	bcopy(frame_bits + 305, d_bits + 255, 5);
-}
-
-static void
-print_fr_efr_frame(c1_5)
-	unsigned c1_5;
-{
-	switch (c1_5) {
-	case 0x02:
-	case 0x1C:
-		collect_d_bits();
-		print_fr_frame(d_bits);
-		break;
-	case 0x1A:
-		collect_d_bits();
-		check_efr_crc(d_bits);
-		print_efr_frame(d_bits);
-		break;
-	}
-}
-
-static void
 print_data_subframe(nf, bits)
 	uint8_t *bits;
 {
@@ -213,7 +172,7 @@
 		printf("  C6-C11: %u\n", c6_11);
 		printf("  C12=%u C13=%u C14=%u C15=%u\n", frame_bits[28],
 			frame_bits[29], frame_bits[30], frame_bits[31]);
-		print_fr_efr_frame(c1_5);
+		print_fr_efr_frame(frame_bits, c1_5);
 		printf("  C16=%u C17=%u C18=%u C19=%u C20=%u C21=%u\n",
 			frame_bits[310], frame_bits[311], frame_bits[312],
 			frame_bits[313], frame_bits[314], frame_bits[315]);
--- a/trau-decode/parse-tfo16.c	Sat Feb 08 03:38:54 2025 +0000
+++ b/trau-decode/parse-tfo16.c	Sat Feb 08 04:57:15 2025 +0000
@@ -18,7 +18,7 @@
 	SYNCED
 } state;
 static unsigned hunt_for_0_count, frame_pos_count;
-static uint8_t in_frame_2bit[160], frame_bits[320], d_bits[260];
+static uint8_t in_frame_2bit[160], frame_bits[320];
 
 static void
 unpack_dibits()
@@ -59,29 +59,6 @@
 }
 
 static void
-collect_d_bits()
-{
-	bcopy(frame_bits + 33, d_bits, 15);
-	bcopy(frame_bits + 49, d_bits + 15, 15);
-	bcopy(frame_bits + 65, d_bits + 30, 15);
-	bcopy(frame_bits + 81, d_bits + 45, 15);
-	bcopy(frame_bits + 97, d_bits + 60, 15);
-	bcopy(frame_bits + 113, d_bits + 75, 15);
-	bcopy(frame_bits + 129, d_bits + 90, 15);
-	bcopy(frame_bits + 145, d_bits + 105, 15);
-	bcopy(frame_bits + 161, d_bits + 120, 15);
-	bcopy(frame_bits + 177, d_bits + 135, 15);
-	bcopy(frame_bits + 193, d_bits + 150, 15);
-	bcopy(frame_bits + 209, d_bits + 165, 15);
-	bcopy(frame_bits + 225, d_bits + 180, 15);
-	bcopy(frame_bits + 241, d_bits + 195, 15);
-	bcopy(frame_bits + 257, d_bits + 210, 15);
-	bcopy(frame_bits + 273, d_bits + 225, 15);
-	bcopy(frame_bits + 289, d_bits + 240, 15);
-	bcopy(frame_bits + 305, d_bits + 255, 5);
-}
-
-static void
 process_frame()
 {
 	unsigned c1_5eq, c6_11;
@@ -112,18 +89,7 @@
 	printf("  C6-C11: %u\n", c6_11);
 	printf("  C12=%u C13=%u C14=%u C15=%u\n", frame_bits[28],
 		frame_bits[29], frame_bits[30], frame_bits[31]);
-	switch (c1_5eq) {
-	case 0x02:
-	case 0x1C:
-		collect_d_bits();
-		print_fr_frame(d_bits);
-		break;
-	case 0x1A:
-		collect_d_bits();
-		check_efr_crc(d_bits);
-		print_efr_frame(d_bits);
-		break;
-	}
+	print_fr_efr_frame(frame_bits, c1_5eq);
 	printf("  C16=%u C17=%u C18=%u C19=%u C20=%u C21=%u\n",
 		frame_bits[310], frame_bits[311], frame_bits[312],
 		frame_bits[313], frame_bits[314], frame_bits[315]);