blob: 98038f8f4c2ac8d74059b13905121bba94488dc6 [file] [log] [blame]
Piotr Krysik9e2e8352018-02-27 12:16:25 +01001/*! \file gsm0503_coding.h
2 * GSM TS 05.03 coding
Piotr Krysika6268a52017-08-23 16:02:19 +02003 */
4
Piotr Krysik70c25a12017-01-03 08:01:23 +01005#pragma once
6
7#include <stdint.h>
Piotr Krysik9e2e8352018-02-27 12:16:25 +01008
9#include <osmocom/core/defs.h>
Piotr Krysik70c25a12017-01-03 08:01:23 +010010#include <osmocom/core/bits.h>
11
Piotr Krysik9e2e8352018-02-27 12:16:25 +010012/*! \addtogroup coding
13 * @{
14 * \file gsm0503_coding.h */
15
Piotr Krysik70c25a12017-01-03 08:01:23 +010016#define GSM0503_GPRS_BURSTS_NBITS (116 * 4)
17#define GSM0503_EGPRS_BURSTS_NBITS (348 * 4)
Piotr Krysik70c25a12017-01-03 08:01:23 +010018
Piotr Krysik9e2e8352018-02-27 12:16:25 +010019enum 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};
Piotr Krysik70c25a12017-01-03 08:01:23 +010032
Piotr Krysik9e2e8352018-02-27 12:16:25 +010033int gsm0503_xcch_encode(ubit_t *bursts, const uint8_t *l2_data);
34int gsm0503_xcch_decode(uint8_t *l2_data, const sbit_t *bursts,
Piotr Krysik70c25a12017-01-03 08:01:23 +010035 int *n_errors, int *n_bits_total);
36
Piotr Krysik9e2e8352018-02-27 12:16:25 +010037int 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,
Piotr Krysik70c25a12017-01-03 08:01:23 +010039 int *n_errors, int *n_bits_total);
40
Piotr Krysik9e2e8352018-02-27 12:16:25 +010041int gsm0503_pdtch_egprs_encode(ubit_t *bursts, const uint8_t *l2_data,
42 uint8_t l2_len);
43int gsm0503_pdtch_egprs_decode(uint8_t *l2_data, const sbit_t *bursts,
44 uint16_t nbits, uint8_t *usf_p, int *n_errors, int *n_bits_total);
45
46int gsm0503_tch_fr_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Piotr Krysik70c25a12017-01-03 08:01:23 +010047 int net_order);
Piotr Krysik9e2e8352018-02-27 12:16:25 +010048int gsm0503_tch_fr_decode(uint8_t *tch_data, const sbit_t *bursts, int net_order,
Piotr Krysik70c25a12017-01-03 08:01:23 +010049 int efr, int *n_errors, int *n_bits_total);
50
Piotr Krysik9e2e8352018-02-27 12:16:25 +010051int 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,
Piotr Krysik70c25a12017-01-03 08:01:23 +010053 int *n_errors, int *n_bits_total);
54
Piotr Krysik9e2e8352018-02-27 12:16:25 +010055int gsm0503_tch_afs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Piotr Krysik70c25a12017-01-03 08:01:23 +010056 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft,
57 uint8_t cmr);
Piotr Krysik9e2e8352018-02-27 12:16:25 +010058int gsm0503_tch_afs_decode(uint8_t *tch_data, const sbit_t *bursts,
Piotr Krysik70c25a12017-01-03 08:01:23 +010059 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
60 uint8_t *cmr, int *n_errors, int *n_bits_total);
61
Piotr Krysik9e2e8352018-02-27 12:16:25 +010062int gsm0503_tch_ahs_encode(ubit_t *bursts, const uint8_t *tch_data, int len,
Piotr Krysik70c25a12017-01-03 08:01:23 +010063 int codec_mode_req, uint8_t *codec, int codecs, uint8_t ft, uint8_t cmr);
Piotr Krysik9e2e8352018-02-27 12:16:25 +010064int gsm0503_tch_ahs_decode(uint8_t *tch_data, const sbit_t *bursts, int odd,
Piotr Krysik70c25a12017-01-03 08:01:23 +010065 int codec_mode_req, uint8_t *codec, int codecs, uint8_t *ft,
66 uint8_t *cmr, int *n_errors, int *n_bits_total);
67
Piotr Krysik9e2e8352018-02-27 12:16:25 +010068int gsm0503_rach_ext_encode(ubit_t *burst, uint16_t ra, uint8_t bsic, bool is_11bit);
69int gsm0503_rach_encode(ubit_t *burst, const uint8_t *ra, uint8_t bsic) OSMO_DEPRECATED("Use gsm0503_rach_ext_encode() instead");
Piotr Krysik70c25a12017-01-03 08:01:23 +010070
Piotr Krysik9e2e8352018-02-27 12:16:25 +010071int gsm0503_rach_decode(uint8_t *ra, const sbit_t *burst, uint8_t bsic)
72 OSMO_DEPRECATED("Use gsm0503_rach_decode_ber() instead");
73int gsm0503_rach_decode_ber(uint8_t *ra, const sbit_t *burst, uint8_t bsic,
74 int *n_errors, int *n_bits_total);
75int gsm0503_rach_ext_decode(uint16_t *ra, const sbit_t *burst, uint8_t bsic)
76 OSMO_DEPRECATED("Use gsm0503_rach_ext_decode_ber() instead");
77int gsm0503_rach_ext_decode_ber(uint16_t *ra, const sbit_t *burst, uint8_t bsic,
78 int *n_errors, int *n_bits_total);
79
80int gsm0503_sch_encode(ubit_t *burst, const uint8_t *sb_info);
81int gsm0503_sch_decode(uint8_t *sb_info, const sbit_t *burst);
82
83/*! @} */