<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/22079">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">power_control: use more reasonable reduce step size<br><br>It makes more sense to use a reduce step size that is smaller than<br>the increase step size.  This way both MS/BS power control loops<br>would be able to react quickly of the signal gets weaker, while<br>the good signal would not trigger radical power reduction.<br><br>Change-Id: Ie358fd828a68bfa1d23559197e8df8478fb4535e<br>Related: SYS#4918<br>---<br>M include/osmo-bts/power_control.h<br>M src/common/gsm_data.c<br>M tests/power/bs_power_loop_test.c<br>M tests/power/bs_power_loop_test.err<br>M tests/power/bs_power_loop_test.ok<br>M tests/power/ms_power_loop_test.err<br>M tests/power/ms_power_loop_test.ok<br>7 files changed, 124 insertions(+), 85 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/power_control.h b/include/osmo-bts/power_control.h</span><br><span>index ab107b8..f2e14cf 100644</span><br><span>--- a/include/osmo-bts/power_control.h</span><br><span>+++ b/include/osmo-bts/power_control.h</span><br><span>@@ -3,10 +3,6 @@</span><br><span> #include <stdint.h></span><br><span> #include <osmo-bts/gsm_data.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* How many dB do we raise/lower power as maximum */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PWR_RAISE_MAX_DB 4</span><br><span style="color: hsl(0, 100%, 40%);">-#define PWR_LOWER_MAX_DB 8</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> int lchan_ms_pwr_ctrl(struct gsm_lchan *lchan,</span><br><span>                   const uint8_t ms_power_lvl,</span><br><span>                  const int8_t ul_rssi_dbm);</span><br><span>diff --git a/src/common/gsm_data.c b/src/common/gsm_data.c</span><br><span>index 44ed7e9..b3f9f2d 100644</span><br><span>--- a/src/common/gsm_data.c</span><br><span>+++ b/src/common/gsm_data.c</span><br><span>@@ -423,9 +423,9 @@</span><br><span> </span><br><span> /* Default MS/BS Power Control parameters (see 3GPP TS 45.008, table A.1) */</span><br><span> const struct gsm_power_ctrl_params power_ctrl_params_def = {</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Power increasing/reducing step size */</span><br><span style="color: hsl(0, 100%, 40%);">-       .inc_step_size_db = 4, /* FIXME: PWR_RAISE_MAX_DB */</span><br><span style="color: hsl(0, 100%, 40%);">-    .red_step_size_db = 8, /* FIXME: PWR_LOWER_MAX_DB */</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Power increasing/reducing step size (optimal defaults) */</span><br><span style="color: hsl(120, 100%, 40%);">+  .inc_step_size_db = 4, /* quickly increase MS/BS power */</span><br><span style="color: hsl(120, 100%, 40%);">+     .red_step_size_db = 2, /* slowly decrease MS/BS power */</span><br><span> </span><br><span>         /* RxLev measurement parameters */</span><br><span>   .rxlev_meas = {</span><br><span>diff --git a/tests/power/bs_power_loop_test.c b/tests/power/bs_power_loop_test.c</span><br><span>index ecd83e7..06b53da 100644</span><br><span>--- a/tests/power/bs_power_loop_test.c</span><br><span>+++ b/tests/power/bs_power_loop_test.c</span><br><span>@@ -197,16 +197,17 @@</span><br><span>         init_test(name);</span><br><span> </span><br><span>         struct gsm_lchan *lchan = &g_trx->ts[0].lchan[0];</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_power_ctrl_params *params = &lchan->bs_dpc_params;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        lchan->bs_dpc_params = (struct gsm_power_ctrl_params) {</span><br><span style="color: hsl(0, 100%, 40%);">-              /* NOTE: raise/lower values are intentionally swapped here,</span><br><span style="color: hsl(0, 100%, 40%);">-              * as it makes more sense in the context of BS Power Control. */</span><br><span style="color: hsl(0, 100%, 40%);">-                .inc_step_size_db = PWR_LOWER_MAX_DB,</span><br><span style="color: hsl(0, 100%, 40%);">-           .red_step_size_db = PWR_RAISE_MAX_DB,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Default BS power control parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+     memcpy(params, &power_ctrl_params_def, sizeof(*params));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                /* RxLev pre-processing parameters */</span><br><span style="color: hsl(0, 100%, 40%);">-           .rxlev_meas = { PWR_TEST_CFG_RXLEV_THRESH(0) },</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span style="color: hsl(120, 100%, 40%);">+    /* No RxLev hysteresis: lower == upper */</span><br><span style="color: hsl(120, 100%, 40%);">+     params->rxlev_meas.lower_thresh = PWR_TEST_RXLEV_TARGET;</span><br><span style="color: hsl(120, 100%, 40%);">+   params->rxlev_meas.upper_thresh = PWR_TEST_RXLEV_TARGET;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* No RxLev pre-processing by default */</span><br><span style="color: hsl(120, 100%, 40%);">+      params->rxlev_meas.algo = GSM_PWR_CTRL_MEAS_AVG_ALGO_NONE;</span><br><span> </span><br><span>    for (n = 0; n < num_steps; n++)</span><br><span>           rc |= exec_power_step(lchan, n, &steps[n]);</span><br><span>@@ -249,17 +250,24 @@</span><br><span>      { .type = PWR_TEST_ST_SET_STATE,</span><br><span>       .state = { .current = 0, .max = 2 * 10 } },</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       /* MS indicates high RxLev values (-50 dBm) */</span><br><span style="color: hsl(120, 100%, 40%);">+        /* MS indicates high RxLev values (-50 dBm), inc step is 2 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+      { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred =  2 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred =  4 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred =  6 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred =  8 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 10 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 14 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 16 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 18 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 20 }, /* max */</span><br><span>         { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 20 }, /* max */</span><br><span>         { .meas = DL_MEAS_FULL_SUB(0, 60),      .exp_txred = 20 }, /* max */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* MS indicates low RxLev values (-100 dBm) */</span><br><span style="color: hsl(120, 100%, 40%);">+        /* MS indicates low RxLev values (-100 dBm), red step is 4 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+      { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred = 16 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred = 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred =  8 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred =  4 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred =  0 }, /* min */</span><br><span>         { .meas = DL_MEAS_FULL_SUB(0, 10),      .exp_txred =  0 }, /* min */</span><br><span>@@ -341,8 +349,8 @@</span><br><span>   /* Hysteresis is not enabled, so small deviations trigger oscillations */</span><br><span>    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 1),       .exp_txred = 13 },</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 11 },</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 3),       .exp_txred = 14 },</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 3),       .exp_txred = 13 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 11 },</span><br><span> </span><br><span>       /* Enable hysteresis */</span><br><span>      { .type = PWR_TEST_ST_SET_RXLEV_PARAMS,</span><br><span>@@ -350,10 +358,10 @@</span><br><span>      },</span><br><span> </span><br><span>       /* Hysteresis is enabled, so small deviations do not trigger any changes */</span><br><span style="color: hsl(0, 100%, 40%);">-     { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 1),       .exp_txred = 12 },</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 12 },</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 3),       .exp_txred = 12 },</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 12 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 1),       .exp_txred = 11 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 11 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 3),       .exp_txred = 11 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 2),       .exp_txred = 11 },</span><br><span> };</span><br><span> </span><br><span> /* Verify EWMA based power filtering. */</span><br><span>@@ -381,8 +389,8 @@</span><br><span>       { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET - 4),       .exp_txred = 11 },</span><br><span>   /* Avg[t] = (0.5 * 35) + (0.5 * 27) = 31, so delta is 1 */</span><br><span>   { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 5),       .exp_txred = 12 },</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Avg[t] = (0.5 * 35) + (0.5 * 31) = 33, so delta is 3 */</span><br><span style="color: hsl(0, 100%, 40%);">-      { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 5),       .exp_txred = 15 },</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Avg[t] = (0.5 * 35) + (0.5 * 31) = 33, so delta is 3, but red step size is 2 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+ { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 5),       .exp_txred = 14 },</span><br><span> };</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span>diff --git a/tests/power/bs_power_loop_test.err b/tests/power/bs_power_loop_test.err</span><br><span>index 43063c0..20d2133 100644</span><br><span>--- a/tests/power/bs_power_loop_test.err</span><br><span>+++ b/tests/power/bs_power_loop_test.err</span><br><span>@@ -7,29 +7,43 @@</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 0 -> 4 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 0 -> 2 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 4 -> 8 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 2 -> 4 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 8 -> 12 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 4 -> 6 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 16 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 6 -> 8 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 16 -> 20 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 8 -> 10 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 20 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 10 -> 12 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 20 dB (maximum 20 dB, target -80 dBm, delta -4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 14 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 14 -> 16 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 16 -> 18 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 18 -> 20 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 20 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 20 dB (maximum 20 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 20 -> 12 dB (maximum 20 dB, target -80 dBm, delta 8 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 20 -> 16 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 4 dB (maximum 20 dB, target -80 dBm, delta 8 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 16 -> 12 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 4 -> 0 dB (maximum 20 dB, target -80 dBm, delta 8 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 8 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 8 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 8 -> 4 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 8 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 4 -> 0 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 4 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span>@@ -77,17 +91,17 @@</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span> (bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 13 -> 11 dB (maximum 16 dB, target -80 dBm, delta 2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(33), RXQUAL-FULL(0), RXLEV-SUB(33), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 11 -> 14 dB (maximum 16 dB, target -80 dBm, delta -3 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 11 -> 13 dB (maximum 16 dB, target -80 dBm, delta -2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 14 -> 12 dB (maximum 16 dB, target -80 dBm, delta 2 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 13 -> 11 dB (maximum 16 dB, target -80 dBm, delta 2 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(31), RXQUAL-FULL(0), RXLEV-SUB(31), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 12 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 11 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 12 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 11 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(33), RXQUAL-FULL(0), RXLEV-SUB(33), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 12 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 11 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 12 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 11 dB (maximum 16 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 30 dB, target -80 dBm, delta 0 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span>@@ -99,4 +113,4 @@</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(35), RXQUAL-FULL(0), RXLEV-SUB(35), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span> (bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 11 -> 12 dB (maximum 30 dB, target -80 dBm, delta -1 dB)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(35), RXQUAL-FULL(0), RXLEV-SUB(35), RXQUAL-SUB(0), DTx is disabled => using FULL</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 15 dB (maximum 30 dB, target -80 dBm, delta -3 dB)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 12 -> 14 dB (maximum 30 dB, target -80 dBm, delta -2 dB)</span><br><span>diff --git a/tests/power/bs_power_loop_test.ok b/tests/power/bs_power_loop_test.ok</span><br><span>index 814f7e2..804f5c6 100644</span><br><span>--- a/tests/power/bs_power_loop_test.ok</span><br><span>+++ b/tests/power/bs_power_loop_test.ok</span><br><span>@@ -40,40 +40,61 @@</span><br><span> #00 exec_power_step() <- State (re)set (current 0 dB, max 20 dB)</span><br><span> #01 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #01 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#01 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 4 (expected 4)</span><br><span style="color: hsl(120, 100%, 40%);">+#01 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 2 (expected 2)</span><br><span> #02 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #02 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#02 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 8 (expected 8)</span><br><span style="color: hsl(120, 100%, 40%);">+#02 lchan_bs_pwr_ctrl() -> BS power reduction: 2 -> 4 (expected 4)</span><br><span> #03 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #03 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#03 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#03 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 6 (expected 6)</span><br><span> #04 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #04 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#04 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 16 (expected 16)</span><br><span style="color: hsl(120, 100%, 40%);">+#04 lchan_bs_pwr_ctrl() -> BS power reduction: 6 -> 8 (expected 8)</span><br><span> #05 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #05 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#05 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#05 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 10 (expected 10)</span><br><span> #06 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #06 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#06 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#06 lchan_bs_pwr_ctrl() -> BS power reduction: 10 -> 12 (expected 12)</span><br><span> #07 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span> #07 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#07 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span style="color: hsl(0, 100%, 40%);">-#08 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(0, 100%, 40%);">-#08 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#08 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 12 (expected 12)</span><br><span style="color: hsl(0, 100%, 40%);">-#09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(0, 100%, 40%);">-#09 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#09 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 4 (expected 4)</span><br><span style="color: hsl(0, 100%, 40%);">-#10 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(0, 100%, 40%);">-#10 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#10 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 0 (expected 0)</span><br><span style="color: hsl(0, 100%, 40%);">-#11 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(0, 100%, 40%);">-#11 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#11 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span style="color: hsl(0, 100%, 40%);">-#12 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(0, 100%, 40%);">-#12 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#12 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#07 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 14 (expected 14)</span><br><span style="color: hsl(120, 100%, 40%);">+#08 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#08 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#08 lchan_bs_pwr_ctrl() -> BS power reduction: 14 -> 16 (expected 16)</span><br><span style="color: hsl(120, 100%, 40%);">+#09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#09 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#09 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 18 (expected 18)</span><br><span style="color: hsl(120, 100%, 40%);">+#10 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#10 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#10 lchan_bs_pwr_ctrl() -> BS power reduction: 18 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#11 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#11 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#11 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#12 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(60), RXQUAL-FULL(0), RXLEV-SUB(60), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#12 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 3c 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#12 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#13 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#13 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#13 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 16 (expected 16)</span><br><span style="color: hsl(120, 100%, 40%);">+#14 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#14 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#14 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#15 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#15 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#15 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 8 (expected 8)</span><br><span style="color: hsl(120, 100%, 40%);">+#16 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#16 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#16 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 4 (expected 4)</span><br><span style="color: hsl(120, 100%, 40%);">+#17 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#17 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#17 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 0 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#18 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#18 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#18 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#19 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span style="color: hsl(120, 100%, 40%);">+#19 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(120, 100%, 40%);">+#19 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span> Test case verdict: SUCCESS</span><br><span> </span><br><span> Starting test case 'TC_dtxd_mode'</span><br><span>@@ -172,23 +193,23 @@</span><br><span> #02 lchan_bs_pwr_ctrl() -> BS power reduction: 13 -> 11 (expected 11)</span><br><span> #03 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(33), RXQUAL-FULL(0), RXLEV-SUB(33), RXQUAL-SUB(0)</span><br><span> #03 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#03 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 14 (expected 14)</span><br><span style="color: hsl(120, 100%, 40%);">+#03 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 13 (expected 13)</span><br><span> #04 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0)</span><br><span> #04 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1c 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#04 lchan_bs_pwr_ctrl() -> BS power reduction: 14 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#04 lchan_bs_pwr_ctrl() -> BS power reduction: 13 -> 11 (expected 11)</span><br><span> #05 exec_power_step() <- (Re)set RxLev params (thresh 27 .. 33, averaging is disabled)</span><br><span> #06 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(31), RXQUAL-FULL(0), RXLEV-SUB(31), RXQUAL-SUB(0)</span><br><span> #06 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1f 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#06 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#06 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 11 (expected 11)</span><br><span> #07 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0)</span><br><span> #07 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1c 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#07 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#07 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 11 (expected 11)</span><br><span> #08 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(33), RXQUAL-FULL(0), RXLEV-SUB(33), RXQUAL-SUB(0)</span><br><span> #08 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#08 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#08 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 11 (expected 11)</span><br><span> #09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(28), RXQUAL-FULL(0), RXLEV-SUB(28), RXQUAL-SUB(0)</span><br><span> #09 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1c 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#09 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 12 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#09 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 11 (expected 11)</span><br><span> Test case verdict: SUCCESS</span><br><span> </span><br><span> Starting test case 'TC_rxlev_pf_ewma'</span><br><span>@@ -211,5 +232,5 @@</span><br><span> #06 lchan_bs_pwr_ctrl() -> BS power reduction: 11 -> 12 (expected 12)</span><br><span> #07 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(35), RXQUAL-FULL(0), RXLEV-SUB(35), RXQUAL-SUB(0)</span><br><span> #07 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 23 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span style="color: hsl(0, 100%, 40%);">-#07 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 15 (expected 15)</span><br><span style="color: hsl(120, 100%, 40%);">+#07 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 14 (expected 14)</span><br><span> Test case verdict: SUCCESS</span><br><span>diff --git a/tests/power/ms_power_loop_test.err b/tests/power/ms_power_loop_test.err</span><br><span>index cf43081..7f8779c 100644</span><br><span>--- a/tests/power/ms_power_loop_test.err</span><br><span>+++ b/tests/power/ms_power_loop_test.err</span><br><span>@@ -14,12 +14,12 @@</span><br><span> (bts=0,trx=0,ts=0,ss=0) Raising MS power from control level 30 (34 dBm) to 29, 36 dBm (rx-ms-pwr-lvl 30, max-ms-pwr-lvl 29, rx-current -90 dBm, rx-target -75 dBm)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping MS power at control level 29, 36 dBm (rx-ms-pwr-lvl 29, max-ms-pwr-lvl 29, rx-current -90 dBm, rx-target -75 dBm)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping MS power at control level 29, 36 dBm (rx-ms-pwr-lvl 29, max-ms-pwr-lvl 29, rx-current -75 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 29 (36 dBm) to 1, 28 dBm (rx-ms-pwr-lvl 29, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 1 (28 dBm) to 5, 20 dBm (rx-ms-pwr-lvl 1, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 5 (20 dBm) to 9, 12 dBm (rx-ms-pwr-lvl 5, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 9 (12 dBm) to 10, 10 dBm (rx-ms-pwr-lvl 9, max-ms-pwr-lvl 29, rx-current -73 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Raising MS power from control level 10 (10 dBm) to 9, 12 dBm (rx-ms-pwr-lvl 10, max-ms-pwr-lvl 29, rx-current -77 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(0, 100%, 40%);">-(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 9 (12 dBm) to 14, 2 dBm (rx-ms-pwr-lvl 9, max-ms-pwr-lvl 14, rx-current -73 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 29 (36 dBm) to 30, 34 dBm (rx-ms-pwr-lvl 29, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 30 (34 dBm) to 31, 32 dBm (rx-ms-pwr-lvl 30, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 31 (32 dBm) to 0, 30 dBm (rx-ms-pwr-lvl 31, max-ms-pwr-lvl 29, rx-current -45 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 0 (30 dBm) to 1, 28 dBm (rx-ms-pwr-lvl 0, max-ms-pwr-lvl 29, rx-current -73 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Raising MS power from control level 1 (28 dBm) to 0, 30 dBm (rx-ms-pwr-lvl 1, max-ms-pwr-lvl 29, rx-current -77 dBm, rx-target -75 dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 0 (30 dBm) to 14, 2 dBm (rx-ms-pwr-lvl 0, max-ms-pwr-lvl 14, rx-current -73 dBm, rx-target -75 dBm)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Lowering MS power from control level 14 (2 dBm) to 15, 0 dBm (rx-ms-pwr-lvl 14, max-ms-pwr-lvl 0, rx-current -40 dBm, rx-target -75 dBm)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Keeping MS power at control level 15, 0 dBm (rx-ms-pwr-lvl 15, max-ms-pwr-lvl 2, rx-current -75 dBm, rx-target -75 dBm)</span><br><span> (bts=0,trx=0,ts=0,ss=0) Raising MS power from control level 15 (0 dBm) to 13, 3 dBm (rx-ms-pwr-lvl 15, max-ms-pwr-lvl 2, rx-current -90 dBm, rx-target -75 dBm)</span><br><span>diff --git a/tests/power/ms_power_loop_test.ok b/tests/power/ms_power_loop_test.ok</span><br><span>index d463d87..4293d28 100644</span><br><span>--- a/tests/power/ms_power_loop_test.ok</span><br><span>+++ b/tests/power/ms_power_loop_test.ok</span><br><span>@@ -34,17 +34,17 @@</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-75 dBm) returns 0 (expected 0)</span><br><span>   MS current power 29 -> 29 (expected 29)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-45 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-   MS current power 29 -> 1 (expected 1)</span><br><span style="color: hsl(120, 100%, 40%);">+      MS current power 29 -> 30 (expected 1)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-45 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-    MS current power 1 -> 5 (expected 5)</span><br><span style="color: hsl(120, 100%, 40%);">+       MS current power 30 -> 31 (expected 5)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-45 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-    MS current power 5 -> 9 (expected 9)</span><br><span style="color: hsl(120, 100%, 40%);">+       MS current power 31 -> 0 (expected 9)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-73 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-     MS current power 9 -> 10 (expected 10)</span><br><span style="color: hsl(120, 100%, 40%);">+     MS current power 0 -> 1 (expected 10)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-77 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-     MS current power 10 -> 9 (expected 9)</span><br><span style="color: hsl(120, 100%, 40%);">+      MS current power 1 -> 0 (expected 9)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-73 dBm) returns 1 (expected 1)</span><br><span style="color: hsl(0, 100%, 40%);">-      MS current power 9 -> 14 (expected 14)</span><br><span style="color: hsl(120, 100%, 40%);">+     MS current power 0 -> 14 (expected 14)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-60 dBm) returns 0 (expected 0)</span><br><span>         MS current power 14 -> 14 (expected 14)</span><br><span> lchan_ms_pwr_ctrl(RxLvl=-40 dBm) returns 1 (expected 1)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/22079">change 22079</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/22079"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie358fd828a68bfa1d23559197e8df8478fb4535e </div>
<div style="display:none"> Gerrit-Change-Number: 22079 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>