USRP Hardware Driver and USRP Manual  Version: 4.9.0.0
UHD and USRP Manual
replay_block_control.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2020 Ettus Research, a National Instruments Brand
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #pragma once
8 
9 #include <uhd/config.hpp>
11 
12 namespace uhd { namespace rfnoc {
13 
14 // doxygen tables need long long lines
15 // clang-format off
110 // clang-format on
112 {
113 public:
115 
116  static const uint16_t MINOR_COMPAT;
117  static const uint16_t MAJOR_COMPAT;
118 
119  static const uint32_t REPLAY_ADDR_W;
120  static const uint32_t REPLAY_BLOCK_OFFSET;
121 
122  static const uint32_t REG_COMPAT_ADDR;
123  static const uint32_t REG_MEM_SIZE_ADDR;
124  static const uint32_t REG_REC_RESTART_ADDR;
125  static const uint32_t REG_REC_BASE_ADDR_LO_ADDR;
126  static const uint32_t REG_REC_BASE_ADDR_HI_ADDR;
127  static const uint32_t REG_REC_BUFFER_SIZE_LO_ADDR;
128  static const uint32_t REG_REC_BUFFER_SIZE_HI_ADDR;
129  static const uint32_t REG_REC_FULLNESS_LO_ADDR;
130  static const uint32_t REG_REC_FULLNESS_HI_ADDR;
131  static const uint32_t REG_PLAY_BASE_ADDR_LO_ADDR;
132  static const uint32_t REG_PLAY_BASE_ADDR_HI_ADDR;
133  static const uint32_t REG_PLAY_BUFFER_SIZE_LO_ADDR;
134  static const uint32_t REG_PLAY_BUFFER_SIZE_HI_ADDR;
135  static const uint32_t REG_PLAY_CMD_NUM_WORDS_LO_ADDR;
136  static const uint32_t REG_PLAY_CMD_NUM_WORDS_HI_ADDR;
137  static const uint32_t REG_PLAY_CMD_TIME_LO_ADDR;
138  static const uint32_t REG_PLAY_CMD_TIME_HI_ADDR;
139  static const uint32_t REG_PLAY_CMD_ADDR;
140  static const uint32_t REG_PLAY_WORDS_PER_PKT_ADDR;
141  static const uint32_t REG_PLAY_ITEM_SIZE_ADDR;
142  static const uint32_t REG_REC_POS_LO_ADDR;
143  static const uint32_t REG_REC_POS_HI_ADDR;
144  static const uint32_t REG_PLAY_POS_LO_ADDR;
145  static const uint32_t REG_PLAY_POS_HI_ADDR;
146  static const uint32_t REG_PLAY_CMD_FIFO_SPACE_ADDR;
147 
148  static const uint32_t PLAY_CMD_STOP;
149  static const uint32_t PLAY_CMD_FINITE;
150  static const uint32_t PLAY_CMD_CONTINUOUS;
151 
156  static constexpr auto PLAY_CONTINUOUS{std::numeric_limits<size_t>::max()};
157 
158  /**************************************************************************
159  * Replay Control API calls
160  *************************************************************************/
177  virtual void record(
178  const uint64_t offset, const uint64_t size, const size_t port = 0) = 0;
179 
186  virtual void record_restart(const size_t port = 0) = 0;
187 
231  virtual void play(const uint64_t offset,
232  const uint64_t size,
233  const size_t port,
234  const uhd::time_spec_t time_spec,
235  const bool repeat) = 0;
236 
278  virtual void play(const uint64_t offset,
279  const uint64_t size,
280  const size_t port = 0,
281  const uhd::time_spec_t time_spec = uhd::time_spec_t(0.0),
282  const size_t iterations = 1) = 0;
283 
291  virtual void stop(const size_t port = 0) = 0;
292 
300  virtual uint64_t get_mem_size() const = 0;
301 
306  virtual uint64_t get_word_size() const = 0;
307 
308  /**************************************************************************
309  * Record State API calls
310  *************************************************************************/
316  virtual uint64_t get_record_offset(const size_t port = 0) const = 0;
317 
323  virtual uint64_t get_record_size(const size_t port = 0) const = 0;
324 
333  virtual uint64_t get_record_fullness(const size_t port = 0) = 0;
334 
340  virtual uint64_t get_record_position(const size_t port = 0) = 0;
341 
347  virtual io_type_t get_record_type(const size_t port = 0) const = 0;
348 
354  virtual size_t get_record_item_size(const size_t port = 0) const = 0;
355 
369  virtual bool get_record_async_metadata(
370  uhd::rx_metadata_t& metadata, const double timeout = 0.1) = 0;
371 
372  /**************************************************************************
373  * Playback State API calls
374  *************************************************************************/
380  virtual uint64_t get_play_offset(const size_t port = 0) const = 0;
381 
387  virtual uint64_t get_play_size(const size_t port = 0) const = 0;
388 
394  virtual uint64_t get_play_position(const size_t port = 0) = 0;
395 
401  virtual uint32_t get_max_items_per_packet(const size_t port = 0) const = 0;
402 
410  virtual uint32_t get_max_packet_size(const size_t port = 0) const = 0;
411 
417  virtual io_type_t get_play_type(const size_t port = 0) const = 0;
418 
424  virtual size_t get_play_item_size(const size_t port = 0) const = 0;
425 
439  virtual bool get_play_async_metadata(
440  uhd::async_metadata_t& metadata, const double timeout = 0.1) = 0;
441 
442  /**************************************************************************
443  * Advanced Record Control API calls
444  *************************************************************************/
452  virtual void set_record_type(const io_type_t type, const size_t port = 0) = 0;
453 
454  /**************************************************************************
455  * Advanced Playback Control API calls
456  *************************************************************************/
471  virtual void config_play(
472  const uint64_t offset, const uint64_t size, const size_t port = 0) = 0;
473 
481  virtual void set_play_type(const io_type_t type, const size_t port = 0) = 0;
482 
492  virtual void set_max_items_per_packet(const uint32_t ipp, const size_t port = 0) = 0;
493 
502  virtual void set_max_packet_size(const uint32_t size, const size_t port = 0) = 0;
503 
520  virtual void issue_stream_cmd(
521  const uhd::stream_cmd_t& stream_cmd, const size_t port = 0) = 0;
522 
530  virtual void post_input_action(
531  const std::shared_ptr<uhd::rfnoc::action_info>& action, const size_t port) = 0;
532 
540  virtual void post_output_action(
541  const std::shared_ptr<uhd::rfnoc::action_info>& action, const size_t port) = 0;
542 };
543 
544 }} /* namespace uhd::rfnoc */
config.hpp
uhd::rfnoc::noc_block_base
Definition: noc_block_base.hpp:42
uhd::rfnoc::replay_block_control
Definition: replay_block_control.hpp:111
UHD_API
#define UHD_API
Definition: config.h:87
uhd::async_metadata_t
Definition: metadata.hpp:202
uhd
Definition: build_info.hpp:12
uhd::time_spec_t
Definition: time_spec.hpp:28
uhd::rfnoc::io_type_t
std::string io_type_t
Definition: defaults.hpp:32
uhd::stream_cmd_t
Definition: stream_cmd.hpp:39
noc_block_base.hpp
RFNOC_DECLARE_BLOCK
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
uhd::rx_metadata_t
Definition: metadata.hpp:22