aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-08-31 20:30:40 +0200
committerHarald Welte <laforge@gnumonks.org>2015-09-22 16:39:04 +0200
commit5027e122a885eab21772706d39915464c887150d (patch)
treed404f32962278be9d6a4bda3be34152e94ff59aa
parenta313bb0a476aca8570abea3592dbe7593d11ecc9 (diff)
Add MEAS (MPH_INFO) IND message to PH-/MPH-/TCH-SAP interface
This part moves processing of measurement infos from osmo-bts-sysmo to common part.
-rw-r--r--src/common/l1sap.c32
-rw-r--r--src/osmo-bts-sysmo/l1_if.c26
2 files changed, 45 insertions, 13 deletions
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index d165639a..b9d5a2d0 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -155,6 +155,35 @@ static int l1sap_info_time_ind(struct gsm_bts_trx *trx,
return 0;
}
+/* measurement information received from bts model */
+static int l1sap_info_meas_ind(struct gsm_bts_trx *trx,
+ struct osmo_phsap_prim *l1sap,
+ struct info_meas_ind_param *info_meas_ind)
+{
+ struct bts_ul_meas ulm;
+ struct gsm_lchan *lchan;
+
+ DEBUGP(DL1P, "MPH_INFO meas ind chan_nr=%02x\n",
+ info_meas_ind->chan_nr);
+
+ lchan = &trx->ts[L1SAP_CHAN2TS(info_meas_ind->chan_nr)]
+ .lchan[l1sap_chan2ss(info_meas_ind->chan_nr)];
+
+ /* in the GPRS case we are not interested in measurement
+ * processing. The PCU will take care of it */
+ if (lchan->type == GSM_LCHAN_PDTCH)
+ return 0;
+
+ memset(&ulm, 0, sizeof(ulm));
+ ulm.ta_offs_qbits = info_meas_ind->ta_offs_qbits;
+ ulm.ber10k = info_meas_ind->ber10k;
+ ulm.inv_rssi = info_meas_ind->inv_rssi;
+
+ lchan_new_ul_meas(lchan, &ulm);
+
+ return 0;
+}
+
/* any L1 MPH_INFO indication prim recevied from bts model */
static int l1sap_mph_info_ind(struct gsm_bts_trx *trx,
struct osmo_phsap_prim *l1sap, struct mph_info_param *info)
@@ -165,6 +194,9 @@ static int l1sap_mph_info_ind(struct gsm_bts_trx *trx,
case PRIM_INFO_TIME:
rc = l1sap_info_time_ind(trx, l1sap, &info->u.time_ind);
break;
+ case PRIM_INFO_MEAS:
+ rc = l1sap_info_meas_ind(trx, l1sap, &info->u.meas_ind);
+ break;
default:
LOGP(DL1P, LOGL_NOTICE, "unknown MPH_INFO ind type %d\n",
info->type);
diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c
index 30eb2669..810ec6d4 100644
--- a/src/osmo-bts-sysmo/l1_if.c
+++ b/src/osmo-bts-sysmo/l1_if.c
@@ -908,20 +908,20 @@ static void dump_meas_res(int ll, GsmL1_MeasParam_t *m)
m->fBer, m->i16BurstTiming);
}
-static int process_meas_res(struct gsm_lchan *lchan, GsmL1_MeasParam_t *m)
+static int process_meas_res(struct gsm_bts_trx *trx, uint8_t chan_nr,
+ GsmL1_MeasParam_t *m)
{
- struct bts_ul_meas ulm;
-
- /* in the GPRS case we are not interested in measurement
- * processing. The PCU will take care of it */
- if (lchan->type == GSM_LCHAN_PDTCH)
- return 0;
-
- ulm.ta_offs_qbits = m->i16BurstTiming;
- ulm.ber10k = (unsigned int) (m->fBer * 100);
- ulm.inv_rssi = (uint8_t) (m->fRssi * -1);
+ 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);
+ 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;
+ 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);
- return lchan_new_ul_meas(lchan, &ulm);
+ return l1sap_up(trx, &l1sap);
}
static int handle_ph_data_ind(struct femtol1_hdl *fl1, GsmL1_PhDataInd_t *data_ind,
@@ -957,7 +957,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) ? 0x40 : 0x00;
- process_meas_res(lchan, &data_ind->measParam);
+ process_meas_res(trx, chan_nr, &data_ind->measParam);
if (data_ind->measParam.fLinkQuality < fl1->min_qual_norm
&& data_ind->msgUnitParam.u8Size != 0) {