changeset 73:06f241846c67

trau-hr-dump: add -r option for raw frame output
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 08 Feb 2025 01:13:54 +0000
parents afebef67e8d4
children e78c6b1ecb91
files trau-decode/trau-hr-dump.c
diffstat 1 files changed, 44 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/trau-decode/trau-hr-dump.c	Thu Nov 28 02:53:59 2024 +0000
+++ b/trau-decode/trau-hr-dump.c	Sat Feb 08 01:13:54 2025 +0000
@@ -31,6 +31,7 @@
 
 static uint8_t *filebuf;
 static unsigned total_size;
+static int include_raw;
 
 static void
 read_ts_file(filename, subslot_arg)
@@ -138,6 +139,24 @@
 }
 
 static void
+dump_raw_frame(frame_bits)
+	ubit_t *frame_bits;
+{
+	uint8_t *sp = frame_bits;
+	unsigned n, m, d;
+
+	for (n = 0; n < 40; n++) {
+		d = 0;
+		for (m = 0; m < 4; m++) {
+			d <<= 1;
+			d |= *sp++;
+		}
+		printf("%x", d);
+	}
+	putchar('\n');
+}
+
+static void
 process_frame(pos)
 	unsigned pos;
 {
@@ -148,6 +167,8 @@
 	int crc_stat;
 
 	printf("Frame at 0x%x:\n", pos);
+	if (include_raw)
+		dump_raw_frame(frame);
 	printf("  C1-C4: %u%u%u%u OP %s\n", frame[9], frame[10], frame[11],
 		frame[12], bit_parity(frame + 9, 5) ? "good" : "bad");
 	bcopy(frame + 14, xc_bits, 2);
@@ -223,11 +244,31 @@
 main(argc, argv)
 	char **argv;
 {
-	if (argc != 3) {
-		fprintf(stderr, "usage: %s binfile subslot\n", argv[0]);
+	char *filename, *subslot_arg;
+
+	switch (argc) {
+	case 3:
+		if (argv[1][0] == '-')
+			goto usage;
+		filename = argv[1];
+		subslot_arg = argv[2];
+		include_raw = 0;
+		break;
+	case 4:
+		if (strcmp(argv[1], "-r"))
+			goto usage;
+		if (argv[2][0] == '-')
+			goto usage;
+		filename = argv[2];
+		subslot_arg = argv[3];
+		include_raw = 1;
+		break;
+	default:
+	usage:
+		fprintf(stderr, "usage: %s [-r] binfile subslot\n", argv[0]);
 		exit(1);
 	}
-	read_ts_file(argv[1], argv[2]);
+	read_ts_file(filename, subslot_arg);
 	process_filebuf();
 	exit(0);
 }