Recover on radio overflow

master
Ismael Gomez 7 years ago
parent 45ea443377
commit 348117df3c

@ -78,6 +78,7 @@ public:
void set_earfcn(std::vector<uint32_t> earfcns);
void force_freq(float dl_freq, float ul_freq);
void radio_overflow();
/********** RRC INTERFACE ********************/
void reset();

@ -73,13 +73,14 @@ public:
void start_plot();
static void rf_msg(srslte_rf_error_t error);
void handle_rf_msg(srslte_rf_error_t error);
// UE metrics interface
bool get_metrics(ue_metrics_t &m);
void pregenerate_signals(bool enable);
void radio_overflow();
private:
virtual ~ue();

@ -156,6 +156,8 @@ public:
virtual void stop() = 0;
virtual bool is_attached() = 0;
virtual void start_plot() = 0;
virtual void radio_overflow() = 0;
void handle_rf_msg(srslte_rf_error_t error);

@ -296,15 +296,17 @@ bool phch_recv::stop_sync() {
usleep(10000);
cnt++;
}
if (!is_in_idle) {
Warning("SYNC: Could not go to IDLE\n");
}
return is_in_idle;
}
}
void phch_recv::reset_sync() {
wait_radio_reset();
Warning("SYNC: Resetting sync, cell_search_in_progress=%s\n", cell_search_in_progress?"yes":"no");
search_p.reset();
srslte_ue_sync_reset(&ue_sync);
resync_sfn(true, true);

@ -352,6 +352,11 @@ int phy::prach_tx_tti()
return prach_buffer.tx_tti();
}
// Handle the case of a radio overflow. Resynchronise inmediatly
void phy::radio_overflow() {
sf_recv.reset_sync();
}
void phy::reset()
{
Info("Resetting PHY\n");

@ -297,10 +297,17 @@ bool ue::get_metrics(ue_metrics_t &m)
return false;
}
void ue::radio_overflow() {
phy.radio_overflow();
}
void ue::rf_msg(srslte_rf_error_t error)
{
ue_base *ue = ue_base::get_instance(LTE);
ue->handle_rf_msg(error);
if(error.type == srslte_rf_error_t::SRSLTE_RF_ERROR_OVERFLOW) {
ue->radio_overflow();
}
}
} // namespace srsue

Loading…
Cancel
Save