diff options
-rw-r--r-- | src/common/scheduler.c | 1 | ||||
-rw-r--r-- | src/osmo-bts-trx/sched_lchan_pdtch.c | 23 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/common/scheduler.c b/src/common/scheduler.c index 3d780fdd..c7c3e621 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -1411,7 +1411,6 @@ int trx_sched_ul_burst(struct l1sched_trx *l1t, struct trx_ul_burst_ind *bi) /* handle NOPE indications */ if (bi->flags & TRX_BI_F_NOPE_IND) { switch (chan) { - case TRXC_PDTCH: case TRXC_PTCCH: case TRXC_RACH: /* For some logical channel types NOPE.ind is valueless. */ diff --git a/src/osmo-bts-trx/sched_lchan_pdtch.c b/src/osmo-bts-trx/sched_lchan_pdtch.c index 28a45f58..665f643e 100644 --- a/src/osmo-bts-trx/sched_lchan_pdtch.c +++ b/src/osmo-bts-trx/sched_lchan_pdtch.c @@ -53,6 +53,7 @@ int rx_pdtch_fn(struct l1sched_trx *l1t, enum trx_chan_type chan, int n_bits_total = 0; uint16_t ber10k; int rc; + enum osmo_ph_pres_info_type presence_info; LOGL1S(DL1P, LOGL_DEBUG, l1t, bi->tn, chan, bi->fn, "Received PDTCH bid=%u\n", bid); @@ -79,16 +80,24 @@ int rx_pdtch_fn(struct l1sched_trx *l1t, enum trx_chan_type chan, trx_sched_meas_push(chan_state, bi); /* copy burst to buffer of 4 bursts */ - if (bi->burst_len == EGPRS_BURST_LEN) { + switch (bi->burst_len) { + case EGPRS_BURST_LEN: burst = *bursts_p + bid * 348; memcpy(burst, bi->burst + 9, 174); memcpy(burst + 174, bi->burst + 261, 174); n_bursts_bits = GSM0503_EGPRS_BURSTS_NBITS; - } else { + break; + case GSM_BURST_LEN: burst = *bursts_p + bid * 116; memcpy(burst, bi->burst + 3, 58); memcpy(burst + 58, bi->burst + 87, 58); n_bursts_bits = GSM0503_GPRS_BURSTS_NBITS; + break; + case 0: + /* NOPE.ind, assume GPRS? */ + burst = *bursts_p + bid * 116; + memset(burst, 0, 116); + n_bursts_bits = GSM0503_GPRS_BURSTS_NBITS; } /* wait until complete set of bursts */ @@ -120,19 +129,23 @@ int rx_pdtch_fn(struct l1sched_trx *l1t, enum trx_chan_type chan, &n_errors, &n_bits_total); } - if (rc <= 0) { + if (rc > 0) { + presence_info = PRES_INFO_BOTH; + } else { LOGL1S(DL1P, LOGL_DEBUG, l1t, bi->tn, chan, bi->fn, "Received bad PDTCH (%u/%u)\n", bi->fn % l1ts->mf_period, l1ts->mf_period); - return 0; + rc = 0; + presence_info = PRES_INFO_INVALID; } ber10k = compute_ber10k(n_bits_total, n_errors); + return _sched_compose_ph_data_ind(l1t, bi->tn, *first_fn, chan, l2, rc, meas_avg.rssi, meas_avg.toa256, meas_avg.ci_cb, ber10k, - PRES_INFO_BOTH); + presence_info); } /* obtain a to-be-transmitted PDTCH (packet data) burst */ |