<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/16141">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">power_control.c: Don't use announced MS Power level as input for loop calculations<br><br>Use instead the received MS Power currently in use by the MS matching<br>the measured signal. This way there's no need to wait for the MS to<br>reach the announced MS power level or add checks in case the MS doesn't<br>support that specific power level. Furthermore, more fine grained<br>announced power level value can be obtained faster due to more input<br>iterations not being dropped while waiting.<br><br>osmo-bts-trx specific algo was not following this approach and using<br>announced MS power instead because it's wowrking at a lower level and<br>henche was not using the transmitted MS Power level value by the MS as<br>input for the calculation.<br><br>Related: OS#1851<br>Change-Id: I4494dc27a295a3dca1d3331d4ff712d486643e13<br>---<br>M include/osmo-bts/gsm_data_shared.h<br>M src/common/l1sap.c<br>M src/common/power_control.c<br>3 files changed, 4 insertions(+), 22 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/41/16141/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h</span><br><span>index c19bb21..41998ad 100644</span><br><span>--- a/include/osmo-bts/gsm_data_shared.h</span><br><span>+++ b/include/osmo-bts/gsm_data_shared.h</span><br><span>@@ -322,7 +322,6 @@</span><br><span>          uint8_t current;</span><br><span>             uint8_t max;</span><br><span>                 bool fixed;</span><br><span style="color: hsl(0, 100%, 40%);">-             int8_t last_received; /* last received MS Power in uplink L1 SACCH, -1 means not set */</span><br><span>      } ms_power_ctrl;</span><br><span>     /* Power levels for BTS */</span><br><span>   uint8_t bs_power;</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index 4937d1e..7bf0b09 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -1647,7 +1647,6 @@</span><br><span> </span><br><span>   lchan->sacch_deact = 0;</span><br><span>   lchan->s = lchan->ts->trx->bts->radio_link_timeout;</span><br><span style="color: hsl(0, 100%, 40%);">-      lchan->ms_power_ctrl.last_received = -1; /* mark no ms power received yet */</span><br><span> </span><br><span>  rc = l1sap_chan_act_dact_modify(trx, chan_nr, PRIM_INFO_ACTIVATE, 0);</span><br><span>        if (rc)</span><br><span>diff --git a/src/common/power_control.c b/src/common/power_control.c</span><br><span>index 129334e..a437677 100644</span><br><span>--- a/src/common/power_control.c</span><br><span>+++ b/src/common/power_control.c</span><br><span>@@ -51,22 +51,6 @@</span><br><span>    if (lchan->ms_power_ctrl.fixed)</span><br><span>           return 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* The phone hasn't reached the power level yet.</span><br><span style="color: hsl(0, 100%, 40%);">-       TODO: store .last and check if MS is trying to move towards current. */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (lchan->ms_power_ctrl.current != ms_power) {</span><br><span style="color: hsl(0, 100%, 40%);">-              if (lchan->ms_power_ctrl.last_received == -1 ||</span><br><span style="color: hsl(0, 100%, 40%);">-                  lchan->ms_power_ctrl.last_received != ms_power) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* MS Power still changing, keep current power level */</span><br><span style="color: hsl(0, 100%, 40%);">-                 lchan->ms_power_ctrl.last_received = ms_power;</span><br><span style="color: hsl(0, 100%, 40%);">-                       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               /* else: we are stuck with some received MS Power level</span><br><span style="color: hsl(0, 100%, 40%);">-            different than the one we announce, probably because the MS</span><br><span style="color: hsl(0, 100%, 40%);">-             doesn't support that exact one so it picked the nearest one</span><br><span style="color: hsl(0, 100%, 40%);">-                 */</span><br><span style="color: hsl(0, 100%, 40%);">-           lchan->ms_power_ctrl.last_received = ms_power;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* How many dBs measured power should be increased (+) or decreased (-)</span><br><span>         to reach expected power. */</span><br><span>       diff = bts->ul_power_target - rxLevel;</span><br><span>@@ -75,11 +59,11 @@</span><br><span>      if (diff < 2 && diff > -2)</span><br><span>             return 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   current_dbm = ms_pwr_dbm(band, lchan->ms_power_ctrl.current);</span><br><span style="color: hsl(120, 100%, 40%);">+      current_dbm = ms_pwr_dbm(band, ms_power);</span><br><span>    if (current_dbm < 0) {</span><br><span>            LOGPLCHAN(lchan, DLOOP, LOGL_NOTICE,</span><br><span>                           "Failed to calculate dBm for power ctl level %" PRIu8 " on band %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      lchan->ms_power_ctrl.current, gsm_band_name(band));</span><br><span style="color: hsl(120, 100%, 40%);">+                        ms_power, gsm_band_name(band));</span><br><span>            return 0;</span><br><span>    }</span><br><span>    bsc_max_dbm = ms_pwr_dbm(band, lchan->ms_power_ctrl.max);</span><br><span>@@ -110,13 +94,13 @@</span><br><span>  }</span><br><span> </span><br><span>        if (lchan->ms_power_ctrl.current == new_power) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "Keeping MS new_power at control level %d, %d dBm "</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "Keeping MS power at control level %d, %d dBm "</span><br><span>                           "(rx-ms-pwr-lvl %" PRIu8 ", rx-current %d dBm, rx-target %d dBm)\n",</span><br><span>                   new_power, ms_pwr_dbm(band, new_power), ms_power, rxLevel, bts->ul_power_target);</span><br><span>                 return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "%s MS new_power from control level %d (%d dBm) to %d, %d dBm "</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "%s MS power from control level %d (%d dBm) to %d, %d dBm "</span><br><span>               "(rx-ms-pwr-lvl %" PRIu8 ", rx-current %d dBm, rx-target %d dBm)\n",</span><br><span>           (diff > 0) ? "Raising" : "Lowering",</span><br><span>          lchan->ms_power_ctrl.current, ms_pwr_dbm(band, lchan->ms_power_ctrl.current),</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/16141">change 16141</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/+/16141"/><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: I4494dc27a295a3dca1d3331d4ff712d486643e13 </div>
<div style="display:none"> Gerrit-Change-Number: 16141 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>