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 {
|
typedef struct {
|
||||||
srslte_dci_dl_t dci;
|
srslte_dci_dl_t dci;
|
||||||
srslte_dci_cfg_t dci_cfg;
|
|
||||||
uint8_t* data[SRSLTE_MAX_TB];
|
uint8_t* data[SRSLTE_MAX_TB];
|
||||||
srslte_softbuffer_tx_t* softbuffer_tx[SRSLTE_MAX_TB];
|
srslte_softbuffer_tx_t* softbuffer_tx[SRSLTE_MAX_TB];
|
||||||
} dl_sched_grant_t;
|
} dl_sched_grant_t;
|
||||||
|
@ -77,7 +76,6 @@ public:
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
srslte_dci_ul_t dci;
|
srslte_dci_ul_t dci;
|
||||||
srslte_dci_cfg_t dci_cfg;
|
|
||||||
uint32_t current_tx_nb;
|
uint32_t current_tx_nb;
|
||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
bool needs_pdcch;
|
bool needs_pdcch;
|
||||||
|
|
|
@ -461,7 +461,17 @@ static int dci_format0_pack(srslte_cell_t* cell,
|
||||||
srslte_bit_unpack(dci->n_dmrs, &y, 3);
|
srslte_bit_unpack(dci->n_dmrs, &y, 3);
|
||||||
|
|
||||||
// CQI request
|
// CQI request
|
||||||
*y++ = dci->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
|
// Padding with zeros
|
||||||
uint32_t n = srslte_dci_format_sizeof(cell, sf, cfg, SRSLTE_DCI_FORMAT0);
|
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++) {
|
for (uint32_t i = 0; i < nof_grants; i++) {
|
||||||
if (grants[i].needs_pdcch) {
|
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);
|
ERROR("Error putting PUSCH %d\n", i);
|
||||||
return SRSLTE_ERROR;
|
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++) {
|
for (uint32_t i = 0; i < nof_grants; i++) {
|
||||||
uint16_t rnti = grants[i].dci.rnti;
|
uint16_t rnti = grants[i].dci.rnti;
|
||||||
if (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);
|
ERROR("Error putting PDCCH %d\n", i);
|
||||||
return SRSLTE_ERROR;
|
return SRSLTE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -255,6 +255,9 @@ void phy_ue_db::addmod_rnti(uint16_t
|
||||||
// Get UE by reference
|
// Get UE by reference
|
||||||
common_ue& ue = ue_db[rnti];
|
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
|
// 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;
|
for (uint32_t ue_cc_idx = 0; ue_cc_idx < phy_rrc_dedicated_list.size() && ue_cc_idx < SRSLTE_MAX_CARRIERS;
|
||||||
ue_cc_idx++) {
|
ue_cc_idx++) {
|
||||||
|
@ -274,6 +277,9 @@ void phy_ue_db::addmod_rnti(uint16_t
|
||||||
if (cell_info.state != cell_state_primary) {
|
if (cell_info.state != cell_state_primary) {
|
||||||
cell_info.state = cell_state_secondary_inactive;
|
cell_info.state = cell_state_secondary_inactive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Count Serving cell
|
||||||
|
nof_configured_scell++;
|
||||||
} else {
|
} else {
|
||||||
// Cell without configuration (except PCell)
|
// Cell without configuration (except PCell)
|
||||||
cell_info.state = cell_state_none;
|
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++) {
|
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;
|
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)
|
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));
|
sf_len = static_cast<uint32_t>(SRSLTE_SF_LEN_PRB(cell_list[0].cell.nof_prb));
|
||||||
rnti = rnti_;
|
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));
|
log_h.set_level(std::move(log_level));
|
||||||
|
|
||||||
// Initialise one buffer per eNb
|
// Initialise one buffer per eNb
|
||||||
|
|
Loading…
Reference in New Issue