<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/20980">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">measurement: ignore lost FACCH/H uplink measurements<br><br>When a FACCH channel ist transmitted on a TCH/H, it wil be spread over 6<br>blocks and takes out two TCH/H voice blocks. This means that we will end<br>up with one uplink measurement sample less. When the measurement result<br>is calculated missing uplink measurements will be replaced with dummy<br>values. In the case of a FACCH transmission no uplink measurement is<br>missing, so in this case the calculation needs to expect less uplink<br>measurement values in total.<br><br>Change-Id: Ibf693aede8fffa6432cdcdcf5d52910493a1104b<br>Related: OS#4799<br>---<br>M include/osmo-bts/gsm_data.h<br>M src/common/l1sap.c<br>M src/common/measurement.c<br>3 files changed, 24 insertions(+), 2 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/80/20980/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h</span><br><span>index 1c1c5d4..a39d027 100644</span><br><span>--- a/include/osmo-bts/gsm_data.h</span><br><span>+++ b/include/osmo-bts/gsm_data.h</span><br><span>@@ -111,6 +111,9 @@</span><br><span>     uint8_t is_sub:1;</span><br><span>    /* RSSI in dBm * -1 */</span><br><span>       uint8_t inv_rssi;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* FACCH/H requires special handling because it takes out two voice</span><br><span style="color: hsl(120, 100%, 40%);">+    * blocks and the second voice block could be a sub frame. */</span><br><span style="color: hsl(120, 100%, 40%);">+ bool is_facch_h;</span><br><span> };</span><br><span> </span><br><span> struct amr_mode {</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index c9ec9bf..1a0af17 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -658,6 +658,7 @@</span><br><span>   struct info_meas_ind_param *info_meas_ind;</span><br><span>   struct ph_data_param *ph_data_ind;</span><br><span>   struct ph_tch_param *ph_tch_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t link_id = 0;</span><br><span>         uint8_t chan_nr;</span><br><span>     uint32_t fn;</span><br><span>         uint8_t inv_rssi;</span><br><span>@@ -694,6 +695,7 @@</span><br><span>              ph_data_ind = &l1sap->u.data;</span><br><span>                 if (ph_data_ind->rssi == 0)</span><br><span>                       return;</span><br><span style="color: hsl(120, 100%, 40%);">+               link_id = ph_data_ind->link_id;</span><br><span>           chan_nr = ph_data_ind->chan_nr;</span><br><span>           fn = ph_data_ind->fn;</span><br><span>             inv_rssi = abs(ph_data_ind->rssi);</span><br><span>@@ -730,6 +732,14 @@</span><br><span>         ulm.inv_rssi = inv_rssi;</span><br><span>     ulm.is_sub = is_sub;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* FACCH/H requires special handling in measurement.c because in half</span><br><span style="color: hsl(120, 100%, 40%);">+  * rate one FACCH frame takes out two voice blocks, where the second</span><br><span style="color: hsl(120, 100%, 40%);">+   * one might be a SUB frame. */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (ind_type == PRIM_PH_DATA && lchan->type == GSM_LCHAN_TCH_H && !L1SAP_IS_LINK_SACCH(link_id))</span><br><span style="color: hsl(120, 100%, 40%);">+           ulm.is_facch_h = true;</span><br><span style="color: hsl(120, 100%, 40%);">+        else</span><br><span style="color: hsl(120, 100%, 40%);">+          ulm.is_facch_h = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* we assume that symbol period is 1 bit: */</span><br><span>         set_ms_to_data(lchan, ta_offs_256bits / 256, true);</span><br><span> </span><br><span>diff --git a/src/common/measurement.c b/src/common/measurement.c</span><br><span>index a388847..72ac076 100644</span><br><span>--- a/src/common/measurement.c</span><br><span>+++ b/src/common/measurement.c</span><br><span>@@ -341,9 +341,9 @@</span><br><span>   if (!ulm->is_sub)</span><br><span>                 ulm->is_sub = ts45008_83_is_sub(lchan, fn);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      DEBUGPFN(DMEAS, fn, "%s adding measurement (ber10k=%u, ta_offs=%d, ci=%0.2f, is_sub=%u, rssi=-%u), num_ul_meas=%d, fn_mod=%u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    DEBUGPFN(DMEAS, fn, "%s adding measurement (ber10k=%u, ta_offs=%d, ci=%0.2f, is_sub=%u, rssi=-%u, is_facch_h=%u), num_ul_meas=%d, fn_mod=%u\n",</span><br><span>             gsm_lchan_name(lchan), ulm->ber10k, ulm->ta_offs_256bits,</span><br><span style="color: hsl(0, 100%, 40%);">-                 ulm->c_i, ulm->is_sub, ulm->inv_rssi, lchan->meas.num_ul_meas,</span><br><span style="color: hsl(120, 100%, 40%);">+            ulm->c_i, ulm->is_sub, ulm->inv_rssi, ulm->is_facch_h, lchan->meas.num_ul_meas,</span><br><span>               fn_mod);</span><br><span> </span><br><span>        memcpy(&lchan->meas.uplink[lchan->meas.num_ul_meas++], ulm,</span><br><span>@@ -570,6 +570,7 @@</span><br><span>  unsigned int num_ul_meas_subst = 0;</span><br><span>  unsigned int num_ul_meas_expect;</span><br><span>     unsigned int num_ul_meas_excess = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int num_ul_meas_facch = 0;</span><br><span>  int i;</span><br><span> </span><br><span>   /* if measurement period is not complete, abort */</span><br><span>@@ -634,6 +635,11 @@</span><br><span>                    ta256b_sum += m->ta_offs_256bits;</span><br><span> </span><br><span>                     num_ul_meas_actual++;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (m->is_facch_h) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               num_ul_meas_facch++;</span><br><span style="color: hsl(120, 100%, 40%);">+                          num_ul_meas--;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span>            } else {</span><br><span>                     m = &measurement_dummy;</span><br><span> </span><br><span>@@ -660,6 +666,9 @@</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (num_ul_meas_facch)</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPLCHAN(lchan, DMEAS, LOGL_DEBUG, "Lost %u UL measurements to FACCH/H\n", num_ul_meas_facch);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (lchan->tch_mode != GSM48_CMODE_SPEECH_AMR) {</span><br><span>          LOGPLCHAN(lchan, DMEAS, LOGL_DEBUG,</span><br><span>                    "Received UL measurements contain %u SUB measurements, expected %u\n",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/20980">change 20980</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/+/20980"/><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: Ibf693aede8fffa6432cdcdcf5d52910493a1104b </div>
<div style="display:none"> Gerrit-Change-Number: 20980 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>