diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/host/trxcon/sched_lchan_common.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/host/trxcon/sched_lchan_common.c b/src/host/trxcon/sched_lchan_common.c index 95e496b2..540a57fe 100644 --- a/src/host/trxcon/sched_lchan_common.c +++ b/src/host/trxcon/sched_lchan_common.c @@ -87,6 +87,7 @@ int sched_send_dt_ind(struct trx_instance *trx, struct trx_ts *ts, { const struct trx_lchan_desc *lchan_desc; struct l1ctl_info_dl dl_hdr; + int dbm_avg; /* Set up pointers */ lchan_desc = &trx_lchan_desc[lchan->type]; @@ -96,9 +97,18 @@ int sched_send_dt_ind(struct trx_instance *trx, struct trx_ts *ts, dl_hdr.link_id = lchan_desc->link_id; dl_hdr.band_arfcn = htons(trx->band_arfcn); dl_hdr.frame_nr = htonl(lchan->rx_first_fn); - dl_hdr.rx_level = -(lchan->meas.rssi_sum / lchan->meas.rssi_num); dl_hdr.num_biterr = bit_error_count; + /* Convert average RSSI to RX level */ + if (lchan->meas.rssi_num) { + /* RX level: 0 .. 63 in typical GSM notation (dBm + 110) */ + dbm_avg = lchan->meas.rssi_sum / lchan->meas.rssi_num; + dl_hdr.rx_level = dbm2rxlev(dbm_avg); + } else { + /* No measurements, assuming the worst */ + dl_hdr.rx_level = 0; + } + /* FIXME: set proper values */ dl_hdr.snr = 0; |