aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-11-20 19:02:25 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2019-11-20 20:27:04 +0100
commit1d9f6efccb2dfed52069910901ec8c8cc0d8de46 (patch)
tree458f1fc6df484dfe2470c33842f36215e885b09f /tests
parent522fc939e079c1dfd9b395548c75b52b92fc8adf (diff)
power_control.c: Limit speed of announced MS Power Level value changes
It's not a good idea to request big changes in MS Power based on sporadic bad signal received, let's instead change announced MS power levels more smoothly to avoid possible big signal strength fluctations, similar to what is already done in osmo-bts-trx specific loop (loops.c). Related: OS#1851 Change-Id: Iecc4ec7e21471ec853ad2d5659af4052aba5444c
Diffstat (limited to 'tests')
-rw-r--r--tests/power/power_test.c52
-rw-r--r--tests/power/power_test.ok19
2 files changed, 66 insertions, 5 deletions
diff --git a/tests/power/power_test.c b/tests/power/power_test.c
index 30fbb643..9b1a762b 100644
--- a/tests/power/power_test.c
+++ b/tests/power/power_test.c
@@ -58,22 +58,64 @@ static void test_power_loop(void)
lchan->state = LCHAN_S_NONE;
lchan->ms_power_ctrl.current = ms_pwr_ctl_lvl(GSM_BAND_1800, 0);
OSMO_ASSERT(lchan->ms_power_ctrl.current == 15);
+ lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 26);
+ OSMO_ASSERT(lchan->ms_power_ctrl.max == 2);
/* Simply clamping */
apply_power_test(lchan, -60, 0, 15);
/*
* Now 15 dB too little and we should power it up. Could be a
- * power level of 7 or 8 for 15 dBm
+ * power level of 7 or 8 for 15 dBm. However, since we limit peace at
+ * which we change values, expect several steps of MS_RAISE_MAX_DB/2 levels:
*/
+ apply_power_test(lchan, -90, 1, 13);
+ apply_power_test(lchan, -90, 1, 11);
+ apply_power_test(lchan, -90, 1, 9);
apply_power_test(lchan, -90, 1, 7);
-
- /* It should be clamped to level 0 and 30 dBm */
- apply_power_test(lchan, -100, 1, 0);
+ apply_power_test(lchan, -90, 1, 5);
+
+ /* Check good RSSI value keeps it at same power level: */
+ apply_power_test(lchan, bts.ul_power_target, 0, 5);
+
+ apply_power_test(lchan, -90, 1, 3);
+ apply_power_test(lchan, -90, 1, 2); /* .max is pwr lvl 2 */
+ apply_power_test(lchan, -90, 0, 2); /* .max is pwr lvl 2 */
+
+ lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 30);
+ OSMO_ASSERT(lchan->ms_power_ctrl.max == 0);
+ apply_power_test(lchan, -90, 1, 0); /* .max is pwr lvl 0 */
+ apply_power_test(lchan, -90, 0, 0); /* .max is pwr lvl 0 */
+
+ lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 36);
+ OSMO_ASSERT(lchan->ms_power_ctrl.max == 29);
+ apply_power_test(lchan, -90, 1, 30);
+ apply_power_test(lchan, -90, 1, 29);
+ apply_power_test(lchan, -90, 0, 29);
+
+ /* Check good RSSI value keeps it at same power level: */
+ apply_power_test(lchan, bts.ul_power_target, 0, 29);
+
+ /* Now go down, steps are double size in this direction: */
+ apply_power_test(lchan, -45, 1, 1);
+ apply_power_test(lchan, -45, 1, 5);
+ apply_power_test(lchan, -45, 1, 9);
+
+ /* Go down only one level down and up: */
+ apply_power_test(lchan, bts.ul_power_target + 2, 1, 10);
+ apply_power_test(lchan, bts.ul_power_target - 2, 1, 9);
+
+ /* Check if BSC requesting a low max power is applied after loop calculation: */
+ lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 2);
+ OSMO_ASSERT(lchan->ms_power_ctrl.max == 14);
+ apply_power_test(lchan, bts.ul_power_target + 2, 1, 14);
+ /* Set back a more normal max: */
+ lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 30);
+ OSMO_ASSERT(lchan->ms_power_ctrl.max == 0);
/* Fix it and jump down */
lchan->ms_power_ctrl.fixed = true;
- apply_power_test(lchan, -60, 0, 0);
+ apply_power_test(lchan, -60, 0, 14);
/* And leave it again */
lchan->ms_power_ctrl.fixed = false;
diff --git a/tests/power/power_test.ok b/tests/power/power_test.ok
index cf0a38b4..335a3d3b 100644
--- a/tests/power/power_test.ok
+++ b/tests/power/power_test.ok
@@ -1,7 +1,26 @@
Testing power loop...
power control [0]: MS current power 15
+power control [1]: MS current power 13
+power control [1]: MS current power 11
+power control [1]: MS current power 9
power control [1]: MS current power 7
+power control [1]: MS current power 5
+power control [0]: MS current power 5
+power control [1]: MS current power 3
+power control [1]: MS current power 2
+power control [0]: MS current power 2
power control [1]: MS current power 0
power control [0]: MS current power 0
+power control [1]: MS current power 30
+power control [1]: MS current power 29
+power control [0]: MS current power 29
+power control [0]: MS current power 29
+power control [1]: MS current power 1
+power control [1]: MS current power 5
+power control [1]: MS current power 9
+power control [1]: MS current power 10
+power control [1]: MS current power 9
+power control [1]: MS current power 14
+power control [0]: MS current power 14
power control [1]: MS current power 15
Power loop test OK