From 9a196116407d5d186bd977105621d6fe8e89088d Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Mon, 5 May 2025 12:48:26 +0530 Subject: [PATCH 1/6] 5G UE Measurement Report sent with hardcoded values --- .gitignore | 1 + srsue/hdr/stack/rrc_nr/rrc_nr.h | 1 + srsue/src/stack/rrc_nr/rrc_nr.cc | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 .gitignore mode change 100644 => 100755 srsue/hdr/stack/rrc_nr/rrc_nr.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..07ed7069a24 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/* \ No newline at end of file diff --git a/srsue/hdr/stack/rrc_nr/rrc_nr.h b/srsue/hdr/stack/rrc_nr/rrc_nr.h old mode 100644 new mode 100755 index 09ca1e50069..00c3f402a77 --- a/srsue/hdr/stack/rrc_nr/rrc_nr.h +++ b/srsue/hdr/stack/rrc_nr/rrc_nr.h @@ -147,6 +147,7 @@ class rrc_nr final : public rrc_interface_phy_nr, void send_setup_request(srsran::nr_establishment_cause_t cause); void send_con_setup_complete(srsran::unique_byte_buffer_t nas_msg); void send_rrc_reconfig_complete(); + void send_report(); int send_ue_capability_info(const asn1::rrc_nr::ue_cap_enquiry_s& msg); void send_ul_info_transfer(srsran::unique_byte_buffer_t nas_msg); void send_ul_ccch_msg(const asn1::rrc_nr::ul_ccch_msg_s& msg); diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index f1cc386294b..7e472204436 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -2206,6 +2206,34 @@ bool rrc_nr::handle_rrc_setup(const rrc_setup_s& setup) return true; } +void rrc_nr::send_report() + { + logger.debug("Sending meas report"); + asn1::rrc_nr::ul_dcch_msg_s ul_dcch_msg; + auto& rrc_reconfig_complete = ul_dcch_msg.msg.set_c1().set_meas_report().crit_exts.set_meas_report(); + + ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_id = 1; // bounds= [1,64] + meas_result_serv_mo_s mo; + meas_result_serv_mo_list_l mo_list; + mo.ext=true; + mo.meas_result_best_neigh_cell_present=false; + mo.serv_cell_id = 30; // bounds= [0,31] + mo.meas_result_serving_cell.pci = 1; + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell_present=true; + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp_present=true; + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp=90; // bounds= [0,127] + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq_present=true; + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq=30; // bounds= [0,127] + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr_present=true; + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr=40; // bounds= [0,127] + + mo_list.push_back(mo); + + ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_result_serving_mo_list = mo_list; + + send_ul_dcch_msg(srb_to_lcid(nr_srb::srb1), ul_dcch_msg); +} + void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) { transaction_id = reconfig.rrc_transaction_id; @@ -2215,6 +2243,9 @@ void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) return; } callback_list.add_proc(conn_recfg_proc); + + send_report(); + send_report(); } void rrc_nr::handle_ue_capability_enquiry(const ue_cap_enquiry_s& ue_cap_enquiry) { From 1e456fdf633699328d8cb9d1d9404f68509010ea Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Tue, 6 May 2025 17:11:17 +0530 Subject: [PATCH 2/6] Send Periodic Meas report after given time interval + meas paramaters fetch (In progress) --- srsue/hdr/stack/rrc_nr/rrc_nr_procedures.h | 2 + srsue/src/stack/rrc_nr/rrc_nr.cc | 90 +++++++++++++++++++-- srsue/src/stack/rrc_nr/rrc_nr_procedures.cc | 11 +++ 3 files changed, 96 insertions(+), 7 deletions(-) diff --git a/srsue/hdr/stack/rrc_nr/rrc_nr_procedures.h b/srsue/hdr/stack/rrc_nr/rrc_nr_procedures.h index d7cc00345f3..e28778c0de8 100644 --- a/srsue/hdr/stack/rrc_nr/rrc_nr_procedures.h +++ b/srsue/hdr/stack/rrc_nr/rrc_nr_procedures.h @@ -61,6 +61,8 @@ class rrc_nr::cell_selection_proc state_t state; }; +rrc_interface_phy_nr::cell_search_result_t get_meas(); + class rrc_nr::setup_request_proc { public: diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index 7e472204436..69bf501ebe1 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -309,6 +309,7 @@ void rrc_nr::decode_dl_ccch(unique_byte_buffer_t pdu) void rrc_nr::decode_dl_dcch(uint32_t lcid, unique_byte_buffer_t pdu) { + logger.info("Debug checkpoint: decode_dl_dcch"); asn1::cbit_ref bref(pdu->msg, pdu->N_bytes); asn1::rrc_nr::dl_dcch_msg_s dl_dcch_msg; if (dl_dcch_msg.unpack(bref) != asn1::SRSASN_SUCCESS or @@ -319,6 +320,9 @@ void rrc_nr::decode_dl_dcch(uint32_t lcid, unique_byte_buffer_t pdu) log_rrc_message(get_rb_name(lcid), Rx, pdu.get(), dl_dcch_msg, dl_dcch_msg.msg.c1().type().to_string()); dl_dcch_msg_type_c::c1_c_* c1 = &dl_dcch_msg.msg.c1(); + + logger.info("Debug checkpoint: decode_dl_dcch - %d", dl_dcch_msg.msg.c1().type().value); + switch (dl_dcch_msg.msg.c1().type().value) { // TODO: ADD missing cases case dl_dcch_msg_type_c::c1_c_::types::rrc_recfg: { @@ -2194,7 +2198,7 @@ bool rrc_nr::handle_rrc_setup(const rrc_setup_s& setup) logger.debug("Containerized MasterCellGroup: %s", js.to_string().c_str()); state = RRC_NR_STATE_CONNECTED; - srsran::console("RRC Connected\n"); + srsran::console("NR RRC Connected\n"); // defer transmission of Setup Complete until PHY reconfiguration has been completed if (not conn_setup_proc.launch( @@ -2210,18 +2214,28 @@ void rrc_nr::send_report() { logger.debug("Sending meas report"); asn1::rrc_nr::ul_dcch_msg_s ul_dcch_msg; + logger.debug("Debug Checkpoint: send report2 "); auto& rrc_reconfig_complete = ul_dcch_msg.msg.set_c1().set_meas_report().crit_exts.set_meas_report(); + logger.debug("Debug Checkpoint: send report3 "); ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_id = 1; // bounds= [1,64] + logger.debug("Debug Checkpoint: send report4 "); meas_result_serv_mo_s mo; meas_result_serv_mo_list_l mo_list; + + logger.debug("pci: %d", get_meas().pci); + logger.debug("arfcn: %d", get_meas().ssb_arfcn); + logger.debug("epre: %f dB", get_meas().measurements.epre_dB); + logger.debug("rsrp: %f dB", get_meas().measurements.rsrp_dB); + + mo.ext=true; mo.meas_result_best_neigh_cell_present=false; mo.serv_cell_id = 30; // bounds= [0,31] - mo.meas_result_serving_cell.pci = 1; + mo.meas_result_serving_cell.pci = get_meas().pci; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp_present=true; - mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp=90; // bounds= [0,127] + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp=get_meas().measurements.rsrp_dB; // bounds= [0,127] mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq=30; // bounds= [0,127] mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr_present=true; @@ -2230,12 +2244,26 @@ void rrc_nr::send_report() mo_list.push_back(mo); ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_result_serving_mo_list = mo_list; - + logger.debug("Debug Checkpoint: send report9 "); + send_ul_dcch_msg(srb_to_lcid(nr_srb::srb1), ul_dcch_msg); -} + logger.debug("Debug Checkpoint: send report10 "); + } void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) { + + logger.debug("Debug Checkpoint: rrc reconfig parameters: "); + logger.debug("rrcrecinfig type: %d", reconfig.crit_exts.type()); + + logger.debug("meas cfg present : %d", reconfig.crit_exts.rrc_recfg().meas_cfg_present); + logger.debug("meas cfg size: %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list.size()); + logger.debug("cfg type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.type()); // cfgtype: report_cfg_nr + + // if multiple report request recieved, check the type of each report + // logger.debug("report type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.report_cfg_nr().report_type.type()); + // logger.debug("report type1 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[1].report_cfg.report_cfg_nr().report_type.type()); + transaction_id = reconfig.rrc_transaction_id; if (not conn_recfg_proc.launch(nr, false, reconfig)) { @@ -2244,8 +2272,56 @@ void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) } callback_list.add_proc(conn_recfg_proc); - send_report(); - send_report(); + if( reconfig.crit_exts.rrc_recfg().meas_cfg_present && + reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.type() == 0 // cfgtype=0 : report_cfg_nr + ) + { + + enum options { periodical, event_triggered, N_TYPES}; + char report_type_text[N_TYPES][50] = {"periodical", "event_triggered"}; + + auto report_config = reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg; + auto type = report_config.report_cfg_nr().report_type.type(); + + + auto interval_str=report_config.report_cfg_nr().report_type.periodical().report_interv.to_string(); + int interval_int=report_config.report_cfg_nr().report_type.periodical().report_interv.to_number(); + + int max_report_amount=10; + + switch(type) + { + case options::periodical: + logger.debug("Debug Checkpoint: periodic report"); + logger.debug("report type: %s", report_type_text[type]); + logger.debug("type: %d", type); + + + // logger.debug("report amount : %d", report_config.report_cfg_nr().report_type.periodical().report_amount); + + logger.debug("report Interval : %s", interval_str); + logger.debug("report Interval : %d", interval_int); + + + // logger.debug("report Amount : %s", report_config.report_cfg_nr().report_type.periodical().report_amount.to_string()); + + while(max_report_amount>0) + { + send_report(); + std::this_thread::sleep_for(std::chrono::milliseconds(interval_int)); + max_report_amount--; + } + + break; + case options::event_triggered: + logger.debug("Debug Checkpoint: event triggered report"); + + break; + default: + logger.error("Unknown report type"); + } + } + } void rrc_nr::handle_ue_capability_enquiry(const ue_cap_enquiry_s& ue_cap_enquiry) { diff --git a/srsue/src/stack/rrc_nr/rrc_nr_procedures.cc b/srsue/src/stack/rrc_nr/rrc_nr_procedures.cc index 619eac6de44..bf6d57f643d 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr_procedures.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr_procedures.cc @@ -33,6 +33,13 @@ using namespace srsran; namespace srsue { + rrc_interface_phy_nr::cell_search_result_t meas_data; + + rrc_interface_phy_nr::cell_search_result_t get_meas() + { + return meas_data; + } + rrc_nr::connection_reconf_no_ho_proc::connection_reconf_no_ho_proc(rrc_nr& parent_) : rrc_handle(parent_), initiator(nr) {} @@ -447,6 +454,10 @@ rrc_nr::cell_selection_proc::handle_cell_search_result(const rrc_interface_phy_n result.pci, csi_info_str.data(), mib_info_str.data()); + + + meas_data=result; + // Apply MIB settings srsran::phy_cfg_nr_t& phy_cfg = rrc_handle.phy_cfg; From 77da7b8a259ba4a55468f5a3f865726441402d67 Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Wed, 7 May 2025 02:12:41 +0530 Subject: [PATCH 3/6] meas report with actual values (partial) --- srsue/src/stack/rrc_nr/rrc_nr.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index 69bf501ebe1..bb26b73c074 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -2225,13 +2225,21 @@ void rrc_nr::send_report() logger.debug("pci: %d", get_meas().pci); logger.debug("arfcn: %d", get_meas().ssb_arfcn); - logger.debug("epre: %f dB", get_meas().measurements.epre_dB); + logger.debug("epre: %f", get_meas().measurements.epre); + logger.debug("epre_db: %f dB", get_meas().measurements.epre_dB); logger.debug("rsrp: %f dB", get_meas().measurements.rsrp_dB); + logger.debug("nof_re: %d", get_meas().measurements.nof_re); + logger.debug("n0_db: %f dB", get_meas().measurements.n0_dB); + logger.debug("snr: %f dB", get_meas().measurements.snr_dB); + + + mo.ext=true; mo.meas_result_best_neigh_cell_present=false; mo.serv_cell_id = 30; // bounds= [0,31] + mo.meas_result_serving_cell.pci_present = true; mo.meas_result_serving_cell.pci = get_meas().pci; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp_present=true; @@ -2239,7 +2247,7 @@ void rrc_nr::send_report() mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq=30; // bounds= [0,127] mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr_present=true; - mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr=40; // bounds= [0,127] + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr=get_meas().measurements.snr_dB; // bounds= [0,127] mo_list.push_back(mo); @@ -2248,7 +2256,7 @@ void rrc_nr::send_report() send_ul_dcch_msg(srb_to_lcid(nr_srb::srb1), ul_dcch_msg); logger.debug("Debug Checkpoint: send report10 "); - } +} void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) { From 3de0de8362092ae0bf84fc28822f73aec40eb681 Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Wed, 14 May 2025 02:15:37 +0530 Subject: [PATCH 4/6] event A1 and A2 triggered reports --- srsue/hdr/stack/rrc_nr/rrc_nr.h | 2 + srsue/src/stack/rrc_nr/rrc_nr.cc | 141 ++++++++++++++++++++++++++----- 2 files changed, 120 insertions(+), 23 deletions(-) diff --git a/srsue/hdr/stack/rrc_nr/rrc_nr.h b/srsue/hdr/stack/rrc_nr/rrc_nr.h index 00c3f402a77..b0011a00942 100755 --- a/srsue/hdr/stack/rrc_nr/rrc_nr.h +++ b/srsue/hdr/stack/rrc_nr/rrc_nr.h @@ -148,6 +148,8 @@ class rrc_nr final : public rrc_interface_phy_nr, void send_con_setup_complete(srsran::unique_byte_buffer_t nas_msg); void send_rrc_reconfig_complete(); void send_report(); + void send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config); + void send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config); int send_ue_capability_info(const asn1::rrc_nr::ue_cap_enquiry_s& msg); void send_ul_info_transfer(srsran::unique_byte_buffer_t nas_msg); void send_ul_ccch_msg(const asn1::rrc_nr::ul_ccch_msg_s& msg); diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index bb26b73c074..a2554ba59d4 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -2258,6 +2258,121 @@ void rrc_nr::send_report() logger.debug("Debug Checkpoint: send report10 "); } +void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config) +{ + int max_report_amount=10; + auto interval_str=report_config.report_cfg_nr().report_type.periodical().report_interv.to_string(); + int interval_int=report_config.report_cfg_nr().report_type.periodical().report_interv.to_number(); + + logger.debug("report Interval : %s", interval_str); + logger.debug("report Interval : %d", interval_int); + + while(max_report_amount>0) + { + send_report(); + std::this_thread::sleep_for(std::chrono::milliseconds(interval_int)); + max_report_amount--; + } +} + +void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config) +{ + enum options_report_types { event_a1, event_a2, event_a3, event_a4, event_a5, event_a6, nulltype, N_TYPES}; + enum options_trigger_quant { rsrp, rsrq, sinr }; + + auto event_triggered_report_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.type(); + char event_triggered_report_type_text[N_TYPES][50] = {"event_a1", "event_a2", "event_a3", "event_a4", "event_a5", "event_a6", "nulltype"}; + + logger.debug("report type: %s",event_triggered_report_type_text[event_triggered_report_type]); + + if(event_triggered_report_type == options_report_types::event_a1) + { + auto trigger_quant_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.type(); + switch(trigger_quant_type) + { + case options_trigger_quant::rsrp: + logger.debug("rsrp threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrp()); + + if(get_meas().measurements.rsrp_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrp()) + { + send_report(); + } + else + { + logger.debug("rsrp threshold not met"); + } + break; + + case options_trigger_quant::rsrq: + logger.debug("rsrq threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrq()); + // calculate rsrq, then + // add condition for rsrq > threshold + send_report(); + break; + + case options_trigger_quant::sinr: + logger.debug("snr threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.sinr()); + if(get_meas().measurements.snr_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.sinr()) + { + send_report(); + } + else + { + logger.debug("snr threshold not met"); + } + break; + + default: + logger.error("Unknown Trigger Quantity"); + } + } + else if(event_triggered_report_type == options_report_types::event_a2) + { + auto trigger_quant_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.type(); + switch(trigger_quant_type) + { + case options_trigger_quant::rsrp: + logger.debug("rsrp threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrp()); + if(get_meas().measurements.rsrp_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrp()) + { + send_report(); + } + else + { + logger.debug("rsrp threshold not met"); + } + break; + + case options_trigger_quant::rsrq: + logger.debug("rsrq threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrq()); + send_report(); + break; + + case options_trigger_quant::sinr: + logger.debug("snr threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.sinr()); + if(get_meas().measurements.snr_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.sinr()) + { + send_report(); + } + else + { + logger.debug("snr threshold not met"); + } + break; + + default: + logger.error("Unknown Trigger Quantity"); + } + } + else + { + logger.error("Unknown Event Triggered Report Type"); + } + + + +} + void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) { @@ -2290,40 +2405,20 @@ void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) auto report_config = reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg; auto type = report_config.report_cfg_nr().report_type.type(); - - - auto interval_str=report_config.report_cfg_nr().report_type.periodical().report_interv.to_string(); - int interval_int=report_config.report_cfg_nr().report_type.periodical().report_interv.to_number(); - - int max_report_amount=10; switch(type) { case options::periodical: logger.debug("Debug Checkpoint: periodic report"); logger.debug("report type: %s", report_type_text[type]); - logger.debug("type: %d", type); + logger.debug("type: %d", type); - - // logger.debug("report amount : %d", report_config.report_cfg_nr().report_type.periodical().report_amount); - - logger.debug("report Interval : %s", interval_str); - logger.debug("report Interval : %d", interval_int); - - - // logger.debug("report Amount : %s", report_config.report_cfg_nr().report_type.periodical().report_amount.to_string()); - - while(max_report_amount>0) - { - send_report(); - std::this_thread::sleep_for(std::chrono::milliseconds(interval_int)); - max_report_amount--; - } - + send_periodic_report(report_config); break; case options::event_triggered: logger.debug("Debug Checkpoint: event triggered report"); + send_event_triggered_report(report_config); break; default: logger.error("Unknown report type"); From bbf7b97e4db8851fe0a66000248bbad151358b33 Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Tue, 27 May 2025 23:44:03 +0530 Subject: [PATCH 5/6] event a3,a4,a5,a6 + calculate rsrq + fetch neighbour meas data (currently using dummy neighbour) --- srsue/hdr/stack/rrc_nr/rrc_nr.h | 4 +- srsue/src/stack/rrc_nr/rrc_nr.cc | 251 ++++++++++++++++++++++++++++--- 2 files changed, 231 insertions(+), 24 deletions(-) diff --git a/srsue/hdr/stack/rrc_nr/rrc_nr.h b/srsue/hdr/stack/rrc_nr/rrc_nr.h index b0011a00942..7095e7164b4 100755 --- a/srsue/hdr/stack/rrc_nr/rrc_nr.h +++ b/srsue/hdr/stack/rrc_nr/rrc_nr.h @@ -147,7 +147,9 @@ class rrc_nr final : public rrc_interface_phy_nr, void send_setup_request(srsran::nr_establishment_cause_t cause); void send_con_setup_complete(srsran::unique_byte_buffer_t nas_msg); void send_rrc_reconfig_complete(); - void send_report(); + rrc_interface_phy_nr::cell_search_result_t get_neighbour_meas(); + float calc_rsrq_db(rrc_interface_phy_nr::cell_search_result_t meas); + void send_report(bool send_neigh_meas); void send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config); void send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config); int send_ue_capability_info(const asn1::rrc_nr::ue_cap_enquiry_s& msg); diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index a2554ba59d4..a3201c31d47 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -34,6 +34,22 @@ using namespace srsran; namespace srsue { +rrc_interface_phy_nr::cell_search_result_t rrc_nr::get_neighbour_meas() +{ + rrc_interface_phy_nr::cell_search_result_t neigh_meas_data; + neigh_meas_data.cell_found=true; + neigh_meas_data.pci=2; + neigh_meas_data.ssb_arfcn=0; + neigh_meas_data.measurements.nof_re=250; + neigh_meas_data.measurements.rsrp=50; + neigh_meas_data.measurements.rsrp_dB=50; + neigh_meas_data.measurements.epre=55; + neigh_meas_data.measurements.epre_dB=55; + neigh_meas_data.measurements.snr_dB=60; + + return neigh_meas_data; +} + const static char* rrc_nr_state_text[] = {"IDLE", "CONNECTED", "CONNECTED-INACTIVE"}; rrc_nr::rrc_nr(srsran::task_sched_handle task_sched_) : @@ -2210,9 +2226,23 @@ bool rrc_nr::handle_rrc_setup(const rrc_setup_s& setup) return true; } -void rrc_nr::send_report() - { - logger.debug("Sending meas report"); +float rrc_nr::calc_rsrq_db(const rrc_interface_phy_nr::cell_search_result_t meas) +{ + // calculate rsrq + float rssi_linear = meas.measurements.epre * meas.measurements.nof_re; + int no_of_RB = 1; + + float rsrq_linear = no_of_RB * meas.measurements.rsrp / rssi_linear; + logger.debug("rsrq_linear: %f", rsrq_linear); + float rsrq_db = 10 * log10(rsrq_linear); + logger.debug("rsrq_db: %f", rsrq_db); + return abs(rsrq_db); +} + +void rrc_nr::send_report(bool send_neigh_meas) + { + logger.debug("Debug Checkpoint: send report1 "); + asn1::rrc_nr::ul_dcch_msg_s ul_dcch_msg; logger.debug("Debug Checkpoint: send report2 "); auto& rrc_reconfig_complete = ul_dcch_msg.msg.set_c1().set_meas_report().crit_exts.set_meas_report(); @@ -2222,40 +2252,62 @@ void rrc_nr::send_report() logger.debug("Debug Checkpoint: send report4 "); meas_result_serv_mo_s mo; meas_result_serv_mo_list_l mo_list; - + logger.debug("Debug Checkpoint: send report5 "); + logger.debug("pci: %d", get_meas().pci); logger.debug("arfcn: %d", get_meas().ssb_arfcn); logger.debug("epre: %f", get_meas().measurements.epre); logger.debug("epre_db: %f dB", get_meas().measurements.epre_dB); logger.debug("rsrp: %f dB", get_meas().measurements.rsrp_dB); - + logger.debug("rsrq: %f dB", calc_rsrq_db(get_meas())); logger.debug("nof_re: %d", get_meas().measurements.nof_re); logger.debug("n0_db: %f dB", get_meas().measurements.n0_dB); logger.debug("snr: %f dB", get_meas().measurements.snr_dB); - - mo.ext=true; - mo.meas_result_best_neigh_cell_present=false; - mo.serv_cell_id = 30; // bounds= [0,31] + mo.serv_cell_id = get_meas().pci; // bounds= [0,31] mo.meas_result_serving_cell.pci_present = true; mo.meas_result_serving_cell.pci = get_meas().pci; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrp=get_meas().measurements.rsrp_dB; // bounds= [0,127] mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq_present=true; - mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq=30; // bounds= [0,127] + mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.rsrq=calc_rsrq_db(get_meas()); // bounds= [0,127] mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr_present=true; mo.meas_result_serving_cell.meas_result.cell_results.results_ssb_cell.sinr=get_meas().measurements.snr_dB; // bounds= [0,127] + if(send_neigh_meas) + { + logger.debug("Debug Checkpoint: neighbour cell data"); + logger.debug("rsrp: %f dB", get_neighbour_meas().measurements.rsrp_dB); + logger.debug("rsrq: %f dB", calc_rsrq_db(get_neighbour_meas())); + logger.debug("sinr: %f dB", get_neighbour_meas().measurements.snr_dB); + mo.meas_result_best_neigh_cell_present=true; + mo.meas_result_best_neigh_cell.pci_present=true; + mo.meas_result_best_neigh_cell.pci=get_neighbour_meas().pci; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell_present=true; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.rsrp_present=true; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.rsrp=get_neighbour_meas().measurements.rsrp_dB; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.rsrq_present=true; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.rsrq=calc_rsrq_db(get_neighbour_meas()); + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.sinr_present=true; + mo.meas_result_best_neigh_cell.meas_result.cell_results.results_ssb_cell.sinr=get_neighbour_meas().measurements.snr_dB; + } + else + { + mo.meas_result_best_neigh_cell_present=false; + } + + mo_list.push_back(mo); ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_result_serving_mo_list = mo_list; logger.debug("Debug Checkpoint: send report9 "); send_ul_dcch_msg(srb_to_lcid(nr_srb::srb1), ul_dcch_msg); - logger.debug("Debug Checkpoint: send report10 "); + logger.debug("Debug Checkpoint: Report Sent "); + } void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config) @@ -2269,7 +2321,7 @@ void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_ while(max_report_amount>0) { - send_report(); + send_report(false); std::this_thread::sleep_for(std::chrono::milliseconds(interval_int)); max_report_amount--; } @@ -2277,11 +2329,11 @@ void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config) { - enum options_report_types { event_a1, event_a2, event_a3, event_a4, event_a5, event_a6, nulltype, N_TYPES}; + enum options_report_types { event_a1, event_a2, event_a3, event_a4, event_a5, event_a6, N_TYPES}; enum options_trigger_quant { rsrp, rsrq, sinr }; auto event_triggered_report_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.type(); - char event_triggered_report_type_text[N_TYPES][50] = {"event_a1", "event_a2", "event_a3", "event_a4", "event_a5", "event_a6", "nulltype"}; + char event_triggered_report_type_text[N_TYPES][50] = {"event_a1", "event_a2", "event_a3", "event_a4", "event_a5", "event_a6"}; logger.debug("report type: %s",event_triggered_report_type_text[event_triggered_report_type]); @@ -2292,10 +2344,9 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: { case options_trigger_quant::rsrp: logger.debug("rsrp threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrp()); - if(get_meas().measurements.rsrp_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrp()) { - send_report(); + send_report(false); } else { @@ -2305,16 +2356,21 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: case options_trigger_quant::rsrq: logger.debug("rsrq threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrq()); - // calculate rsrq, then - // add condition for rsrq > threshold - send_report(); + if(calc_rsrq_db(get_meas()) > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.rsrq()) + { + send_report(false); + } + else + { + logger.debug("rsrq threshold not met"); + } break; case options_trigger_quant::sinr: logger.debug("snr threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.sinr()); if(get_meas().measurements.snr_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a1().a1_thres.sinr()) { - send_report(); + send_report(false); } else { @@ -2335,7 +2391,7 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: logger.debug("rsrp threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrp()); if(get_meas().measurements.rsrp_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrp()) { - send_report(); + send_report(false); } else { @@ -2345,14 +2401,21 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: case options_trigger_quant::rsrq: logger.debug("rsrq threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrq()); - send_report(); + if(calc_rsrq_db(get_meas()) < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.rsrq()) + { + send_report(false); + } + else + { + logger.debug("rsrq threshold not met"); + } break; case options_trigger_quant::sinr: logger.debug("snr threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.sinr()); if(get_meas().measurements.snr_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a2().a2_thres.sinr()) { - send_report(); + send_report(false); } else { @@ -2364,6 +2427,147 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: logger.error("Unknown Trigger Quantity"); } } + else if(event_triggered_report_type == options_report_types::event_a3 || event_triggered_report_type == options_report_types::event_a6) + { + auto trigger_quant_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.type(); + switch(trigger_quant_type) + { + case options_trigger_quant::rsrp: + logger.debug("rsrp offset = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.rsrp()); + if( get_neighbour_meas().measurements.rsrp_dB >= + report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.rsrp() + get_meas().measurements.rsrp_dB) + { + send_report(true); + } + else + { + logger.debug("rsrp offset not met"); + } + break; + + case options_trigger_quant::rsrq: + logger.debug("rsrq offset = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.rsrq()); + if( calc_rsrq_db(get_neighbour_meas()) >= + report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.rsrq() + calc_rsrq_db(get_meas())) + { + send_report(true); + } + else + { + logger.debug("rsrq offset not met"); + } + break; + + case options_trigger_quant::sinr: + logger.debug("snr offset = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.sinr()); + if( get_neighbour_meas().measurements.snr_dB >= + report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a3().a3_offset.sinr() + get_meas().measurements.snr_dB) + { + send_report(true); + } + else + { + logger.debug("snr offset not met"); + } + break; + + default: + logger.error("Unknown Trigger Quantity"); + } + } + else if(event_triggered_report_type == options_report_types::event_a4) + { + auto trigger_quant_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.type(); + switch(trigger_quant_type) + { + case options_trigger_quant::rsrp: + logger.debug("rsrp threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.rsrp()); + if(get_neighbour_meas().measurements.rsrp_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.rsrp()) + { + send_report(true); + } + else + { + logger.debug("rsrp threshold not met"); + } + break; + + case options_trigger_quant::rsrq: + logger.debug("rsrq threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.rsrq()); + if(calc_rsrq_db(get_neighbour_meas()) > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.rsrq()) + { + send_report(true); + } + else + { + logger.debug("rsrq threshold not met"); + } + break; + case options_trigger_quant::sinr: + logger.debug("snr threshold = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.sinr()); + if(get_neighbour_meas().measurements.snr_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a4().a4_thres.sinr()) + { + send_report(true); + } + else + { + logger.debug("snr threshold not met"); + } + break; + default: + logger.error("Unknown Trigger Quantity"); + } + } + else if(event_triggered_report_type == options_report_types::event_a5) + { + auto trigger_quant_type = report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.type(); + switch(trigger_quant_type) + { + case options_trigger_quant::rsrp: + logger.debug("rsrp threshold1 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.rsrp()); + logger.debug("rsrp threshold2 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.rsrp()); + if( get_meas().measurements.rsrp_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.rsrp() && + get_neighbour_meas().measurements.rsrp_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.rsrp()) + { + send_report(true); + } + else + { + logger.debug("rsrp threshold(s) not met"); + } + break; + + case options_trigger_quant::rsrq: + logger.debug("rsrq threshold1 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.rsrq()); + logger.debug("rsrq threshold2 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.rsrq()); + if( calc_rsrq_db(get_meas()) < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.rsrq() && + calc_rsrq_db(get_neighbour_meas()) > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.rsrq()) + { + send_report(true); + } + else + { + logger.debug("rsrq threshold(s) not met"); + } + break; + + case options_trigger_quant::sinr: + logger.debug("snr threshold1 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.sinr()); + logger.debug("snr threshold2 = %d",report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.sinr()); + if( get_meas().measurements.snr_dB < report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres1.sinr() && + get_neighbour_meas().measurements.snr_dB > report_config.report_cfg_nr().report_type.event_triggered().event_id.event_a5().a5_thres2.sinr()) + { + send_report(true); + } + else + { + logger.debug("sinr threshold(s) not met"); + } + break; + default: + logger.error("Unknown Trigger Quantity"); + } + } else { logger.error("Unknown Event Triggered Report Type"); @@ -2383,6 +2587,7 @@ void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) logger.debug("meas cfg size: %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list.size()); logger.debug("cfg type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.type()); // cfgtype: report_cfg_nr + // if multiple report request recieved, check the type of each report // logger.debug("report type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.report_cfg_nr().report_type.type()); // logger.debug("report type1 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[1].report_cfg.report_cfg_nr().report_type.type()); From 6f200dc7cb9b4042615f238e637a8b12cb5ce472 Mon Sep 17 00:00:00 2001 From: bhuvnesh1315 Date: Mon, 2 Jun 2025 19:11:34 +0530 Subject: [PATCH 6/6] code clean up --- srsue/src/stack/rrc_nr/rrc_nr.cc | 39 +++++--------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/srsue/src/stack/rrc_nr/rrc_nr.cc b/srsue/src/stack/rrc_nr/rrc_nr.cc index a3201c31d47..74939a08e0b 100644 --- a/srsue/src/stack/rrc_nr/rrc_nr.cc +++ b/srsue/src/stack/rrc_nr/rrc_nr.cc @@ -36,6 +36,8 @@ namespace srsue { rrc_interface_phy_nr::cell_search_result_t rrc_nr::get_neighbour_meas() { + // This function is used to simulate a neighbour measurement result. + // In a real implementation, this would be replaced with actual measurement data of the neighbour cell. rrc_interface_phy_nr::cell_search_result_t neigh_meas_data; neigh_meas_data.cell_found=true; neigh_meas_data.pci=2; @@ -325,7 +327,6 @@ void rrc_nr::decode_dl_ccch(unique_byte_buffer_t pdu) void rrc_nr::decode_dl_dcch(uint32_t lcid, unique_byte_buffer_t pdu) { - logger.info("Debug checkpoint: decode_dl_dcch"); asn1::cbit_ref bref(pdu->msg, pdu->N_bytes); asn1::rrc_nr::dl_dcch_msg_s dl_dcch_msg; if (dl_dcch_msg.unpack(bref) != asn1::SRSASN_SUCCESS or @@ -336,8 +337,6 @@ void rrc_nr::decode_dl_dcch(uint32_t lcid, unique_byte_buffer_t pdu) log_rrc_message(get_rb_name(lcid), Rx, pdu.get(), dl_dcch_msg, dl_dcch_msg.msg.c1().type().to_string()); dl_dcch_msg_type_c::c1_c_* c1 = &dl_dcch_msg.msg.c1(); - - logger.info("Debug checkpoint: decode_dl_dcch - %d", dl_dcch_msg.msg.c1().type().value); switch (dl_dcch_msg.msg.c1().type().value) { // TODO: ADD missing cases @@ -2214,7 +2213,7 @@ bool rrc_nr::handle_rrc_setup(const rrc_setup_s& setup) logger.debug("Containerized MasterCellGroup: %s", js.to_string().c_str()); state = RRC_NR_STATE_CONNECTED; - srsran::console("NR RRC Connected\n"); + srsran::console("RRC Connected\n"); // defer transmission of Setup Complete until PHY reconfiguration has been completed if (not conn_setup_proc.launch( @@ -2241,18 +2240,14 @@ float rrc_nr::calc_rsrq_db(const rrc_interface_phy_nr::cell_search_result_t meas void rrc_nr::send_report(bool send_neigh_meas) { - logger.debug("Debug Checkpoint: send report1 "); + logger.debug("Sending Measurement Report"); asn1::rrc_nr::ul_dcch_msg_s ul_dcch_msg; - logger.debug("Debug Checkpoint: send report2 "); auto& rrc_reconfig_complete = ul_dcch_msg.msg.set_c1().set_meas_report().crit_exts.set_meas_report(); - logger.debug("Debug Checkpoint: send report3 "); ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_id = 1; // bounds= [1,64] - logger.debug("Debug Checkpoint: send report4 "); meas_result_serv_mo_s mo; meas_result_serv_mo_list_l mo_list; - logger.debug("Debug Checkpoint: send report5 "); logger.debug("pci: %d", get_meas().pci); logger.debug("arfcn: %d", get_meas().ssb_arfcn); @@ -2264,7 +2259,6 @@ void rrc_nr::send_report(bool send_neigh_meas) logger.debug("n0_db: %f dB", get_meas().measurements.n0_dB); logger.debug("snr: %f dB", get_meas().measurements.snr_dB); - mo.ext=true; mo.serv_cell_id = get_meas().pci; // bounds= [0,31] mo.meas_result_serving_cell.pci_present = true; @@ -2279,7 +2273,7 @@ void rrc_nr::send_report(bool send_neigh_meas) if(send_neigh_meas) { - logger.debug("Debug Checkpoint: neighbour cell data"); + logger.debug("Neighbour cell Meas data"); logger.debug("rsrp: %f dB", get_neighbour_meas().measurements.rsrp_dB); logger.debug("rsrq: %f dB", calc_rsrq_db(get_neighbour_meas())); logger.debug("sinr: %f dB", get_neighbour_meas().measurements.snr_dB); @@ -2303,11 +2297,8 @@ void rrc_nr::send_report(bool send_neigh_meas) mo_list.push_back(mo); ul_dcch_msg.msg.c1().set_meas_report().crit_exts.set_meas_report().meas_results.meas_result_serving_mo_list = mo_list; - logger.debug("Debug Checkpoint: send report9 "); send_ul_dcch_msg(srb_to_lcid(nr_srb::srb1), ul_dcch_msg); - logger.debug("Debug Checkpoint: Report Sent "); - } void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_cfg_c_ report_config) @@ -2316,9 +2307,6 @@ void rrc_nr::send_periodic_report(asn1::rrc_nr::report_cfg_to_add_mod_s::report_ auto interval_str=report_config.report_cfg_nr().report_type.periodical().report_interv.to_string(); int interval_int=report_config.report_cfg_nr().report_type.periodical().report_interv.to_number(); - logger.debug("report Interval : %s", interval_str); - logger.debug("report Interval : %d", interval_int); - while(max_report_amount>0) { send_report(false); @@ -2579,19 +2567,6 @@ void rrc_nr::send_event_triggered_report(asn1::rrc_nr::report_cfg_to_add_mod_s:: void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) { - - logger.debug("Debug Checkpoint: rrc reconfig parameters: "); - logger.debug("rrcrecinfig type: %d", reconfig.crit_exts.type()); - - logger.debug("meas cfg present : %d", reconfig.crit_exts.rrc_recfg().meas_cfg_present); - logger.debug("meas cfg size: %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list.size()); - logger.debug("cfg type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.type()); // cfgtype: report_cfg_nr - - - // if multiple report request recieved, check the type of each report - // logger.debug("report type0 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[0].report_cfg.report_cfg_nr().report_type.type()); - // logger.debug("report type1 : %d", reconfig.crit_exts.rrc_recfg().meas_cfg.report_cfg_to_add_mod_list[1].report_cfg.report_cfg_nr().report_type.type()); - transaction_id = reconfig.rrc_transaction_id; if (not conn_recfg_proc.launch(nr, false, reconfig)) { @@ -2614,14 +2589,12 @@ void rrc_nr::handle_rrc_reconfig(const rrc_recfg_s& reconfig) switch(type) { case options::periodical: - logger.debug("Debug Checkpoint: periodic report"); logger.debug("report type: %s", report_type_text[type]); - logger.debug("type: %d", type); send_periodic_report(report_config); break; case options::event_triggered: - logger.debug("Debug Checkpoint: event triggered report"); + logger.debug("report type: %s", report_type_text[type]); send_event_triggered_report(report_config); break;