<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/18589">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts-trx: Use TRXC cmd NOMTXPOWER to retrieve nominal tx power from osmo-trx<br><br>Change-Id: I682211f3d664c21f923ca4a530e0464ca383b6d9<br>---<br>M src/osmo-bts-trx/l1_if.c<br>M src/osmo-bts-trx/main.c<br>M src/osmo-bts-trx/trx_if.c<br>M src/osmo-bts-trx/trx_if.h<br>4 files changed, 49 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c</span><br><span>index 97f87a1..0858de2 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>@@ -145,6 +145,16 @@</span><br><span>    trx->power_params.trx_p_max_out_mdBm = to_mdB(nominal_power);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 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%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct phy_instance *pinst = l1h->phy_inst;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_bts_trx *trx = pinst->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    l1if_trx_set_nominal_power(trx, nominal_power);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void l1if_setslot_cb(struct trx_l1h *l1h, uint8_t tn, uint8_t type, int rc)</span><br><span> {</span><br><span>      struct phy_instance *pinst = l1h->phy_inst;</span><br><span>@@ -240,6 +250,13 @@</span><br><span>                if (!l1h->config.arfcn_sent) {</span><br><span>                    trx_if_cmd_rxtune(l1h, l1h->config.arfcn);</span><br><span>                        trx_if_cmd_txtune(l1h, l1h->config.arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* After TXTUNE is sent to TRX, get the tx nominal power</span><br><span style="color: hsl(120, 100%, 40%);">+                       * (which may vary precisly on band/arfcn. Avoid sending</span><br><span style="color: hsl(120, 100%, 40%);">+                       * it if we are forced by VTY to use a specific nominal</span><br><span style="color: hsl(120, 100%, 40%);">+                        * power (because TRX may not support the command or</span><br><span style="color: hsl(120, 100%, 40%);">+                   * provide broken values) */</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (!l1h->config.nominal_power_set_by_vty)</span><br><span style="color: hsl(120, 100%, 40%);">+                         trx_if_cmd_getnompower(l1h, l1if_getnompower_cb);</span><br><span>                    l1h->config.arfcn_sent = 1;</span><br><span>               }</span><br><span>            if (!l1h->config.tsc_sent) {</span><br><span>diff --git a/src/osmo-bts-trx/main.c b/src/osmo-bts-trx/main.c</span><br><span>index fbe4c2f..0d2a1f7 100644</span><br><span>--- a/src/osmo-bts-trx/main.c</span><br><span>+++ b/src/osmo-bts-trx/main.c</span><br><span>@@ -104,10 +104,9 @@</span><br><span>      bts->variant = BTS_OSMO_TRX;</span><br><span>      bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       /* The nominal value is later  overwritten through VTY cmd</span><br><span style="color: hsl(0, 100%, 40%);">-       * 'nominal-tx-power' if present.</span><br><span style="color: hsl(0, 100%, 40%);">-        * FIXME: In the future, we want osmo-trx to provide us with this info</span><br><span style="color: hsl(0, 100%, 40%);">-   * through TRXC. */</span><br><span style="color: hsl(120, 100%, 40%);">+   /* The nominal value for each TRX is later overwritten through VTY cmd</span><br><span style="color: hsl(120, 100%, 40%);">+         * 'nominal-tx-power' if present, otherwise through TRXC cmd NOMTXPOWER.</span><br><span style="color: hsl(120, 100%, 40%);">+       */</span><br><span>  bts->c0->nominal_power = 23;</span><br><span> </span><br><span>       osmo_bts_set_feature(bts->features, BTS_FEAT_GPRS);</span><br><span>@@ -129,6 +128,9 @@</span><br><span> </span><br><span> int bts_model_trx_init(struct gsm_bts_trx *trx)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* The nominal value for each TRX is later overwritten through VTY cmd</span><br><span style="color: hsl(120, 100%, 40%);">+         * 'nominal-tx-power' if present, otherwise through TRXC cmd NOMTXPOWER.</span><br><span style="color: hsl(120, 100%, 40%);">+       */</span><br><span>  l1if_trx_set_nominal_power(trx, trx->bts->c0->nominal_power);</span><br><span>       return 0;</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 f2e2915..61f57b9 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>@@ -302,6 +302,12 @@</span><br><span>       return trx_ctrl_cmd(l1h, 0, "SETRXGAIN", "%d", db);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Send "NOMTXPOWER" command to TRX */</span><br><span style="color: hsl(120, 100%, 40%);">+int trx_if_cmd_getnompower(struct trx_l1h *l1h, trx_if_cmd_getnompower_cb *cb)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        return trx_ctrl_cmd_cb(l1h, 1, cb, "NOMTXPOWER", "");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Send "SETPOWER" command to TRX */</span><br><span> int trx_if_cmd_setpower_att(struct trx_l1h *l1h, int power_att_db, trx_if_cmd_setpower_att_cb *cb)</span><br><span> {</span><br><span>@@ -544,6 +550,22 @@</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int trx_ctrl_rx_rsp_nomtxpower(struct trx_l1h *l1h, struct trx_ctrl_rsp *rsp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   trx_if_cmd_getnompower_cb *cb = (trx_if_cmd_getnompower_cb*) rsp->cb;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct phy_instance *pinst = l1h->phy_inst;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int nominal_power;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rsp->status)</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPPHI(pinst, DTRX, LOGL_ERROR, "transceiver NOMTXPOWER failed with status %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  rsp->status);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (cb) {</span><br><span style="color: hsl(120, 100%, 40%);">+             sscanf(rsp->params, "%u", &nominal_power);</span><br><span style="color: hsl(120, 100%, 40%);">+           cb(l1h, nominal_power, rsp->status);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int trx_ctrl_rx_rsp_setpower(struct trx_l1h *l1h, struct trx_ctrl_rsp *rsp)</span><br><span> {</span><br><span>    trx_if_cmd_setpower_att_cb *cb = (trx_if_cmd_setpower_att_cb*) rsp->cb;</span><br><span>@@ -578,6 +600,8 @@</span><br><span>      * so that's why we should use tcm instead of rsp. */</span><br><span>    } else if (strcmp(tcm->cmd, "SETFORMAT") == 0) {</span><br><span>                return trx_ctrl_rx_rsp_setformat(l1h, rsp);</span><br><span style="color: hsl(120, 100%, 40%);">+   } else if (strcmp(tcm->cmd, "NOMTXPOWER") == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                return trx_ctrl_rx_rsp_nomtxpower(l1h, rsp);</span><br><span>         } else if (strcmp(tcm->cmd, "SETPOWER") == 0) {</span><br><span>                 return trx_ctrl_rx_rsp_setpower(l1h, rsp);</span><br><span>   }</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 300be92..34335f8 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>@@ -15,6 +15,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(120, 100%, 40%);">+typedef void trx_if_cmd_getnompower_cb(struct trx_l1h *l1h, unsigned 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>@@ -23,6 +24,7 @@</span><br><span> int trx_if_cmd_settsc(struct trx_l1h *l1h, uint8_t tsc);</span><br><span> int trx_if_cmd_setbsic(struct trx_l1h *l1h, uint8_t bsic);</span><br><span> int trx_if_cmd_setrxgain(struct trx_l1h *l1h, int db);</span><br><span style="color: hsl(120, 100%, 40%);">+int trx_if_cmd_getnompower(struct trx_l1h *l1h, trx_if_cmd_getnompower_cb *cb);</span><br><span> int trx_if_cmd_setpower_att(struct trx_l1h *l1h, int power_att_db, trx_if_cmd_setpower_att_cb *cb);</span><br><span> int trx_if_cmd_setmaxdly(struct trx_l1h *l1h, int dly);</span><br><span> int trx_if_cmd_setmaxdlynb(struct trx_l1h *l1h, int dly);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/18589">change 18589</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/+/18589"/><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: I682211f3d664c21f923ca4a530e0464ca383b6d9 </div>
<div style="display:none"> Gerrit-Change-Number: 18589 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>