<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/21568">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">power_control: make raise/lower step limitation configurable<br><br>Change-Id: Ic37742f46f533865043b3dbcf16ea702e1746f98<br>Related: SYS#4918<br>---<br>M include/osmo-bts/bts.h<br>M include/osmo-bts/power_control.h<br>M src/common/bts.c<br>M src/common/power_control.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.c<br>8 files changed, 64 insertions(+), 36 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/68/21568/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h</span><br><span>index 48f404c..8956c36 100644</span><br><span>--- a/include/osmo-bts/bts.h</span><br><span>+++ b/include/osmo-bts/bts.h</span><br><span>@@ -107,6 +107,10 @@</span><br><span>   int target_dbm;</span><br><span>      /* Tolerated deviation from target */</span><br><span>        int hysteresis_db;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* How many dB do we raise power as maximum */</span><br><span style="color: hsl(120, 100%, 40%);">+        int raise_max_db;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* How many dB do we lower power as maximum */</span><br><span style="color: hsl(120, 100%, 40%);">+        int lower_max_db;</span><br><span>    /* RxLev filtering algorithm */</span><br><span>      enum bts_pf_algo pf_algo;</span><br><span>    /* (Optional) filtering parameters */</span><br><span>diff --git a/include/osmo-bts/power_control.h b/include/osmo-bts/power_control.h</span><br><span>index f2e14cf..ab107b8 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,6 +3,10 @@</span><br><span> #include <stdint.h></span><br><span> #include <osmo-bts/gsm_data.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* How many dB do we raise/lower power as maximum */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PWR_RAISE_MAX_DB 4</span><br><span style="color: hsl(120, 100%, 40%);">+#define PWR_LOWER_MAX_DB 8</span><br><span style="color: hsl(120, 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/bts.c b/src/common/bts.c</span><br><span>index e021864..669bcdd 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -53,6 +53,7 @@</span><br><span> #include <osmo-bts/cbch.h></span><br><span> #include <osmo-bts/bts_shutdown_fsm.h></span><br><span> #include <osmo-bts/nm_common_fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/power_control.h></span><br><span> </span><br><span> #define MIN_QUAL_RACH       50 /* minimum link quality (in centiBels) for Access Bursts */</span><br><span> #define MIN_QUAL_NORM         -5 /* minimum link quality (in centiBels) for Normal Bursts */</span><br><span>@@ -334,6 +335,8 @@</span><br><span>        (struct bts_power_ctrl_params) {</span><br><span>             .target_dbm = -75,</span><br><span>           .hysteresis_db = 3,     /* -78 .. -72 dBm */</span><br><span style="color: hsl(120, 100%, 40%);">+          .raise_max_db = PWR_RAISE_MAX_DB,</span><br><span style="color: hsl(120, 100%, 40%);">+             .lower_max_db = PWR_LOWER_MAX_DB,</span><br><span>            .pf_algo = BTS_PF_ALGO_EWMA,</span><br><span>                 .pf = {</span><br><span>                      .ewma = {</span><br><span>diff --git a/src/common/power_control.c b/src/common/power_control.c</span><br><span>index d458a92..f54db34 100644</span><br><span>--- a/src/common/power_control.c</span><br><span>+++ b/src/common/power_control.c</span><br><span>@@ -33,10 +33,6 @@</span><br><span> #include <osmo-bts/l1sap.h></span><br><span> #include <osmo-bts/power_control.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* how many dB do we raise/lower as maximum (1 ms power level = 2 dB) */</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> /* We don't want to deal with floating point, so we scale up */</span><br><span> #define EWMA_SCALE_FACTOR 100</span><br><span> </span><br><span>@@ -122,10 +118,10 @@</span><br><span>    /* Don't ever change more than PWR_{LOWER,RAISE}_MAX_DBM during one loop</span><br><span>          * iteration, i.e. reduce the speed at which the MS transmit power can</span><br><span>        * change. A higher value means a lower level (and vice versa) */</span><br><span style="color: hsl(0, 100%, 40%);">-       if (delta > PWR_RAISE_MAX_DB)</span><br><span style="color: hsl(0, 100%, 40%);">-                delta = PWR_RAISE_MAX_DB;</span><br><span style="color: hsl(0, 100%, 40%);">-       else if (delta < -PWR_LOWER_MAX_DB)</span><br><span style="color: hsl(0, 100%, 40%);">-          delta = -PWR_LOWER_MAX_DB;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (delta > params->raise_max_db)</span><br><span style="color: hsl(120, 100%, 40%);">+               delta = params->raise_max_db;</span><br><span style="color: hsl(120, 100%, 40%);">+      else if (delta < -params->lower_max_db)</span><br><span style="color: hsl(120, 100%, 40%);">+         delta = -params->lower_max_db;</span><br><span> </span><br><span>        return delta;</span><br><span> }</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 2f60cc0..5f1bf92 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>@@ -31,6 +31,15 @@</span><br><span> </span><br><span> #define PWR_TEST_RXLEV_TARGET       30</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define PWR_TEST_CFG_RXLEV_TARGET \</span><br><span style="color: hsl(120, 100%, 40%);">+   .target_dbm = -110 + PWR_TEST_RXLEV_TARGET</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* NOTE: raise/lower values are intentionally swapped here,</span><br><span style="color: hsl(120, 100%, 40%);">+ * as it makes more sense in the context of BS Power Control. */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PWR_TEST_CFG_RAISE_LOWER_MAX \</span><br><span style="color: hsl(120, 100%, 40%);">+   .raise_max_db = PWR_LOWER_MAX_DB, \</span><br><span style="color: hsl(120, 100%, 40%);">+   .lower_max_db = PWR_RAISE_MAX_DB</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define DL_MEAS_FULL(rxqual, rxlev) \</span><br><span>  .rxqual_full = rxqual, \</span><br><span>     .rxlev_full = rxlev</span><br><span>@@ -95,10 +104,15 @@</span><br><span>   g_trx = gsm_bts_trx_alloc(g_bts);</span><br><span>    OSMO_ASSERT(g_trx != NULL);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- g_bts->dl_power_ctrl.target_dbm = rxlev2dbm(PWR_TEST_RXLEV_TARGET);</span><br><span>       g_bts->band = GSM_BAND_900;</span><br><span>       g_bts->c0 = g_trx;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     g_bts->dl_power_ctrl = g_bts->ul_power_ctrl = \</span><br><span style="color: hsl(120, 100%, 40%);">+ (struct bts_power_ctrl_params) {</span><br><span style="color: hsl(120, 100%, 40%);">+              PWR_TEST_CFG_RXLEV_TARGET,</span><br><span style="color: hsl(120, 100%, 40%);">+            PWR_TEST_CFG_RAISE_LOWER_MAX,</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         printf("\nStarting test case '%s'\n", name);</span><br><span> }</span><br><span> </span><br><span>@@ -326,7 +340,8 @@</span><br><span>        /* Enable hysteresis */</span><br><span>      { .type = PWR_TEST_ST_SET_PARAMS,</span><br><span>      .params = {</span><br><span style="color: hsl(0, 100%, 40%);">-           .target_dbm = -110 + PWR_TEST_RXLEV_TARGET,</span><br><span style="color: hsl(120, 100%, 40%);">+           PWR_TEST_CFG_RXLEV_TARGET,</span><br><span style="color: hsl(120, 100%, 40%);">+            PWR_TEST_CFG_RAISE_LOWER_MAX,</span><br><span>                .hysteresis_db = 3,</span><br><span>    }</span><br><span>  },</span><br><span>@@ -347,7 +362,8 @@</span><br><span>     /* Enable EWMA based power filtering */</span><br><span>      { .type = PWR_TEST_ST_SET_PARAMS,</span><br><span>      .params = {</span><br><span style="color: hsl(0, 100%, 40%);">-           .target_dbm = -110 + PWR_TEST_RXLEV_TARGET, /* RxLev 30 */</span><br><span style="color: hsl(120, 100%, 40%);">+            PWR_TEST_CFG_RXLEV_TARGET,</span><br><span style="color: hsl(120, 100%, 40%);">+            PWR_TEST_CFG_RAISE_LOWER_MAX,</span><br><span>                .pf_algo = BTS_PF_ALGO_EWMA,</span><br><span>                 .pf.ewma.alpha = 50,</span><br><span>           }</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 44d996e..43063c0 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,29 @@</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 -> 8 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: 0 -> 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(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 -> 16 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 -> 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(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 -8 dB)</span><br><span style="color: hsl(120, 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> (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 -8 dB)</span><br><span style="color: hsl(120, 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> (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 -8 dB)</span><br><span style="color: hsl(120, 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> (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 -8 dB)</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 -4 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 -8 dB)</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 -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: 20 -> 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: 20 -> 12 dB (maximum 20 dB, target -80 dBm, delta 8 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: 16 -> 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: 12 -> 4 dB (maximum 20 dB, target -80 dBm, delta 8 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 -> 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: 4 -> 0 dB (maximum 20 dB, target -80 dBm, delta 8 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: 8 -> 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) Keeping Downlink attenuation at 0 dB (maximum 20 dB, target -80 dBm, delta 8 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 4 dB)</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 8 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>diff --git a/tests/power/bs_power_loop_test.ok b/tests/power/bs_power_loop_test.ok</span><br><span>index fe2eb78..acaad82 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>@@ -39,19 +39,19 @@</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 -> 8 (expected 4)</span><br><span style="color: hsl(120, 100%, 40%);">+#01 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 4 (expected 4)</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: 8 -> 16 (expected 8)</span><br><span style="color: hsl(120, 100%, 40%);">+#02 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 8 (expected 8)</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: 16 -> 20 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#03 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 12 (expected 12)</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: 20 -> 20 (expected 16)</span><br><span style="color: hsl(120, 100%, 40%);">+#04 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 16 (expected 16)</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: 20 -> 20 (expected 20)</span><br><span style="color: hsl(120, 100%, 40%);">+#05 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 20 (expected 20)</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> #06 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span>@@ -60,20 +60,20 @@</span><br><span> #07 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 20 (expected 20)</span><br><span> #08 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span> #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 -> 16 (expected 12)</span><br><span style="color: hsl(120, 100%, 40%);">+#08 lchan_bs_pwr_ctrl() -> BS power reduction: 20 -> 12 (expected 12)</span><br><span> #09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span> #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: 16 -> 12 (expected 4)</span><br><span style="color: hsl(120, 100%, 40%);">+#09 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 4 (expected 4)</span><br><span> #10 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span> #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: 12 -> 8 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#10 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 0 (expected 0)</span><br><span> #11 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span> #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: 8 -> 4 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#11 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span> #12 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(10), RXQUAL-FULL(0), RXLEV-SUB(10), RXQUAL-SUB(0)</span><br><span> #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: 4 -> 0 (expected 0)</span><br><span style="color: hsl(0, 100%, 40%);">-Test case verdict: FAIL</span><br><span style="color: hsl(120, 100%, 40%);">+#12 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)</span><br><span style="color: hsl(120, 100%, 40%);">+Test case verdict: SUCCESS</span><br><span> </span><br><span> Starting test case 'TC_dtxd_mode'</span><br><span> #00 exec_power_step() <- State (re)set (current 0 dB, max 20 dB)</span><br><span>diff --git a/tests/power/ms_power_loop_test.c b/tests/power/ms_power_loop_test.c</span><br><span>index 4f4f746..a804ad7 100644</span><br><span>--- a/tests/power/ms_power_loop_test.c</span><br><span>+++ b/tests/power/ms_power_loop_test.c</span><br><span>@@ -47,11 +47,16 @@</span><br><span> </span><br><span>     g_trx->ms_pwr_ctl_soft = true;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   g_bts->ul_power_ctrl.target_dbm = -75;</span><br><span style="color: hsl(0, 100%, 40%);">-       g_bts->dl_power_ctrl.target_dbm = -75;</span><br><span>    g_bts->band = GSM_BAND_1800;</span><br><span>      g_bts->c0 = g_trx;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     g_bts->ul_power_ctrl = g_bts->dl_power_ctrl = \</span><br><span style="color: hsl(120, 100%, 40%);">+ (struct bts_power_ctrl_params) {</span><br><span style="color: hsl(120, 100%, 40%);">+              .target_dbm = -75,</span><br><span style="color: hsl(120, 100%, 40%);">+            .raise_max_db = PWR_RAISE_MAX_DB,</span><br><span style="color: hsl(120, 100%, 40%);">+             .lower_max_db = PWR_LOWER_MAX_DB,</span><br><span style="color: hsl(120, 100%, 40%);">+     };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         printf("\nStarting test case '%s'\n", name);</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/21568">change 21568</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/+/21568"/><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: Ic37742f46f533865043b3dbcf16ea702e1746f98 </div>
<div style="display:none"> Gerrit-Change-Number: 21568 </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-MessageType: newchange </div>