aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-octphy/l1_tch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osmo-bts-octphy/l1_tch.c')
-rw-r--r--src/osmo-bts-octphy/l1_tch.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/osmo-bts-octphy/l1_tch.c b/src/osmo-bts-octphy/l1_tch.c
index 79bf245b..38fb9fb6 100644
--- a/src/osmo-bts-octphy/l1_tch.c
+++ b/src/osmo-bts-octphy/l1_tch.c
@@ -188,16 +188,25 @@ int l1if_tch_rx(struct gsm_bts_trx *trx, uint8_t chan_nr,
uint32_t payload_type = data_ind->Data.ulPayloadType;
uint8_t *payload = data_ind->Data.abyDataContent;
+ uint16_t b_total = data_ind->MeasurementInfo.usBERTotalBitCnt;
+ uint16_t b_error = data_ind->MeasurementInfo.usBERCnt;
+ uint16_t ber10k = b_total ? BER_10K * b_error / b_total : 0;
+ int16_t lqual_cb = 0; /* FIXME: check min_qual_norm! */
+
uint8_t payload_len;
struct msgb *rmsg = NULL;
struct gsm_lchan *lchan =
&trx->ts[L1SAP_CHAN2TS(chan_nr)].lchan[l1sap_chan2ss(chan_nr)];
if (data_ind->Data.ulDataLength < 1) {
- LOGP(DL1C, LOGL_DEBUG, "chan_nr %d Rx Payload size 0\n",
- chan_nr);
- return -EINVAL;
+ LOGP(DL1P, LOGL_DEBUG, "chan_nr %d Rx Payload size 0\n", chan_nr);
+ /* Push empty payload to upper layers */
+ rmsg = msgb_alloc_headroom(256, 128, "L1P-to-RTP");
+ return add_l1sap_header(trx, rmsg, lchan, chan_nr,
+ data_ind->Data.ulFrameNumber,
+ ber10k, lqual_cb);
}
+
payload_len = data_ind->Data.ulDataLength;
switch (payload_type) {
@@ -255,7 +264,8 @@ int l1if_tch_rx(struct gsm_bts_trx *trx, uint8_t chan_nr,
if (rmsg)
return add_l1sap_header(trx, rmsg, lchan, chan_nr,
- data_ind->Data.ulFrameNumber);
+ data_ind->Data.ulFrameNumber,
+ ber10k, lqual_cb);
return 0;