diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-10-04 17:25:11 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2021-10-07 10:47:00 +0000 |
commit | 3c32cce0870b883663b7d3e8b0f2c313f736ac84 (patch) | |
tree | 91c2975c2b4d5e56e1ea0baec3fdb4fe726d2acb /src/common | |
parent | 77e014f0612960c1b2cf04401a726362cae962c4 (diff) |
MS Power Control Loop: Use P_CON_INTERVAL=2 by default
Have a more stable loop with less temporary oscillations at the expense
of increased reaction time.
4 SACCH blocks (P_CON_INTERVAL=2) is the minimum interval to get stable
measurements for the last requested MS Power level. With P_CON_INTERVAL=1,
are also made during a period with stable power being use to transmit,
but the MS Power level used (and announced in MR) is not the last one
requested by the BTS, but the one requested in the previous loop
iteration. This can make the MS and BTS bounce 2 values forth and back,
and create some temporary oscillation.
See osmo-bsc User manual section "Power Control" for more information.
Related: SYS#5371
Change-Id: I91c505447f68714239a4f033d4f06e91893df201
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/bts.c | 4 | ||||
-rw-r--r-- | src/common/gsm_data.c | 8 | ||||
-rw-r--r-- | src/common/rsl.c | 6 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index 191c331c..b226df20 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -340,8 +340,8 @@ int bts_init(struct gsm_bts *bts) bts->rtp_priority = -1; /* Default (fall-back) MS/BS Power control parameters */ - bts->bs_dpc_params = power_ctrl_params_def; - bts->ms_dpc_params = power_ctrl_params_def; + power_ctrl_params_def_reset(&bts->bs_dpc_params, true); + power_ctrl_params_def_reset(&bts->ms_dpc_params, false); /* configurable via OML */ bts->load.ccch.load_ind_period = 112; diff --git a/src/common/gsm_data.c b/src/common/gsm_data.c index 15253280..89a740dd 100644 --- a/src/common/gsm_data.c +++ b/src/common/gsm_data.c @@ -680,3 +680,11 @@ const struct gsm_power_ctrl_params power_ctrl_params_def = { .h_reqt = 6, /* TODO: investigate a reasonable default value */ }, }; + +void power_ctrl_params_def_reset(struct gsm_power_ctrl_params *params, bool is_bs_pwr) +{ + *params = power_ctrl_params_def; + if (!is_bs_pwr) + /* Trigger loop every fourth SACCH block (1.92s). TS 45.008 sec 4.7.1: */ + params->ctrl_interval = 2; +} diff --git a/src/common/rsl.c b/src/common/rsl.c index c73b093d..89c3b962 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -1111,7 +1111,8 @@ static int rsl_rx_meas_preproc_dft(struct gsm_bts_trx *trx, struct msgb *msg) /* TLV (O) BS Power Parameters IE */ if ((ie = TLVP_GET(&tp, RSL_IE_BS_POWER_PARAM)) != NULL) { /* Allocate a new chunk and initialize with default values */ - params = talloc_memdup(trx, &power_ctrl_params_def, sizeof(*params)); + params = talloc(trx, struct gsm_power_ctrl_params); + power_ctrl_params_def_reset(params, true); if (ie->len && parse_power_ctrl_params(params, ie->val, ie->len) == 0) { /* Initially it points to the global defaults */ @@ -1128,7 +1129,8 @@ static int rsl_rx_meas_preproc_dft(struct gsm_bts_trx *trx, struct msgb *msg) /* TLV (O) MS Power Parameters IE */ if ((ie = TLVP_GET(&tp, RSL_IE_MS_POWER_PARAM)) != NULL) { /* Allocate a new chunk and initialize with default values */ - params = talloc_memdup(trx, &power_ctrl_params_def, sizeof(*params)); + params = talloc(trx, struct gsm_power_ctrl_params); + power_ctrl_params_def_reset(params, false); if (ie->len && parse_power_ctrl_params(params, ie->val, ie->len) == 0) { /* Initially it points to the global defaults */ |