<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/21434">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">struct gsm_bts: move ul_power_{target,hysteresis} to ul_power_ctrl<br><br>Change-Id: I3886c7aedf3870536f1750f864cf698302ddf2df<br>Related: SYS#4918<br>---<br>M include/osmo-bts/bts.h<br>M src/common/bts.c<br>M src/common/power_control.c<br>M src/common/vty.c<br>M src/osmo-bts-lc15/oml.c<br>M src/osmo-bts-oc2g/oml.c<br>M src/osmo-bts-sysmo/oml.c<br>M src/osmo-bts-sysmo/sysmobts_vty.c<br>M src/osmo-bts-trx/trx_vty.c<br>M tests/power/power_test.c<br>10 files changed, 37 insertions(+), 37 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/34/21434/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 ce7d9d4..66b03e1 100644</span><br><span>--- a/include/osmo-bts/bts.h</span><br><span>+++ b/include/osmo-bts/bts.h</span><br><span>@@ -299,12 +299,12 @@</span><br><span>             bool vty_override;      /* OML value overridden by VTY */</span><br><span>    } radio_link_timeout;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       /* TODO: move it to bts->ul_power_ctrl struct */</span><br><span style="color: hsl(0, 100%, 40%);">-     int ul_power_target;            /* Uplink Rx power target */</span><br><span style="color: hsl(0, 100%, 40%);">-    int ul_power_hysteresis;        /* Tolerable Uplink Rx power deviation */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* Uplink power control */</span><br><span>   struct {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Target value to strive to */</span><br><span style="color: hsl(120, 100%, 40%);">+               int target;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Tolerated deviation from target */</span><br><span style="color: hsl(120, 100%, 40%);">+         int hysteresis;</span><br><span>              /* UL RSSI filtering algorithm */</span><br><span>            enum ms_ul_pf_algo pf_algo;</span><br><span>          /* (Optional) filtering parameters */</span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index a1f9101..6375241 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -323,8 +323,8 @@</span><br><span> </span><br><span>         /* configurable via VTY */</span><br><span>   bts->paging_state = paging_init(bts, 200, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->ul_power_target = -75;  /* dBm default */</span><br><span style="color: hsl(0, 100%, 40%);">-       bts->ul_power_hysteresis = 3;        /* -78 .. -72 dBm */</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->ul_power_ctrl.target = -75;     /* dBm default */</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->ul_power_ctrl.hysteresis = 3;   /* -78 .. -72 dBm */</span><br><span>         bts->ul_power_ctrl.pf_algo = MS_UL_PF_ALGO_EWMA;</span><br><span>  bts->ul_power_ctrl.pf.ewma.alpha = 50; /* 50% smoothing */</span><br><span>        bts->rtp_jitter_adaptive = false;</span><br><span>diff --git a/src/common/power_control.c b/src/common/power_control.c</span><br><span>index be6df48..dc5636c 100644</span><br><span>--- a/src/common/power_control.c</span><br><span>+++ b/src/common/power_control.c</span><br><span>@@ -141,15 +141,15 @@</span><br><span> </span><br><span>        /* How many dBs measured power should be increased (+) or decreased (-)</span><br><span>         to reach expected power. */</span><br><span style="color: hsl(0, 100%, 40%);">-  diff = bts->ul_power_target - avg_ul_rssi_dbm;</span><br><span style="color: hsl(120, 100%, 40%);">+     diff = bts->ul_power_ctrl.target - avg_ul_rssi_dbm;</span><br><span> </span><br><span> </span><br><span>       /* Tolerate small deviations from 'rx-target' */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (abs(diff) <= bts->ul_power_hysteresis) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (abs(diff) <= bts->ul_power_ctrl.hysteresis) {</span><br><span>              LOGPLCHAN(lchan, DLOOP, LOGL_INFO,</span><br><span>                     "Keeping MS power at control level %d (%d dBm) because diff %d dBm "</span><br><span>                       "from 'rx-target' %d dBm is not significant (hysteresis %d dBm)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                   ms_power_lvl, ms_dbm, diff, bts->ul_power_target, bts->ul_power_hysteresis);</span><br><span style="color: hsl(120, 100%, 40%);">+                    ms_power_lvl, ms_dbm, diff, bts->ul_power_ctrl.target, bts->ul_power_ctrl.hysteresis);</span><br><span>               /* Keep the current power level in sync (just to be sure) */</span><br><span>                 lchan->ms_power_ctrl.current = ms_power_lvl;</span><br><span>              bts_model_adjst_ms_pwr(lchan);</span><br><span>@@ -188,7 +188,7 @@</span><br><span>                           "(rx-ms-pwr-lvl %" PRIu8 ", max-ms-pwr-lvl %" PRIu8 ", rx-current %d dBm, rx-target %d dBm)\n",</span><br><span>                        new_power_lvl, new_dbm,</span><br><span>                      ms_power_lvl, lchan->ms_power_ctrl.max,</span><br><span style="color: hsl(0, 100%, 40%);">-                      avg_ul_rssi_dbm, bts->ul_power_target);</span><br><span style="color: hsl(120, 100%, 40%);">+                    avg_ul_rssi_dbm, bts->ul_power_ctrl.target);</span><br><span>            return 0;</span><br><span>    }</span><br><span> </span><br><span>@@ -198,7 +198,7 @@</span><br><span>            (new_dbm > current_dbm) ? "Raising" : "Lowering",</span><br><span>             lchan->ms_power_ctrl.current, current_dbm, new_power_lvl, new_dbm,</span><br><span>                ms_power_lvl, lchan->ms_power_ctrl.max,</span><br><span style="color: hsl(0, 100%, 40%);">-              avg_ul_rssi_dbm, bts->ul_power_target);</span><br><span style="color: hsl(120, 100%, 40%);">+            avg_ul_rssi_dbm, bts->ul_power_ctrl.target);</span><br><span> </span><br><span>        /* store the resulting new MS power level in the lchan */</span><br><span>    lchan->ms_power_ctrl.current = new_power_lvl;</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index 7baddef..34e7cfa 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -255,9 +255,9 @@</span><br><span>          VTY_NEWLINE);</span><br><span>        vty_out(vty, " paging lifetime %u%s", paging_get_lifetime(bts->paging_state),</span><br><span>           VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-   vty_out(vty, " uplink-power-target %d", bts->ul_power_target);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (bts->ul_power_hysteresis > 0)</span><br><span style="color: hsl(0, 100%, 40%);">-         vty_out(vty, " hysteresis %d", bts->ul_power_hysteresis);</span><br><span style="color: hsl(120, 100%, 40%);">+        vty_out(vty, " uplink-power-target %d", bts->ul_power_ctrl.target);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (bts->ul_power_ctrl.hysteresis > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, " hysteresis %d", bts->ul_power_ctrl.hysteresis);</span><br><span>  vty_out(vty, "%s", VTY_NEWLINE);</span><br><span> </span><br><span>       /* MS Tx power filtering algorithm and parameters */</span><br><span>@@ -633,8 +633,8 @@</span><br><span> {</span><br><span>      struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        bts->ul_power_target = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->ul_power_hysteresis = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->ul_power_ctrl.target = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ bts->ul_power_ctrl.hysteresis = 0;</span><br><span> </span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -650,8 +650,8 @@</span><br><span> {</span><br><span>  struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        bts->ul_power_target = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->ul_power_hysteresis = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->ul_power_ctrl.target = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ bts->ul_power_ctrl.hysteresis = atoi(argv[1]);</span><br><span> </span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-lc15/oml.c b/src/osmo-bts-lc15/oml.c</span><br><span>index dee5feb..0fb9d00 100644</span><br><span>--- a/src/osmo-bts-lc15/oml.c</span><br><span>+++ b/src/osmo-bts-lc15/oml.c</span><br><span>@@ -434,7 +434,7 @@</span><br><span>      dev_par->u16BcchArfcn = trx->bts->c0->arfcn;</span><br><span>     dev_par->u8NbTsc = trx->bts->bsic & 7;</span><br><span>  dev_par->fRxPowerLevel = trx_ms_pwr_ctrl_is_osmo(trx)</span><br><span style="color: hsl(0, 100%, 40%);">-                                        ? 0.0 : trx->bts->ul_power_target;</span><br><span style="color: hsl(120, 100%, 40%);">+                                      ? 0.0 : trx->bts->ul_power_ctrl.target;</span><br><span> </span><br><span>    dev_par->fTxPowerLevel = 0.0;</span><br><span>     LOGP(DL1C, LOGL_NOTICE, "Init TRX (Band %d, ARFCN %u, TSC %u, RxPower % 2f dBm, "</span><br><span>diff --git a/src/osmo-bts-oc2g/oml.c b/src/osmo-bts-oc2g/oml.c</span><br><span>index 9a7751b..be0ec30 100644</span><br><span>--- a/src/osmo-bts-oc2g/oml.c</span><br><span>+++ b/src/osmo-bts-oc2g/oml.c</span><br><span>@@ -449,7 +449,7 @@</span><br><span>   dev_par->u16BcchArfcn = trx->bts->c0->arfcn;</span><br><span>     dev_par->u8NbTsc = trx->bts->bsic & 7;</span><br><span>  dev_par->fRxPowerLevel = trx_ms_pwr_ctrl_is_osmo(trx)</span><br><span style="color: hsl(0, 100%, 40%);">-                                        ? 0.0 : trx->bts->ul_power_target;</span><br><span style="color: hsl(120, 100%, 40%);">+                                      ? 0.0 : trx->bts->ul_power_ctrl.target;</span><br><span> </span><br><span>    dev_par->fTxPowerLevel = 0.0;</span><br><span>     LOGP(DL1C, LOGL_NOTICE, "Init TRX (Band %d, ARFCN %u, TSC %u, RxPower % 2f dBm, "</span><br><span>diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c</span><br><span>index 4a8a6c2..5f638e6 100644</span><br><span>--- a/src/osmo-bts-sysmo/oml.c</span><br><span>+++ b/src/osmo-bts-sysmo/oml.c</span><br><span>@@ -429,7 +429,7 @@</span><br><span>       dev_par->u16BcchArfcn = trx->bts->c0->arfcn;</span><br><span>     dev_par->u8NbTsc = trx->bts->bsic & 7;</span><br><span>  dev_par->fRxPowerLevel = trx_ms_pwr_ctrl_is_osmo(trx)</span><br><span style="color: hsl(0, 100%, 40%);">-                                        ? 0.0 : trx->bts->ul_power_target;</span><br><span style="color: hsl(120, 100%, 40%);">+                                      ? 0.0 : trx->bts->ul_power_ctrl.target;</span><br><span> </span><br><span>    dev_par->fTxPowerLevel = ((float) initial_mdBm) / 1000;</span><br><span>   LOGP(DL1C, LOGL_NOTICE, "Init TRX (ARFCN %u, TSC %u, RxPower % 2f dBm, "</span><br><span>diff --git a/src/osmo-bts-sysmo/sysmobts_vty.c b/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>index f575884..1f2aefb 100644</span><br><span>--- a/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>+++ b/src/osmo-bts-sysmo/sysmobts_vty.c</span><br><span>@@ -154,7 +154,7 @@</span><br><span> {</span><br><span>       struct gsm_bts_trx *trx = vty->index;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    trx->bts->ul_power_target = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+      trx->bts->ul_power_ctrl.target = atoi(argv[0]);</span><br><span> </span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-trx/trx_vty.c b/src/osmo-bts-trx/trx_vty.c</span><br><span>index ceca330..0353064 100644</span><br><span>--- a/src/osmo-bts-trx/trx_vty.c</span><br><span>+++ b/src/osmo-bts-trx/trx_vty.c</span><br><span>@@ -198,7 +198,7 @@</span><br><span> {</span><br><span>     vty_out (vty, "'osmotrx ms-power-loop' is deprecated, use 'uplink-power-target' instead%s", VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- g_bts->ul_power_target = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+    g_bts->ul_power_ctrl.target = atoi(argv[0]);</span><br><span> </span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span>diff --git a/tests/power/power_test.c b/tests/power/power_test.c</span><br><span>index c5c4db3..a686134 100644</span><br><span>--- a/tests/power/power_test.c</span><br><span>+++ b/tests/power/power_test.c</span><br><span>@@ -47,7 +47,7 @@</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_target = -75;</span><br><span style="color: hsl(120, 100%, 40%);">+      g_bts->ul_power_ctrl.target = -75;</span><br><span>        g_bts->band = GSM_BAND_1800;</span><br><span>      g_bts->c0 = g_trx;</span><br><span> </span><br><span>@@ -98,7 +98,7 @@</span><br><span>        apply_power_test(lchan, -90, 1, 5);</span><br><span> </span><br><span>      /* Check good RSSI value keeps it at same power level: */</span><br><span style="color: hsl(0, 100%, 40%);">-       apply_power_test(lchan, g_bts->ul_power_target, 0, 5);</span><br><span style="color: hsl(120, 100%, 40%);">+     apply_power_test(lchan, g_bts->ul_power_ctrl.target, 0, 5);</span><br><span> </span><br><span>   apply_power_test(lchan, -90, 1, 3);</span><br><span>  apply_power_test(lchan, -90, 1, 2); /* .max is pwr lvl 2 */</span><br><span>@@ -116,7 +116,7 @@</span><br><span>    apply_power_test(lchan, -90, 0, 29);</span><br><span> </span><br><span>     /* Check good RSSI value keeps it at same power level: */</span><br><span style="color: hsl(0, 100%, 40%);">-       apply_power_test(lchan, g_bts->ul_power_target, 0, 29);</span><br><span style="color: hsl(120, 100%, 40%);">+    apply_power_test(lchan, g_bts->ul_power_ctrl.target, 0, 29);</span><br><span> </span><br><span>  /* Now go down, steps are double size in this direction: */</span><br><span>  apply_power_test(lchan, -45, 1, 1);</span><br><span>@@ -124,13 +124,13 @@</span><br><span>  apply_power_test(lchan, -45, 1, 9);</span><br><span> </span><br><span>      /* Go down only one level down and up: */</span><br><span style="color: hsl(0, 100%, 40%);">-       apply_power_test(lchan, g_bts->ul_power_target + 2, 1, 10);</span><br><span style="color: hsl(0, 100%, 40%);">-  apply_power_test(lchan, g_bts->ul_power_target - 2, 1, 9);</span><br><span style="color: hsl(120, 100%, 40%);">+ apply_power_test(lchan, g_bts->ul_power_ctrl.target + 2, 1, 10);</span><br><span style="color: hsl(120, 100%, 40%);">+   apply_power_test(lchan, g_bts->ul_power_ctrl.target - 2, 1, 9);</span><br><span> </span><br><span>       /* Check if BSC requesting a low max power is applied after loop calculation: */</span><br><span>     lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 2);</span><br><span>      OSMO_ASSERT(lchan->ms_power_ctrl.max == 14);</span><br><span style="color: hsl(0, 100%, 40%);">- apply_power_test(lchan, g_bts->ul_power_target + 2, 1, 14);</span><br><span style="color: hsl(120, 100%, 40%);">+        apply_power_test(lchan, g_bts->ul_power_ctrl.target + 2, 1, 14);</span><br><span>  /* Set back a more normal max: */</span><br><span>    lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 30);</span><br><span>     OSMO_ASSERT(lchan->ms_power_ctrl.max == 0);</span><br><span>@@ -214,22 +214,22 @@</span><br><span>       lchan = &g_trx->ts[0].lchan[0];</span><br><span> </span><br><span>   /* Tolerate power deviations in range -80 .. -70 */</span><br><span style="color: hsl(0, 100%, 40%);">-     g_bts->ul_power_hysteresis = 5;</span><br><span style="color: hsl(120, 100%, 40%);">+    g_bts->ul_power_ctrl.hysteresis = 5;</span><br><span> </span><br><span>  lchan->ms_power_ctrl.current = ms_pwr_ctl_lvl(GSM_BAND_1800, 0);</span><br><span>  OSMO_ASSERT(lchan->ms_power_ctrl.current == 15);</span><br><span>  lchan->ms_power_ctrl.max = ms_pwr_ctl_lvl(GSM_BAND_1800, 26);</span><br><span>     OSMO_ASSERT(lchan->ms_power_ctrl.max == 2);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      apply_power_test(lchan, g_bts->ul_power_target, 0, 15);</span><br><span style="color: hsl(0, 100%, 40%);">-      apply_power_test(lchan, g_bts->ul_power_target + 3, 0, 15);</span><br><span style="color: hsl(0, 100%, 40%);">-  apply_power_test(lchan, g_bts->ul_power_target - 3, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+        apply_power_test(lchan, g_bts->ul_power_ctrl.target, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+       apply_power_test(lchan, g_bts->ul_power_ctrl.target + 3, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+   apply_power_test(lchan, g_bts->ul_power_ctrl.target - 3, 0, 15);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- apply_power_test(lchan, g_bts->ul_power_target, 0, 15);</span><br><span style="color: hsl(0, 100%, 40%);">-      apply_power_test(lchan, g_bts->ul_power_target + 5, 0, 15);</span><br><span style="color: hsl(0, 100%, 40%);">-  apply_power_test(lchan, g_bts->ul_power_target - 5, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+        apply_power_test(lchan, g_bts->ul_power_ctrl.target, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+       apply_power_test(lchan, g_bts->ul_power_ctrl.target + 5, 0, 15);</span><br><span style="color: hsl(120, 100%, 40%);">+   apply_power_test(lchan, g_bts->ul_power_ctrl.target - 5, 0, 15);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- apply_power_test(lchan, g_bts->ul_power_target - 10, 1, 13);</span><br><span style="color: hsl(120, 100%, 40%);">+       apply_power_test(lchan, g_bts->ul_power_ctrl.target - 10, 1, 13);</span><br><span> }</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/21434">change 21434</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/+/21434"/><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: I3886c7aedf3870536f1750f864cf698302ddf2df </div>
<div style="display:none"> Gerrit-Change-Number: 21434 </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>