blob: a2d4115b71c3162f7274b687517b0088c5d2ce4e [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>
8#include <osmocom/core/bits.h>
9
Harald Weltec6636782017-06-12 14:59:37 +020010/*! \addtogroup coding
11 * @{
Neels Hofmeyr17518fe2017-06-20 04:35:06 +020012 * \file gsm0503_coding.h */
Harald Weltec6636782017-06-12 14:59:37 +020013
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070014#define GSM0503_GPRS_BURSTS_NBITS (116 * 4)
15#define GSM0503_EGPRS_BURSTS_NBITS (348 * 4)
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070016
17enum gsm0503_egprs_mcs {
18 EGPRS_MCS0,
19 EGPRS_MCS1,
20 EGPRS_MCS2,
21 EGPRS_MCS3,
22 EGPRS_MCS4,
23 EGPRS_MCS5,
24 EGPRS_MCS6,
25 EGPRS_MCS7,
26 EGPRS_MCS8,
27 EGPRS_MCS9,
28 EGPRS_NUM_MCS,
29};
30
Harald Welteb9946d32017-06-12 09:40:16 +020031int gsm0503_xcch_encode(ubit_t *bursts, const uint8_t *l2_data);
32int gsm0503_xcch_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070033 int *n_errors, int *n_bits_total);
34
Harald Welteb9946d32017-06-12 09:40:16 +020035int gsm0503_pdtch_encode(ubit_t *bursts, const uint8_t *l2_data, uint8_t l2_len);
36int gsm0503_pdtch_decode(uint8_t *l2_data, const sbit_t *bursts, uint8_t *usf_p,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070037 int *n_errors, int *n_bits_total);
38
Harald Welteb9946d32017-06-12 09:40:16 +020039int gsm0503_pdtch_egprs_encode(ubit_t *bursts, const uint8_t *l2_data,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070040 uint8_t l2_len);
Harald Welteb9946d32017-06-12 09:40:16 +020041int gsm0503_pdtch_egprs_decode(uint8_t *l2_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070042 uint16_t nbits, uint8_t *usf_p, int *n_errors, int *n_bits_total);
43
Harald Welteb9946d32017-06-12 09:40:16 +020044int gsm0503_tch_fr_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070045 int net_order);
Harald Welteb9946d32017-06-12 09:40:16 +020046int gsm0503_tch_fr_decode(uint8_t *tch_data, const sbit_t *bursts, int net_order,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070047 int efr, int *n_errors, int *n_bits_total);
48
Harald Welteb9946d32017-06-12 09:40:16 +020049int gsm0503_tch_hr_encode(ubit_t *bursts, const uint8_t *tch_data, int len);
50int gsm0503_tch_hr_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070051 int *n_errors, int *n_bits_total);
52
Harald Welteb9946d32017-06-12 09:40:16 +020053int gsm0503_tch_afs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070054 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft,
55 uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020056int gsm0503_tch_afs_decode(uint8_t *tch_data, const sbit_t *bursts,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070057 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
58 uint8_t *cmr, int *n_errors, int *n_bits_total);
59
Harald Welteb9946d32017-06-12 09:40:16 +020060int gsm0503_tch_ahs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070061 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft, uint8_t cmr);
Harald Welteb9946d32017-06-12 09:40:16 +020062int gsm0503_tch_ahs_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070063 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
64 uint8_t *cmr, int *n_errors, int *n_bits_total);
65
Harald Welteb9946d32017-06-12 09:40:16 +020066int gsm0503_rach_encode(ubit_t *burst, const uint8_t *ra, uint8_t bsic);
67int gsm0503_rach_decode(uint8_t *ra, const sbit_t *burst, uint8_t bsic);
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070068
Harald Welteb9946d32017-06-12 09:40:16 +020069int gsm0503_sch_encode(ubit_t *burst, const uint8_t *sb_info);
70int gsm0503_sch_decode(uint8_t *sb_info, const sbit_t *burst);
Harald Weltec6636782017-06-12 14:59:37 +020071
72/*! @} */