<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/18916">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tx_power: Support controlling BTS with nominal tx pwr < 0dBm<br><br>Change-Id: I88d59d47837105d52e2b4dfb819511cd360c50a1<br>---<br>M src/common/tx_power.c<br>M src/osmo-bts-trx/l1_if.c<br>M src/osmo-bts-trx/l1_if.h<br>M src/osmo-bts-trx/trx_if.c<br>M src/osmo-bts-trx/trx_if.h<br>5 files changed, 12 insertions(+), 9 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/16/18916/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/tx_power.c b/src/common/tx_power.c</span><br><span>index b0c959f..e7f7eb3 100644</span><br><span>--- a/src/common/tx_power.c</span><br><span>+++ b/src/common/tx_power.c</span><br><span>@@ -196,8 +196,8 @@</span><br><span>  /* for now we simply write an error message, but in the future</span><br><span>        * we might use the value (again) as part of our math? */</span><br><span>    if (p_trxout_cur_mdBm != p_trxout_should_mdBm) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGPTRX(trx, DL1C, LOGL_ERROR, "bts_model notifies us of %u mdBm TRX "</span><br><span style="color: hsl(0, 100%, 40%);">-                        "output power.  However, it should be %u mdBm!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGPTRX(trx, DL1C, LOGL_ERROR, "bts_model notifies us of %d mdBm TRX "</span><br><span style="color: hsl(120, 100%, 40%);">+                      "output power.  However, it should be %d mdBm!\n",</span><br><span>                         p_trxout_cur_mdBm, p_trxout_should_mdBm);</span><br><span>    }</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c</span><br><span>index 07f6e7a..1cc1e91 100644</span><br><span>--- a/src/osmo-bts-trx/l1_if.c</span><br><span>+++ b/src/osmo-bts-trx/l1_if.c</span><br><span>@@ -150,13 +150,16 @@</span><br><span> }</span><br><span> </span><br><span> /* Sets the nominal power, in dB */</span><br><span style="color: hsl(0, 100%, 40%);">-void l1if_trx_set_nominal_power(struct gsm_bts_trx *trx, unsigned int nominal_power)</span><br><span style="color: hsl(120, 100%, 40%);">+void l1if_trx_set_nominal_power(struct gsm_bts_trx *trx, int nominal_power)</span><br><span> {</span><br><span>     struct phy_instance *pinst = trx_phy_instance(trx);</span><br><span>  bool nom_pwr_changed = trx->nominal_power != nominal_power;</span><br><span> </span><br><span>   trx->nominal_power = nominal_power;</span><br><span>       trx->power_params.trx_p_max_out_mdBm = to_mdB(nominal_power);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* If we receive ultra-low  nominal Tx power (<0dBm), make sure to update where we are */</span><br><span style="color: hsl(120, 100%, 40%);">+  trx->power_params.p_total_cur_mdBm = OSMO_MIN(trx->power_params.p_total_cur_mdBm,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     trx->power_params.trx_p_max_out_mdBm);</span><br><span> </span><br><span>  /* If TRX is not yet powered, delay ramping until it's ON */</span><br><span>     if (!nom_pwr_changed || !pinst->phy_link->u.osmotrx.powered)</span><br><span>@@ -168,12 +171,12 @@</span><br><span>   l1if_trx_start_power_ramp(trx);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void l1if_getnompower_cb(struct trx_l1h *l1h, unsigned int nominal_power, int rc)</span><br><span style="color: hsl(120, 100%, 40%);">+static void l1if_getnompower_cb(struct trx_l1h *l1h, int nominal_power, int rc)</span><br><span> {</span><br><span>       struct phy_instance *pinst = l1h->phy_inst;</span><br><span>       struct gsm_bts_trx *trx = pinst->trx;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    LOGPPHI(pinst, DL1C, LOGL_DEBUG, "l1if_getnompower_cb(nominal_power=%u, rc=%d)\n", nominal_power, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGPPHI(pinst, DL1C, LOGL_NOTICE, "l1if_getnompower_cb(nominal_power=%d, rc=%d)\n", nominal_power, rc);</span><br><span> </span><br><span>        l1if_trx_set_nominal_power(trx, nominal_power);</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-trx/l1_if.h b/src/osmo-bts-trx/l1_if.h</span><br><span>index 5f51acb..3fda726 100644</span><br><span>--- a/src/osmo-bts-trx/l1_if.h</span><br><span>+++ b/src/osmo-bts-trx/l1_if.h</span><br><span>@@ -114,7 +114,7 @@</span><br><span> int l1if_provision_transceiver_trx(struct trx_l1h *l1h);</span><br><span> int l1if_provision_transceiver(struct gsm_bts *bts);</span><br><span> int l1if_mph_time_ind(struct gsm_bts *bts, uint32_t fn);</span><br><span style="color: hsl(0, 100%, 40%);">-void l1if_trx_set_nominal_power(struct gsm_bts_trx *trx, unsigned int nominal_power);</span><br><span style="color: hsl(120, 100%, 40%);">+void l1if_trx_set_nominal_power(struct gsm_bts_trx *trx, int nominal_power);</span><br><span> </span><br><span> static inline struct l1sched_trx *trx_l1sched_hdl(struct gsm_bts_trx *trx)</span><br><span> {</span><br><span>diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c</span><br><span>index 1953f71..3502fbd 100644</span><br><span>--- a/src/osmo-bts-trx/trx_if.c</span><br><span>+++ b/src/osmo-bts-trx/trx_if.c</span><br><span>@@ -554,13 +554,13 @@</span><br><span> {</span><br><span>      trx_if_cmd_getnompower_cb *cb = (trx_if_cmd_getnompower_cb*) rsp->cb;</span><br><span>     struct phy_instance *pinst = l1h->phy_inst;</span><br><span style="color: hsl(0, 100%, 40%);">-  unsigned int nominal_power;</span><br><span style="color: hsl(120, 100%, 40%);">+   int nominal_power;</span><br><span> </span><br><span>       if (rsp->status)</span><br><span>          LOGPPHI(pinst, DTRX, LOGL_ERROR, "transceiver NOMTXPOWER failed with status %d\n",</span><br><span>                         rsp->status);</span><br><span>     if (cb) {</span><br><span style="color: hsl(0, 100%, 40%);">-               sscanf(rsp->params, "%u", &nominal_power);</span><br><span style="color: hsl(120, 100%, 40%);">+           sscanf(rsp->params, "%d", &nominal_power);</span><br><span>          cb(l1h, nominal_power, rsp->status);</span><br><span>      }</span><br><span>    return 0;</span><br><span>diff --git a/src/osmo-bts-trx/trx_if.h b/src/osmo-bts-trx/trx_if.h</span><br><span>index 16b6c76..b2fc326 100644</span><br><span>--- a/src/osmo-bts-trx/trx_if.h</span><br><span>+++ b/src/osmo-bts-trx/trx_if.h</span><br><span>@@ -16,7 +16,7 @@</span><br><span> </span><br><span> typedef void trx_if_cmd_poweronoff_cb(struct trx_l1h *l1h, bool poweronoff, int rc);</span><br><span> typedef void trx_if_cmd_setslot_cb(struct trx_l1h *l1h, uint8_t tn, uint8_t type, int rc);</span><br><span style="color: hsl(0, 100%, 40%);">-typedef void trx_if_cmd_getnompower_cb(struct trx_l1h *l1h, unsigned int nominal_power, int rc);</span><br><span style="color: hsl(120, 100%, 40%);">+typedef void trx_if_cmd_getnompower_cb(struct trx_l1h *l1h, int nominal_power, int rc);</span><br><span> typedef void trx_if_cmd_setpower_att_cb(struct trx_l1h *l1h, int power_att_db, int rc);</span><br><span> </span><br><span> void trx_if_init(struct trx_l1h *l1h);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/18916">change 18916</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/+/18916"/><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: I88d59d47837105d52e2b4dfb819511cd360c50a1 </div>
<div style="display:none"> Gerrit-Change-Number: 18916 </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>