summaryrefslogtreecommitdiffstats
path: root/src/host
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2011-12-01 11:11:24 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2016-09-25 08:11:46 +0200
commit99d871d5e1add884284818c40d6974b2259e077d (patch)
treea0ad6bb5dab5f1840eb252c7648399277b0de3bc /src/host
parent54fa680f182623f0e39ddc9be594c7b8afe62dd5 (diff)
layer23/mobile: Adding current rxlev/snr/berr to RR layer structure
Diffstat (limited to 'src/host')
-rw-r--r--src/host/layer23/include/osmocom/bb/mobile/gsm48_rr.h1
-rw-r--r--src/host/layer23/src/mobile/gsm48_rr.c16
2 files changed, 11 insertions, 6 deletions
diff --git a/src/host/layer23/include/osmocom/bb/mobile/gsm48_rr.h b/src/host/layer23/include/osmocom/bb/mobile/gsm48_rr.h
index 1638f14d..cfe797df 100644
--- a/src/host/layer23/include/osmocom/bb/mobile/gsm48_rr.h
+++ b/src/host/layer23/include/osmocom/bb/mobile/gsm48_rr.h
@@ -205,6 +205,7 @@ struct gsm48_rrlayer {
struct osmo_timer_list t_meas;
struct gsm48_rr_meas meas;
uint8_t monitor;
+ uint8_t rxlev, berr, snr; /* a summary */
/* audio flow */
uint8_t audio_mode;
diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c
index 3257557d..6f3c2190 100644
--- a/src/host/layer23/src/mobile/gsm48_rr.c
+++ b/src/host/layer23/src/mobile/gsm48_rr.c
@@ -630,7 +630,6 @@ static void timeout_rr_meas(void *arg)
struct gsm322_cellsel *cs = &rr->ms->cellsel;
struct rx_meas_stat *meas = &rr->ms->meas;
struct gsm_settings *set = &rr->ms->settings;
- int rxlev, berr, snr;
uint8_t ch_type, ch_subch, ch_ts;
char text[256];
@@ -640,14 +639,17 @@ static void timeout_rr_meas(void *arg)
goto restart;
} else if (!meas->frames) {
sprintf(text, "MON: no cell info");
+ rr->rxlev = 255; /* no value */
+ rr->berr = 0;
+ rr->snr = 0;
} else {
- rxlev = (meas->rxlev + meas->frames / 2) / meas->frames;
- berr = (meas->berr + meas->frames / 2) / meas->frames;
- snr = (meas->snr + meas->frames / 2) / meas->frames;
+ rr->rxlev = (meas->rxlev + meas->frames / 2) / meas->frames;
+ rr->berr = (meas->berr + meas->frames / 2) / meas->frames;
+ rr->snr = (meas->snr + meas->frames / 2) / meas->frames;
sprintf(text, "MON: BCCH=%s lev=%s snr=%2d ber=%3d "
"LAI=%s %s %04x ID=%04x",
gsm_print_arfcn(cs->sel_arfcn),
- gsm_print_rxlev(rxlev), berr, snr,
+ gsm_print_rxlev(rr->rxlev), rr->berr, rr->snr,
gsm_print_mcc(cs->sel_mcc),
gsm_print_mnc(cs->sel_mnc), cs->sel_lac, cs->sel_id);
if (rr->state == GSM48_RR_ST_DEDICATED) {
@@ -661,7 +663,7 @@ static void timeout_rr_meas(void *arg)
|| ch_type == RSL_CHAN_SDCCH4_ACCH)
sprintf(text + strlen(text), "/%d", ch_subch);
} else
- gsm322_meas(rr->ms, rxlev);
+ gsm322_meas(rr->ms, rr->rxlev);
}
LOGP(DRR, LOGL_INFO, "%s\n", text);
if (rr->monitor)
@@ -5877,6 +5879,8 @@ int gsm48_rr_init(struct osmocom_ms *ms)
lapdm_channel_set_l3(&ms->lapdm_channel, &rcv_rsl, ms);
+ rr->rxlev = 255; /* no value */
+
start_rr_t_meas(rr, 1, 0);
rr->audio_mode = AUDIO_TX_MICROPHONE | AUDIO_RX_SPEAKER;