view libgsmhr1/twts002_in.c @ 491:45bf34451dd7

libgsmhr1: implement TW-TS-002 input
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 15 Jun 2024 06:22:21 +0000
parents
children
line wrap: on
line source

/*
 * The function implemented in this module parses a received TW-TS-002
 * RTP payload and turns it into the internal input form for the HRv1
 * decoder.
 */

#include <stdint.h>
#include <string.h>
#include "tw_gsmhr.h"

int gsmhr_decoder_twts002_in(const uint8_t *payload, int16_t *params)
{
	int ft;

	if (payload[0] & 0x80)
		return -1;
	ft = payload[0] >> 4;
	switch (ft) {
	case 0:
		gsmhr_unpack_ts101318(payload + 1, params);
		params[18] = 0;		/* BFI */
		params[20] = 0;		/* SID */
		break;
	case 1:
		memset(params, 0, sizeof(int16_t) * GSMHR_NUM_PARAMS);
		params[18] = 0;		/* BFI */
		params[20] = 1;		/* SID */
		break;
	case 2:
		gsmhr_unpack_ts101318(payload + 1, params);
		params[18] = 0;		/* BFI */
		params[20] = 2;		/* SID */
		break;
	case 6:
		gsmhr_unpack_ts101318(payload + 1, params);
		params[18] = 1;		/* BFI */
		params[20] = 0;		/* SID */
		break;
	case 7:
		memset(params, 0, sizeof(int16_t) * GSMHR_NUM_PARAMS);
		params[18] = 2;		/* BFI with no data */
		params[20] = 0;		/* SID */
		break;
	default:
		return -2;
	}
	/* UFI and TAF always get their own bits */
	params[19] = (payload[0] & 0x02) >> 1;
	params[21] = payload[0] & 0x01;
	return 0;
}