diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2021-11-12 03:04:35 +0300 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2021-11-12 03:04:47 +0300 |
commit | f422873087ef679dd1e562d90b7f20485108ed87 (patch) | |
tree | ad8850d2fd5e6f43eb1d3a7577d0a04319dc552c | |
parent | efc0d5bf57b8521b5585a36311233fe2355772dd (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.c | 15 |
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, |