aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-sysmo/l1_if.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osmo-bts-sysmo/l1_if.c')
-rw-r--r--src/osmo-bts-sysmo/l1_if.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c
index ea7fc93b..8820f083 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -897,7 +897,7 @@ 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,
- GsmL1_MeasParam_t *m)
+ uint32_t fn, GsmL1_MeasParam_t *m)
{
struct osmo_phsap_prim l1sap;
memset(&l1sap, 0, sizeof(l1sap));
@@ -909,6 +909,11 @@ static int process_meas_res(struct gsm_bts_trx *trx, uint8_t chan_nr,
l1sap.u.info.u.meas_ind.ber10k = (unsigned int) (m->fBer * 100);
l1sap.u.info.u.meas_ind.inv_rssi = (uint8_t) (m->fRssi * -1);
+ /* The MEAS IND data structure expects a logical frame number. On the
+ * physical radio link, the uplink is delayed by 3 timeslots, we need
+ * to compensate for that delay. */
+ l1sap.u.info.u.meas_ind.fn = fn + 3;
+
/* 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);
@@ -936,7 +941,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, &data_ind->measParam);
+ process_meas_res(trx, chan_nr, fn, &data_ind->measParam);
if (data_ind->measParam.fLinkQuality < btsb->min_qual_norm
&& data_ind->msgUnitParam.u8Size != 0) {