aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/common/power_control.c23
-rw-r--r--tests/power/bs_power_loop_test.c37
-rw-r--r--tests/power/bs_power_loop_test.err37
-rw-r--r--tests/power/bs_power_loop_test.ok71
4 files changed, 98 insertions, 70 deletions
diff --git a/src/common/power_control.c b/src/common/power_control.c
index 5e2e85e9..6620add2 100644
--- a/src/common/power_control.c
+++ b/src/common/power_control.c
@@ -274,12 +274,23 @@ int lchan_bs_pwr_ctrl(struct gsm_lchan *lchan,
rxlev = rxlev_full;
}
- /* Bit Error Rate > 0 => reduce by 2 */
- if (rxqual > 0) { /* FIXME: take RxQual threshold into account */
- LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "Reducing Downlink attenuation "
- "by half: %u -> %u dB due to RXQUAL %u > 0\n",
- state->current, state->current / 2, rxqual);
- state->current /= 2;
+ /* If RxQual > L_RXQUAL_XX_P, try to increase Tx power */
+ if (rxqual > params->rxqual_meas.lower_thresh) {
+ uint8_t old = state->current;
+
+ /* Tx power has reached the maximum, nothing to do */
+ if (state->current == 0)
+ return 0;
+
+ /* Increase Tx power by reducing Tx attenuation */
+ if (state->current >= params->inc_step_size_db)
+ state->current -= params->inc_step_size_db;
+ else
+ state->current = 0;
+
+ LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "Reducing Downlink attenuation: "
+ "%u -> %d dB due to RxQual %u worse than L_RXQUAL_XX_P %u\n",
+ old, state->current, rxqual, params->rxqual_meas.lower_thresh);
return 1;
}
diff --git a/tests/power/bs_power_loop_test.c b/tests/power/bs_power_loop_test.c
index 06b53da4..7301b7f3 100644
--- a/tests/power/bs_power_loop_test.c
+++ b/tests/power/bs_power_loop_test.c
@@ -291,7 +291,7 @@ static const struct power_test_step TC_dtxd_mode[] = {
{ .meas = { DL_MEAS_FULL(0, 63), DL_MEAS_SUB(0, PWR_TEST_RXLEV_TARGET) } },
};
-/* Verify that RxQual > 0 reduces the current attenuation value. */
+/* Verify that high RxQual reduces the current attenuation value. */
static const struct power_test_step TC_rxqual_ber[] = {
/* Initial state: 16 dB, up to 20 dB */
{ .type = PWR_TEST_ST_SET_STATE,
@@ -301,25 +301,30 @@ static const struct power_test_step TC_rxqual_ber[] = {
{ .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 },
{ .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 },
- /* MS indicates target RxLev, but RxQual values > 0 */
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 2 },
- { .meas = DL_MEAS_FULL_SUB(4, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 4 },
- { .meas = DL_MEAS_FULL_SUB(1, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 8 },
+ /* MS indicates target RxLev, but RxQual values better than L_RXQUAL_XX_P=3 */
+ { .meas = DL_MEAS_FULL_SUB(1, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 },
+ { .meas = DL_MEAS_FULL_SUB(2, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 },
+ { .meas = DL_MEAS_FULL_SUB(3, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 },
- /* MS indicates target RxLev, and no bit errors anymore */
- { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 8 },
- { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 8 },
+ /* MS indicates target RxLev, but RxQual values worse than L_RXQUAL_XX_P=3 */
+ { .meas = DL_MEAS_FULL_SUB(4, PWR_TEST_RXLEV_TARGET + 0), .exp_txred = 16 - 4 },
+ { .meas = DL_MEAS_FULL_SUB(5, PWR_TEST_RXLEV_TARGET + 4), .exp_txred = 16 - 8 },
+ { .meas = DL_MEAS_FULL_SUB(6, PWR_TEST_RXLEV_TARGET + 8), .exp_txred = 16 - 12 },
+ { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET + 12), .exp_txred = 16 - 16 }, /* max */
+ { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET + 16), .exp_txred = 16 - 16 }, /* max */
- /* Reset state: 16 dB, up to 20 dB */
+ /* MS indicates target RxLev, but no bit errors anymore => reducing Tx power */
+ { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 16), .exp_txred = 2 },
+ { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 14), .exp_txred = 4 },
+ { .meas = DL_MEAS_FULL_SUB(0, PWR_TEST_RXLEV_TARGET + 12), .exp_txred = 6 },
+
+ /* Reset state: 0 dB, up to 20 dB */
{ .type = PWR_TEST_ST_SET_STATE,
- .state = { .current = 16, .max = 2 * 10 } },
+ .state = { .current = 0, .max = 2 * 10 } },
- /* MS indicates target RxLev, but RxQual values > 0 again */
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 2 },
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 4 },
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 8 },
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 16 },
- { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET), .exp_txred = 16 / 32 },
+ /* MS indicates target RxLev, but RxQual values worse than L_RXQUAL_XX_P=3 */
+ { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET) }, /* max */
+ { .meas = DL_MEAS_FULL_SUB(7, PWR_TEST_RXLEV_TARGET) }, /* max */
};
/* Verify that invalid and dummy SACCH blocks are ignored. */
diff --git a/tests/power/bs_power_loop_test.err b/tests/power/bs_power_loop_test.err
index 20d2133a..e7ba3102 100644
--- a/tests/power/bs_power_loop_test.err
+++ b/tests/power/bs_power_loop_test.err
@@ -58,26 +58,29 @@
(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
(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
(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
-(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 16 -> 8 dB due to RXQUAL 7 > 0
-(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(4), RXLEV-SUB(30), RXQUAL-SUB(4), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 8 -> 4 dB due to RXQUAL 4 > 0
(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(1), RXLEV-SUB(30), RXQUAL-SUB(1), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 4 -> 2 dB due to RXQUAL 1 > 0
-(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
-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 2 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
-(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
-(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 2 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
-(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 16 -> 8 dB due to RXQUAL 7 > 0
-(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 8 -> 4 dB due to RXQUAL 7 > 0
-(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 4 -> 2 dB due to RXQUAL 7 > 0
+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(2), RXLEV-SUB(30), RXQUAL-SUB(2), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(3), RXLEV-SUB(30), RXQUAL-SUB(3), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Keeping Downlink attenuation at 16 dB (maximum 20 dB, target -80 dBm, delta 0 dB)
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(4), RXLEV-SUB(30), RXQUAL-SUB(4), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation: 16 -> 12 dB due to RxQual 4 worse than L_RXQUAL_XX_P 3
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(34), RXQUAL-FULL(5), RXLEV-SUB(34), RXQUAL-SUB(5), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation: 12 -> 8 dB due to RxQual 5 worse than L_RXQUAL_XX_P 3
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(38), RXQUAL-FULL(6), RXLEV-SUB(38), RXQUAL-SUB(6), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation: 8 -> 4 dB due to RxQual 6 worse than L_RXQUAL_XX_P 3
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(42), RXQUAL-FULL(7), RXLEV-SUB(42), RXQUAL-SUB(7), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation: 4 -> 0 dB due to RxQual 7 worse than L_RXQUAL_XX_P 3
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(46), RXQUAL-FULL(7), RXLEV-SUB(46), RXQUAL-SUB(7), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(46), RXQUAL-FULL(0), RXLEV-SUB(46), RXQUAL-SUB(0), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 0 -> 2 dB (maximum 20 dB, target -80 dBm, delta -2 dB)
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(44), RXQUAL-FULL(0), RXLEV-SUB(44), RXQUAL-SUB(0), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 2 -> 4 dB (maximum 20 dB, target -80 dBm, delta -2 dB)
+(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(42), RXQUAL-FULL(0), RXLEV-SUB(42), RXQUAL-SUB(0), DTx is disabled => using FULL
+(bts=0,trx=0,ts=0,ss=0) Changing Downlink attenuation: 4 -> 6 dB (maximum 20 dB, target -80 dBm, delta -2 dB)
(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 2 -> 1 dB due to RXQUAL 7 > 0
(bts=0,trx=0,ts=0,ss=0) Rx DL Measurement Report: RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7), DTx is disabled => using FULL
-(bts=0,trx=0,ts=0,ss=0) Reducing Downlink attenuation by half: 1 -> 0 dB due to RXQUAL 7 > 0
(bts=0,trx=0,ts=0,ss=0) The measurement results are not valid
(bts=0,trx=0,ts=0,ss=0) The measurement results are not valid
(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
diff --git a/tests/power/bs_power_loop_test.ok b/tests/power/bs_power_loop_test.ok
index 804f5c63..19ec2490 100644
--- a/tests/power/bs_power_loop_test.ok
+++ b/tests/power/bs_power_loop_test.ok
@@ -125,37 +125,46 @@ Starting test case 'TC_rxqual_ber'
#02 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0)
#02 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00
#02 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 16 (expected 16)
-#03 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#03 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#03 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 8 (expected 8)
-#04 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(4), RXLEV-SUB(30), RXQUAL-SUB(4)
-#04 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 48 00 00 00 00 00 00 00 00 00 00 00 00 00
-#04 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 4 (expected 4)
-#05 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(1), RXLEV-SUB(30), RXQUAL-SUB(1)
-#05 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 12 00 00 00 00 00 00 00 00 00 00 00 00 00
-#05 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 2 (expected 2)
-#06 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0)
-#06 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-#06 lchan_bs_pwr_ctrl() -> BS power reduction: 2 -> 2 (expected 2)
-#07 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(0), RXLEV-SUB(30), RXQUAL-SUB(0)
-#07 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-#07 lchan_bs_pwr_ctrl() -> BS power reduction: 2 -> 2 (expected 2)
-#08 exec_power_step() <- State (re)set (current 16 dB, max 20 dB)
-#09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#09 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#09 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 8 (expected 8)
-#10 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#10 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#10 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 4 (expected 4)
-#11 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#11 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#11 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 2 (expected 2)
-#12 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#12 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#12 lchan_bs_pwr_ctrl() -> BS power reduction: 2 -> 1 (expected 1)
-#13 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
-#13 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
-#13 lchan_bs_pwr_ctrl() -> BS power reduction: 1 -> 0 (expected 0)
+#03 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(1), RXLEV-SUB(30), RXQUAL-SUB(1)
+#03 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 12 00 00 00 00 00 00 00 00 00 00 00 00 00
+#03 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 16 (expected 16)
+#04 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(2), RXLEV-SUB(30), RXQUAL-SUB(2)
+#04 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 24 00 00 00 00 00 00 00 00 00 00 00 00 00
+#04 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 16 (expected 16)
+#05 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(3), RXLEV-SUB(30), RXQUAL-SUB(3)
+#05 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 36 00 00 00 00 00 00 00 00 00 00 00 00 00
+#05 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 16 (expected 16)
+#06 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(4), RXLEV-SUB(30), RXQUAL-SUB(4)
+#06 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 48 00 00 00 00 00 00 00 00 00 00 00 00 00
+#06 lchan_bs_pwr_ctrl() -> BS power reduction: 16 -> 12 (expected 12)
+#07 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(34), RXQUAL-FULL(5), RXLEV-SUB(34), RXQUAL-SUB(5)
+#07 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 22 22 5a 00 00 00 00 00 00 00 00 00 00 00 00 00
+#07 lchan_bs_pwr_ctrl() -> BS power reduction: 12 -> 8 (expected 8)
+#08 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(38), RXQUAL-FULL(6), RXLEV-SUB(38), RXQUAL-SUB(6)
+#08 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 26 26 6c 00 00 00 00 00 00 00 00 00 00 00 00 00
+#08 lchan_bs_pwr_ctrl() -> BS power reduction: 8 -> 4 (expected 4)
+#09 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(42), RXQUAL-FULL(7), RXLEV-SUB(42), RXQUAL-SUB(7)
+#09 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 2a 2a 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
+#09 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 0 (expected 0)
+#10 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(46), RXQUAL-FULL(7), RXLEV-SUB(46), RXQUAL-SUB(7)
+#10 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 2e 2e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
+#10 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)
+#11 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(46), RXQUAL-FULL(0), RXLEV-SUB(46), RXQUAL-SUB(0)
+#11 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 2e 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#11 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 2 (expected 2)
+#12 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(44), RXQUAL-FULL(0), RXLEV-SUB(44), RXQUAL-SUB(0)
+#12 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 2c 2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#12 lchan_bs_pwr_ctrl() -> BS power reduction: 2 -> 4 (expected 4)
+#13 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(42), RXQUAL-FULL(0), RXLEV-SUB(42), RXQUAL-SUB(0)
+#13 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 2a 2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#13 lchan_bs_pwr_ctrl() -> BS power reduction: 4 -> 6 (expected 6)
+#14 exec_power_step() <- State (re)set (current 0 dB, max 20 dB)
+#15 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
+#15 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
+#15 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)
+#16 enc_meas_rep() -> Measurement Results (valid): RXLEV-FULL(30), RXQUAL-FULL(7), RXLEV-SUB(30), RXQUAL-SUB(7)
+#16 lchan_bs_pwr_ctrl() <- UL SACCH: 06 15 1e 1e 7e 00 00 00 00 00 00 00 00 00 00 00 00 00
+#16 lchan_bs_pwr_ctrl() -> BS power reduction: 0 -> 0 (expected 0)
Test case verdict: SUCCESS
Starting test case 'TC_inval_dummy'