aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2021-11-12 03:04:35 +0300
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-11-12 03:04:47 +0300
commitf422873087ef679dd1e562d90b7f20485108ed87 (patch)
treead8850d2fd5e6f43eb1d3a7577d0a04319dc552c
parentefc0d5bf57b8521b5585a36311233fe2355772dd (diff)
gsm_lchan_interf_meas_calc_avg(): adapt to the order of boundaries
The order of interference level boundaries is not clearly defined by 3GPP, so we should support both ascending and descending variants. Change-Id: I88d841d8d835bde8392c7b606b28c9070b7adc6e Related: SYS#5313
-rw-r--r--src/common/lchan.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/common/lchan.c b/src/common/lchan.c
index ec1b1753..fe5efd57 100644
--- a/src/common/lchan.c
+++ b/src/common/lchan.c
@@ -468,9 +468,18 @@ void gsm_lchan_interf_meas_calc_avg(struct gsm_lchan *lchan)
* boundaries (0, X1, ... X5). It's not clear how to handle values
* exceeding the outer boundaries (0 or X5), because bands 0 and 6 do
* not exist (sigh). Let's map such values to closest bands 1 and 5. */
- for (b = 1; b < ARRAY_SIZE(bts->interference.boundary) - 1; b++) {
- if (meas_avg >= bts->interference.boundary[b])
- break; /* Current 'b' is the band value */
+ if (bts->interference.boundary[0] < bts->interference.boundary[5]) {
+ /* Ascending order (band=1 indicates lowest interference) */
+ for (b = 1; b < ARRAY_SIZE(bts->interference.boundary) - 1; b++) {
+ if (meas_avg < bts->interference.boundary[b])
+ break; /* Current 'b' is the band value */
+ }
+ } else {
+ /* Descending order (band=1 indicates highest interference) */
+ for (b = 1; b < ARRAY_SIZE(bts->interference.boundary) - 1; b++) {
+ if (meas_avg >= bts->interference.boundary[b])
+ break; /* Current 'b' is the band value */
+ }
}
LOGPLCHAN(lchan, DL1C, LOGL_DEBUG,