aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2019-07-22 11:51:29 -0700
committerMartin Braun <martin.braun@ettus.com>2019-11-26 11:49:32 -0800
commit0ea553475ee58664e61dd26113059857c7df1f21 (patch)
treee874cb2f50d439c02775f5114c2bd1a0a119eb2d /host/lib
parent4ea4f870660bef7fa4b6e01423ef8f5cdbdb8131 (diff)
downloaduhd-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.hpp4
-rw-r--r--host/lib/rfnoc/ctrlport_endpoint.cpp3
-rw-r--r--host/lib/rfnoc/radio_control_impl.cpp15
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) {