mirror of https://github.com/PentHertz/srsLTE.git
fix scell activation in the phy during intra-enb handover.
This commit is contained in:
parent
76c648106f
commit
d42cdca729
|
@ -143,9 +143,10 @@ private:
|
||||||
// states
|
// states
|
||||||
struct idle_st {};
|
struct idle_st {};
|
||||||
struct intraenb_ho_st {
|
struct intraenb_ho_st {
|
||||||
const cell_info_common* target_cell = nullptr;
|
const cell_info_common* target_cell = nullptr;
|
||||||
const cell_info_common* source_cell = nullptr;
|
const cell_info_common* source_cell = nullptr;
|
||||||
uint16_t last_temp_crnti = SRSLTE_INVALID_RNTI;
|
uint16_t last_temp_crnti = SRSLTE_INVALID_RNTI;
|
||||||
|
asn1::rrc::rrc_conn_recfg_r8_ies_s pending_ho_cmd;
|
||||||
|
|
||||||
void enter(rrc_mobility* f, const ho_meas_report_ev& meas_report);
|
void enter(rrc_mobility* f, const ho_meas_report_ev& meas_report);
|
||||||
};
|
};
|
||||||
|
|
|
@ -155,7 +155,7 @@ private:
|
||||||
*
|
*
|
||||||
* @param config ASN1 Common SIB struct carrying the common physical layer parameters
|
* @param config ASN1 Common SIB struct carrying the common physical layer parameters
|
||||||
*/
|
*/
|
||||||
void apply_setup_phy_common(const asn1::rrc::rr_cfg_common_sib_s& config);
|
void apply_setup_phy_common(const asn1::rrc::rr_cfg_common_sib_s& config, bool update_phy);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setups the PCell physical layer dedicated configuration of the UE. This method shall be called from the
|
* Setups the PCell physical layer dedicated configuration of the UE. This method shall be called from the
|
||||||
|
|
|
@ -878,6 +878,9 @@ void rrc::ue::rrc_mobility::fill_mobility_reconf_common(asn1::rrc::dl_dcch_msg_s
|
||||||
recfg_r8.rr_cfg_ded.phys_cfg_ded_present = true;
|
recfg_r8.rr_cfg_ded.phys_cfg_ded_present = true;
|
||||||
phys_cfg_ded_s& phy_cfg = recfg_r8.rr_cfg_ded.phys_cfg_ded;
|
phys_cfg_ded_s& phy_cfg = recfg_r8.rr_cfg_ded.phys_cfg_ded;
|
||||||
|
|
||||||
|
phy_cfg.pusch_cfg_ded_present = true;
|
||||||
|
phy_cfg.pusch_cfg_ded = rrc_enb->cfg.pusch_cfg;
|
||||||
|
|
||||||
// Set SR in new CC
|
// Set SR in new CC
|
||||||
phy_cfg.sched_request_cfg_present = true;
|
phy_cfg.sched_request_cfg_present = true;
|
||||||
auto& sr_setup = phy_cfg.sched_request_cfg.set_setup();
|
auto& sr_setup = phy_cfg.sched_request_cfg.set_setup();
|
||||||
|
@ -1324,6 +1327,7 @@ void rrc::ue::rrc_mobility::intraenb_ho_st::enter(rrc_mobility* f, const ho_meas
|
||||||
/* Prepare RRC Reconf Message with mobility info */
|
/* Prepare RRC Reconf Message with mobility info */
|
||||||
dl_dcch_msg_s dl_dcch_msg;
|
dl_dcch_msg_s dl_dcch_msg;
|
||||||
f->fill_mobility_reconf_common(dl_dcch_msg, *target_cell, source_cell->cell_cfg.dl_earfcn);
|
f->fill_mobility_reconf_common(dl_dcch_msg, *target_cell, source_cell->cell_cfg.dl_earfcn);
|
||||||
|
pending_ho_cmd = dl_dcch_msg.msg.c1().rrc_conn_recfg().crit_exts.c1().rrc_conn_recfg_r8();
|
||||||
|
|
||||||
// Send DL-DCCH Message via current PCell
|
// Send DL-DCCH Message via current PCell
|
||||||
if (not f->rrc_ue->send_dl_dcch(&dl_dcch_msg)) {
|
if (not f->rrc_ue->send_dl_dcch(&dl_dcch_msg)) {
|
||||||
|
@ -1346,7 +1350,8 @@ void rrc::ue::rrc_mobility::handle_crnti_ce(intraenb_ho_st& s, const user_crnti_
|
||||||
// Change PCell in MAC/Scheduler
|
// Change PCell in MAC/Scheduler
|
||||||
rrc_ue->mac_ctrl->handle_crnti_ce(ev.temp_crnti);
|
rrc_ue->mac_ctrl->handle_crnti_ce(ev.temp_crnti);
|
||||||
|
|
||||||
rrc_ue->apply_setup_phy_common(s.target_cell->sib2.rr_cfg_common);
|
rrc_ue->apply_setup_phy_common(s.target_cell->sib2.rr_cfg_common, false);
|
||||||
|
rrc_ue->apply_reconf_phy_config(s.pending_ho_cmd);
|
||||||
|
|
||||||
rrc_ue->ue_security_cfg.regenerate_keys_handover(s.target_cell->cell_cfg.pci, s.target_cell->cell_cfg.dl_earfcn);
|
rrc_ue->ue_security_cfg.regenerate_keys_handover(s.target_cell->cell_cfg.pci, s.target_cell->cell_cfg.dl_earfcn);
|
||||||
rrc_ue->bearer_list.reest_bearers();
|
rrc_ue->bearer_list.reest_bearers();
|
||||||
|
|
|
@ -53,7 +53,7 @@ rrc::ue::ue(rrc* outer_rrc, uint16_t rnti_, const sched_interface::ue_cfg_t& sch
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure
|
// Configure
|
||||||
apply_setup_phy_common(parent->cfg.sibs[1].sib2().rr_cfg_common);
|
apply_setup_phy_common(parent->cfg.sibs[1].sib2().rr_cfg_common, true);
|
||||||
|
|
||||||
activity_timer = outer_rrc->task_sched.get_unique_timer();
|
activity_timer = outer_rrc->task_sched.get_unique_timer();
|
||||||
set_activity_timeout(MSG3_RX_TIMEOUT); // next UE response is Msg3
|
set_activity_timeout(MSG3_RX_TIMEOUT); // next UE response is Msg3
|
||||||
|
@ -1148,7 +1148,8 @@ int rrc::ue::fill_scell_to_addmod_list(asn1::rrc::rrc_conn_recfg_r8_ies_s* conn_
|
||||||
scell_phy_rrc_ded.enb_cc_idx = cc_cfg->enb_cc_idx;
|
scell_phy_rrc_ded.enb_cc_idx = cc_cfg->enb_cc_idx;
|
||||||
|
|
||||||
// Append to PHY RRC config dedicated which will be applied further down
|
// Append to PHY RRC config dedicated which will be applied further down
|
||||||
phy_rrc_dedicated_list.push_back(scell_phy_rrc_ded);
|
phy_rrc_dedicated_list.resize(scell_idx + 1);
|
||||||
|
phy_rrc_dedicated_list[scell_idx] = scell_phy_rrc_ded;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set DL HARQ Feedback mode
|
// Set DL HARQ Feedback mode
|
||||||
|
@ -1316,7 +1317,7 @@ bool rrc::ue::send_dl_dcch(const dl_dcch_msg_s* dl_dcch_msg, srslte::unique_byte
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rrc::ue::apply_setup_phy_common(const asn1::rrc::rr_cfg_common_sib_s& config)
|
void rrc::ue::apply_setup_phy_common(const asn1::rrc::rr_cfg_common_sib_s& config, bool update_phy)
|
||||||
{
|
{
|
||||||
// Return if no cell is supported
|
// Return if no cell is supported
|
||||||
if (phy_rrc_dedicated_list.empty()) {
|
if (phy_rrc_dedicated_list.empty()) {
|
||||||
|
@ -1337,7 +1338,7 @@ void rrc::ue::apply_setup_phy_common(const asn1::rrc::rr_cfg_common_sib_s& confi
|
||||||
phy_rrc_dedicated_list[0].enb_cc_idx = get_ue_cc_cfg(UE_PCELL_CC_IDX)->enb_cc_idx;
|
phy_rrc_dedicated_list[0].enb_cc_idx = get_ue_cc_cfg(UE_PCELL_CC_IDX)->enb_cc_idx;
|
||||||
|
|
||||||
// Send configuration to physical layer
|
// Send configuration to physical layer
|
||||||
if (parent->phy != nullptr) {
|
if (parent->phy != nullptr and update_phy) {
|
||||||
parent->phy->set_config(rnti, phy_rrc_dedicated_list);
|
parent->phy->set_config(rnti, phy_rrc_dedicated_list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue