From f422873087ef679dd1e562d90b7f20485108ed87 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 12 Nov 2021 03:04:35 +0300 Subject: [PATCH] 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 --- src/common/lchan.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/common/lchan.c b/src/common/lchan.c index ec1b1753e..fe5efd57e 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,