blob: 2afa049b148b3726b9544a5653a4f92f6161a8b0 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file gsm0503_coding.h
2 * GSM TS 05.03 coding
3 */
4
Vadim Yanitskiy3262f822016-09-23 01:48:59 +07005#pragma once
6
7#include <stdint.h>
Max32e56412017-10-16 14:58:00 +02008
9#include <osmocom/core/defs.h>
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070010#include <osmocom/core/bits.h>
11
Harald Weltec6636782017-06-12 14:59:37 +020012/*! \addtogroup coding
13 * @{
Neels Hofmeyr17518fe2017-06-20 04:35:06 +020014 * \file gsm0503_coding.h */
Harald Weltec6636782017-06-12 14:59:37 +020015
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070016#define GSM0503_GPRS_BURSTS_NBITS (116 * 4)
17#define GSM0503_EGPRS_BURSTS_NBITS (348 * 4)
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070018
19enum gsm0503_egprs_mcs {
20 EGPRS_MCS0,
21 EGPRS_MCS1,
22 EGPRS_MCS2,
23 EGPRS_MCS3,
24 EGPRS_MCS4,
25 EGPRS_MCS5,
26 EGPRS_MCS6,
27 EGPRS_MCS7,
28 EGPRS_MCS8,
29 EGPRS_MCS9,
30 EGPRS_NUM_MCS,
31};
32
Harald Welteb9946d32017-06-12 09:40:16 +020033int gsm0503_xcch_encode(ubit_t *bursts, const uint8_t *l2_data);
34int gsm0503_xcch_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070035 int *n_errors, int *n_bits_total);
36
Harald Welteb9946d32017-06-12 09:40:16 +020037int gsm0503_pdtch_encode(ubit_t *bursts, const uint8_t *l2_data, uint8_t l2_len);
38int gsm0503_pdtch_decode(uint8_t *l2_data, const sbit_t *bursts, uint8_t *usf_p,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070039 int *n_errors, int *n_bits_total);
40
Harald Welteb9946d32017-06-12 09:40:16 +020041int gsm0503_pdtch_egprs_encode(ubit_t *bursts, const uint8_t *l2_data,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070042 uint8_t l2_len);
Harald Welteb9946d32017-06-12 09:40:16 +020043int gsm0503_pdtch_egprs_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070044 uint16_t nbits, uint8_t *usf_p, int *n_errors, int *n_bits_total);
45
Harald Welteb9946d32017-06-12 09:40:16 +020046int gsm0503_tch_fr_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070047 int net_order);
Harald Welteb9946d32017-06-12 09:40:16 +020048int gsm0503_tch_fr_decode(uint8_t *tch_data, const sbit_t *bursts, int net_order,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070049 int efr, int *n_errors, int *n_bits_total);
50
Harald Welteb9946d32017-06-12 09:40:16 +020051int gsm0503_tch_hr_encode(ubit_t *bursts, const uint8_t *tch_data, int len);
52int gsm0503_tch_hr_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070053 int *n_errors, int *n_bits_total);
54
Harald Welteb9946d32017-06-12 09:40:16 +020055int gsm0503_tch_afs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070056 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft,
57 uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020058int gsm0503_tch_afs_decode(uint8_t *tch_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070059 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
60 uint8_t *cmr, int *n_errors, int *n_bits_total);
Philipp Maier898c9c62020-02-06 14:25:01 +010061int gsm0503_tch_afs_decode_dtx(uint8_t *tch_data, const sbit_t *bursts,
62 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
63 uint8_t *cmr, int *n_errors, int *n_bits_total, uint8_t *dtx);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070064
Harald Welteb9946d32017-06-12 09:40:16 +020065int gsm0503_tch_ahs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070066 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft, uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020067int gsm0503_tch_ahs_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070068 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
69 uint8_t *cmr, int *n_errors, int *n_bits_total);
Philipp Maier898c9c62020-02-06 14:25:01 +010070int gsm0503_tch_ahs_decode_dtx(uint8_t *tch_data, const sbit_t *bursts, int odd,
71 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
72 uint8_t *cmr, int *n_errors, int *n_bits_total, uint8_t *dtx);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070073
Max32e56412017-10-16 14:58:00 +020074int gsm0503_rach_ext_encode(ubit_t *burst, uint16_t ra, uint8_t bsic, bool is_11bit);
75int gsm0503_rach_encode(ubit_t *burst, const uint8_t *ra, uint8_t bsic) OSMO_DEPRECATED("Use gsm0503_rach_ext_encode() instead");
76
Harald Welte6950b192018-02-26 11:48:00 +010077int gsm0503_rach_decode(uint8_t *ra, const sbit_t *burst, uint8_t bsic)
78 OSMO_DEPRECATED("Use gsm0503_rach_decode_ber() instead");
79int gsm0503_rach_decode_ber(uint8_t *ra, const sbit_t *burst, uint8_t bsic,
80 int *n_errors, int *n_bits_total);
81int gsm0503_rach_ext_decode(uint16_t *ra, const sbit_t *burst, uint8_t bsic)
82 OSMO_DEPRECATED("Use gsm0503_rach_ext_decode_ber() instead");
83int gsm0503_rach_ext_decode_ber(uint16_t *ra, const sbit_t *burst, uint8_t bsic,
84 int *n_errors, int *n_bits_total);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070085
Harald Welteb9946d32017-06-12 09:40:16 +020086int gsm0503_sch_encode(ubit_t *burst, const uint8_t *sb_info);
87int gsm0503_sch_decode(uint8_t *sb_info, const sbit_t *burst);
Harald Weltec6636782017-06-12 14:59:37 +020088
89/*! @} */