USRP Hardware Driver and USRP Manual  Version: 4.7.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 
152  /**************************************************************************
153  * Replay Control API calls
154  *************************************************************************/
171  virtual void record(
172  const uint64_t offset, const uint64_t size, const size_t port = 0) = 0;
173 
180  virtual void record_restart(const size_t port = 0) = 0;
181 
222  virtual void play(const uint64_t offset,
223  const uint64_t size,
224  const size_t port = 0,
225  const uhd::time_spec_t time_spec = uhd::time_spec_t(0.0),
226  const bool repeat = false) = 0;
227 
235  virtual void stop(const size_t port = 0) = 0;
236 
244  virtual uint64_t get_mem_size() const = 0;
245 
250  virtual uint64_t get_word_size() const = 0;
251 
252  /**************************************************************************
253  * Record State API calls
254  *************************************************************************/
260  virtual uint64_t get_record_offset(const size_t port = 0) const = 0;
261 
267  virtual uint64_t get_record_size(const size_t port = 0) const = 0;
268 
277  virtual uint64_t get_record_fullness(const size_t port = 0) = 0;
278 
284  virtual uint64_t get_record_position(const size_t port = 0) = 0;
285 
291  virtual io_type_t get_record_type(const size_t port = 0) const = 0;
292 
298  virtual size_t get_record_item_size(const size_t port = 0) const = 0;
299 
313  virtual bool get_record_async_metadata(
314  uhd::rx_metadata_t& metadata, const double timeout = 0.1) = 0;
315 
316  /**************************************************************************
317  * Playback State API calls
318  *************************************************************************/
324  virtual uint64_t get_play_offset(const size_t port = 0) const = 0;
325 
331  virtual uint64_t get_play_size(const size_t port = 0) const = 0;
332 
338  virtual uint64_t get_play_position(const size_t port = 0) = 0;
339 
345  virtual uint32_t get_max_items_per_packet(const size_t port = 0) const = 0;
346 
354  virtual uint32_t get_max_packet_size(const size_t port = 0) const = 0;
355 
361  virtual io_type_t get_play_type(const size_t port = 0) const = 0;
362 
368  virtual size_t get_play_item_size(const size_t port = 0) const = 0;
369 
383  virtual bool get_play_async_metadata(
384  uhd::async_metadata_t& metadata, const double timeout = 0.1) = 0;
385 
386  /**************************************************************************
387  * Advanced Record Control API calls
388  *************************************************************************/
396  virtual void set_record_type(const io_type_t type, const size_t port = 0) = 0;
397 
398  /**************************************************************************
399  * Advanced Playback Control API calls
400  *************************************************************************/
415  virtual void config_play(
416  const uint64_t offset, const uint64_t size, const size_t port = 0) = 0;
417 
425  virtual void set_play_type(const io_type_t type, const size_t port = 0) = 0;
426 
436  virtual void set_max_items_per_packet(const uint32_t ipp, const size_t port = 0) = 0;
437 
446  virtual void set_max_packet_size(const uint32_t size, const size_t port = 0) = 0;
447 
464  virtual void issue_stream_cmd(
465  const uhd::stream_cmd_t& stream_cmd, const size_t port = 0) = 0;
466 };
467 
468 }} /* namespace uhd::rfnoc */
Definition: stream_cmd.hpp:39
Definition: time_spec.hpp:28
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
Definition: metadata.hpp:22
Definition: build_info.hpp:12
Definition: noc_block_base.hpp:42
#define UHD_API
Definition: config.h:87
Definition: replay_block_control.hpp:111
Definition: metadata.hpp:202
std::string io_type_t
Definition: defaults.hpp:32