aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/osmo-bts-sysmo/l1_if.c12
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) {