Learning srsLTE - 4
2018-03-25
srsLTE data structure overview and references. Physical channels layer data structure only.
Introduction
Data structure defined in the physical channels headers. struct
and enum
only.
Shortcuts
(TODO: use python to write a crawler and generate the anchor link table.)
phch
Data Structures
phch
Important part, physical channels.
srslte_cqi_periodic_cfg_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
7
8
9
typedef struct {
bool configured;
uint32_t pmi_idx;
uint32_t ri_idx;
bool ri_idx_present;
bool simul_cqi_ack;
bool format_is_subband;
uint32_t subband_size;
} srslte_cqi_periodic_cfg_t;
Channel quality indicator message packing. Reference: 3GPP TS 36.212 version 10.0.0 Release 10 Sec. 5.2.2.6, 5.2.3.3.
srslte_cqi_hl_subband_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct SRSLTE_API {
uint8_t wideband_cqi_cw0; // 4-bit width
uint32_t subband_diff_cqi_cw0; // 2N-bit width
uint8_t wideband_cqi_cw1; // if RI > 1 then 4-bit width otherwise 0-bit width
uint32_t subband_diff_cqi_cw1; // if RI > 1 then 2N-bit width otherwise 0-bit width
uint32_t pmi; // if RI > 1 then 2-bit width otherwise 1-bit width
uint32_t N;
bool ri_present;
bool pmi_present;
bool four_antenna_ports; // If cell has 4 antenna ports then true otherwise false
bool rank_is_not_one; // If rank > 1 then true otherwise false
} srslte_cqi_hl_subband_t;
srslte_cqi_ue_subband_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
typedef struct SRSLTE_API {
uint8_t wideband_cqi; // 4-bit width
uint8_t subband_diff_cqi; // 2-bit width
uint32_t position_subband; // L-bit width
uint32_t L;
} srslte_cqi_ue_subband_t;
srslte_cqi_format2_wideband_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
7
8
typedef struct SRSLTE_API {
uint8_t wideband_cqi; // 4-bit width
uint8_t spatial_diff_cqi; // If Rank==1 then it is 0-bit width otherwise it is 3-bit width
uint8_t pmi;
bool pmi_present;
bool four_antenna_ports; // If cell has 4 antenna ports then true otherwise false
bool rank_is_not_one; // If rank > 1 then true otherwise false
} srslte_cqi_format2_wideband_t;
srslte_cqi_format2_subband_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
typedef struct SRSLTE_API {
uint8_t subband_cqi; // 4-bit width
uint8_t subband_label; // 1- or 2-bit width
bool subband_label_2_bits; // false, label=1-bit, true label=2-bits
} srslte_cqi_format2_subband_t;
srslte_cqi_type_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
typedef enum {
SRSLTE_CQI_TYPE_WIDEBAND = 0,
SRSLTE_CQI_TYPE_SUBBAND,
SRSLTE_CQI_TYPE_SUBBAND_UE,
SRSLTE_CQI_TYPE_SUBBAND_HL
} srslte_cqi_type_t;
srslte_cqi_value_t
Location: ./lib/include/srslte/phy/phch/cqi.h
1
2
3
4
5
6
7
8
9
typedef struct {
union {
srslte_cqi_format2_wideband_t wideband;
srslte_cqi_format2_subband_t subband;
srslte_cqi_ue_subband_t subband_ue;
srslte_cqi_hl_subband_t subband_hl;
};
srslte_cqi_type_t type;
} srslte_cqi_value_t;
srslte_dci_format_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef enum {
SRSLTE_DCI_FORMAT0 = 0,
SRSLTE_DCI_FORMAT1,
SRSLTE_DCI_FORMAT1A,
SRSLTE_DCI_FORMAT1C,
SRSLTE_DCI_FORMAT1B,
SRSLTE_DCI_FORMAT1D,
SRSLTE_DCI_FORMAT2,
SRSLTE_DCI_FORMAT2A,
SRSLTE_DCI_FORMAT2B,
//SRSLTE_DCI_FORMAT3,
//SRSLTE_DCI_FORMAT3A,
SRSLTE_DCI_NOF_FORMATS
} srslte_dci_format_t;
srslte_dci_msg_type_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
5
6
7
8
9
10
typedef struct SRSLTE_API {
enum {
SRSLTE_DCI_MSG_TYPE_PUSCH_SCHED,
SRSLTE_DCI_MSG_TYPE_PDSCH_SCHED,
SRSLTE_DCI_MSG_TYPE_MCCH_CHANGE,
SRSLTE_DCI_MSG_TYPE_TPC_COMMAND,
SRSLTE_DCI_MSG_TYPE_RA_PROC_PDCCH
} type;
srslte_dci_format_t format;
}srslte_dci_msg_type_t;
Each type is for a different interface to packing/unpacking functions.
dci_spec_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
typedef enum {
SRSLTE_DCI_SPEC_COMMON_ = 0,
SRSLTE_DCI_SPEC_UE = 1
} dci_spec_t;
srslte_dci_location_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
typedef struct SRSLTE_API {
uint32_t L; // Aggregation level
uint32_t ncce; // Position of first CCE of the dci
} srslte_dci_location_t;
srslte_dci_msg_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
5
typedef struct SRSLTE_API {
uint8_t data[SRSLTE_DCI_MAX_BITS];
uint32_t nof_bits;
srslte_dci_format_t format;
} srslte_dci_msg_t;
srslte_dci_rar_grant_t
Location: ./lib/include/srslte/phy/phch/dci.h
1
2
3
4
5
6
7
8
typedef struct SRSLTE_API {
uint32_t rba;
uint32_t trunc_mcs;
uint32_t tpc_pusch;
bool ul_delay;
bool cqi_request;
bool hopping_flag;
} srslte_dci_rar_grant_t;
srslte_pbch_t
Location: ./lib/include/srslte/phy/phch/pbch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t nof_symbols;
/* buffers */
cf_t *ce[SRSLTE_MAX_PORTS];
cf_t *symbols[SRSLTE_MAX_PORTS];
cf_t *x[SRSLTE_MAX_PORTS];
cf_t *d;
float *llr;
float *temp;
float rm_f[SRSLTE_BCH_ENCODED_LEN];
uint8_t *rm_b;
uint8_t data[SRSLTE_BCH_PAYLOADCRC_LEN];
uint8_t data_enc[SRSLTE_BCH_ENCODED_LEN];
uint32_t frame_idx;
/* tx & rx objects */
srslte_modem_table_t mod;
srslte_sequence_t seq;
srslte_viterbi_t decoder;
srslte_crc_t crc;
srslte_convcoder_t encoder;
bool search_all_ports;
} srslte_pbch_t;
srslte_pcfich_t
Location: ./lib/include/srslte/phy/phch/pcfich.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
typedef struct SRSLTE_API {
srslte_cell_t cell;
int nof_symbols;
uint32_t nof_rx_antennas;
/* handler to REGs resource mapper */
srslte_regs_t *regs;
/* buffers */
cf_t ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS][PCFICH_RE];
cf_t symbols[SRSLTE_MAX_PORTS][PCFICH_RE];
cf_t x[SRSLTE_MAX_PORTS][PCFICH_RE];
cf_t d[PCFICH_RE];
// cfi table in floats
float cfi_table_float[3][PCFICH_CFI_LEN];
/* bit message */
uint8_t data[PCFICH_CFI_LEN];
/* received soft bits */
float data_f[PCFICH_CFI_LEN];
/* tx & rx objects */
srslte_modem_table_t mod;
srslte_sequence_t seq[SRSLTE_NSUBFRAMES_X_FRAME];
} srslte_pcfich_t;
srslte_pdcch_search_mode_t
Location: ./lib/include/srslte/phy/phch/pdcch.h
1
2
3
typedef enum SRSLTE_API {
SEARCH_UE, SEARCH_COMMON
} srslte_pdcch_search_mode_t;
srslte_pdcch_t
Location: ./lib/include/srslte/phy/phch/pdcch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t nof_regs[3];
uint32_t nof_cce[3];
uint32_t max_bits;
uint32_t nof_rx_antennas;
bool is_ue;
srslte_regs_t *regs;
/* buffers */
cf_t *ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS];
cf_t *symbols[SRSLTE_MAX_PORTS];
cf_t *x[SRSLTE_MAX_PORTS];
cf_t *d;
uint8_t *e;
float rm_f[3 * (SRSLTE_DCI_MAX_BITS + 16)];
float *llr;
/* tx & rx objects */
srslte_modem_table_t mod;
srslte_sequence_t seq[SRSLTE_NSUBFRAMES_X_FRAME];
srslte_viterbi_t decoder;
srslte_crc_t crc;
} srslte_pdcch_t;
srslte_pdsch_user_t
Location: ./lib/include/srslte/phy/phch/pdsch.h
1
2
3
4
5
typedef struct {
srslte_sequence_t seq[SRSLTE_MAX_CODEWORDS][SRSLTE_NSUBFRAMES_X_FRAME];
uint32_t cell_id;
bool sequence_generated;
} srslte_pdsch_user_t;
srslte_pdsch_t
Location: ./lib/include/srslte/phy/phch/pdsch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t nof_rx_antennas;
uint32_t last_nof_iterations[SRSLTE_MAX_CODEWORDS];
uint32_t max_re;
uint16_t ue_rnti;
bool is_ue;
/* Power allocation parameter 3GPP 36.213 Clause 5.2 Rho_b */
float rho_a;
/* buffers */
// void buffers are shared for tx and rx
cf_t *ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS]; /* Channel estimation (Rx only) */
cf_t *symbols[SRSLTE_MAX_PORTS]; /* PDSCH Encoded/Decoded Symbols */
cf_t *x[SRSLTE_MAX_LAYERS]; /* Layer mapped */
cf_t *d[SRSLTE_MAX_CODEWORDS]; /* Modulated/Demodulated codewords */
void *e[SRSLTE_MAX_CODEWORDS];
/* tx & rx objects */
srslte_modem_table_t mod[4];
// This is to generate the scrambling seq for multiple CRNTIs
srslte_pdsch_user_t **users;
srslte_sequence_t tmp_seq;
srslte_sch_t dl_sch;
} srslte_pdsch_t;
srslte_pdsch_cfg_t
Location: ./lib/include/srslte/phy/phch/pdsch_cfg.h
1
2
3
4
5
6
7
8
9
10
11
typedef struct SRSLTE_API {
srslte_cbsegm_t cb_segm[SRSLTE_MAX_CODEWORDS];
srslte_ra_dl_grant_t grant;
srslte_ra_nbits_t nbits[SRSLTE_MAX_CODEWORDS];
uint32_t rv[SRSLTE_MAX_CODEWORDS];
uint32_t sf_idx;
uint32_t nof_layers;
uint32_t codebook_idx;
srslte_mimo_type_t mimo_type;
bool tb_cw_swap;
} srslte_pdsch_cfg_t;
srslte_phich_t
Location: ./lib/include/srslte/phy/phch/phich.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t nof_rx_antennas;
/* handler to REGs resource mapper */
srslte_regs_t *regs;
/* buffers */
cf_t ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS][SRSLTE_PHICH_MAX_NSYMB];
cf_t sf_symbols[SRSLTE_MAX_PORTS][SRSLTE_PHICH_MAX_NSYMB];
cf_t x[SRSLTE_MAX_PORTS][SRSLTE_PHICH_MAX_NSYMB];
cf_t d[SRSLTE_PHICH_MAX_NSYMB];
cf_t d0[SRSLTE_PHICH_MAX_NSYMB];
cf_t z[SRSLTE_PHICH_NBITS];
/* bit message */
uint8_t data[SRSLTE_PHICH_NBITS];
float data_rx[SRSLTE_PHICH_NBITS];
/* tx & rx objects */
srslte_modem_table_t mod;
srslte_sequence_t seq[SRSLTE_NSUBFRAMES_X_FRAME];
} srslte_phich_t;
###
Location: ./lib/include/srslte/phy/phch/pmch.h
1
2
3
typedef struct {
srslte_sequence_t seq[SRSLTE_NSUBFRAMES_X_FRAME];
} srslte_pmch_seq_t;
srslte_pmch_cfg_t
Location: ./lib/include/srslte/phy/phch/pmch.h
1
2
3
4
5
6
typedef struct SRSLTE_API {
srslte_cbsegm_t cb_segm;
srslte_ra_dl_grant_t grant;
srslte_ra_nbits_t nbits[SRSLTE_MAX_CODEWORDS];
uint32_t sf_idx;
} srslte_pmch_cfg_t;
srslte_pmch_t
Location: ./lib/include/srslte/phy/phch/pmch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t nof_rx_antennas;
uint32_t max_re;
/* buffers */
// void buffers are shared for tx and rx
cf_t *ce[SRSLTE_MAX_PORTS][SRSLTE_MAX_PORTS];
cf_t *symbols[SRSLTE_MAX_PORTS];
cf_t *x[SRSLTE_MAX_PORTS];
cf_t *d;
void *e;
/* tx & rx objects */
srslte_modem_table_t mod[4];
// This is to generate the scrambling seq for multiple MBSFN Area IDs
srslte_pmch_seq_t **seqs;
srslte_sch_t dl_sch;
} srslte_pmch_t;
srslte_prach_t
Location: ./lib/include/srslte/phy/phch/prach.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
typedef struct SRSLTE_API {
// Parameters from higher layers (extracted from SIB2)
uint32_t config_idx;
uint32_t f; // preamble format
uint32_t rsi; // rootSequenceIndex
bool hs; // highSpeedFlag
uint32_t zczc; // zeroCorrelationZoneConfig
uint32_t N_ifft_ul; // IFFT size for uplink
uint32_t N_ifft_prach; // IFFT size for PRACH generation
uint32_t max_N_ifft_ul;
// Working parameters
uint32_t N_zc; // PRACH sequence length
uint32_t N_cs; // Cyclic shift size
uint32_t N_seq; // Preamble length
float T_seq; // Preamble length in seconds
float T_tot; // Total sequence length in seconds
uint32_t N_cp; // Cyclic prefix length
// Generated tables
cf_t seqs[64][839]; // Our set of 64 preamble sequences
cf_t dft_seqs[64][839]; // DFT-precoded seqs
uint32_t root_seqs_idx[64]; // Indices of root seqs in seqs table
uint32_t N_roots; // Number of root sequences used in this configuration
// Containers
cf_t *ifft_in;
cf_t *ifft_out;
cf_t *prach_bins;
cf_t *corr_spec;
float *corr;
// PRACH IFFT
srslte_dft_plan_t fft;
srslte_dft_plan_t ifft;
// ZC-sequence FFT and IFFT
srslte_dft_plan_t zc_fft;
srslte_dft_plan_t zc_ifft;
cf_t *signal_fft;
float detect_factor;
uint32_t deadzone;
float peak_values[65];
uint32_t peak_offsets[65];
} srslte_prach_t;
srslte_prach_sf_config_t
Location: ./lib/include/srslte/phy/phch/prach.h
1
2
3
4
typedef struct SRSLTE_API {
int nof_sf;
uint32_t sf[5];
} srslte_prach_sf_config_t;
srslte_prach_sfn_t
Location: ./lib/include/srslte/phy/phch/prach.h
1
2
3
4
typedef enum SRSLTE_API {
SRSLTE_PRACH_SFN_EVEN = 0,
SRSLTE_PRACH_SFN_ANY,
} srslte_prach_sfn_t;
srslte_prach_cfg_t
Location: ./lib/include/srslte/phy/phch/prach.h
1
2
3
4
5
6
7
typedef struct {
uint32_t config_idx;
uint32_t root_seq_idx;
uint32_t zero_corr_zone;
uint32_t freq_offset;
bool hs_flag;
} srslte_prach_cfg_t;
###
Location: ./lib/include/srslte/phy/phch/pucch.h
1
2
3
4
5
6
7
8
9
typedef enum SRSLTE_API {
SRSLTE_PUCCH_FORMAT_1 = 0,
SRSLTE_PUCCH_FORMAT_1A,
SRSLTE_PUCCH_FORMAT_1B,
SRSLTE_PUCCH_FORMAT_2,
SRSLTE_PUCCH_FORMAT_2A,
SRSLTE_PUCCH_FORMAT_2B,
SRSLTE_PUCCH_FORMAT_ERROR,
} srslte_pucch_format_t;
srslte_pucch_sched_t
Location: ./lib/include/srslte/phy/phch/pucch.h
1
2
3
4
5
6
7
8
typedef struct SRSLTE_API {
bool sps_enabled;
uint32_t tpc_for_pucch;
uint32_t N_pucch_1;
uint32_t n_pucch_1[4]; // 4 n_pucch resources specified by RRC
uint32_t n_pucch_2;
uint32_t n_pucch_sr;
}srslte_pucch_sched_t;
srslte_pucch_cfg_t
Location: ./lib/include/srslte/phy/phch/pucch.h
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct SRSLTE_API {
// Common configuration
uint32_t delta_pucch_shift;
uint32_t n_rb_2;
uint32_t N_cs;
uint32_t n1_pucch_an;
// SRS configuration
bool srs_configured;
uint32_t srs_cs_subf_cfg;
bool srs_simul_ack;
} srslte_pucch_cfg_t;
srslte_pucch_user_t
Location: ./lib/include/srslte/phy/phch/pucch.h
1
2
3
4
typedef struct {
srslte_sequence_t seq_f2[SRSLTE_NSUBFRAMES_X_FRAME];
bool sequence_generated;
} srslte_pucch_user_t;
srslte_pucch_t
Location: ./lib/include/srslte/phy/phch/pucch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
typedef struct SRSLTE_API {
srslte_cell_t cell;
srslte_pucch_cfg_t pucch_cfg;
srslte_modem_table_t mod;
srslte_uci_cqi_pucch_t cqi;
srslte_pucch_user_t **users;
uint8_t bits_scram[SRSLTE_PUCCH_MAX_BITS];
cf_t d[SRSLTE_PUCCH_MAX_BITS/2];
uint32_t n_cs_cell[SRSLTE_NSLOTS_X_FRAME][SRSLTE_CP_NORM_NSYMB];
uint32_t f_gh[SRSLTE_NSLOTS_X_FRAME];
float tmp_arg[SRSLTE_PUCCH_N_SEQ];
cf_t *z;
cf_t *z_tmp;
cf_t *ce;
bool shortened;
bool group_hopping_en;
float threshold_format1;
float last_corr;
uint32_t last_n_prb;
uint32_t last_n_pucch;
}srslte_pucch_t;
srslte_pusch_hopping_cfg_t
Location: ./lib/include/srslte/phy/phch/pusch.h
1
2
3
4
5
6
7
8
typedef struct {
enum {
SRSLTE_PUSCH_HOP_MODE_INTER_SF = 1,
SRSLTE_PUSCH_HOP_MODE_INTRA_SF = 0
} hop_mode;
uint32_t hopping_offset;
uint32_t n_sb;
} srslte_pusch_hopping_cfg_t;
srslte_pusch_user_t
Location: ./lib/include/srslte/phy/phch/pusch.h
1
2
3
4
5
typedef struct {
srslte_sequence_t seq[SRSLTE_NSUBFRAMES_X_FRAME];
uint32_t cell_id;
bool sequence_generated;
} srslte_pusch_user_t;
srslte_pusch_t
Location: ./lib/include/srslte/phy/phch/pusch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
typedef struct SRSLTE_API {
srslte_cell_t cell;
bool is_ue;
uint16_t ue_rnti;
uint32_t max_re;
srslte_dft_precoding_t dft_precoding;
/* buffers */
// void buffers are shared for tx and rx
cf_t *ce;
cf_t *z;
cf_t *d;
void *q;
void *g;
/* tx & rx objects */
srslte_modem_table_t mod[4];
srslte_sequence_t seq_type2_fo;
// This is to generate the scrambling seq for multiple CRNTIs
srslte_pusch_user_t **users;
srslte_sequence_t tmp_seq;
srslte_sch_t ul_sch;
bool shortened;
}srslte_pusch_t;
srslte_uci_cfg_t
Location: ./lib/include/srslte/phy/phch/pusch_cfg.h
1
2
3
4
5
typedef struct SRSLTE_API {
uint32_t I_offset_cqi;
uint32_t I_offset_ri;
uint32_t I_offset_ack;
} srslte_uci_cfg_t;
srslte_pusch_cfg_t
Location: ./lib/include/srslte/phy/phch/pusch_cfg.h
1
2
3
4
5
6
7
8
9
10
11
typedef struct SRSLTE_API {
srslte_cbsegm_t cb_segm;
srslte_ra_ul_grant_t grant;
srslte_ra_nbits_t nbits;
srslte_uci_cfg_t uci_cfg;
uint32_t rv;
uint32_t sf_idx;
uint32_t tti;
srslte_cp_t cp;
uint32_t last_O_cqi;
} srslte_pusch_cfg_t;
srslte_ra_mcs_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
typedef struct SRSLTE_API {
srslte_mod_t mod;
int tbs;
uint32_t idx;
} srslte_ra_mcs_t;
srslte_ra_nbits_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
typedef struct {
uint32_t lstart;
uint32_t nof_symb;
uint32_t nof_bits;
uint32_t nof_re;
} srslte_ra_nbits_t;
Structure that gives the number of encoded bits and RE for a UL/DL grant.
srslte_ra_type_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
typedef enum SRSLTE_API {
SRSLTE_RA_ALLOC_TYPE0 = 0,
SRSLTE_RA_ALLOC_TYPE1 = 1,
SRSLTE_RA_ALLOC_TYPE2 = 2
} srslte_ra_type_t;
srslte_ra_type0_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
typedef struct SRSLTE_API {
uint32_t rbg_bitmask;
} srslte_ra_type0_t;
srslte_ra_type1_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
typedef struct SRSLTE_API {
uint32_t vrb_bitmask;
uint32_t rbg_subset;
bool shift;
} srslte_ra_type1_t;
srslte_ra_type2_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct SRSLTE_API {
uint32_t riv; // if L_crb==0, DCI message packer will take this value directly
uint32_t L_crb;
uint32_t RB_start;
enum {
SRSLTE_RA_TYPE2_NPRB1A_2 = 0, SRSLTE_RA_TYPE2_NPRB1A_3 = 1
} n_prb1a;
enum {
SRSLTE_RA_TYPE2_NG1 = 0, SRSLTE_RA_TYPE2_NG2 = 1
} n_gap;
enum {
SRSLTE_RA_TYPE2_LOC = 0, SRSLTE_RA_TYPE2_DIST = 1
} mode;
} srslte_ra_type2_t;
srslte_ra_dl_grant_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
7
8
9
10
typedef struct SRSLTE_API {
bool prb_idx[2][SRSLTE_MAX_PRB];
uint32_t nof_prb;
uint32_t Qm[SRSLTE_MAX_CODEWORDS];
srslte_ra_mcs_t mcs[SRSLTE_MAX_CODEWORDS];
srslte_sf_t sf_type;
bool tb_en[SRSLTE_MAX_CODEWORDS];
uint32_t pinfo;
bool tb_cw_swap;
} srslte_ra_dl_grant_t;
Structures used for downlink resource allocation.
srslte_ra_dl_dci_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
typedef struct SRSLTE_API {
srslte_ra_type_t alloc_type;
union {
srslte_ra_type0_t type0_alloc;
srslte_ra_type1_t type1_alloc;
srslte_ra_type2_t type2_alloc;
};
uint32_t harq_process;
uint32_t mcs_idx;
int rv_idx;
bool ndi;
uint32_t mcs_idx_1;
int rv_idx_1;
bool ndi_1;
bool tb_cw_swap;
bool sram_id;
uint8_t pinfo;
bool pconf;
bool power_offset;
uint8_t tpc_pucch;
bool tb_en[2];
bool is_ra_order;
uint32_t ra_preamble;
uint32_t ra_mask_idx;
bool dci_is_1a;
bool dci_is_1c;
} srslte_ra_dl_dci_t;
Unpacked DCI message for DL grant.
srslte_ra_ul_grant_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
7
8
9
10
11
typedef struct SRSLTE_API {
uint32_t n_prb[2];
uint32_t n_prb_tilde[2];
uint32_t L_prb;
uint32_t freq_hopping;
uint32_t M_sc;
uint32_t M_sc_init;
uint32_t Qm;
srslte_ra_mcs_t mcs;
uint32_t ncs_dmrs;
} srslte_ra_ul_grant_t;
Structures used for uplink resource allocation.
srslte_ra_ul_dci_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef struct SRSLTE_API {
/* 36.213 Table 8.4-2: SRSLTE_RA_PUSCH_HOP_HALF is 0 for < 10 Mhz and 10 for > 10 Mhz.
* SRSLTE_RA_PUSCH_HOP_QUART is 00 for > 10 Mhz and SRSLTE_RA_PUSCH_HOP_QUART_NEG is 01 for > 10 Mhz.
*/
enum {
SRSLTE_RA_PUSCH_HOP_DISABLED = -1,
SRSLTE_RA_PUSCH_HOP_QUART = 0,
SRSLTE_RA_PUSCH_HOP_QUART_NEG = 1,
SRSLTE_RA_PUSCH_HOP_HALF = 2,
SRSLTE_RA_PUSCH_HOP_TYPE2 = 3
} freq_hop_fl;
srslte_ra_ul_grant_t prb_alloc;
srslte_ra_type2_t type2_alloc;
uint32_t mcs_idx;
uint32_t rv_idx;
uint32_t n_dmrs;
bool ndi;
bool cqi_request;
uint8_t tpc_pusch;
} srslte_ra_ul_dci_t;
Unpacked DCI Format0 message.
srslte_phy_grant_t
Location: ./lib/include/srslte/phy/phch/ra.h
1
2
3
4
typedef union {
srslte_ra_ul_grant_t ul;
srslte_ra_dl_grant_t dl;
} srslte_phy_grant_t;
srslte_regs_reg_t
Location: ./lib/include/srslte/phy/phch/regs.h
1
2
3
4
5
6
typedef struct SRSLTE_API {
uint32_t k[4];
uint32_t k0;
uint32_t l;
bool assigned;
}srslte_regs_reg_t;
srslte_regs_ch_t
Location: ./lib/include/srslte/phy/phch/regs.h
1
2
3
4
typedef struct SRSLTE_API {
uint32_t nof_regs;
srslte_regs_reg_t **regs;
}srslte_regs_ch_t;
srslte_regs_t
Location: ./lib/include/srslte/phy/phch/regs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct SRSLTE_API {
srslte_cell_t cell;
uint32_t max_ctrl_symbols;
uint32_t ngroups_phich;
srslte_phich_resources_t phich_res;
srslte_phich_length_t phich_len;
srslte_regs_ch_t pcfich;
srslte_regs_ch_t *phich; // there are several phich
srslte_regs_ch_t pdcch[3]; /* PDCCH indexing, permutation and interleaving is computed for
the three possible CFI value */
uint32_t nof_regs;
srslte_regs_reg_t *regs;
}srslte_regs_t;
srslte_sch_t
Location: ./lib/include/srslte/phy/phch/sch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef struct SRSLTE_API {
uint32_t max_iterations;
uint32_t nof_iterations;
/* buffers */
uint8_t *cb_in;
uint8_t *parity_bits;
void *e;
uint8_t *temp_g_bits;
uint16_t *ul_interleaver;
srslte_uci_bit_t ack_ri_bits[12*288];
uint32_t nof_ri_ack_bits;
srslte_tcod_t encoder;
srslte_tdec_t decoder;
srslte_crc_t crc_tb;
srslte_crc_t crc_cb;
srslte_uci_cqi_pusch_t uci_cqi;
} srslte_sch_t;
DL-SCH AND UL-SCH common functions.
srslte_uci_cqi_pusch_t
Location: ./lib/include/srslte/phy/phch/uci.h
1
2
3
4
5
6
7
8
9
typedef struct SRSLTE_API {
srslte_crc_t crc;
srslte_viterbi_t viterbi;
uint8_t tmp_cqi[SRSLTE_UCI_MAX_CQI_LEN_PUSCH];
uint8_t encoded_cqi[3*SRSLTE_UCI_MAX_CQI_LEN_PUSCH];
int16_t encoded_cqi_s[3*SRSLTE_UCI_MAX_CQI_LEN_PUSCH];
uint8_t *cqi_table[11];
int16_t *cqi_table_s[11];
} srslte_uci_cqi_pusch_t;
srslte_uci_cqi_pucch_t
Location: ./lib/include/srslte/phy/phch/uci.h
1
2
3
4
typedef struct SRSLTE_API {
uint8_t **cqi_table;
int16_t **cqi_table_s;
} srslte_uci_cqi_pucch_t;
srslte_uci_data_t
Location: ./lib/include/srslte/phy/phch/uci.h
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct SRSLTE_API {
uint8_t uci_cqi[SRSLTE_CQI_MAX_BITS];
uint32_t uci_cqi_len;
uint8_t uci_ri; // Only 1-bit supported for RI
uint32_t uci_ri_len;
uint8_t uci_ack; // 1st codeword bit for HARQ-ACK
uint8_t uci_ack_2; // 2st codeword bit for HARQ-ACK
uint32_t uci_ack_len;
bool ri_periodic_report;
bool scheduling_request;
bool channel_selection;
bool cqi_ack;
} srslte_uci_data_t;
srslte_uci_bit_type_t
Location: ./lib/include/srslte/phy/phch/uci.h
1
2
3
typedef enum {
UCI_BIT_1 = 0, UCI_BIT_0, UCI_BIT_REPETITION, UCI_BIT_PLACEHOLDER
} srslte_uci_bit_type_t;
srslte_uci_bit_t
Location: ./lib/include/srslte/phy/phch/uci.h
1
2
3
4
typedef struct {
uint32_t position;
srslte_uci_bit_type_t type;
} srslte_uci_bit_t;