<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/18902">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">power_ramp: Add support to get callback when ramping process completes<br><br>It will be used in forthcoming commits to feed FSM events once the<br>ramping process completes.<br><br>Change-Id: I778dc215cf6055b93658670cc12e78ad2e51f85e<br>---<br>M include/osmo-bts/tx_power.h<br>M src/common/bts_ctrl_commands.c<br>M src/common/tx_power.c<br>M src/osmo-bts-octphy/l1_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/l1_if.c<br>M tests/tx_power/tx_power_test.c<br>8 files changed, 20 insertions(+), 12 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/02/18902/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/tx_power.h b/include/osmo-bts/tx_power.h</span><br><span>index 8f33100..4d0457b 100644</span><br><span>--- a/include/osmo-bts/tx_power.h</span><br><span>+++ b/include/osmo-bts/tx_power.h</span><br><span>@@ -20,6 +20,8 @@</span><br><span>    struct pa_calibration calib;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+typedef void (*ramp_compl_cb_t)(struct gsm_bts_trx *trx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Transmit power related parameters of a transceiver */</span><br><span> struct trx_power_params {</span><br><span>         /* specified maximum output of TRX at full power, has to be</span><br><span>@@ -55,6 +57,8 @@</span><br><span>              unsigned int step_size_mdB;</span><br><span>          unsigned int step_interval_sec;</span><br><span>              struct osmo_timer_list step_timer;</span><br><span style="color: hsl(120, 100%, 40%);">+            /* call-back called when target is reached */</span><br><span style="color: hsl(120, 100%, 40%);">+         ramp_compl_cb_t compl_cb;</span><br><span>    } ramp;</span><br><span> };</span><br><span> </span><br><span>@@ -73,7 +77,7 @@</span><br><span> int get_p_trxout_actual_mdBm(struct gsm_bts_trx *trx, uint8_t bs_power_red);</span><br><span> int get_p_trxout_actual_mdBm_lchan(struct gsm_lchan *lchan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int power_ramp_start(struct gsm_bts_trx *trx, int p_total_tgt_mdBm, int bypass);</span><br><span style="color: hsl(120, 100%, 40%);">+int power_ramp_start(struct gsm_bts_trx *trx, int p_total_tgt_mdBm, int bypass, ramp_compl_cb_t ramp_compl_cb);</span><br><span> </span><br><span> void power_trx_change_compl(struct gsm_bts_trx *trx, int p_trxout_cur_mdBm);</span><br><span> </span><br><span>diff --git a/src/common/bts_ctrl_commands.c b/src/common/bts_ctrl_commands.c</span><br><span>index 0d31890..faaba6a 100644</span><br><span>--- a/src/common/bts_ctrl_commands.c</span><br><span>+++ b/src/common/bts_ctrl_commands.c</span><br><span>@@ -57,7 +57,7 @@</span><br><span> </span><br><span>      tpp->thermal_attenuation_mdB = val;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      power_ramp_start(trx, tpp->p_total_cur_mdBm, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   power_ramp_start(trx, tpp->p_total_cur_mdBm, 0, NULL);</span><br><span> </span><br><span>        return get_therm_att(cmd, data);</span><br><span> }</span><br><span>diff --git a/src/common/tx_power.c b/src/common/tx_power.c</span><br><span>index db3121d..c8e961f 100644</span><br><span>--- a/src/common/tx_power.c</span><br><span>+++ b/src/common/tx_power.c</span><br><span>@@ -210,8 +210,11 @@</span><br><span>        struct trx_power_params *tpp = &trx->power_params;</span><br><span> </span><br><span>        /* we had finished in last loop iteration */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!first && tpp->ramp.attenuation_mdB == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!first && tpp->ramp.attenuation_mdB == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (tpp->ramp.compl_cb)</span><br><span style="color: hsl(120, 100%, 40%);">+                    tpp->ramp.compl_cb(trx);</span><br><span>          return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> </span><br><span>        if (we_are_ramping_up(trx)) {</span><br><span>                /* ramp up power -> ramp down attenuation */</span><br><span>@@ -236,7 +239,7 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int power_ramp_start(struct gsm_bts_trx *trx, int p_total_tgt_mdBm, int bypass)</span><br><span style="color: hsl(120, 100%, 40%);">+int power_ramp_start(struct gsm_bts_trx *trx, int p_total_tgt_mdBm, int bypass, ramp_compl_cb_t ramp_compl_cb)</span><br><span> {</span><br><span>       struct trx_power_params *tpp = &trx->power_params;</span><br><span> </span><br><span>@@ -259,6 +262,7 @@</span><br><span> </span><br><span>      /* set the new target */</span><br><span>     tpp->p_total_tgt_mdBm = p_total_tgt_mdBm;</span><br><span style="color: hsl(120, 100%, 40%);">+  tpp->ramp.compl_cb = ramp_compl_cb;</span><br><span> </span><br><span>   if (we_are_ramping_up(trx)) {</span><br><span>                if (tpp->p_total_tgt_mdBm <= tpp->ramp.max_initial_pout_mdBm) {</span><br><span>diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c</span><br><span>index 9c5dd19..7718605 100644</span><br><span>--- a/src/osmo-bts-octphy/l1_oml.c</span><br><span>+++ b/src/osmo-bts-octphy/l1_oml.c</span><br><span>@@ -1740,7 +1740,7 @@</span><br><span>                struct gsm_bts_trx *trx = obj;</span><br><span>               /*struct octphy_hdl *fl1h = trx_octphy_hdl(trx); */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+          power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0, NULL);</span><br><span>   }</span><br><span>    return oml_fom_ack_nack(msg, 0);</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c</span><br><span>index 3533597..c3bf8b6 100644</span><br><span>--- a/src/osmo-bts-sysmo/oml.c</span><br><span>+++ b/src/osmo-bts-sysmo/oml.c</span><br><span>@@ -358,7 +358,7 @@</span><br><span> #endif</span><br><span> </span><br><span>       /* Begin to ramp up the power */</span><br><span style="color: hsl(0, 100%, 40%);">-        power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0, NULL);</span><br><span> </span><br><span>       return opstart_compl(&trx->mo, l1_msg);</span><br><span> }</span><br><span>@@ -1743,7 +1743,7 @@</span><br><span> </span><br><span>              /* Did we go through MphInit yet? If yes fire and forget */</span><br><span>          if (fl1h->hLayer1)</span><br><span style="color: hsl(0, 100%, 40%);">-                   power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                  power_ramp_start(trx, get_p_target_mdBm(trx, 0), 0, NULL);</span><br><span>   }</span><br><span> </span><br><span>        /* FIXME: we actually need to send a ACK or NACK for the OML message */</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 23f69a0..0653f01 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>@@ -362,7 +362,7 @@</span><br><span>       int power = atoi(argv[1]);</span><br><span>   struct gsm_bts_trx *trx = gsm_bts_trx_num(vty_bts, trx_nr);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- power_ramp_start(trx, to_mdB(power), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      power_ramp_start(trx, to_mdB(power), 1, NULL);</span><br><span> </span><br><span>   return CMD_SUCCESS;</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..ea3dcfa 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>@@ -144,9 +144,9 @@</span><br><span>  struct trx_l1h *l1h = pinst->u.osmotrx.hdl;</span><br><span> </span><br><span>   if (l1h->config.forced_max_power_red == -1)</span><br><span style="color: hsl(0, 100%, 40%);">-          power_ramp_start(trx, get_p_nominal_mdBm(trx), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+            power_ramp_start(trx, get_p_nominal_mdBm(trx), 0, NULL);</span><br><span>     else</span><br><span style="color: hsl(0, 100%, 40%);">-            power_ramp_start(trx, get_p_max_out_mdBm(trx) - to_mdB(l1h->config.forced_max_power_red), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+              power_ramp_start(trx, get_p_max_out_mdBm(trx) - to_mdB(l1h->config.forced_max_power_red), 1, NULL);</span><br><span> }</span><br><span> </span><br><span> /* Sets the nominal power, in dB */</span><br><span>@@ -478,7 +478,7 @@</span><br><span>            is already running. Otherwise skip, power ramping will be started</span><br><span>            after TRX is running */</span><br><span>   if (plink->u.osmotrx.powered && l1h->config.forced_max_power_red == -1)</span><br><span style="color: hsl(0, 100%, 40%);">-           power_ramp_start(pinst->trx, get_p_nominal_mdBm(pinst->trx), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                power_ramp_start(pinst->trx, get_p_nominal_mdBm(pinst->trx), 0, NULL);</span><br><span> </span><br><span>     return 0;</span><br><span> }</span><br><span>diff --git a/tests/tx_power/tx_power_test.c b/tests/tx_power/tx_power_test.c</span><br><span>index aaa34ea..02c940f 100644</span><br><span>--- a/tests/tx_power/tx_power_test.c</span><br><span>+++ b/tests/tx_power/tx_power_test.c</span><br><span>@@ -200,7 +200,7 @@</span><br><span>    trx->power_params.ramp.step_interval_sec = 0; /* speedup test */</span><br><span>  trx->max_power_red = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  power_ramp_start(trx, to_mdB(dBm), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+        power_ramp_start(trx, to_mdB(dBm), 0, NULL);</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/+/18902">change 18902</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/+/18902"/><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: I778dc215cf6055b93658670cc12e78ad2e51f85e </div>
<div style="display:none"> Gerrit-Change-Number: 18902 </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>