diff --git a/lib/src/phy/phch/dci.c b/lib/src/phy/phch/dci.c index c89fce76e..aaeb6814a 100644 --- a/lib/src/phy/phch/dci.c +++ b/lib/src/phy/phch/dci.c @@ -246,9 +246,44 @@ static uint32_t tpmi_bits(uint32_t nof_ports) static uint32_t dci_format1B_sizeof(srslte_cell_t* cell, srslte_dl_sf_cfg_t* sf, srslte_dci_cfg_t* cfg) { - // same as format1A minus the differentiation bit plus TPMI + PMI - uint32_t n = dci_format1A_sizeof(cell, sf, cfg) - 1 + tpmi_bits(cell->nof_ports) + 1 + (IS_TDD ? 2 : 0); + uint32_t n = 0; + + /* Carrier indicator – 0 or 3 bits */ + n += (cfg->cif_enabled) ? 3 : 0; + + /* Localized/Distributed VRB assignment flag – 1 bit */ + n += 1; + + /* Resource block assignment */ + n += riv_nbits(cell->nof_prb); + + /* Modulation and coding scheme and redundancy version – 5 bits */ + n += 5; + + /* HARQ process number – 3 bits (FDD) , 4 bits (TDD) */ + n += HARQ_PID_LEN; + + /* New data indicator – 1 bit */ + n += 1; + + /* Redundancy version – 2 bits */ + n += 2; + /* TPC command for PUCCH – 2 bits */ + n += 2; + + /* Downlink Assignment Index – 2 bits (TDD) */ + n += (IS_TDD ? 2 : 0); + + /* TPMI information for precoding – number of bits as specified in Table 5.3.3.1.3A-1 */ + n += tpmi_bits(cell->nof_ports); + + /* PMI confirmation for precoding – 1 bit as specified in Table 5.3.3.1.3A-2 */ + n += 1; + + while (n < dci_format0_sizeof_(cell, sf, cfg)) { + n++; + } while (is_ambiguous_size(n)) { n++; }