Hi Mike,

1. making another identical object will just give you another copy of the same smart pointer :)

1. & 2. & 3 are sadly all inadequate solutions, because you query the device time at some randomly varying time after a sample has been produced.


The right approach is actually 4, but without you needing to copy the the UHD USRP Source: The source already tags rx_time whenever the device sends time-containing metadata (which it should do whenever you it sets the device time.


In your custom block, you just watch for these rx_time tags. When you find one, you save the time (or better even, ticks) it contains, together with its sample offset. When you later wonder what time a specific item was read, you just use nitems_read(0) of your block to get the offset of the first item in your (general_)work() call, and calculate the time.


Best regards,

Marcus

On 13.01.22 23:24, Michael Bassi wrote:
Hi all,

I'm using GR3.9 with UHD4.1.0.1.
I have a flowgraph containing a UHD_USRP Source block, with Sync property set to "PC Clock on Next PPS" so that the device time is synced to PC system time on the next PPS.

I want to then, somewhat frequently, access the usrp time from within downstream custom C++ blocks.

Options that I've considered:
1. From the custom c++ block - make another UHD USRP device instance (though I don't think this is possible, as the device has already been allocated to the source block):
    uhd::device_addr_t deviceAddress("");
    uhd::usrp::multi_usrp::sptr usrp = 
uhd::usrp::multi_usrp::make(deviceAddress);

2. From the custom c++ block - Just retrieve clock info from the device a bit like this (but it's too slow):
    uhd::device_addr_t dev;
    dev["addr"] = "192.168.XXX.XXX";
    uhd::usrp_clock::multi_usrp_clock::sptr clock = uhd::usrp_clock::multi_usrp_clock::make(dev);
    std::cout << clock->get_time()

3. From the custom c++ block - Somehow access the already discovered usrp device from the UHD_USRP source block (not sure how to do this)

4. Copy and modify the usrp source code to send time as a stream tag along with each packet (seems like a lot of work!) a. perhaps this could be achieved using the UHD_USRP Source block stream args property - though would require mods to the .yml?

Thanks for your help!
Mike

_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to