@ -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);
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;
@ -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