Search for a cell.
Returns true if a cell has been found and the MIB could be decoded, false otherwise.
83 std::array<srslte_ue_cellsearch_result_t, kMaxCellsToDiscover> found_cells = {0};
85 uint32_t max_peak_cell = 0;
86 int ret = srslte_ue_cellsearch_scan(&_cell_search, found_cells.data(), &max_peak_cell);
88 spdlog::error(
"Phy: Error decoding MIB: Error searching PSS\n");
92 spdlog::error(
"Phy: Could not find any cell in this frequency\n");
96 srslte_cell_t new_cell = {};
97 new_cell.id = found_cells.at(max_peak_cell).cell_id;
98 new_cell.cp = found_cells.at(max_peak_cell).cp;
99 new_cell.frame_type = found_cells.at(max_peak_cell).frame_type;
100 new_cell.mbms_dedicated =
true;
101 float cfo = found_cells.at(max_peak_cell).cfo;
103 spdlog::info(
"Phy: PSS/SSS detected: Mode {}, PCI {}, CFO {} KHz, CP {}",
104 new_cell.frame_type != 0U ?
"TDD" :
"FDD", new_cell.id,
105 cfo / 1000, srslte_cp_string(new_cell.cp));
107 if (srslte_ue_mib_sync_set_cell_prb(&_mib_sync, new_cell, _cs_nof_prb) != 0) {
108 spdlog::error(
"Phy: Error setting UE MIB sync cell");
112 srslte_ue_sync_reset(&_mib_sync.ue_sync);
114 std::array<uint8_t, SRSLTE_BCH_PAYLOAD_LEN> bch_payload = {};
117 ret = srslte_ue_mib_sync_decode_prb(&_mib_sync, 40, bch_payload.data(), &new_cell.nof_ports, &sfn_offset, _cs_nof_prb);
120 srslte_pbch_mib_mbms_unpack(bch_payload.data(), &new_cell, &sfn,
nullptr,
124 "Phy: MIB Decoded. Mode {}, PCI {}, PRB {}, Ports {}, CFO {} KHz, SFN "
126 new_cell.frame_type != 0u ?
"TDD" :
"FDD", new_cell.id,
127 new_cell.nof_prb, new_cell.nof_ports,
cfo / 1000, sfn);
129 if (!srslte_cell_isvalid(&new_cell)) {
130 spdlog::error(
"SYNC: Detected invalid cell.\n");
135 _cell.mbsfn_prb = _cell.nof_prb;
137 if (srslte_ue_sync_set_cell(&_ue_sync,
cell()) != 0) {
138 spdlog::error(
"Phy: failed to set cell.\n");
141 if (srslte_ue_mib_set_cell(&_mib,
cell()) != 0) {
142 spdlog::error(
"Phy: Error setting UE MIB cell");
149 spdlog::error(
"Phy: failed to receive MIB\n");