view trau-decode/parse-data.c @ 83:5e2ecfd45fc3 default tip

trau-parse: AMR 7k40 CRC
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 09 Feb 2025 03:22:47 +0000
parents 729dbac9df82
children
line wrap: on
line source

/*
 * This module contains a bit of code that has been factored out of
 * trau-parse program; it handles data frames.
 */

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

static unsigned
bits_to_num(bits, nbits)
	uint8_t *bits;
	unsigned nbits;
{
	unsigned accum;
	unsigned n;

	accum = 0;
	for (n = 0; n < nbits; n++) {
		accum <<= 1;
		if (*bits)
			accum |= 1;
		bits++;
	}
	return accum;
}

static void
print_data_subframe(nf, bits)
	uint8_t *bits;
{
	unsigned nb;

	printf("  Data frame %d:", nf);
	for (nb = 0; nb < 9; nb++) {
		printf(" %02X", bits_to_num(bits, 8));
		bits += 8;
	}
	putchar('\n');
}

void
print_data_frame(frame_bits)
	uint8_t *frame_bits;
{
	printf("  C6-C15: %u%u%u%u%u%u%u%u%u%u\n", frame_bits[22],
		frame_bits[23], frame_bits[24], frame_bits[25],
		frame_bits[26], frame_bits[27], frame_bits[28],
		frame_bits[29], frame_bits[30], frame_bits[31]);
	print_data_subframe(0, frame_bits + 4 * 8);
	print_data_subframe(1, frame_bits + 13 * 8);
	print_data_subframe(2, frame_bits + 22 * 8);
	print_data_subframe(3, frame_bits + 31 * 8);
}

void
print_edata_frame(frame_bits)
	uint8_t *frame_bits;
{
	printf("  C6-C13: %u%u%u%u%u%u%u%u\n", frame_bits[22],
		frame_bits[23], frame_bits[24], frame_bits[25],
		frame_bits[26], frame_bits[27], frame_bits[28],
		frame_bits[29]);
	printf("  M1=%u M2=%u\n", frame_bits[30], frame_bits[31]);
}