sib acquiring is failing for sib2

master
Francisco Paisana 5 years ago committed by Andre Puschmann
parent c29f08d8d5
commit 925ac862cb

@ -152,11 +152,7 @@ public:
float get_rsrp() { return rsrp; } float get_rsrp() { return rsrp; }
float get_rsrq() { return rsrq; } float get_rsrq() { return rsrq; }
void set_sib1(asn1::rrc::sib_type1_s* sib1_) void set_sib1(asn1::rrc::sib_type1_s* sib1_);
{
sib1 = *sib1_;
has_valid_sib1 = true;
}
void set_sib2(asn1::rrc::sib_type2_s* sib2_) void set_sib2(asn1::rrc::sib_type2_s* sib2_)
{ {
sib2 = *sib2_; sib2 = *sib2_;
@ -259,6 +255,8 @@ public:
return std::string{buf}; return std::string{buf};
} }
bool is_sib_scheduled(uint32_t sib_index) const;
phy_interface_rrc_lte::phy_cell_t phy_cell = {}; phy_interface_rrc_lte::phy_cell_t phy_cell = {};
bool has_mcch = false; bool has_mcch = false;
asn1::rrc::sib_type1_s sib1; asn1::rrc::sib_type1_s sib1;
@ -273,10 +271,11 @@ private:
struct timeval last_update = {}; struct timeval last_update = {};
bool has_valid_sib1 = false; bool has_valid_sib1 = false;
bool has_valid_sib2 = false; bool has_valid_sib2 = false;
bool has_valid_sib3 = false; bool has_valid_sib3 = false;
bool has_valid_sib13 = false; bool has_valid_sib13 = false;
std::map<uint32_t, uint32_t> sib_info_map; ///< map of sib_index to index of schedInfoList in SIB1
}; };
class rrc : public rrc_interface_nas, class rrc : public rrc_interface_nas,

@ -45,6 +45,24 @@ namespace srsue {
const static uint32_t NOF_REQUIRED_SIBS = 4; const static uint32_t NOF_REQUIRED_SIBS = 4;
const static uint32_t required_sibs[NOF_REQUIRED_SIBS] = {0, 1, 2, 12}; // SIB1, SIB2, SIB3 and SIB13 (eMBMS) const static uint32_t required_sibs[NOF_REQUIRED_SIBS] = {0, 1, 2, 12}; // SIB1, SIB2, SIB3 and SIB13 (eMBMS)
void cell_t::set_sib1(asn1::rrc::sib_type1_s* sib1_)
{
sib1 = *sib1_;
has_valid_sib1 = true;
sib_info_map.clear();
for (uint32_t i = 0; i < sib1.sched_info_list.size(); ++i) {
for (uint32_t j = 0; j < sib1.sched_info_list[i].sib_map_info.size(); ++j) {
sib_info_map.insert(std::make_pair(sib1.sched_info_list[i].sib_map_info[j].to_number() - 1, i));
}
}
}
bool cell_t::is_sib_scheduled(uint32_t sib_index) const
{
return sib_info_map.find(sib_index) != sib_info_map.end();
}
/******************************************************************************* /*******************************************************************************
Base functions Base functions
*******************************************************************************/ *******************************************************************************/

@ -379,8 +379,8 @@ srslte::proc_outcome_t rrc::serving_cell_config_proc::launch_sib_acquire()
// Obtain the SIBs if not available or apply the configuration if available // Obtain the SIBs if not available or apply the configuration if available
for (; req_idx < required_sibs.size(); req_idx++) { for (; req_idx < required_sibs.size(); req_idx++) {
uint32_t required_sib = required_sibs[req_idx]; uint32_t required_sib = required_sibs[req_idx];
if (not rrc_ptr->serving_cell->has_sib(required_sib) and
if (not rrc_ptr->serving_cell->has_sib(required_sib)) { (required_sib < 2 or rrc_ptr->serving_cell->is_sib_scheduled(required_sib))) {
Info("Cell has no SIB%d. Obtaining SIB%d\n", required_sib + 1, required_sib + 1); Info("Cell has no SIB%d. Obtaining SIB%d\n", required_sib + 1, required_sib + 1);
if (not rrc_ptr->si_acquirer.launch(&si_acquire_fut, required_sib)) { if (not rrc_ptr->si_acquirer.launch(&si_acquire_fut, required_sib)) {
Error("SI Acquire is already running...\n"); Error("SI Acquire is already running...\n");

Loading…
Cancel
Save