<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/23828">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo-bts-trx: move MTS parser into trx_data_parse_mts()<br><br>This would allow to re-use this code from the TRXDv2 parser.<br><br>Change-Id: I2de2cb2d58110452d8dedbcacfef28f85f6d67c1<br>Related: SYS#4895, OS#4941, OS#4006<br>---<br>M src/osmo-bts-trx/trx_if.c<br>1 file changed, 38 insertions(+), 27 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/28/23828/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c</span><br><span>index bfa1514..e51b2e0 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>@@ -752,12 +752,45 @@</span><br><span>        return TRX_UL_V0HDR_LEN;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Parser for MTS (Modulation and Training Sequence) */</span><br><span style="color: hsl(120, 100%, 40%);">+static int trx_data_parse_mts(struct trx_l1h *l1h,</span><br><span style="color: hsl(120, 100%, 40%);">+                              struct trx_ul_burst_ind *bi,</span><br><span style="color: hsl(120, 100%, 40%);">+                          const uint8_t mts)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mts & (1 << 7)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               bi->flags |= TRX_BI_F_NOPE_IND;</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 style="color: hsl(120, 100%, 40%);">+   /* | 7 6 5 4 3 2 1 0 | Bitmask / description</span><br><span style="color: hsl(120, 100%, 40%);">+   * | . 0 0 X X . . . | GMSK, 4 TSC sets (0..3)</span><br><span style="color: hsl(120, 100%, 40%);">+         * | . 0 1 0 X . . . | 8-PSK, 2 TSC sets (0..1) */</span><br><span style="color: hsl(120, 100%, 40%);">+    if ((mts >> 5) == 0x00) {</span><br><span style="color: hsl(120, 100%, 40%);">+               bi->mod = TRX_MOD_T_GMSK;</span><br><span style="color: hsl(120, 100%, 40%);">+          bi->tsc_set = (mts >> 3) & 0x03;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if ((mts >> 4) == 0x02) {</span><br><span style="color: hsl(120, 100%, 40%);">+                bi->mod = TRX_MOD_T_8PSK;</span><br><span style="color: hsl(120, 100%, 40%);">+          bi->tsc_set = (mts >> 3) & 0x01;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Rx TRXD PDU with unknown or not supported "</span><br><span style="color: hsl(120, 100%, 40%);">+                        "modulation (MTS=0x%02x)\n", mts);</span><br><span style="color: hsl(120, 100%, 40%);">+          return -ENOTSUP;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Training Sequence Code */</span><br><span style="color: hsl(120, 100%, 40%);">+  bi->tsc = mts & 0x07;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        bi->flags |= (TRX_BI_F_MOD_TYPE | TRX_BI_F_TS_INFO);</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> /* TRXD header dissector for version 0x01 */</span><br><span> static int trx_data_handle_hdr_v1(struct trx_l1h *l1h,</span><br><span>                               struct trx_ul_burst_ind *bi,</span><br><span>                                 const uint8_t *buf, size_t buf_len)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      uint8_t mts;</span><br><span>         int rc;</span><br><span> </span><br><span>  /* Make sure we have enough data */</span><br><span>@@ -777,33 +810,11 @@</span><br><span>  buf_len -= rc;</span><br><span>       buf += rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* IDLE / NOPE frame indication */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (buf[0] & (1 << 7)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              bi->flags |= TRX_BI_F_NOPE_IND;</span><br><span style="color: hsl(0, 100%, 40%);">-              goto skip_mts;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* MTS (Modulation and Training Sequence) */</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = trx_data_parse_mts(l1h, bi, buf[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Modulation info and TSC set */</span><br><span style="color: hsl(0, 100%, 40%);">-       mts = (buf[0] >> 3) & 0b1111;</span><br><span style="color: hsl(0, 100%, 40%);">- if ((mts & 0b1100) == 0x00) {</span><br><span style="color: hsl(0, 100%, 40%);">-               bi->mod = TRX_MOD_T_GMSK;</span><br><span style="color: hsl(0, 100%, 40%);">-            bi->tsc_set = mts & 0b11;</span><br><span style="color: hsl(0, 100%, 40%);">-                bi->flags |= TRX_BI_F_MOD_TYPE;</span><br><span style="color: hsl(0, 100%, 40%);">-      } else if ((mts & 0b0100) == 0b0100) {</span><br><span style="color: hsl(0, 100%, 40%);">-              bi->mod = TRX_MOD_T_8PSK;</span><br><span style="color: hsl(0, 100%, 40%);">-            bi->tsc_set = mts & 0b1;</span><br><span style="color: hsl(0, 100%, 40%);">-         bi->flags |= TRX_BI_F_MOD_TYPE;</span><br><span style="color: hsl(0, 100%, 40%);">-      } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGPPHI(l1h->phy_inst, DTRX, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Indicated modulation 0x%02x is not supported\n", mts & 0b1110);</span><br><span style="color: hsl(0, 100%, 40%);">-          return -ENOTSUP;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Training Sequence Code */</span><br><span style="color: hsl(0, 100%, 40%);">-    bi->tsc = buf[0] & 0b111;</span><br><span style="color: hsl(0, 100%, 40%);">-        bi->flags |= TRX_BI_F_TS_INFO;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-skip_mts:</span><br><span>   /* C/I: Carrier-to-Interference ratio (in centiBels) */</span><br><span>      bi->ci_cb = (int16_t) osmo_load16be(buf + 1);</span><br><span>     bi->flags |= TRX_BI_F_CI_CB;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/23828">change 23828</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/+/23828"/><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: I2de2cb2d58110452d8dedbcacfef28f85f6d67c1 </div>
<div style="display:none"> Gerrit-Change-Number: 23828 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>