Transceiver: Don't stop TRX if pulling from OFF timeslot

BTS may have any timeslot disabled, or may have not yet sent initial
SETSLOT cmd to properly configure the timeslot.

Change-Id: Icf62e5d1200c7a440f255bb46023cdbf61532b7f
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 3901997..2f4018c 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -587,9 +587,11 @@
 /*
  * Pull bursts from the FIFO and handle according to the slot
  * and burst correlation type. Equalzation is currently disabled.
- * returns true on success (bi filled), false on error (bi content undefined).
+ * returns 0 on success (bi filled), negative on error (bi content undefined):
+ *        -ENOENT: timeslot is off (fn and tn in bi are filled),
+ *        -EIO: read error
  */
-bool Transceiver::pullRadioVector(size_t chan, struct trx_ul_burst_ind *bi)
+int Transceiver::pullRadioVector(size_t chan, struct trx_ul_burst_ind *bi)
 {
   int rc;
   struct estim_burst_params ebp;
@@ -605,7 +607,7 @@
   radioVector *radio_burst = mReceiveFIFO[chan]->read();
   if (!radio_burst) {
     LOGCHAN(chan, DMAIN, ERROR) << "ReceiveFIFO->read() returned no burst";
-    return false;
+    return -EIO;
   }
 
   /* Set time and determine correlation type */
@@ -635,7 +637,7 @@
    * Not even power level or noise calculation. */
   if (type == OFF) {
     delete radio_burst;
-    return false;
+    return -ENOENT;
   }
 
   /* Select the diversity channel with highest energy */
@@ -702,12 +704,12 @@
 
   delete rxBurst;
   delete radio_burst;
-  return true;
+  return 0;
 
 ret_idle:
   bi->idle = true;
   delete radio_burst;
-  return true;
+  return 0;
 }
 
 void Transceiver::reset()
@@ -1032,9 +1034,15 @@
 bool Transceiver::driveReceiveFIFO(size_t chan)
 {
   struct trx_ul_burst_ind bi;
+  int rc;
 
-  if (!pullRadioVector(chan, &bi))
-    return false;
+  if ((rc = pullRadioVector(chan, &bi)) < 0) {
+    if (rc == -ENOENT) { /* timeslot off, continue processing */
+      LOGCHAN(chan, DMAIN, DEBUG) << unsigned(bi.tn) << ":" << bi.fn << " timeslot is off";
+      return true;
+    }
+    return false; /* other errors: we want to stop the process */
+  }
 
   if (!bi.idle)
     logRxBurst(chan, &bi);