diff options
author | Martin Braun <martin.braun@ettus.com> | 2019-07-22 11:51:29 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 11:49:32 -0800 |
commit | 0ea553475ee58664e61dd26113059857c7df1f21 (patch) | |
tree | e874cb2f50d439c02775f5114c2bd1a0a119eb2d /host/lib | |
parent | 4ea4f870660bef7fa4b6e01423ef8f5cdbdb8131 (diff) | |
download | uhd-0ea553475ee58664e61dd26113059857c7df1f21.tar.gz uhd-0ea553475ee58664e61dd26113059857c7df1f21.tar.bz2 uhd-0ea553475ee58664e61dd26113059857c7df1f21.zip |
rfnoc: async message: Include timestamp in async message handling
Async messages (like, e.g., overrun messages) can include a timestamp.
This change enables access to the timestamp in the async message
handler. It is up to the FPGA block implementation to include the
timestamp, if desired/necessary. The definition of the timestamp may
also depend on the block, for example, the overrun async message will
include the time when the overrun occurred.
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp | 4 | ||||
-rw-r--r-- | host/lib/rfnoc/ctrlport_endpoint.cpp | 3 | ||||
-rw-r--r-- | host/lib/rfnoc/radio_control_impl.cpp | 15 |
3 files changed, 15 insertions, 7 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp index 9c3288164..0d10fd13b 100644 --- a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp +++ b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp @@ -269,7 +269,9 @@ private: // - Overrun info // - Underrun info // - Late data packets - void async_message_handler(uint32_t addr, const std::vector<uint32_t>& data); + void async_message_handler(uint32_t addr, + const std::vector<uint32_t>& data, + boost::optional<uint64_t> timestamp); //! FPGA compat number const uint32_t _fpga_compat; diff --git a/host/lib/rfnoc/ctrlport_endpoint.cpp b/host/lib/rfnoc/ctrlport_endpoint.cpp index 267ff5d71..5c0deca1d 100644 --- a/host/lib/rfnoc/ctrlport_endpoint.cpp +++ b/host/lib/rfnoc/ctrlport_endpoint.cpp @@ -275,7 +275,8 @@ public: "CTRLEP", "Malformed async message request: Invalid num_data"); } else { try { - _handle_async_msg(rx_ctrl.address, rx_ctrl.data_vtr); + _handle_async_msg( + rx_ctrl.address, rx_ctrl.data_vtr, rx_ctrl.timestamp); status = CMD_OKAY; } catch (...) { UHD_LOG_ERROR("CTRLEP", "Async message handler threw an exception"); diff --git a/host/lib/rfnoc/radio_control_impl.cpp b/host/lib/rfnoc/radio_control_impl.cpp index 205185247..9ce1d83ec 100644 --- a/host/lib/rfnoc/radio_control_impl.cpp +++ b/host/lib/rfnoc/radio_control_impl.cpp @@ -203,10 +203,11 @@ radio_control_impl::radio_control_impl(make_args_ptr make_args) regmap::SWREG_RX_ERR + regmap::SWREG_CHAN_OFFSET * rx_chan); } // Now register a function to receive the async messages - regs().register_async_msg_handler( - [this](uint32_t addr, const std::vector<uint32_t>& data) { - this->async_message_handler(addr, data); - }); + regs().register_async_msg_handler([this](uint32_t addr, + const std::vector<uint32_t>& data, + boost::optional<uint64_t> timestamp) { + this->async_message_handler(addr, data, timestamp); + }); } /* ctor */ /****************************************************************************** @@ -791,7 +792,7 @@ void radio_control_impl::issue_stream_cmd( * Private methods *****************************************************************************/ void radio_control_impl::async_message_handler( - uint32_t addr, const std::vector<uint32_t>& data) + uint32_t addr, const std::vector<uint32_t>& data, boost::optional<uint64_t> timestamp) { if (data.empty()) { RFNOC_LOG_WARNING( @@ -817,6 +818,10 @@ void radio_control_impl::async_message_handler( "%s channel %d, addr_offset %d") % addr % data.size() % (addr_base == regmap::SWREG_TX_ERR ? "TX" : "RX") % chan % addr_offset)); + if (timestamp) { + RFNOC_LOG_TRACE( + str(boost::format("Async message timestamp: %ul") % timestamp.get())); + } switch (addr_base + addr_offset) { case regmap::SWREG_TX_ERR: { switch (code) { |