<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/21977">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hodec2: clarify current and target rxlev per candidate<br><br>Store the rxlev of the current lchan and the target BTS in the<br>ho_candidate, to clarify the code.<br><br>No functional change, cosmetically prepare for<br>I2704899c85c35dfd4eba43468452483f40016ca2.<br><br>Change-Id: Ie6c165e17bb3c99eebc967a6bb02529db8bdfc98<br>---<br>M src/osmo-bsc/handover_decision_2.c<br>1 file changed, 51 insertions(+), 48 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/77/21977/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c</span><br><span>index 7854f09..ae9435f 100644</span><br><span>--- a/src/osmo-bsc/handover_decision_2.c</span><br><span>+++ b/src/osmo-bsc/handover_decision_2.c</span><br><span>@@ -104,7 +104,8 @@</span><br><span>         struct gsm_bts *bts;            /* target BTS in local BSS */</span><br><span>        const struct gsm0808_cell_id_list2 *cil; /* target cells in remote BSS */</span><br><span>    uint8_t requirements;           /* what is fulfilled */</span><br><span style="color: hsl(0, 100%, 40%);">- int avg;                        /* average RX level */</span><br><span style="color: hsl(120, 100%, 40%);">+        int rxlev_current;</span><br><span style="color: hsl(120, 100%, 40%);">+    int rxlev_target;</span><br><span> };</span><br><span> </span><br><span> enum ho_reason {</span><br><span>@@ -236,6 +237,15 @@</span><br><span>       return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int current_rxlev(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+   return get_meas_rep_avg(lchan,</span><br><span style="color: hsl(120, 100%, 40%);">+                                ho_get_hodec2_full_tdma(bts->ho) ?</span><br><span style="color: hsl(120, 100%, 40%);">+                                 MEAS_REP_DL_RXLEV_FULL : MEAS_REP_DL_RXLEV_SUB,</span><br><span style="color: hsl(120, 100%, 40%);">+                               ho_get_hodec2_rxlev_avg_win(bts->ho));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* obtain averaged rxlev for given neighbor */</span><br><span> static int neigh_meas_avg(struct neigh_meas_proc *nmp, int window)</span><br><span> {</span><br><span>@@ -814,7 +824,7 @@</span><br><span> </span><br><span> /* verbosely log about a handover candidate */</span><br><span> static inline void debug_candidate(struct ho_candidate *candidate,</span><br><span style="color: hsl(0, 100%, 40%);">-                              int8_t rxlev, int tchf_count, int tchh_count)</span><br><span style="color: hsl(120, 100%, 40%);">+                                 int tchf_count, int tchh_count)</span><br><span> {</span><br><span>      struct gsm_lchan *lchan = candidate->lchan;</span><br><span> </span><br><span>@@ -831,25 +841,25 @@</span><br><span>   if (candidate->cil)</span><br><span>               LOGPHOLCHANTOREMOTE(lchan, candidate->cil, LOGL_DEBUG,</span><br><span>                                "RX level %d dBm -> %d dBm\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                             rxlev2dbm(rxlev), rxlev2dbm(candidate->avg));</span><br><span style="color: hsl(120, 100%, 40%);">+                              rxlev2dbm(candidate->rxlev_current), rxlev2dbm(candidate->rxlev_target));</span><br><span> </span><br><span>      if (candidate->bts == lchan->ts->trx->bts)</span><br><span>               LOGPHOLCHANTOBTS(lchan, candidate->bts, LOGL_DEBUG,</span><br><span>                    "RX level %d dBm; "</span><br><span>                HO_CANDIDATE_FMT(f, F) "; " HO_CANDIDATE_FMT(h, H) "\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    rxlev2dbm(candidate->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                 rxlev2dbm(candidate->rxlev_current),</span><br><span>                      HO_CANDIDATE_ARGS(f, F), HO_CANDIDATE_ARGS(h, H));</span><br><span>      else if (candidate->bts)</span><br><span>          LOGPHOLCHANTOBTS(lchan, candidate->bts, LOGL_DEBUG,</span><br><span>                    "RX level %d dBm -> %d dBm; "</span><br><span>                   HO_CANDIDATE_FMT(f, F) "; " HO_CANDIDATE_FMT(h, H) "\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    rxlev2dbm(rxlev), rxlev2dbm(candidate->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+               rxlev2dbm(candidate->rxlev_current), rxlev2dbm(candidate->rxlev_target),</span><br><span>               HO_CANDIDATE_ARGS(f, F), HO_CANDIDATE_ARGS(h, H));</span><br><span> }</span><br><span> </span><br><span> /* add candidate for re-assignment within the current cell */</span><br><span> static void collect_assignment_candidate(struct gsm_lchan *lchan, struct ho_candidate *clist,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       unsigned int *candidates, int av_rxlev)</span><br><span style="color: hsl(120, 100%, 40%);">+                                       unsigned int *candidates, int rxlev_current)</span><br><span> {</span><br><span>   struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span>  int tchf_count, tchh_count;</span><br><span>@@ -862,10 +872,11 @@</span><br><span>          .lchan = lchan,</span><br><span>              .bts = bts,</span><br><span>          .requirements = check_requirements(lchan, bts, tchf_count, tchh_count),</span><br><span style="color: hsl(0, 100%, 40%);">-         .avg = av_rxlev,</span><br><span style="color: hsl(120, 100%, 40%);">+              .rxlev_current = rxlev_current,</span><br><span style="color: hsl(120, 100%, 40%);">+               .rxlev_target = rxlev_current, /* same cell, same rxlev */</span><br><span>   };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  debug_candidate(&c, 0, tchf_count, tchh_count);</span><br><span style="color: hsl(120, 100%, 40%);">+   debug_candidate(&c, tchf_count, tchh_count);</span><br><span> </span><br><span>         if (!c.requirements)</span><br><span>                 return;</span><br><span>@@ -877,7 +888,7 @@</span><br><span> /* add candidates for handover to all neighbor cells */</span><br><span> static void collect_handover_candidate(struct gsm_lchan *lchan, struct neigh_meas_proc *nmp,</span><br><span>                                    struct ho_candidate *clist, unsigned int *candidates,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   bool include_weaker_rxlev, int av_rxlev,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      bool include_weaker_rxlev, int rxlev_current,</span><br><span>                                        int *neighbors_count)</span><br><span> {</span><br><span>    struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span>@@ -890,7 +901,6 @@</span><br><span>            .arfcn = nmp->arfcn,</span><br><span>              .bsic = nmp->bsic,</span><br><span>        };</span><br><span style="color: hsl(0, 100%, 40%);">-      int avg;</span><br><span>     struct ho_candidate c;</span><br><span>       int min_rxlev;</span><br><span>       struct handover_cfg *neigh_cfg;</span><br><span>@@ -929,27 +939,25 @@</span><br><span>       * instead assume the local BTS' config to apply. */</span><br><span>     neigh_cfg = (neighbor_bts ? : bts)->ho;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* calculate average rxlev for this cell over the window */</span><br><span style="color: hsl(0, 100%, 40%);">-     avg = neigh_meas_avg(nmp, ho_get_hodec2_rxlev_neigh_avg_win(bts->ho));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    c = (struct ho_candidate){</span><br><span>           .lchan = lchan,</span><br><span style="color: hsl(0, 100%, 40%);">-         .avg = avg,</span><br><span>          .nik = ni,</span><br><span>           .bts = neighbor_bts,</span><br><span>                 .cil = neighbor_cil,</span><br><span style="color: hsl(120, 100%, 40%);">+          .rxlev_current = rxlev_current,</span><br><span style="color: hsl(120, 100%, 40%);">+               .rxlev_target = neigh_meas_avg(nmp, ho_get_hodec2_rxlev_neigh_avg_win(bts->ho)),</span><br><span>  };</span><br><span> </span><br><span>       /* Heed rxlev hysteresis only if the RXLEV/RXQUAL/TA levels of the MS aren't critically bad and</span><br><span>   * we're just looking for an improvement. If levels are critical, we desperately need a handover</span><br><span>          * and thus skip the hysteresis check. */</span><br><span>    if (!include_weaker_rxlev) {</span><br><span style="color: hsl(0, 100%, 40%);">-            unsigned int pwr_hyst = ho_get_hodec2_pwr_hysteresis(bts->ho);</span><br><span style="color: hsl(0, 100%, 40%);">-               if (avg <= (av_rxlev + pwr_hyst)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                int pwr_hyst = ho_get_hodec2_pwr_hysteresis(bts->ho);</span><br><span style="color: hsl(120, 100%, 40%);">+              if ((c.rxlev_target - c.rxlev_current) <= pwr_hyst) {</span><br><span>                     LOGPHOCAND(&c, LOGL_DEBUG,</span><br><span>                                  "Not a candidate, because RX level (%d dBm) is lower"</span><br><span>                              " or equal than current RX level (%d dBm) + hysteresis (%d)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                               rxlev2dbm(avg), rxlev2dbm(av_rxlev), pwr_hyst);</span><br><span style="color: hsl(120, 100%, 40%);">+                               rxlev2dbm(c.rxlev_target), rxlev2dbm(c.rxlev_current), pwr_hyst);</span><br><span>                         return;</span><br><span>              }</span><br><span>    }</span><br><span>@@ -957,11 +965,11 @@</span><br><span>    /* if the minimum level is not reached.</span><br><span>       * In case of a remote-BSS, use the current BTS' configuration. */</span><br><span>       min_rxlev = ho_get_hodec2_min_rxlev(neigh_cfg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (rxlev2dbm(avg) < min_rxlev) {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (rxlev2dbm(c.rxlev_target) < min_rxlev) {</span><br><span>              LOGPHOCAND(&c, LOGL_DEBUG,</span><br><span>                          "Not a candidate, because RX level (%d dBm) is lower"</span><br><span>                      " than the minimum required RX level (%d dBm)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     rxlev2dbm(avg), min_rxlev);</span><br><span style="color: hsl(120, 100%, 40%);">+                           rxlev2dbm(c.rxlev_target), min_rxlev);</span><br><span>            return;</span><br><span>      }</span><br><span> </span><br><span>@@ -973,7 +981,7 @@</span><br><span>  } else</span><br><span>               c.requirements = check_requirements_remote_bss(lchan, neighbor_cil);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        debug_candidate(&c, av_rxlev, tchf_count, tchh_count);</span><br><span style="color: hsl(120, 100%, 40%);">+    debug_candidate(&c, tchf_count, tchh_count);</span><br><span> </span><br><span>         if (!c.requirements)</span><br><span>                 return;</span><br><span>@@ -984,30 +992,25 @@</span><br><span> </span><br><span> static void collect_candidates_for_lchan(struct gsm_lchan *lchan,</span><br><span>                                      struct ho_candidate *clist, unsigned int *candidates,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int *_av_rxlev, bool include_weaker_rxlev)</span><br><span style="color: hsl(120, 100%, 40%);">+                                    int *_rxlev_current, bool include_weaker_rxlev)</span><br><span> {</span><br><span>        struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span style="color: hsl(0, 100%, 40%);">-     int av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rxlev_current;</span><br><span>   bool assignment;</span><br><span>     bool handover;</span><br><span>       int neighbors_count = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        unsigned int rxlev_avg_win = ho_get_hodec2_rxlev_avg_win(bts->ho);</span><br><span> </span><br><span>    OSMO_ASSERT(candidates);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate average rxlev for this cell over the window */</span><br><span style="color: hsl(0, 100%, 40%);">-     av_rxlev = get_meas_rep_avg(lchan,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  ho_get_hodec2_full_tdma(bts->ho) ?</span><br><span style="color: hsl(0, 100%, 40%);">-                                   MEAS_REP_DL_RXLEV_FULL : MEAS_REP_DL_RXLEV_SUB,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 rxlev_avg_win);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (_av_rxlev)</span><br><span style="color: hsl(0, 100%, 40%);">-          *_av_rxlev = av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+        rxlev_current = current_rxlev(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (_rxlev_current)</span><br><span style="color: hsl(120, 100%, 40%);">+           *_rxlev_current = rxlev_current;</span><br><span> </span><br><span>         /* in case there is no measurement report (yet) */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (av_rxlev < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rxlev_current < 0) {</span><br><span>          LOGPHOLCHAN(lchan, LOGL_DEBUG, "Not collecting candidates, not enough measurements"</span><br><span>                            " (got %d, want %u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                       lchan->meas_rep_count, rxlev_avg_win);</span><br><span style="color: hsl(120, 100%, 40%);">+                     lchan->meas_rep_count, ho_get_hodec2_rxlev_avg_win(bts->ho));</span><br><span>              return;</span><br><span>      }</span><br><span> </span><br><span>@@ -1015,14 +1018,14 @@</span><br><span>      handover = ho_get_ho_active(bts->ho);</span><br><span> </span><br><span>         if (assignment)</span><br><span style="color: hsl(0, 100%, 40%);">-         collect_assignment_candidate(lchan, clist, candidates, av_rxlev);</span><br><span style="color: hsl(120, 100%, 40%);">+             collect_assignment_candidate(lchan, clist, candidates, rxlev_current);</span><br><span> </span><br><span>   if (handover) {</span><br><span>              int i;</span><br><span>               for (i = 0; i < ARRAY_SIZE(lchan->neigh_meas); i++) {</span><br><span>                  collect_handover_candidate(lchan, &lchan->neigh_meas[i],</span><br><span>                                                 clist, candidates,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              include_weaker_rxlev, av_rxlev, &neighbors_count);</span><br><span style="color: hsl(120, 100%, 40%);">+                                                include_weaker_rxlev, rxlev_current, &neighbors_count);</span><br><span>               }</span><br><span>    }</span><br><span> }</span><br><span>@@ -1083,7 +1086,7 @@</span><br><span>       struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span>  int ahs = (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR</span><br><span>                 && lchan->type == GSM_LCHAN_TCH_H);</span><br><span style="color: hsl(0, 100%, 40%);">-       int av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rxlev_current;</span><br><span>   struct ho_candidate clist[1 + ARRAY_SIZE(lchan->neigh_meas)];</span><br><span>     unsigned int candidates = 0;</span><br><span>         int i;</span><br><span>@@ -1099,7 +1102,7 @@</span><br><span>               return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   collect_candidates_for_lchan(lchan, clist, &candidates, &av_rxlev, include_weaker_rxlev);</span><br><span style="color: hsl(120, 100%, 40%);">+     collect_candidates_for_lchan(lchan, clist, &candidates, &rxlev_current, include_weaker_rxlev);</span><br><span> </span><br><span>   /* If assignment is disabled and no neighbor cell report exists, or no neighbor cell qualifies,</span><br><span>       * we may not even have any candidates. */</span><br><span>@@ -1121,7 +1124,7 @@</span><br><span>           if (!clist[i].bts)</span><br><span>                   continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           better = clist[i].avg - av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+             better = clist[i].rxlev_target - clist[i].rxlev_current;</span><br><span>             /* Apply AFS bias? */</span><br><span>                afs_bias = 0;</span><br><span>                if (ahs && (clist[i].requirements & REQUIREMENT_B_TCHF))</span><br><span>@@ -1137,7 +1140,7 @@</span><br><span>         /* perform handover, if there is a candidate */</span><br><span>      if (best_cand) {</span><br><span>             LOGPHOCAND(best_cand, LOGL_INFO, "Best candidate, RX level %d%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       best_applied_afs_bias ? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>          return trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_B_MASK);</span><br><span>   }</span><br><span>@@ -1154,7 +1157,7 @@</span><br><span>            if (!clist[i].bts)</span><br><span>                   continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           better = clist[i].avg - av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+             better = clist[i].rxlev_target - clist[i].rxlev_current;</span><br><span>             /* Apply AFS bias? */</span><br><span>                afs_bias = 0;</span><br><span>                if (ahs && (clist[i].requirements & REQUIREMENT_C_TCHF))</span><br><span>@@ -1170,7 +1173,7 @@</span><br><span>         /* perform handover, if there is a candidate */</span><br><span>      if (best_cand) {</span><br><span>             LOGPHOCAND(best_cand, LOGL_INFO, "Best candidate, RX level %d%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       best_applied_afs_bias? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>           return trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_C_MASK);</span><br><span>   }</span><br><span>@@ -1191,7 +1194,7 @@</span><br><span>            if (!(clist[i].requirements & REQUIREMENT_A_MASK))</span><br><span>                       continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           better = clist[i].avg - av_rxlev;</span><br><span style="color: hsl(120, 100%, 40%);">+             better = clist[i].rxlev_target - clist[i].rxlev_current;</span><br><span>             /* Apply AFS bias?</span><br><span>            * (never to remote-BSS neighbors, since we will not change the lchan type for those.) */</span><br><span>            afs_bias = 0;</span><br><span>@@ -1209,7 +1212,7 @@</span><br><span>        /* perform handover, if there is a candidate */</span><br><span>      if (best_cand) {</span><br><span>             LOGPHOCAND(best_cand, LOGL_INFO, "Best candidate: RX level %d%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       best_applied_afs_bias ? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>          return trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_A_MASK);</span><br><span>   }</span><br><span>@@ -1475,7 +1478,7 @@</span><br><span>                && (intra_cell && upgrade_to_tch_f))</span><br><span>                     continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           avg_rxlev = c->avg;</span><br><span style="color: hsl(120, 100%, 40%);">+                avg_rxlev = c->rxlev_target;</span><br><span> </span><br><span>          /* improve AHS */</span><br><span>            if (upgrade_to_tch_f)</span><br><span>@@ -1639,7 +1642,7 @@</span><br><span>                        LOGPHOCAND(&clist[i], LOGL_DEBUG, "#%d: req={TCH/F:" REQUIREMENTS_FMT ", TCH/H:" REQUIREMENTS_FMT "} avg-rxlev=%d dBm\n",</span><br><span>                             i, REQUIREMENTS_ARGS(clist[i].requirements, F),</span><br><span>                              REQUIREMENTS_ARGS(clist[i].requirements, H),</span><br><span style="color: hsl(0, 100%, 40%);">-                            rxlev2dbm(clist[i].avg));</span><br><span style="color: hsl(120, 100%, 40%);">+                             rxlev2dbm(clist[i].rxlev_target));</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span>@@ -1662,7 +1665,7 @@</span><br><span>        if (best_cand) {</span><br><span>             any_ho = 1;</span><br><span>          LOGPHOCAND(best_cand, LOGL_DEBUG, "Best candidate: RX level %d%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       is_improved ? " (applied AHS->AFS bias)" : "");</span><br><span>            trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_B_MASK);</span><br><span> #if 0</span><br><span>@@ -1703,7 +1706,7 @@</span><br><span>         if (best_cand) {</span><br><span>             any_ho = 1;</span><br><span>          LOGPHOCAND(best_cand, LOGL_INFO, "Worst candidate: RX level %d from TCH/H -> TCH/F%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       is_improved ? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>            trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_B_MASK);</span><br><span> #if 0</span><br><span>@@ -1738,7 +1741,7 @@</span><br><span>         if (best_cand) {</span><br><span>             any_ho = 1;</span><br><span>          LOGPHOCAND(best_cand, LOGL_INFO, "Best candidate: RX level %d%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       is_improved ? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>            trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_C_MASK);</span><br><span> #if 0</span><br><span>@@ -1781,7 +1784,7 @@</span><br><span>         if (best_cand) {</span><br><span>             any_ho = 1;</span><br><span>          LOGPHOCAND(best_cand, LOGL_INFO, "Worst candidate: RX level %d from TCH/H -> TCH/F%s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      rxlev2dbm(best_cand->avg),</span><br><span style="color: hsl(120, 100%, 40%);">+                         rxlev2dbm(best_cand->rxlev_target),</span><br><span>                       is_improved ? " (applied AHS -> AFS rxlev bias)" : "");</span><br><span>            trigger_ho(best_cand, best_cand->requirements & REQUIREMENT_C_MASK);</span><br><span> #if 0</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/21977">change 21977</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-bsc/+/21977"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie6c165e17bb3c99eebc967a6bb02529db8bdfc98 </div>
<div style="display:none"> Gerrit-Change-Number: 21977 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>