blob: 55375bb90d90ee206a1d75382e9be48a9a296456 [file] [log] [blame]
Vadim Yanitskiy3262f822016-09-23 01:48:59 +07001#pragma once
2
3#include <stdint.h>
4#include <osmocom/core/bits.h>
5
Harald Weltec6636782017-06-12 14:59:37 +02006/*! \addtogroup coding
7 * @{
8 */
9
10/*! \file gsm0503_coding.h
11 * \brief GSM TS 05.03 coding
12 */
13
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070014#define GSM0503_GPRS_BURSTS_NBITS (116 * 4)
15#define GSM0503_EGPRS_BURSTS_NBITS (348 * 4)
16#define NUM_BYTES(N) ((N + 8 - 1) / 8)
17
18enum gsm0503_egprs_mcs {
19 EGPRS_MCS0,
20 EGPRS_MCS1,
21 EGPRS_MCS2,
22 EGPRS_MCS3,
23 EGPRS_MCS4,
24 EGPRS_MCS5,
25 EGPRS_MCS6,
26 EGPRS_MCS7,
27 EGPRS_MCS8,
28 EGPRS_MCS9,
29 EGPRS_NUM_MCS,
30};
31
Harald Welteb9946d32017-06-12 09:40:16 +020032int gsm0503_xcch_encode(ubit_t *bursts, const uint8_t *l2_data);
33int gsm0503_xcch_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070034 int *n_errors, int *n_bits_total);
35
Harald Welteb9946d32017-06-12 09:40:16 +020036int gsm0503_pdtch_encode(ubit_t *bursts, const uint8_t *l2_data, uint8_t l2_len);
37int gsm0503_pdtch_decode(uint8_t *l2_data, const sbit_t *bursts, uint8_t *usf_p,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070038 int *n_errors, int *n_bits_total);
39
Harald Welteb9946d32017-06-12 09:40:16 +020040int gsm0503_pdtch_egprs_encode(ubit_t *bursts, const uint8_t *l2_data,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070041 uint8_t l2_len);
Harald Welteb9946d32017-06-12 09:40:16 +020042int gsm0503_pdtch_egprs_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070043 uint16_t nbits, uint8_t *usf_p, int *n_errors, int *n_bits_total);
44
Harald Welteb9946d32017-06-12 09:40:16 +020045int gsm0503_tch_fr_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070046 int net_order);
Harald Welteb9946d32017-06-12 09:40:16 +020047int gsm0503_tch_fr_decode(uint8_t *tch_data, const sbit_t *bursts, int net_order,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070048 int efr, int *n_errors, int *n_bits_total);
49
Harald Welteb9946d32017-06-12 09:40:16 +020050int gsm0503_tch_hr_encode(ubit_t *bursts, const uint8_t *tch_data, int len);
51int gsm0503_tch_hr_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070052 int *n_errors, int *n_bits_total);
53
Harald Welteb9946d32017-06-12 09:40:16 +020054int gsm0503_tch_afs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070055 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft,
56 uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020057int gsm0503_tch_afs_decode(uint8_t *tch_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070058 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
59 uint8_t *cmr, int *n_errors, int *n_bits_total);
60
Harald Welteb9946d32017-06-12 09:40:16 +020061int gsm0503_tch_ahs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070062 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft, uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020063int gsm0503_tch_ahs_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070064 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
65 uint8_t *cmr, int *n_errors, int *n_bits_total);
66
Harald Welteb9946d32017-06-12 09:40:16 +020067int gsm0503_rach_encode(ubit_t *burst, const uint8_t *ra, uint8_t bsic);
68int gsm0503_rach_decode(uint8_t *ra, const sbit_t *burst, uint8_t bsic);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070069
Harald Welteb9946d32017-06-12 09:40:16 +020070int gsm0503_sch_encode(ubit_t *burst, const uint8_t *sb_info);
71int gsm0503_sch_decode(uint8_t *sb_info, const sbit_t *burst);
Harald Weltec6636782017-06-12 14:59:37 +020072
73/*! @} */