From 95dc4911e04f1ccd9397be33e78a188a1004375c Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Wed, 4 Apr 2012 08:30:45 +0200 Subject: layer1: Retry fist power measurement, if it seems to fail In some cases (e.g. after a call with TCH) the first power measurement after a full reset will always return 0 (-110dbm). In this case the measurment is repeated once again. This is just a workarround, and it will not fix the actual cause. --- src/target/firmware/include/layer1/sync.h | 1 + src/target/firmware/layer1/l23_api.c | 1 + src/target/firmware/layer1/prim_pm.c | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h index 18e6b84b..23e46578 100644 --- a/src/target/firmware/include/layer1/sync.h +++ b/src/target/firmware/include/layer1/sync.h @@ -101,6 +101,7 @@ struct l1s_state { struct { /* power measurement l1 task */ unsigned int mode; + unsigned int first; union { struct { uint16_t arfcn_start; diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 17026212..df4787c9 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -419,6 +419,7 @@ static void l1ctl_rx_pm_req(struct msgb *msg) switch (pm_req->type) { case 1: + l1s.pm.first = 1; l1s.pm.mode = 1; l1s.pm.range.arfcn_start = ntohs(pm_req->range.band_arfcn_from); diff --git a/src/target/firmware/layer1/prim_pm.c b/src/target/firmware/layer1/prim_pm.c index 71e04939..6876cdc9 100644 --- a/src/target/firmware/layer1/prim_pm.c +++ b/src/target/firmware/layer1/prim_pm.c @@ -94,6 +94,15 @@ static int l1s_pm_resp(uint8_t num_meas, __unused uint8_t p2, printf("PM MEAS: ARFCN=%u, %-4d dBm at baseband, %-4d dBm at RF\n", arfcn, pm_level[0]/8, agc_inp_dbm8_by_pm(pm_level[0])/8); + /* If the first measurement seems to fail, try once again */ + if (l1s.pm.first) { + l1s.pm.first = 0; + if (pm_level[0] == 0) { + l1s_pm_test(1, l1s.pm.range.arfcn_next); + return 0; + } + } + printd("PM MEAS: %-4d dBm, %-4d dBm ARFCN=%u\n", agc_inp_dbm8_by_pm(pm_level[0])/8, agc_inp_dbm8_by_pm(pm_level[1])/8, arfcn); -- cgit v1.2.3