diff options
-rw-r--r-- | src/osmo-bts-sysmo/l1_if.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c index 79fccd96..a83816ea 100644 --- a/src/osmo-bts-sysmo/l1_if.c +++ b/src/osmo-bts-sysmo/l1_if.c @@ -897,12 +897,14 @@ static void dump_meas_res(int ll, GsmL1_MeasParam_t *m) } static int process_meas_res(struct gsm_bts_trx *trx, uint8_t chan_nr, - uint32_t fn, GsmL1_MeasParam_t *m) + uint32_t fn, GsmL1_PhDataInd_t *data_ind) { struct osmo_phsap_prim l1sap; memset(&l1sap, 0, sizeof(l1sap)); osmo_prim_init(&l1sap.oph, SAP_GSM_PH, PRIM_MPH_INFO, PRIM_OP_INDICATION, NULL); + GsmL1_MeasParam_t *m = &data_ind->measParam; + l1sap.u.info.type = PRIM_INFO_MEAS; l1sap.u.info.u.meas_ind.chan_nr = chan_nr; l1sap.u.info.u.meas_ind.ta_offs_qbits = m->i16BurstTiming; @@ -914,6 +916,12 @@ static int process_meas_res(struct gsm_bts_trx *trx, uint8_t chan_nr, * to compensate for that delay. */ l1sap.u.info.u.meas_ind.fn = fn + 3; + /* Align frame number with measurement period ends */ + if (data_ind->sapi == GsmL1_Sapi_TchF) + l1sap.u.info.u.meas_ind.fn += 1; + else if (data_ind->sapi == GsmL1_Sapi_TchH && data_ind->subCh == GsmL1_SubCh_0) + l1sap.u.info.u.meas_ind.fn += 1; + /* l1sap wants to take msgb ownership. However, as there is no * msg, it will msgb_free(l1sap.oph.msg == NULL) */ return l1sap_up(trx, &l1sap); @@ -941,7 +949,7 @@ static int handle_ph_data_ind(struct femtol1_hdl *fl1, GsmL1_PhDataInd_t *data_i fn = data_ind->u32Fn; link_id = (data_ind->sapi == GsmL1_Sapi_Sacch) ? LID_SACCH : LID_DEDIC; - process_meas_res(trx, chan_nr, fn, &data_ind->measParam); + process_meas_res(trx, chan_nr, fn, data_ind); if (data_ind->measParam.fLinkQuality < btsb->min_qual_norm && data_ind->msgUnitParam.u8Size != 0) { |