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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm_data: handle l1_info with structs<br><br>in struct gsm_lchan and also in other places l1_info is handled in its<br>binary form. Libosmocore now offers structs to handle l1 info, so lets<br>use those structs to get rid of all the manual decoding of l1_info.<br><br>Depends: libosmocore I23c1890b89d5a0574eb05dace9f64cc59d6f6df7<br>Change-Id: I5eb516d7849750f3dd174d48c9f07dabf2c80515<br>---<br>M include/osmo-bts/gsm_data.h<br>M src/common/l1sap.c<br>M src/common/rsl.c<br>M src/osmo-bts-virtual/l1_if.c<br>4 files changed, 15 insertions(+), 17 deletions(-)<br><br></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 05b6cf2..6caad14 100644</span><br><span>--- a/include/osmo-bts/gsm_data.h</span><br><span>+++ b/include/osmo-bts/gsm_data.h</span><br><span>@@ -323,7 +323,7 @@</span><br><span>               uint8_t num_ul_meas;</span><br><span>                 struct bts_ul_meas uplink[MAX_NUM_UL_MEAS];</span><br><span>          /* last L1 header from the MS */</span><br><span style="color: hsl(0, 100%, 40%);">-                uint8_t l1_info[2];</span><br><span style="color: hsl(120, 100%, 40%);">+           struct rsl_l1_info l1_info;</span><br><span>          struct gsm_meas_rep_unidir ul_res;</span><br><span>           int16_t ms_toa256;</span><br><span>           /* Frame number of the last measurement indication receceived */</span><br><span>@@ -411,11 +411,6 @@</span><br><span>      struct msgb *rep_sacch;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static inline uint8_t lchan_get_ta(const struct gsm_lchan *lchan)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     return lchan->meas.l1_info[1];</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> extern const struct value_string lchan_ciph_state_names[];</span><br><span> static inline const char *lchan_ciph_state_name(uint8_t state) {</span><br><span>         return get_value_string(lchan_ciph_state_names, state);</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index ed7b4e7..0a46b23 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -33,6 +33,7 @@</span><br><span> #include <osmocom/gsm/l1sap.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span> #include <osmocom/gsm/rsl.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_44_004.h></span><br><span> #include <osmocom/core/gsmtap.h></span><br><span> #include <osmocom/core/gsmtap_util.h></span><br><span> #include <osmocom/core/utils.h></span><br><span>@@ -979,7 +980,7 @@</span><br><span>       /* When the MS sets the SRR bit in the UL-SACCH L1 header</span><br><span>     * (repeated SACCH requested) then it makes sense to enable</span><br><span>   * FACCH repetition too. */</span><br><span style="color: hsl(0, 100%, 40%);">-     if ((lchan->meas.l1_info[0] >> 1) & 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->meas.l1_info.srr_sro) {</span><br><span>                lchan->repeated_dl_facch_active = true;</span><br><span>           return;</span><br><span>      }</span><br><span>@@ -1028,7 +1029,7 @@</span><br><span>     * SACCH repetition. */</span><br><span> </span><br><span>  if (lchan->rep_sacch) {</span><br><span style="color: hsl(0, 100%, 40%);">-              if (((lchan->meas.l1_info[0] >> 1) & 1) == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (lchan->meas.l1_info.srr_sro == 0) {</span><br><span>                   /* Toss previous repetition candidate */</span><br><span>                     msgb_free(lchan->rep_sacch);</span><br><span>                      lchan->rep_sacch = NULL;</span><br><span>@@ -1457,6 +1458,7 @@</span><br><span>  uint32_t fn;</span><br><span>         int8_t rssi;</span><br><span>         enum osmo_ph_pres_info_type pr_info = data_ind->pdch_presence_info;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_sacch_l1_hdr *l1_hdr;</span><br><span> </span><br><span>         rssi = data_ind->rssi;</span><br><span>    chan_nr = data_ind->chan_nr;</span><br><span>@@ -1557,10 +1559,11 @@</span><br><span>             * fields on the Um interface is different from the</span><br><span>           * order of fields in RSL. See 3GPP TS 44.004 (section 7.2)</span><br><span>           * vs. 3GPP TS 48.058 (section 9.3.10). */</span><br><span style="color: hsl(0, 100%, 40%);">-              lchan->meas.l1_info[0] = data[0] << 3;</span><br><span style="color: hsl(0, 100%, 40%);">-         lchan->meas.l1_info[0] |= ((data[0] >> 5) & 1) << 2; /* FPC/EPC */</span><br><span style="color: hsl(0, 100%, 40%);">-           lchan->meas.l1_info[0] |= ((data[0] >> 6) & 1) << 1; /* SRR */</span><br><span style="color: hsl(0, 100%, 40%);">-               lchan->meas.l1_info[1] = data[1];</span><br><span style="color: hsl(120, 100%, 40%);">+          l1_hdr = (struct gsm_sacch_l1_hdr*)data;</span><br><span style="color: hsl(120, 100%, 40%);">+              lchan->meas.l1_info.ms_pwr = l1_hdr->ms_pwr;</span><br><span style="color: hsl(120, 100%, 40%);">+            lchan->meas.l1_info.fpc_epc = l1_hdr->fpc_epc;</span><br><span style="color: hsl(120, 100%, 40%);">+          lchan->meas.l1_info.srr_sro = l1_hdr->srr_sro;</span><br><span style="color: hsl(120, 100%, 40%);">+          lchan->meas.l1_info.ta = l1_hdr->ta;</span><br><span>           lchan->meas.flags |= LC_UL_M_F_L1_VALID;</span><br><span> </span><br><span>              lchan_ms_pwr_ctrl(lchan, data[0] & 0x1f, data_ind->rssi);</span><br><span>diff --git a/src/common/rsl.c b/src/common/rsl.c</span><br><span>index 3023ffa..525b637 100644</span><br><span>--- a/src/common/rsl.c</span><br><span>+++ b/src/common/rsl.c</span><br><span>@@ -3202,8 +3202,8 @@</span><br><span>             lchan->meas.ul_res.sub.rx_lev,</span><br><span>            lchan->meas.ul_res.full.rx_qual,</span><br><span>          lchan->meas.ul_res.sub.rx_qual,</span><br><span style="color: hsl(0, 100%, 40%);">-      lchan->meas.l1_info[0],</span><br><span style="color: hsl(0, 100%, 40%);">-      lchan->meas.l1_info[1], l3_len, ms_to2rsl(lchan, le) - MEAS_MAX_TIMING_ADVANCE);</span><br><span style="color: hsl(120, 100%, 40%);">+           lchan->meas.l1_info.ms_pwr,</span><br><span style="color: hsl(120, 100%, 40%);">+        lchan->meas.l1_info.ta, l3_len, ms_to2rsl(lchan, le) - MEAS_MAX_TIMING_ADVANCE);</span><br><span> </span><br><span>         msgb_tv_put(msg, RSL_IE_MEAS_RES_NR, lchan->meas.res_nr++);</span><br><span>       size_t ie_len = gsm0858_rsl_ul_meas_enc(&lchan->meas.ul_res,</span><br><span>@@ -3222,7 +3222,7 @@</span><br><span>                   * to know the total propagation time between MS and BTS, we need to add</span><br><span>                      * the actual TA value applied by the MS plus the respective toa256 value in</span><br><span>                          * 1/256 symbol periods. */</span><br><span style="color: hsl(0, 100%, 40%);">-                     int16_t ta256 = lchan_get_ta(lchan) * 256;</span><br><span style="color: hsl(120, 100%, 40%);">+                    int16_t ta256 = lchan->meas.l1_info.ta * 256;</span><br><span>                     smi->toa256_mean = htons(ta256 + lchan->meas.ms_toa256);</span><br><span>                       smi->toa256_min = htons(ta256 + lchan->meas.ext.toa256_min);</span><br><span>                   smi->toa256_max = htons(ta256 + lchan->meas.ext.toa256_max);</span><br><span>@@ -3234,7 +3234,7 @@</span><br><span>   }</span><br><span>    msgb_tv_put(msg, RSL_IE_BS_POWER, lchan->bs_power_ctrl.current / 2);</span><br><span>      if (lchan->meas.flags & LC_UL_M_F_L1_VALID) {</span><br><span style="color: hsl(0, 100%, 40%);">-            msgb_tv_fixed_put(msg, RSL_IE_L1_INFO, 2, lchan->meas.l1_info);</span><br><span style="color: hsl(120, 100%, 40%);">+            msgb_tv_fixed_put(msg, RSL_IE_L1_INFO, sizeof(lchan->meas.l1_info), (uint8_t*)&lchan->meas.l1_info);</span><br><span>               lchan->meas.flags &= ~LC_UL_M_F_L1_VALID;</span><br><span>     }</span><br><span> </span><br><span>diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c</span><br><span>index ed3b601..78da639 100644</span><br><span>--- a/src/osmo-bts-virtual/l1_if.c</span><br><span>+++ b/src/osmo-bts-virtual/l1_if.c</span><br><span>@@ -329,7 +329,7 @@</span><br><span>     DEBUGPFN(DMEAS, fn, "RX L1 frame %s chan_nr=0x%02x MS pwr=%ddBm rssi=%.1f dBFS "</span><br><span>           "ber=%.2f%% (%d/%d bits) L1_ta=%d rqd_ta=%d toa=%.2f\n",</span><br><span>           gsm_lchan_name(lchan), chan_nr, ms_pwr_dbm(lchan->ts->trx->bts->band, lchan->ms_power_ctrl.max),</span><br><span style="color: hsl(0, 100%, 40%);">-         rssi, ber*100, n_errors, n_bits_total, lchan->meas.l1_info[1], lchan->rqd_ta, toa);</span><br><span style="color: hsl(120, 100%, 40%);">+             rssi, ber*100, n_errors, n_bits_total, lchan->meas.l1_info.ta, lchan->rqd_ta, toa);</span><br><span> </span><br><span>        l1if_fill_meas_res(&l1sap, chan_nr, lchan->rqd_ta + toa, ber, rssi, fn);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/22938">change 22938</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/+/22938"/><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: I5eb516d7849750f3dd174d48c9f07dabf2c80515 </div>
<div style="display:none"> Gerrit-Change-Number: 22938 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>