aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bsc/bts_vty.c
diff options
context:
space:
mode:
authorKeith <keith@rhizomatica.org>2021-09-23 06:43:03 +0200
committerkeith <keith@rhizomatica.org>2021-10-05 04:32:33 +0000
commit22622452095bff83b254b5c5123438564f3b2219 (patch)
tree1101658f83a450b59a10caa81765c190a6f33c2d /src/osmo-bsc/bts_vty.c
parentb263d860e6ae98673b1c3973351af2e98c092dea (diff)
Implement MS Uplink Power Control Loop
* Adds vty option dyn-bsc for ms-power-control -> mode * Imports power_control.c from osmo-bts project [at commit 2f3cd4b697972d8484f9a9d3b7ef634086f65fa5] * Removes unused C/I code from osmo-bts's power_control.c This patch then calls the power loop on receipt of measurement reports and updates the MS Power Level accordingly. Change-Id: Ibc307e758697eb5ca3fb86622f35709d6077db9e
Diffstat (limited to 'src/osmo-bsc/bts_vty.c')
-rw-r--r--src/osmo-bsc/bts_vty.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c
index fb1152048..460e14a10 100644
--- a/src/osmo-bsc/bts_vty.c
+++ b/src/osmo-bsc/bts_vty.c
@@ -2915,10 +2915,11 @@ DEFUN(cfg_bts_power_ctrl,
DEFUN_USRATTR(cfg_power_ctrl_mode,
cfg_power_ctrl_mode_cmd,
X(BSC_VTY_ATTR_NEW_LCHAN),
- "mode (static|dyn-bts) [reset]",
+ "mode (static|dyn-bts|dyn-bsc) [reset]",
"Power control mode\n"
"Instruct the MS/BTS to use a static power level\n"
"Power control to be performed dynamically by the BTS itself\n"
+ "Power control to be performed dynamically at this BSC\n"
"Reset to default parameters for the given mode\n")
{
struct gsm_power_ctrl_params *params = vty->index;
@@ -2935,6 +2936,13 @@ DEFUN_USRATTR(cfg_power_ctrl_mode,
params->mode = GSM_PWR_CTRL_MODE_STATIC;
else if (strcmp(argv[0], "dyn-bts") == 0)
params->mode = GSM_PWR_CTRL_MODE_DYN_BTS;
+ else if (strcmp(argv[0], "dyn-bsc") == 0) {
+ if (params->dir == GSM_PWR_CTRL_DIR_DL) {
+ vty_out(vty, "%% mode dyn-bsc not supported for Downlink.%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ params->mode = GSM_PWR_CTRL_MODE_DYN_BSC;
+ }
return CMD_SUCCESS;
}
@@ -3139,6 +3147,11 @@ DEFUN_USRATTR(cfg_power_ctrl_ci_thresh,
int upper = atoi(argv[2]);
struct gsm_power_ctrl_meas_params *meas_params;
+ if (params->mode == GSM_PWR_CTRL_MODE_DYN_BSC) {
+ vty_out(vty, "%% C/I based power loop not possible in dyn-bsc mode!%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
if (params->dir != GSM_PWR_CTRL_DIR_UL) {
vty_out(vty, "%% C/I based power loop only possible in Uplink!%s", VTY_NEWLINE);
return CMD_WARNING;
@@ -3962,8 +3975,10 @@ static void config_write_power_ctrl(struct vty *vty, unsigned int indent,
cfg_out(" bs-power static %u%s", cp->bs_power_val_db, VTY_NEWLINE);
break;
case GSM_PWR_CTRL_MODE_DYN_BTS:
+ case GSM_PWR_CTRL_MODE_DYN_BSC:
cfg_out("%s%s", node_name, VTY_NEWLINE);
- cfg_out(" mode dyn-bts%s", VTY_NEWLINE);
+ cfg_out(" mode %s%s",
+ cp->mode == GSM_PWR_CTRL_MODE_DYN_BTS ? "dyn-bts" : "dyn-bsc", VTY_NEWLINE);
if (cp->dir == GSM_PWR_CTRL_DIR_DL)
cfg_out(" bs-power dyn-max %u%s", cp->bs_power_max_db, VTY_NEWLINE);
@@ -3975,7 +3990,8 @@ static void config_write_power_ctrl(struct vty *vty, unsigned int indent,
/* Measurement processing / averaging parameters */
config_write_power_ctrl_meas(vty, indent + 1, &cp->rxlev_meas, "rxlev", "");
config_write_power_ctrl_meas(vty, indent + 1, &cp->rxqual_meas, "rxqual", "");
- if (cp->dir == GSM_PWR_CTRL_DIR_UL && is_osmobts(bts)) {
+ if (cp->dir == GSM_PWR_CTRL_DIR_UL && is_osmobts(bts)
+ && cp->mode == GSM_PWR_CTRL_MODE_DYN_BTS) {
config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_fr_meas, "ci", " fr-efr");
config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_hr_meas, "ci", " hr");
config_write_power_ctrl_meas(vty, indent + 1, &cp->ci_amr_fr_meas, "ci", " amr-fr");