# HG changeset patch # User Mychaela Falconia # Date 1718432541 0 # Node ID 45bf34451dd7d6f4f577f68f26b64070043a8888 # Parent 4d80730683d44d3fcfd16d3c6716cb265d57cedc libgsmhr1: implement TW-TS-002 input diff -r 4d80730683d4 -r 45bf34451dd7 libgsmhr1/Makefile --- 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 diff -r 4d80730683d4 -r 45bf34451dd7 libgsmhr1/twts002_in.c --- /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 +#include +#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; +}