FreeCalypso > hg > gsm-codec-lib
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; +}