From 2c9ef501b889ed630af482abf80576720ee2e25d Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 9 Jul 2015 13:08:00 -0700 Subject: [PATCH] Correctly use zero offset for devices that don't issue proper timestamp tags. --- lib/preamble_impl.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/preamble_impl.cc b/lib/preamble_impl.cc index 5e2ac86..da9143e 100644 --- a/lib/preamble_impl.cc +++ b/lib/preamble_impl.cc @@ -98,10 +98,18 @@ static double correlate_preamble(const float *in, int samples_per_chip) { } static pmt::pmt_t tag_to_timestamp(gr::tag_t tstamp, uint64_t abs_sample_cnt, int rate) { + uint64_t last_whole_stamp; + double last_frac_stamp; pmt::pmt_t tstime = pmt::make_tuple(pmt::from_uint64(0), pmt::from_double(0)); - if(tstamp.key == NULL) return tstime; - if(!pmt::is_symbol(tstamp.key)) return tstime; - if(pmt::symbol_to_string(tstamp.key) != "rx_time") return tstime; + if(tstamp.key == NULL + || !pmt::is_symbol(tstamp.key) + || pmt::symbol_to_string(tstamp.key) != "rx_time") { + last_whole_stamp = 0; + last_frac_stamp = 0; + } else { + last_whole_stamp = pmt::to_uint64(pmt::tuple_ref(tstamp.value, 0)); + last_frac_stamp = pmt::to_double(pmt::tuple_ref(tstamp.value, 1)); + } //the timestamp tag has tstamp.offset, the sample index of the timestamp tag //also tstamp.value, a pmt pair with (uint64, double) representing int and @@ -113,8 +121,6 @@ static pmt::pmt_t tag_to_timestamp(gr::tag_t tstamp, uint64_t abs_sample_cnt, in // int((abs_sample_cnt - tstamp.offset)/sps) is the integer offset // (abs_sample_cnt - tstamp.offset)/sps is the fractional offset - uint64_t last_whole_stamp = pmt::to_uint64(pmt::tuple_ref(tstamp.value, 0)); - double last_frac_stamp = pmt::to_double(pmt::tuple_ref(tstamp.value, 1)); uint64_t int_offset = int(abs_sample_cnt - tstamp.offset)/rate; double frac_offset = ((abs_sample_cnt - tstamp.offset) % rate) / double(rate);