Modified to work with proposed gr-uhd tags timestamp interface. Probably going to change.

This commit is contained in:
Nick Foster
2011-05-16 18:06:54 -07:00
parent 462b7fbed3
commit 773ddf8dec
3 changed files with 18 additions and 26 deletions

View File

@@ -161,39 +161,34 @@ int air_modes_slicer::work(int noutput_items,
}
/******************** BEGIN TIMESTAMP BS ******************/
rx_packet.timestamp_secs = 0;
rx_packet.timestamp_frac = 0;
rx_packet.timestamp = 0;
uint64_t abs_sample_cnt = nitems_read(0);
std::vector<pmt::pmt_t> tags;
uint64_t timestamp_secs, timestamp_sample, timestamp_delta;
double timestamp_frac;
static uint64_t timestamp_secs, timestamp_sample, timestamp_delta;
static double timestamp_frac;
double timestamp_total;
pmt::pmt_t timestamp;
get_tags_in_range(tags, 0, abs_sample_cnt, abs_sample_cnt + i, pmt::pmt_string_to_symbol("packet_time_stamp"));
get_tags_in_range(tags, 0, abs_sample_cnt, abs_sample_cnt + i, pmt::pmt_string_to_symbol("time"));
//tags.back() is the most recent timestamp, then.
if(tags.size() > 0) {
//if nobody but the USRP is producing timestamps this isn't necessary
//std::sort(tags.begin(), tags.end(), pmtcompare);
timestamp = tags.back();
}
if(timestamp.get()) {
timestamp_secs = pmt_to_uint64(pmt_tuple_ref(gr_tags::get_value(timestamp), 0));
timestamp_frac = pmt_to_double(pmt_tuple_ref(gr_tags::get_value(timestamp), 1));
timestamp_sample = gr_tags::get_nitems(timestamp);
//now we have to offset the timestamp based on the current sample number
timestamp_delta = (abs_sample_cnt + i) - timestamp_sample;
timestamp_frac += timestamp_delta * d_secs_per_sample;
if(timestamp_frac > 1.0) {
timestamp_frac -= 1.0;
timestamp_secs++;
}
rx_packet.timestamp_secs = timestamp_secs;
rx_packet.timestamp_frac = timestamp_frac;
}
//now we have to offset the timestamp based on the current sample number
timestamp_delta = (abs_sample_cnt + i) - timestamp_sample;
timestamp_total = timestamp_delta * d_secs_per_sample + timestamp_frac + timestamp_secs;
rx_packet.timestamp = timestamp_total;
/******************* END TIMESTAMP BS *********************/
//increment for the next round
@@ -272,8 +267,7 @@ int air_modes_slicer::work(int noutput_items,
}
d_payload << " " << std::setw(6) << rx_packet.parity << " " << std::dec << rx_packet.reference_level
<< " " << rx_packet.timestamp_secs
<< " " << std::setprecision(10) << std::setw(10) << rx_packet.timestamp_frac;
<< " " << std::setprecision(10) << std::setw(10) << rx_packet.timestamp;
gr_message_sptr msg = gr_make_message_from_string(std::string(d_payload.str()));
d_queue->handle(msg);

View File

@@ -36,8 +36,7 @@ struct modes_packet {
framer_packet_type type; //what length packet are we
unsigned int message_type;
float reference_level;
unsigned long timestamp_secs; //timestamp from tags
double timestamp_frac;
double timestamp;
};
#endif

View File

@@ -30,14 +30,13 @@ class modes_output_print(modes_parse.modes_parse):
modes_parse.modes_parse.__init__(self, mypos)
def parse(self, message):
[msgtype, shortdata, longdata, parity, ecc, reference, time_secs, time_frac] = message.split()
[msgtype, shortdata, longdata, parity, ecc, reference, timestamp] = message.split()
shortdata = long(shortdata, 16)
longdata = long(longdata, 16)
parity = long(parity, 16)
ecc = long(ecc, 16)
reference = float(reference)
time_secs = long(time_secs)
time_frac = float(time_frac)
timestamp = float(timestamp)
msgtype = int(msgtype)
@@ -62,7 +61,7 @@ class modes_output_print(modes_parse.modes_parse):
refdb = 10.0*math.log10(reference)
if output is not None:
output = "(%.0f %u %f) " % (refdb, time_secs, time_frac) + output
output = "(%.0f %f) " % (refdb, timestamp) + output
print output
def print0(self, shortdata, parity, ecc):