blob: 2112b0f8a79916f9f79a7a64d4467b37ab6738a5 [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,
Mychaela N. Falconia57a3b3a2023-05-23 16:09:27 +000053 int *n_errors, int *n_bits_total)
54 OSMO_DEPRECATED("Use gsm0503_tch_hr_decode2() instead");
55int gsm0503_tch_hr_decode2(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070056 int *n_errors, int *n_bits_total);
57
Harald Welteb9946d32017-06-12 09:40:16 +020058int gsm0503_tch_afs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070059 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft,
60 uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020061int gsm0503_tch_afs_decode(uint8_t *tch_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070062 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
63 uint8_t *cmr, int *n_errors, int *n_bits_total);
Philipp Maier898c9c62020-02-06 14:25:01 +010064int gsm0503_tch_afs_decode_dtx(uint8_t *tch_data, const sbit_t *bursts,
65 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
66 uint8_t *cmr, int *n_errors, int *n_bits_total, uint8_t *dtx);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070067
Harald Welteb9946d32017-06-12 09:40:16 +020068int gsm0503_tch_ahs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070069 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft, uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020070int gsm0503_tch_ahs_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070071 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
72 uint8_t *cmr, int *n_errors, int *n_bits_total);
Philipp Maier898c9c62020-02-06 14:25:01 +010073int gsm0503_tch_ahs_decode_dtx(uint8_t *tch_data, const sbit_t *bursts, int odd,
74 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
75 uint8_t *cmr, int *n_errors, int *n_bits_total, uint8_t *dtx);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070076
Max32e56412017-10-16 14:58:00 +020077int gsm0503_rach_ext_encode(ubit_t *burst, uint16_t ra, uint8_t bsic, bool is_11bit);
78int gsm0503_rach_encode(ubit_t *burst, const uint8_t *ra, uint8_t bsic) OSMO_DEPRECATED("Use gsm0503_rach_ext_encode() instead");
79
Harald Welte6950b192018-02-26 11:48:00 +010080int gsm0503_rach_decode(uint8_t *ra, const sbit_t *burst, uint8_t bsic)
81 OSMO_DEPRECATED("Use gsm0503_rach_decode_ber() instead");
82int gsm0503_rach_decode_ber(uint8_t *ra, const sbit_t *burst, uint8_t bsic,
83 int *n_errors, int *n_bits_total);
84int gsm0503_rach_ext_decode(uint16_t *ra, const sbit_t *burst, uint8_t bsic)
85 OSMO_DEPRECATED("Use gsm0503_rach_ext_decode_ber() instead");
86int gsm0503_rach_ext_decode_ber(uint16_t *ra, const sbit_t *burst, uint8_t bsic,
87 int *n_errors, int *n_bits_total);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070088
Harald Welteb9946d32017-06-12 09:40:16 +020089int gsm0503_sch_encode(ubit_t *burst, const uint8_t *sb_info);
90int gsm0503_sch_decode(uint8_t *sb_info, const sbit_t *burst);
Harald Weltec6636782017-06-12 14:59:37 +020091
92/*! @} */