view libgsmhr1/twts002_in.c @ 567:2fcb6b27ee9b
hrutil: new program gsmhr-rpf2hex
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Wed, 12 Feb 2025 02:32:21 +0000 (6 weeks ago) |
parents |
45bf34451dd7 |
children |
|
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;
}