aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2016-11-01 16:45:29 -0700
committerMartin Braun <martin.braun@ettus.com>2018-03-16 10:48:46 -0700
commit49520bfecb5e13126224ee915208c2cd936f911c (patch)
tree8daa638d55ffe5294306a6fe8e2c8b6261d8a375 /host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp
parent60a911cd460ca1e29d838ee0039d67bf7c8fe7f3 (diff)
downloaduhd-49520bfecb5e13126224ee915208c2cd936f911c.tar.gz
uhd-49520bfecb5e13126224ee915208c2cd936f911c.tar.bz2
uhd-49520bfecb5e13126224ee915208c2cd936f911c.zip
rfnoc: ctrl_iface cleanup
- ctrl_iface is now longer a wb_iface. All it can do now is send command packets, and receive responses to those. - ctrl_iface does not store command time or tick rate - wb_iface_adapter is no longer a set of functors, but a wrapper around ctrl_iface. Command times are stored once, in the block. - DMA FIFO and radio block controllers have an easier time getting access to a timed_wb_iface
Diffstat (limited to 'host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp')
-rw-r--r--host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp52
1 files changed, 36 insertions, 16 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp b/host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp
index 2ef50a1a1..d89dea534 100644
--- a/host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp
+++ b/host/lib/include/uhdlib/rfnoc/ctrl_iface.hpp
@@ -8,37 +8,57 @@
#ifndef INCLUDED_LIBUHD_RFNOC_CTRL_IFACE_HPP
#define INCLUDED_LIBUHD_RFNOC_CTRL_IFACE_HPP
-#include <uhd/utils/msg_task.hpp>
-#include <uhd/types/time_spec.hpp>
-#include <uhd/transport/zero_copy.hpp>
-#include <uhd/types/wb_iface.hpp>
+#include "xports.hpp"
#include <boost/shared_ptr.hpp>
-#include <boost/utility.hpp>
#include <string>
namespace uhd { namespace rfnoc {
/*!
- * Provide access to peek, poke for the radio ctrl module
+ * Provide read/write access to registers on an RFNoC block via Noc-Shell.
*/
-class ctrl_iface : public uhd::timed_wb_iface
+class ctrl_iface
{
public:
typedef boost::shared_ptr<ctrl_iface> sptr;
-
virtual ~ctrl_iface(void) = 0;
- //! Make a new control object
+ /*! Make a new control object
+ *
+ * \param xports Bidirectional transport object to the RFNoC block port.
+ * \param name Optional name for better identification in error messages.
+ */
static sptr make(
- const bool big_endian,
- uhd::transport::zero_copy_if::sptr ctrl_xport,
- uhd::transport::zero_copy_if::sptr resp_xport,
- const uint32_t sid,
- const std::string &name = "0"
+ const both_xports_t &xports,
+ const std::string &name="0"
);
- //! Set the tick rate (converting time into ticks)
- virtual void set_tick_rate(const double rate) = 0;
+ /*! Send a command packet.
+ *
+ * \param addr Register address. This is the value that gets put into the
+ * command packet, its interpretation is defined on the FPGA.
+ * \param data Register value to write.
+ * \param readback If true, assume the command packet is for a readback,
+ * and wait for a response packet to return. The return
+ * value will then be the 64-bit payload of that response
+ * packet. If false, the return value is the payload of
+ * any outstanding ACK packet.
+ * \param timestamp Optional timestamp. The command packet will include this
+ * timestamp. Depending on the block configuration, this
+ * can trigger timed commands.
+ * A value of zero indicates that no timestamp will be
+ * applied. It is not possible to request anything to
+ * happen at time zero.
+ *
+ * \throws uhd::io_error if the response is malformed; uhd::runtime_error if
+ * no packet could be sent.
+ */
+ virtual uint64_t send_cmd_pkt(
+ const size_t addr,
+ const size_t data,
+ const bool readback=false,
+ const uint64_t timestamp=0
+ ) = 0;
};
}} /* namespace uhd::rfnoc */