ensure sibs are acquired if cell selection calls cell search

master
Francisco Paisana 4 years ago
parent af3ff5985e
commit 8a9a95a937

@ -149,8 +149,8 @@ private:
bool serv_cell_select_attempted = false;
srslte::proc_future_t<rrc_interface_phy_lte::cell_search_ret_t> cell_search_fut;
srslte::proc_future_t<void> serv_cell_cfg_fut;
bool discard_serving = false;
std::vector<uint32_t> required_sibs = {};
bool discard_serving = false, cell_search_called = false;
std::vector<uint32_t> required_sibs = {};
};
class rrc::plmn_search_proc

@ -481,8 +481,11 @@ proc_outcome_t rrc::cell_selection_proc::init(std::vector<uint32_t> required_sib
} else {
required_sibs = std::move(required_sibs_);
}
neigh_index = 0;
cs_result = cs_result_t::no_cell;
neigh_index = 0;
cs_result = cs_result_t::no_cell;
discard_serving = false;
serv_cell_select_attempted = false;
cell_search_called = false;
if (serv_cell_is_ok) {
state = search_state_t::cell_config;
if (not rrc_ptr->serv_cell_cfg.launch(&serv_cell_cfg_fut, required_sibs)) {
@ -491,9 +494,7 @@ proc_outcome_t rrc::cell_selection_proc::init(std::vector<uint32_t> required_sib
}
return proc_outcome_t::yield;
}
state = search_state_t::cell_selection;
discard_serving = false;
serv_cell_select_attempted = false;
state = search_state_t::cell_selection;
return start_cell_selection();
}
@ -576,12 +577,16 @@ proc_outcome_t rrc::cell_selection_proc::start_cell_selection()
}
// If any of the known cells meets the selection criteria or could not be selected, search again.
Info("Could not select any known cell. Searching new cells\n");
if (not rrc_ptr->cell_searcher.launch(&cell_search_fut)) {
return proc_outcome_t::error;
if (not cell_search_called) {
Info("Could not select any known cell. Searching new cells\n");
state = search_state_t::cell_search;
cell_search_called = true;
if (not rrc_ptr->cell_searcher.launch(&cell_search_fut)) {
return proc_outcome_t::error;
}
return step();
}
state = search_state_t::cell_search;
return step();
return proc_outcome_t::error;
}
proc_outcome_t rrc::cell_selection_proc::step_cell_selection(const bool& cs_ret)
@ -634,6 +639,14 @@ proc_outcome_t rrc::cell_selection_proc::step_cell_search()
}
cs_result = (cell_search_fut.value()->found == cell_search_ret_t::CELL_FOUND) ? cs_result_t::changed_cell
: cs_result_t::no_cell;
if (rrc_ptr->cell_selection_criteria(rrc_ptr->meas_cells.serving_cell().get_rsrp())) {
Info("PHY is in SYNC and cell selection passed.\n");
state = search_state_t::cell_config;
if (not rrc_ptr->serv_cell_cfg.launch(&serv_cell_cfg_fut, required_sibs)) {
return proc_outcome_t::error;
}
return proc_outcome_t::yield;
}
Info("Cell Search of cell selection run successfully\n");
return proc_outcome_t::success;
}

Loading…
Cancel
Save