<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>