<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/15436">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Transceiver: Don't stop TRX if pulling from OFF timeslot<br><br>BTS may have any timeslot disabled, or may have not yet sent initial<br>SETSLOT cmd to properly configure the timeslot.<br><br>Change-Id: Icf62e5d1200c7a440f255bb46023cdbf61532b7f<br>---<br>M Transceiver52M/Transceiver.cpp<br>M Transceiver52M/Transceiver.h<br>2 files changed, 31 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/36/15436/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index 079d1d7..a6cc46f 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -587,9 +587,11 @@</span><br><span> /*</span><br><span>  * Pull bursts from the FIFO and handle according to the slot</span><br><span>  * and burst correlation type. Equalzation is currently disabled.</span><br><span style="color: hsl(0, 100%, 40%);">- * returns true on success (bi filled), false on error (bi content undefined).</span><br><span style="color: hsl(120, 100%, 40%);">+ * returns 0 on success (bi filled), negative on error (bi content undefined):</span><br><span style="color: hsl(120, 100%, 40%);">+ *        -1: timeslot is off (fn and tn in bi are filled),</span><br><span style="color: hsl(120, 100%, 40%);">+ *        -2: read error</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-bool Transceiver::pullRadioVector(size_t chan, struct trx_ul_burst_ind *bi)</span><br><span style="color: hsl(120, 100%, 40%);">+int Transceiver::pullRadioVector(size_t chan, struct trx_ul_burst_ind *bi)</span><br><span> {</span><br><span>   int rc;</span><br><span>   struct estim_burst_params ebp;</span><br><span>@@ -605,25 +607,11 @@</span><br><span>   radioVector *radio_burst = mReceiveFIFO[chan]->read();</span><br><span>   if (!radio_burst) {</span><br><span>     LOGCHAN(chan, DMAIN, ERROR) << "ReceiveFIFO->read() returned no burst";</span><br><span style="color: hsl(0, 100%, 40%);">-    return false;</span><br><span style="color: hsl(120, 100%, 40%);">+    return -2;</span><br><span>   }</span><br><span> </span><br><span>   /* Set time and determine correlation type */</span><br><span>   burstTime = radio_burst->getTime();</span><br><span style="color: hsl(0, 100%, 40%);">-  CorrType type = expectedCorrType(burstTime, chan);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* Debug: dump bursts to disk */</span><br><span style="color: hsl(0, 100%, 40%);">-  /* bits 0-7  - chan 0 timeslots</span><br><span style="color: hsl(0, 100%, 40%);">-   * bits 8-15 - chan 1 timeslots */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (mWriteBurstToDiskMask & ((1<<bi->tn) << (8*chan)))</span><br><span style="color: hsl(0, 100%, 40%);">-    writeToFile(radio_burst, chan);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* No processing if the timeslot is off.</span><br><span style="color: hsl(0, 100%, 40%);">-   * Not even power level or noise calculation. */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (type == OFF) {</span><br><span style="color: hsl(0, 100%, 40%);">-    delete radio_burst;</span><br><span style="color: hsl(0, 100%, 40%);">-    return false;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span> </span><br><span>   /* Initialize struct bi */</span><br><span>   bi->nbits = 0;</span><br><span>@@ -638,6 +626,21 @@</span><br><span>   bi->tsc = 0;</span><br><span>   bi->ci = 0.0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  CorrType type = expectedCorrType(burstTime, chan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Debug: dump bursts to disk */</span><br><span style="color: hsl(120, 100%, 40%);">+  /* bits 0-7  - chan 0 timeslots</span><br><span style="color: hsl(120, 100%, 40%);">+   * bits 8-15 - chan 1 timeslots */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (mWriteBurstToDiskMask & ((1<<bi->tn) << (8*chan)))</span><br><span style="color: hsl(120, 100%, 40%);">+    writeToFile(radio_burst, chan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* No processing if the timeslot is off.</span><br><span style="color: hsl(120, 100%, 40%);">+   * Not even power level or noise calculation. */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (type == OFF) {</span><br><span style="color: hsl(120, 100%, 40%);">+    delete radio_burst;</span><br><span style="color: hsl(120, 100%, 40%);">+    return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* Select the diversity channel with highest energy */</span><br><span>   for (size_t i = 0; i < radio_burst->chans(); i++) {</span><br><span>     float pow = energyDetect(*radio_burst->getVector(i), 20 * mSPSRx);</span><br><span>@@ -702,12 +705,12 @@</span><br><span> </span><br><span>   delete rxBurst;</span><br><span>   delete radio_burst;</span><br><span style="color: hsl(0, 100%, 40%);">-  return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span> </span><br><span> ret_idle:</span><br><span>   bi->idle = true;</span><br><span>   delete radio_burst;</span><br><span style="color: hsl(0, 100%, 40%);">-  return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span> }</span><br><span> </span><br><span> void Transceiver::reset()</span><br><span>@@ -1032,9 +1035,15 @@</span><br><span> bool Transceiver::driveReceiveFIFO(size_t chan)</span><br><span> {</span><br><span>   struct trx_ul_burst_ind bi;</span><br><span style="color: hsl(120, 100%, 40%);">+  int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (!pullRadioVector(chan, &bi))</span><br><span style="color: hsl(0, 100%, 40%);">-    return false;</span><br><span style="color: hsl(120, 100%, 40%);">+  if ((rc = pullRadioVector(chan, &bi)) < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc == -1) { /* timeslot off, warn and continue processing */</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGCHAN(chan, DMAIN, NOTICE) << unsigned(bi.tn) << ":" << bi.fn << " timeslot is off";</span><br><span style="color: hsl(120, 100%, 40%);">+      return true;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+    return false; /* other errors: we want to stop the process */</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span> </span><br><span>   if (!bi.idle)</span><br><span>     logRxBurst(chan, &bi);</span><br><span>diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h</span><br><span>index 0d09854..30f6a60 100644</span><br><span>--- a/Transceiver52M/Transceiver.h</span><br><span>+++ b/Transceiver52M/Transceiver.h</span><br><span>@@ -182,7 +182,7 @@</span><br><span>   void pushRadioVector(GSM::Time &nowTime);</span><br><span> </span><br><span>   /** Pull and demodulate a burst from the receive FIFO */</span><br><span style="color: hsl(0, 100%, 40%);">-  bool pullRadioVector(size_t chan, struct trx_ul_burst_ind *ind);</span><br><span style="color: hsl(120, 100%, 40%);">+  int pullRadioVector(size_t chan, struct trx_ul_burst_ind *ind);</span><br><span> </span><br><span>   /** Set modulus for specific timeslot */</span><br><span>   void setModulus(size_t timeslot, size_t chan);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/15436">change 15436</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-trx/+/15436"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icf62e5d1200c7a440f255bb46023cdbf61532b7f </div>
<div style="display:none"> Gerrit-Change-Number: 15436 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>