Fix: don't send SCH burst to the output if it wasn't correctly decoded
This had very bad effect of incorrect fn_time values coming into txtime_setter block.
They, subsequently, might have caused busts with tx_time values in distant future. The result on uhd sink is deadlock.
diff --git a/lib/receiver/receiver_impl.cc b/lib/receiver/receiver_impl.cc
index d57b4a1..cf080cb 100644
--- a/lib/receiver/receiver_impl.cc
+++ b/lib/receiver/receiver_impl.cc
@@ -209,7 +209,6 @@
time_spec_t current_rx_time = time_spec_t(rx_time_full_part, rx_time_frac_part);
uint64_t current_start_offset = rx_time_tag.offset;
d_time_samp_ref.update(current_rx_time, current_start_offset);
- std::cout << "Mam rx_time: " << current_rx_time.get_real_secs() << std::endl;
}
return d_samples_consumed;
@@ -346,7 +345,7 @@
case sch_burst:
{
- int d_ncc, d_bcc;
+ int ncc, bcc;
int t1, t2, t3;
int rc;
@@ -358,12 +357,8 @@
detect_burst(input, &channel_imp_resp[0],
d_c0_burst_start, output_binary);
- /* Compose a message with GSMTAP header and bits */
- send_burst(d_burst_nr, output_binary,
- GSMTAP_BURST_SCH, input_nr, d_c0_burst_start);
-
/* Attempt to decode SCH burst */
- rc = decode_sch(&output_binary[3], &t1, &t2, &t3, &d_ncc, &d_bcc);
+ rc = decode_sch(&output_binary[3], &t1, &t2, &t3, &ncc, &bcc);
if (rc) {
if (++d_failed_sch >= MAX_SCH_ERRORS) {
/* We have to resynchronize, change state */
@@ -374,10 +369,13 @@
pmt::from_double(0.0),pmt::mp("sync_loss"));
message_port_pub(pmt::mp("measurements"), msg);
}
-
break;
}
+ /* Compose a message with GSMTAP header and bits */
+ send_burst(d_burst_nr, output_binary,
+ GSMTAP_BURST_SCH, input_nr, d_c0_burst_start);
+
/**
* Decoding was successful, now
* compute offset from burst_start,
@@ -1073,6 +1071,7 @@
message_port_pub(pmt::mp("C0"), msg);
else
message_port_pub(pmt::mp("CX"), msg);
+
}
void