<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmocom-bb/+/17301">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/scheduler: print completeness of the Rx burst buffers<br><br>Change-Id: Ife9f5eabc23aa2eea08b190361e10a98e890d608<br>Related: OS#3554<br>---<br>M src/host/trxcon/sched_lchan_common.c<br>M src/host/trxcon/sched_lchan_pdtch.c<br>M src/host/trxcon/sched_lchan_tchf.c<br>M src/host/trxcon/sched_lchan_tchh.c<br>M src/host/trxcon/sched_lchan_xcch.c<br>M src/host/trxcon/sched_trx.h<br>6 files changed, 33 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/01/17301/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/sched_lchan_common.c b/src/host/trxcon/sched_lchan_common.c</span><br><span>index d8d9ee1..813f315 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_common.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_common.c</span><br><span>@@ -2,7 +2,7 @@</span><br><span>  * OsmocomBB <-> SDR connection bridge</span><br><span>  * TDMA scheduler: common routines for lchan handlers</span><br><span>  *</span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2017-2019 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2017-2020 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span>  *</span><br><span>  * All Rights Reserved</span><br><span>  *</span><br><span>@@ -84,6 +84,25 @@</span><br><span>     },</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Get a string representation of the burst buffer's completeness.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Examples: "  ****.." (incomplete, 4/6 bursts)</span><br><span style="color: hsl(120, 100%, 40%);">+ *           "    ****" (complete, all 4 bursts)</span><br><span style="color: hsl(120, 100%, 40%);">+ *           "**.***.." (incomplete, 5/8 bursts) */</span><br><span style="color: hsl(120, 100%, 40%);">+const char *burst_mask2str(const uint8_t *mask, int bits)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     /* TODO: CSD is interleaved over 22 bursts, so the mask needs to be extended */</span><br><span style="color: hsl(120, 100%, 40%);">+       static char buf[8 + 1];</span><br><span style="color: hsl(120, 100%, 40%);">+       char *ptr = buf;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(bits <= 8 && bits > 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   while (--bits >= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                *(ptr++) = (*mask & (1 << bits)) ? '*' : '.';</span><br><span style="color: hsl(120, 100%, 40%);">+       *ptr = '\0';</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return buf;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int sched_gsmtap_send(enum trx_lchan_type lchan_type, uint32_t fn, uint8_t tn,</span><br><span>                 uint16_t band_arfcn, int8_t signal_dbm, uint8_t snr,</span><br><span>                 const uint8_t *data, size_t data_len)</span><br><span>diff --git a/src/host/trxcon/sched_lchan_pdtch.c b/src/host/trxcon/sched_lchan_pdtch.c</span><br><span>index 733e574..83a6f53 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_pdtch.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_pdtch.c</span><br><span>@@ -88,8 +88,9 @@</span><br><span> </span><br><span>         /* Check for complete set of bursts */</span><br><span>       if ((*mask & 0xf) != 0xf) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DSCHD, LOGL_ERROR, "Received incomplete data frame at "</span><br><span style="color: hsl(0, 100%, 40%);">-                  "fn=%u (%u/%u) for %s\n", *first_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DSCHD, LOGL_ERROR, "Received incomplete (%s) data frame at "</span><br><span style="color: hsl(120, 100%, 40%);">+                   "fn=%u (%u/%u) for %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   burst_mask2str(mask, 4), *first_fn,</span><br><span>                  (*first_fn) % ts->mf_layout->period,</span><br><span>                   ts->mf_layout->period,</span><br><span>                         lchan_desc->name);</span><br><span>diff --git a/src/host/trxcon/sched_lchan_tchf.c b/src/host/trxcon/sched_lchan_tchf.c</span><br><span>index f2ecdcc..0109280 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_tchf.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_tchf.c</span><br><span>@@ -90,8 +90,9 @@</span><br><span> </span><br><span>   /* Check for complete set of bursts */</span><br><span>       if ((*mask & 0xf) != 0xf) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DSCHD, LOGL_ERROR, "Received incomplete traffic frame at "</span><br><span style="color: hsl(0, 100%, 40%);">-                       "fn=%u (%u/%u) for %s\n", *first_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DSCHD, LOGL_ERROR, "Received incomplete (%s) traffic frame at "</span><br><span style="color: hsl(120, 100%, 40%);">+                        "fn=%u (%u/%u) for %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   burst_mask2str(mask, 8), *first_fn,</span><br><span>                  (*first_fn) % ts->mf_layout->period,</span><br><span>                   ts->mf_layout->period,</span><br><span>                         lchan_desc->name);</span><br><span>diff --git a/src/host/trxcon/sched_lchan_tchh.c b/src/host/trxcon/sched_lchan_tchh.c</span><br><span>index 0201ee3..8288670 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_tchh.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_tchh.c</span><br><span>@@ -299,8 +299,9 @@</span><br><span> </span><br><span>         /* Check decoding result */</span><br><span>  if (rc < 4) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DSCHD, LOGL_ERROR, "Received bad TCH frame ending at "</span><br><span style="color: hsl(0, 100%, 40%);">-                   "fn=%u on %s (rc=%d)\n", fn, lchan_desc->name, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DSCHD, LOGL_ERROR, "Received bad TCH frame (%s) ending at "</span><br><span style="color: hsl(120, 100%, 40%);">+                    "fn=%u on %s (rc=%d)\n", burst_mask2str(mask, 6),</span><br><span style="color: hsl(120, 100%, 40%);">+                   fn, lchan_desc->name, rc);</span><br><span> </span><br><span>            /* Send BFI */</span><br><span>               goto bfi;</span><br><span>diff --git a/src/host/trxcon/sched_lchan_xcch.c b/src/host/trxcon/sched_lchan_xcch.c</span><br><span>index d341646..34fe5ce 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_xcch.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_xcch.c</span><br><span>@@ -87,8 +87,9 @@</span><br><span> </span><br><span>       /* Check for complete set of bursts */</span><br><span>       if ((*mask & 0xf) != 0xf) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DSCHD, LOGL_ERROR, "Received incomplete data frame at "</span><br><span style="color: hsl(0, 100%, 40%);">-                  "fn=%u (%u/%u) for %s\n", *first_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DSCHD, LOGL_ERROR, "Received incomplete (%s) data frame at "</span><br><span style="color: hsl(120, 100%, 40%);">+                   "fn=%u (%u/%u) for %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   burst_mask2str(mask, 4), *first_fn,</span><br><span>                  (*first_fn) % ts->mf_layout->period,</span><br><span>                   ts->mf_layout->period,</span><br><span>                         lchan_desc->name);</span><br><span>diff --git a/src/host/trxcon/sched_trx.h b/src/host/trxcon/sched_trx.h</span><br><span>index 8718ed6..13fc678 100644</span><br><span>--- a/src/host/trxcon/sched_trx.h</span><br><span>+++ b/src/host/trxcon/sched_trx.h</span><br><span>@@ -355,6 +355,7 @@</span><br><span> /* Shared declarations for lchan handlers */</span><br><span> extern const uint8_t sched_nb_training_bits[8][26];</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const char *burst_mask2str(const uint8_t *mask, int bits);</span><br><span> size_t sched_bad_frame_ind(uint8_t *l2, struct trx_lchan_state *lchan);</span><br><span> int sched_send_dt_ind(struct trx_instance *trx, struct trx_ts *ts,</span><br><span>         struct trx_lchan_state *lchan, uint8_t *l2, size_t l2_len,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmocom-bb/+/17301">change 17301</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/osmocom-bb/+/17301"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ife9f5eabc23aa2eea08b190361e10a98e890d608 </div>
<div style="display:none"> Gerrit-Change-Number: 17301 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>