mirror of https://github.com/PentHertz/srsLTE.git
Fix Extended CSI request bits in DCI
This commit is contained in:
parent
a59884a14a
commit
b9583d4182
|
@ -48,7 +48,6 @@ public:
|
|||
*/
|
||||
typedef struct {
|
||||
srslte_dci_dl_t dci;
|
||||
srslte_dci_cfg_t dci_cfg;
|
||||
uint8_t* data[SRSLTE_MAX_TB];
|
||||
srslte_softbuffer_tx_t* softbuffer_tx[SRSLTE_MAX_TB];
|
||||
} dl_sched_grant_t;
|
||||
|
@ -77,7 +76,6 @@ public:
|
|||
*/
|
||||
typedef struct {
|
||||
srslte_dci_ul_t dci;
|
||||
srslte_dci_cfg_t dci_cfg;
|
||||
uint32_t current_tx_nb;
|
||||
uint8_t* data;
|
||||
bool needs_pdcch;
|
||||
|
|
|
@ -461,7 +461,17 @@ static int dci_format0_pack(srslte_cell_t* cell,
|
|||
srslte_bit_unpack(dci->n_dmrs, &y, 3);
|
||||
|
||||
// CQI request
|
||||
if (cfg->multiple_csi_request_enabled) {
|
||||
*y++ = dci->cqi_request;
|
||||
*y++ = 0;
|
||||
} else {
|
||||
*y++ = dci->cqi_request;
|
||||
}
|
||||
|
||||
// SRS request
|
||||
if (cfg->srs_request_enabled) {
|
||||
*y++ = dci->srs_request && dci->srs_request_present;
|
||||
}
|
||||
|
||||
// Padding with zeros
|
||||
uint32_t n = srslte_dci_format_sizeof(cell, sf, cfg, SRSLTE_DCI_FORMAT0);
|
||||
|
|
|
@ -432,7 +432,8 @@ int cc_worker::encode_pdcch_ul(stack_interface_phy_lte::ul_sched_grant_t* grants
|
|||
{
|
||||
for (uint32_t i = 0; i < nof_grants; i++) {
|
||||
if (grants[i].needs_pdcch) {
|
||||
if (srslte_enb_dl_put_pdcch_ul(&enb_dl, &grants[i].dci_cfg, &grants[i].dci)) {
|
||||
srslte_dci_cfg_t dci_cfg = phy->ue_db.get_config(grants[i].dci.rnti, cc_idx).dl_cfg.dci;
|
||||
if (srslte_enb_dl_put_pdcch_ul(&enb_dl, &dci_cfg, &grants[i].dci)) {
|
||||
ERROR("Error putting PUSCH %d\n", i);
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
|
@ -453,7 +454,8 @@ int cc_worker::encode_pdcch_dl(stack_interface_phy_lte::dl_sched_grant_t* grants
|
|||
for (uint32_t i = 0; i < nof_grants; i++) {
|
||||
uint16_t rnti = grants[i].dci.rnti;
|
||||
if (rnti) {
|
||||
if (srslte_enb_dl_put_pdcch_dl(&enb_dl, &grants[i].dci_cfg, &grants[i].dci)) {
|
||||
srslte_dci_cfg_t dci_cfg = phy->ue_db.get_config(rnti, cc_idx).dl_cfg.dci;
|
||||
if (srslte_enb_dl_put_pdcch_dl(&enb_dl, &dci_cfg, &grants[i].dci)) {
|
||||
ERROR("Error putting PDCCH %d\n", i);
|
||||
return SRSLTE_ERROR;
|
||||
}
|
||||
|
|
|
@ -255,6 +255,9 @@ void phy_ue_db::addmod_rnti(uint16_t
|
|||
// Get UE by reference
|
||||
common_ue& ue = ue_db[rnti];
|
||||
|
||||
// Number of configured serving cells
|
||||
uint32_t nof_configured_scell = 0;
|
||||
|
||||
// Iterate PHY RRC configuration for each UE cell/carrier
|
||||
for (uint32_t ue_cc_idx = 0; ue_cc_idx < phy_rrc_dedicated_list.size() && ue_cc_idx < SRSLTE_MAX_CARRIERS;
|
||||
ue_cc_idx++) {
|
||||
|
@ -274,6 +277,9 @@ void phy_ue_db::addmod_rnti(uint16_t
|
|||
if (cell_info.state != cell_state_primary) {
|
||||
cell_info.state = cell_state_secondary_inactive;
|
||||
}
|
||||
|
||||
// Count Serving cell
|
||||
nof_configured_scell++;
|
||||
} else {
|
||||
// Cell without configuration (except PCell)
|
||||
cell_info.state = cell_state_none;
|
||||
|
@ -284,6 +290,13 @@ void phy_ue_db::addmod_rnti(uint16_t
|
|||
for (uint32_t cell_idx = phy_rrc_dedicated_list.size(); cell_idx < SRSLTE_MAX_CARRIERS; cell_idx++) {
|
||||
ue.cell_info[cell_idx].state = cell_state_none;
|
||||
}
|
||||
|
||||
// Enable/Disable extended CSI field in DCI according to 3GPP 36.212 R10 5.3.3.1.1 Format 0
|
||||
for (uint32_t ue_cc_idx = 0; ue_cc_idx < SRSLTE_MAX_CARRIERS; ue_cc_idx++) {
|
||||
if (ue.cell_info[ue_cc_idx].state != cell_state_none) {
|
||||
ue.cell_info[ue_cc_idx].phy_cfg.dl_cfg.dci.multiple_csi_request_enabled = (nof_configured_scell > 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void phy_ue_db::rem_rnti(uint16_t rnti)
|
||||
|
|
|
@ -771,6 +771,11 @@ public:
|
|||
sf_len = static_cast<uint32_t>(SRSLTE_SF_LEN_PRB(cell_list[0].cell.nof_prb));
|
||||
rnti = rnti_;
|
||||
|
||||
// Enable Extended CSI request bits in DCI format 0 according to 3GPP 36.212 R10 5.3.3.1.1
|
||||
for (auto& e : phy_rrc_cfg) {
|
||||
e.phy_cfg.dl_cfg.dci.multiple_csi_request_enabled = (phy_rrc_cfg.size() > 1);
|
||||
}
|
||||
|
||||
log_h.set_level(std::move(log_level));
|
||||
|
||||
// Initialise one buffer per eNb
|
||||
|
|
Loading…
Reference in New Issue