mirror of https://github.com/PentHertz/srsLTE.git
Unpack MIB to update MIB
This commit is contained in:
parent
ae0fb4f4fc
commit
65255ecb4e
|
@ -120,6 +120,37 @@ static void ue_sync_nr_apply_feedback(srsran_ue_sync_nr_t* q)
|
||||||
ue_sync_nr_reset_feedback(q);
|
ue_sync_nr_reset_feedback(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ue_sync_nr_update_ssb(srsran_ue_sync_nr_t* q,
|
||||||
|
const srsran_csi_trs_measurements_t* measurements,
|
||||||
|
const srsran_pbch_msg_nr_t* pbch_msg)
|
||||||
|
{
|
||||||
|
srsran_mib_nr_t mib = {};
|
||||||
|
if (srsran_pbch_msg_nr_mib_unpack(pbch_msg, &mib) != SRSRAN_SUCCESS) {
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset feedback to prevent any previous erroneous measurement
|
||||||
|
ue_sync_nr_reset_feedback(q);
|
||||||
|
|
||||||
|
// Set feedback measurement
|
||||||
|
srsran_combine_csi_trs_measurements(&q->feedback, measurements, &q->feedback);
|
||||||
|
|
||||||
|
// Apply feedback
|
||||||
|
ue_sync_nr_apply_feedback(q);
|
||||||
|
|
||||||
|
// Setup context
|
||||||
|
q->ssb_idx = pbch_msg->ssb_idx;
|
||||||
|
q->sf_idx = srsran_ssb_candidate_sf_idx(&q->ssb, pbch_msg->ssb_idx, pbch_msg->hrf);
|
||||||
|
q->sfn = mib.sfn;
|
||||||
|
|
||||||
|
// Transition to track only if the measured delay is below 2.4 microseconds
|
||||||
|
if (measurements->delay_us < 2.4f) {
|
||||||
|
q->state = SRSRAN_UE_SYNC_NR_STATE_TRACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int ue_sync_nr_run_find(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
static int ue_sync_nr_run_find(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
||||||
{
|
{
|
||||||
srsran_csi_trs_measurements_t measurements = {};
|
srsran_csi_trs_measurements_t measurements = {};
|
||||||
|
@ -136,26 +167,7 @@ static int ue_sync_nr_run_find(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
||||||
return SRSRAN_SUCCESS;
|
return SRSRAN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset feedback to prevent any previous erroneous measurement
|
return ue_sync_nr_update_ssb(q, &measurements, &pbch_msg);
|
||||||
ue_sync_nr_reset_feedback(q);
|
|
||||||
|
|
||||||
// Set feedback measurement
|
|
||||||
srsran_combine_csi_trs_measurements(&q->feedback, &measurements, &q->feedback);
|
|
||||||
|
|
||||||
// Apply feedback
|
|
||||||
ue_sync_nr_apply_feedback(q);
|
|
||||||
|
|
||||||
// Setup context
|
|
||||||
q->ssb_idx = pbch_msg.ssb_idx;
|
|
||||||
q->sf_idx = srsran_ssb_candidate_sf_idx(&q->ssb, pbch_msg.ssb_idx, pbch_msg.hrf);
|
|
||||||
q->sfn = pbch_msg.sfn_4lsb;
|
|
||||||
|
|
||||||
// Transition to track only if the measured delay is below 2.4 microseconds
|
|
||||||
if (measurements.delay_us < 2.4f) {
|
|
||||||
q->state = SRSRAN_UE_SYNC_NR_STATE_TRACK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SRSRAN_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ue_sync_nr_run_track(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
static int ue_sync_nr_run_track(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
||||||
|
@ -173,27 +185,23 @@ static int ue_sync_nr_run_track(srsran_ue_sync_nr_t* q, cf_t* buffer)
|
||||||
is_ssb_opportunity = is_ssb_opportunity && (half_frame == 0) && (q->sfn % q->ssb.cfg.periodicity_ms / 10 == 0);
|
is_ssb_opportunity = is_ssb_opportunity && (half_frame == 0) && (q->sfn % q->ssb.cfg.periodicity_ms / 10 == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_ssb_opportunity) {
|
if (!is_ssb_opportunity) {
|
||||||
// Measure PSS/SSS and decode PBCH
|
return SRSRAN_SUCCESS;
|
||||||
if (srsran_ssb_track(&q->ssb, buffer, q->N_id, q->ssb_idx, half_frame, &measurements, &pbch_msg) < SRSRAN_SUCCESS) {
|
|
||||||
ERROR("Error finding SSB");
|
|
||||||
return SRSRAN_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the PBCH message was NOT decoded, transition to find
|
|
||||||
if (!pbch_msg.crc) {
|
|
||||||
q->state = SRSRAN_UE_SYNC_NR_STATE_FIND;
|
|
||||||
return SRSRAN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise feedback measurements and apply
|
|
||||||
srsran_combine_csi_trs_measurements(&q->feedback, &measurements, &q->feedback);
|
|
||||||
|
|
||||||
// Apply accumulated feedback
|
|
||||||
ue_sync_nr_apply_feedback(q);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return SRSRAN_SUCCESS;
|
// Measure PSS/SSS and decode PBCH
|
||||||
|
if (srsran_ssb_track(&q->ssb, buffer, q->N_id, q->ssb_idx, half_frame, &measurements, &pbch_msg) < SRSRAN_SUCCESS) {
|
||||||
|
ERROR("Error finding SSB");
|
||||||
|
return SRSRAN_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the PBCH message was NOT decoded, transition to find
|
||||||
|
if (!pbch_msg.crc) {
|
||||||
|
q->state = SRSRAN_UE_SYNC_NR_STATE_FIND;
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ue_sync_nr_update_ssb(q, &measurements, &pbch_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ue_sync_nr_recv(srsran_ue_sync_nr_t* q, cf_t** buffer, srsran_timestamp_t* timestamp)
|
static int ue_sync_nr_recv(srsran_ue_sync_nr_t* q, cf_t** buffer, srsran_timestamp_t* timestamp)
|
||||||
|
|
Loading…
Reference in New Issue