changeset 491:45bf34451dd7

libgsmhr1: implement TW-TS-002 input
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 15 Jun 2024 06:22:21 +0000
parents 4d80730683d4
children cc3a831712a4
files libgsmhr1/Makefile libgsmhr1/twts002_in.c
diffstat 2 files changed, 52 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libgsmhr1/Makefile	Sat Jun 15 05:33:35 2024 +0000
+++ b/libgsmhr1/Makefile	Sat Jun 15 06:22:21 2024 +0000
@@ -1,4 +1,4 @@
-OBJS=	pack_frame.o unpack_frame.o
+OBJS=	pack_frame.o twts002_in.o unpack_frame.o
 HDRS=	tw_gsmhr.h
 LIB=	libgsmhr1.a
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgsmhr1/twts002_in.c	Sat Jun 15 06:22:21 2024 +0000
@@ -0,0 +1,51 @@
+/*
+ * 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;
+}