Extended measurements interrat nr r15 testcase with measurements

This commit is contained in:
David Rupprecht 2020-12-03 15:14:02 +01:00 committed by Andre Puschmann
parent 826dd32c89
commit ce4526a935
3 changed files with 71 additions and 12 deletions

View File

@ -99,15 +99,7 @@ private:
void ho_reest_finish(const uint32_t src_earfcn, const uint32_t dst_earfcn);
bool parse_meas_config(const meas_cfg_s* meas_config, bool is_ho_reest, uint32_t src_earfcn);
void eval_triggers();
void eval_triggers_eutra(uint32_t meas_id,
report_cfg_eutra_s& report_cfg,
meas_obj_eutra_s& meas_obj,
meas_cell_eutra* serv_cell,
float Ofs,
float Ocs);
void report_triggers();
void report_triggers_eutra(uint32_t meas_id, report_cfg_eutra_s& report_cfg, meas_obj_eutra_s& meas_obj);
private:
void remove_varmeas_report(const uint32_t meas_id);
@ -130,6 +122,17 @@ private:
void reportConfig_addmod_interrat(const report_cfg_to_add_mod_s& l);
bool reportConfig_addmod_to_reportConfigList(const report_cfg_to_add_mod_s& l);
void eval_triggers_eutra(uint32_t meas_id,
report_cfg_eutra_s& report_cfg,
meas_obj_eutra_s& meas_obj,
meas_cell_eutra* serv_cell,
float Ofs,
float Ocs);
void eval_triggers_interrat_nr(uint32_t meas_id, report_cfg_inter_rat_s& report_cfg, meas_obj_nr_r15_s& meas_obj);
void report_triggers_eutra(uint32_t meas_id, report_cfg_eutra_s& report_cfg, meas_obj_eutra_s& meas_obj);
void report_triggers_interrat_nr(uint32_t meas_id, report_cfg_inter_rat_s& report_cfg, meas_obj_nr_r15_s& meas_obj);
class cell_trigger_state
{
public:

View File

@ -463,6 +463,11 @@ void rrc::rrc_meas::var_meas_cfg::report_triggers_eutra(uint32_t meas
}
}
void rrc::rrc_meas::var_meas_cfg::report_triggers_interrat_nr(uint32_t meas_id,
report_cfg_inter_rat_s& report_cfg,
meas_obj_nr_r15_s& meas_obj)
{}
void rrc::rrc_meas::var_meas_cfg::report_triggers()
{
// for each measId included in the measIdList within VarMeasConfig
@ -478,6 +483,11 @@ void rrc::rrc_meas::var_meas_cfg::report_triggers()
if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_eutra &&
report_cfg.report_cfg.type().value == report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_eutra) {
report_triggers_eutra(m.first, report_cfg.report_cfg.report_cfg_eutra(), meas_obj.meas_obj.meas_obj_eutra());
} else if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_nr_r15 &&
report_cfg.report_cfg.type().value ==
report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_inter_rat) {
report_triggers_interrat_nr(
m.first, report_cfg.report_cfg.report_cfg_inter_rat(), meas_obj.meas_obj.meas_obj_nr_r15());
} else {
log_h->error("Unsupported combination of measurement object type %s and report config type %s \n",
meas_obj.meas_obj.type().to_string().c_str(),
@ -624,6 +634,10 @@ void rrc::rrc_meas::var_meas_cfg::eval_triggers_eutra(uint32_t meas_i
}
}
void rrc::rrc_meas::var_meas_cfg::eval_triggers_interrat_nr(uint32_t meas_id,
report_cfg_inter_rat_s& report_cfg,
meas_obj_nr_r15_s& meas_obj)
{}
/* Evaluate event trigger conditions for each cell 5.5.4 */
void rrc::rrc_meas::var_meas_cfg::eval_triggers()
{
@ -661,10 +675,22 @@ void rrc::rrc_meas::var_meas_cfg::eval_triggers()
m.second.meas_obj_id,
m.second.report_cfg_id);
report_cfg_eutra_s& report_cfg = reportConfigList.at(m.second.report_cfg_id).report_cfg.report_cfg_eutra();
meas_obj_eutra_s& meas_obj = measObjectsList.at(m.second.meas_obj_id).meas_obj.meas_obj_eutra();
eval_triggers_eutra(m.first, report_cfg, meas_obj, serv_cell, Ofs, Ocs);
report_cfg_to_add_mod_s& report_cfg = reportConfigList.at(m.second.report_cfg_id);
meas_obj_to_add_mod_s& meas_obj = measObjectsList.at(m.second.meas_obj_id);
if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_eutra &&
report_cfg.report_cfg.type().value == report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_eutra) {
eval_triggers_eutra(
m.first, report_cfg.report_cfg.report_cfg_eutra(), meas_obj.meas_obj.meas_obj_eutra(), serv_cell, Ofs, Ocs);
} else if (meas_obj.meas_obj.type().value == meas_obj_to_add_mod_s::meas_obj_c_::types_opts::meas_obj_nr_r15 &&
report_cfg.report_cfg.type().value ==
report_cfg_to_add_mod_s::report_cfg_c_::types::report_cfg_inter_rat)
eval_triggers_interrat_nr(
m.first, report_cfg.report_cfg.report_cfg_inter_rat(), meas_obj.meas_obj.meas_obj_nr_r15());
else {
log_h->error("Unsupported combination of measurement object type %s and report config type %s \n",
meas_obj.meas_obj.type().to_string().c_str(),
report_cfg.report_cfg.type().to_string().c_str());
}
}
}

View File

@ -317,6 +317,20 @@ public:
run_tti(1);
}
#ifdef HAVE_5GNR
void add_neighbour_cell_nr(uint32_t pci, uint32_t earfcn, float rsrp = 0)
{
std::vector<phy_meas_nr_t> phy_meas = {};
phy_meas_nr_t meas = {};
meas.pci_nr = pci;
meas.arfcn_nr = earfcn;
meas.rsrp = rsrp;
phy_meas.push_back(meas); // neighbour cell
new_cell_meas_nr(phy_meas);
run_tti(1);
}
#endif
using rrc::has_neighbour_cell;
using rrc::is_serving_cell;
using rrc::start_cell_select;
@ -1171,6 +1185,8 @@ int meas_obj_inter_rat_nr_test()
rep.report_cfg.report_cfg_inter_rat().trigger_type.set_event();
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.set_event_b1_nr_r15();
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().b1_thres_nr_r15.set_nr_rsrp_r15();
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().b1_thres_nr_r15.nr_rsrp_r15() =
56;
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().event_id.event_b1_nr_r15().report_on_leave_r15 = true;
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().hysteresis = 0;
rep.report_cfg.report_cfg_inter_rat().trigger_type.event().time_to_trigger = asn1::rrc::time_to_trigger_opts::options::ms100;
@ -1195,6 +1211,20 @@ int meas_obj_inter_rat_nr_test()
// Just test it doesn't crash
TESTASSERT(rrctest.send_meas_cfg(rrc_conn_recfg));
TESTASSERT(rrctest.phytest.meas_nof_freqs() == 0);
#ifdef HAVE_5GNR
rrctest.add_neighbour_cell(2, 300, 2.0);
rrctest.set_serving_cell(2, 300);
rrctest.add_neighbour_cell_nr(500, 631680, -60.0);
int ttt_iters = 100 + 1; // 100 ms
for (int i = 0; i < ttt_iters; i++) {
log1->info("Report %d/%d enter condition is true\n", i, ttt_iters);
rrctest.add_neighbour_cell_nr(500, 631680, -60.0);
}
#endif
return SRSLTE_SUCCESS;
}