diff --git a/lib/src/phy/rf/rf_uhd_imp.c b/lib/src/phy/rf/rf_uhd_imp.c index 618d4577f..1c09b7990 100644 --- a/lib/src/phy/rf/rf_uhd_imp.c +++ b/lib/src/phy/rf/rf_uhd_imp.c @@ -772,7 +772,6 @@ int rf_uhd_recv_with_time_multi(void *h, trials++; if (error_code == UHD_RX_METADATA_ERROR_CODE_OVERFLOW) { - printf("OVERFLOW\n"); log_overflow(handler); } else if (error_code == UHD_RX_METADATA_ERROR_CODE_LATE_COMMAND) { log_late(handler, true); diff --git a/srsue/hdr/phy/phch_recv.h b/srsue/hdr/phy/phch_recv.h index 4cabf660f..faff85ca7 100644 --- a/srsue/hdr/phy/phch_recv.h +++ b/srsue/hdr/phy/phch_recv.h @@ -259,7 +259,6 @@ private: bool running; // Objects for internal use - measure measure_p; search search_p; sfn_sync sfn_p; intra_measure intra_freq_meas; diff --git a/srsue/src/phy/phch_recv.cc b/srsue/src/phy/phch_recv.cc index fc36760e0..9d24160e0 100644 --- a/srsue/src/phy/phch_recv.cc +++ b/srsue/src/phy/phch_recv.cc @@ -26,6 +26,8 @@ #include #include +#include +#include #include "srslte/srslte.h" #include "srslte/common/log.h" #include "srsue/hdr/phy/phch_worker.h" @@ -90,9 +92,6 @@ void phch_recv::init(srslte::radio_multi *_radio_handler, mac_interface_phy *_ma // Initialize SFN synchronizer sfn_p.init(&ue_sync, sf_buffer, log_h); - // Initialize measurement class for the primary cell - measure_p.init(sf_buffer, log_h, nof_rx_antennas); - // Start intra-frequency measurement intra_freq_meas.init(worker_com, rrc, log_h); @@ -137,7 +136,6 @@ void phch_recv::reset() srate_mode = SRATE_NONE; current_earfcn = -1; sfn_p.reset(); - measure_p.reset(); search_p.reset(); phy_state.go_idle(); @@ -289,7 +287,6 @@ bool phch_recv::cell_select(phy_interface_rrc::phy_cell_t *new_cell) { worker_com->reset(); sfn_p.reset(); search_p.reset(); - measure_p.reset(); srslte_ue_sync_reset(&ue_sync); /* Reconfigure cell if necessary */ @@ -351,8 +348,7 @@ bool phch_recv::cell_is_camping() { * * It has 3 states: Cell search, SFN syncrhonization, intial measurement and camping. * - CELL_SEARCH: Initial Cell id and MIB acquisition. Uses 1.92 MHz sampling rate - * - CELL_SFN_SYNC: Full sampling rate, uses MIB to obtain SFN. When SFN is obtained, moves to CELL_MEASURE or CELL_CAMP - * - CELL_MEASURE: RSRP/SNR measurement to determine suitability for camping. + * - CELL_SYNC: Full sampling rate, uses MIB to obtain SFN. When SFN is obtained, moves to CELL_CAMP * - CELL_CAMP: Cell camping state. Calls the PHCH workers to process subframes and mantains cell synchronization. * - IDLE: Receives and discards received samples. Does not mantain synchronization. * @@ -550,7 +546,6 @@ void phch_recv::run_thread() * */ void phch_recv::radio_overflow() { - log_h->warning("Overflow\n"); radio_is_overflow = true; } @@ -677,7 +672,6 @@ bool phch_recv::set_cell() { Error("SYNC: Setting cell: initiating ue_sync\n"); return false; } - measure_p.set_cell(cell); sfn_p.set_cell(cell); worker_com->set_cell(cell); intra_freq_meas.set_primay_cell(current_earfcn, cell); @@ -1075,6 +1069,7 @@ void phch_recv::measure::init(cf_t *buffer[SRSLTE_MAX_PORTS], srslte::log *log_h Error("SYNC: Initiating ue_dl_measure\n"); return; } + srslte_chest_dl_set_rsrp_neighbour(&ue_dl.chest, true); reset(); } @@ -1148,6 +1143,7 @@ phch_recv::measure::ret_code phch_recv::measure::run_multiple_subframes(cf_t *in offset = offset-sf_len/2; while (offset < 0 && sf_idx < max_sf) { + Info("INTRA: offset=%d, sf_idx=%d\n", offset, sf_idx); offset += sf_len; sf_idx ++; } @@ -1205,6 +1201,7 @@ phch_recv::measure::ret_code phch_recv::measure::run_multiple_subframes(cf_t *in } } else { Info("INTRA: not running because offset=%d, sf_len*max_sf=%d*%d\n", offset, sf_len, max_sf); + ret = ERROR; } return ret; } @@ -1372,7 +1369,7 @@ int phch_recv::scell_recv::find_cells(cf_t *input_buffer, float rx_gain_offset, if (cell_id >= 0) { // We found the same cell as before, look another N_id_2 if ((uint32_t) cell_id == found_cell.id || (uint32_t) cell_id == cell.id) { - Info("n_id_2=%d, PCI=%d, found_cell.id=%d, cell.id=%d\n", n_id_2, cell_id, found_cell.id, cell.id); + Debug("INTRA: n_id_2=%d, PCI=%d, found_cell.id=%d, cell.id=%d\n", n_id_2, cell_id, found_cell.id, cell.id); sync_res = SRSLTE_SYNC_NOFOUND; } else { // We found a new cell ID @@ -1390,7 +1387,7 @@ int phch_recv::scell_recv::find_cells(cf_t *input_buffer, float rx_gain_offset, switch(measure_p.run_multiple_subframes(input_buffer, peak_idx, sf_idx, nof_sf)) { - case measure::MEASURE_OK: + default: // Consider a cell to be detectable 8.1.2.2.1.1 from 36.133. Currently only using first condition if (measure_p.rsrp() > ABSOLUTE_RSRP_THRESHOLD_DBM) { cells[nof_cells].pci = found_cell.id; @@ -1409,13 +1406,13 @@ int phch_recv::scell_recv::find_cells(cf_t *input_buffer, float rx_gain_offset, if (sic_pss_enabled) { srslte_pss_sic(&sync_find.pss, &input_buffer[sf5_cnt * 5 * sf_len + sf_len / 2 - fft_sz]); }*/ + } else { + Info("INTRA: Found neighbour cell but RSRP=%.1f dBm is below threshold (%.1f dBm)\n", + measure_p.rsrp(), ABSOLUTE_RSRP_THRESHOLD_DBM); } break; - default: - Info("INTRA: Not enough samples to measure PCI=%d\n", cell_id); - break; case measure::ERROR: - Error("Measuring neighbour cell\n"); + Error("INTRA: Measuring neighbour cell\n"); return SRSLTE_ERROR; } } diff --git a/srsue/src/ue.cc b/srsue/src/ue.cc index 6c87b3c17..8c10f9a51 100644 --- a/srsue/src/ue.cc +++ b/srsue/src/ue.cc @@ -282,7 +282,7 @@ bool ue::deattach() { bool ue::is_attached() { - return nas.is_attached(); + return rrc.is_connected(); } void ue::start_plot() { diff --git a/srsue/src/upper/gw.cc b/srsue/src/upper/gw.cc index 0201cfe14..c4b482b92 100644 --- a/srsue/src/upper/gw.cc +++ b/srsue/src/upper/gw.cc @@ -280,7 +280,7 @@ void gw::run_thread() if (!attach_wait) { gw_log->info("LCID=%d not active, requesting NAS attach (%d/%d)\n", cfg.lcid, attach_wait, ATTACH_WAIT_TOUT); if (!nas->attach_request()) { - gw_log->console("Could not re-establish the connection\n"); + gw_log->info("Could not re-establish the connection\n"); break; } } diff --git a/srsue/src/upper/rrc.cc b/srsue/src/upper/rrc.cc index cb30c5eef..089e80f7c 100644 --- a/srsue/src/upper/rrc.cc +++ b/srsue/src/upper/rrc.cc @@ -470,16 +470,21 @@ bool rrc::configure_serving_cell() { * Queue the values of the measurements and process them from the RRC thread */ void rrc::new_phy_meas(float rsrp, float rsrq, uint32_t tti, int earfcn_i, int pci_i) { + uint32_t pci = 0; + uint32_t earfcn = 0; if (earfcn_i < 0) { - earfcn_i = (int) serving_cell->get_earfcn(); + earfcn = (uint32_t) serving_cell->get_earfcn(); + } else { + earfcn = (uint32_t) earfcn_i; } if (pci_i < 0) { - pci_i = (int) serving_cell->get_pci(); + pci = (uint32_t) serving_cell->get_pci(); + } else { + pci = (uint32_t) pci_i; } - - phy_meas_t new_meas = {rsrp, rsrq, tti, (uint32_t) earfcn_i, (uint32_t) pci_i}; + phy_meas_t new_meas = {rsrp, rsrq, tti, earfcn, pci}; phy_meas_q.push(new_meas); - rrc_log->info("MEAS: New measurement pci=%d, rsrp=%.1f dBm.\n", pci_i, rsrp); + rrc_log->info("MEAS: New measurement pci=%d, rsrp=%.1f dBm.\n", pci, rsrp); } /* Processes all pending PHY measurements in queue. Must be called from a mutexed function @@ -1311,6 +1316,9 @@ bool rrc::ho_prepare() { neighbour_cells[target_cell_idx]->get_pci()); return false; } + + set_serving_cell(target_cell_idx); + if (mob_reconf.mob_ctrl_info.rach_cnfg_ded_present) { rrc_log->info("Starting non-contention based RA with preamble_idx=%d, mask_idx=%d\n", mob_reconf.mob_ctrl_info.rach_cnfg_ded.preamble_index,