USRP Hardware Driver and Device Manual  Version: 4.11.0.0-0-g0d7ed3b1
UHD and USRP Manual
duc_block_control.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2019 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 #include <uhd/types/ranges.hpp>
12 #include <uhd/types/time_spec.hpp>
13 #include <boost/optional.hpp>
14 #include <optional>
15 
16 namespace uhd { namespace rfnoc {
17 
140 {
141 public:
143 
144 
145  struct reg_addrs_t
146  {
147  uint16_t major_compat;
148  uint16_t minor_compat;
149  uint32_t num_hb;
150  uint32_t cic_max_interp;
151  std::optional<uint32_t> n_addr;
152  std::optional<uint32_t> m_addr;
153  std::optional<uint32_t> config_addr;
154  uint32_t interp_addr;
155  uint32_t freq_addr;
156  uint32_t scale_iq_addr;
157  uint32_t time_incr_addr;
158  };
159 
160  // Compat register address (same across all versions)
161  static const uint32_t REG_COMPAT_NUM;
162  // Register addresses for version 0.x
163  static const reg_addrs_t REG_ADDRS_V0;
164  // Register addresses for version 1.x
165  static const reg_addrs_t REG_ADDRS_V1;
166 
193  virtual double set_freq(const double freq,
194  const size_t chan,
195  const std::optional<uhd::time_spec_t> time = {}) = 0;
196 
197  double set_freq(const double freq, const size_t chan, const uhd::time_spec_t time)
198  {
199  return set_freq(freq, chan, std::make_optional(time));
200  }
201 
202  [[deprecated("Prefer std::optional over boost::optional.")]] virtual double set_freq(
203  const double freq,
204  const size_t chan,
205  const boost::optional<uhd::time_spec_t> time)
206  {
207  return set_freq(
208  freq, chan, bool(time) ? std::make_optional(*time) : std::nullopt);
209  }
210 
215  virtual double get_freq(const size_t chan) const = 0;
216 
228  virtual uhd::freq_range_t get_frequency_range(const size_t chan) const = 0;
229 
235  virtual double get_input_rate(const size_t chan) const = 0;
236 
244  virtual double get_output_rate(const size_t chan) const = 0;
245 
251  virtual void set_output_rate(const double rate, const size_t chan) = 0;
252 
258  virtual uhd::meta_range_t get_input_rates(const size_t chan) const = 0;
259 
270  virtual double set_input_rate(const double rate, const size_t chan) = 0;
271 };
272 
273 }} // namespace uhd::rfnoc
Definition: duc_block_control.hpp:140
virtual void set_output_rate(const double rate, const size_t chan)=0
static const reg_addrs_t REG_ADDRS_V1
Definition: duc_block_control.hpp:165
static const uint32_t REG_COMPAT_NUM
Definition: duc_block_control.hpp:161
virtual double get_freq(const size_t chan) const =0
virtual double get_input_rate(const size_t chan) const =0
virtual uhd::meta_range_t get_input_rates(const size_t chan) const =0
virtual uhd::freq_range_t get_frequency_range(const size_t chan) const =0
virtual double set_freq(const double freq, const size_t chan, const boost::optional< uhd::time_spec_t > time)
Definition: duc_block_control.hpp:202
virtual double get_output_rate(const size_t chan) const =0
virtual double set_freq(const double freq, const size_t chan, const std::optional< uhd::time_spec_t > time={})=0
double set_freq(const double freq, const size_t chan, const uhd::time_spec_t time)
Definition: duc_block_control.hpp:197
static const reg_addrs_t REG_ADDRS_V0
Definition: duc_block_control.hpp:163
virtual double set_input_rate(const double rate, const size_t chan)=0
Definition: noc_block_base.hpp:42
Definition: time_spec.hpp:31
#define UHD_API
Definition: config.h:87
Definition: build_info.hpp:12
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
Definition: ranges.hpp:67
Version-specific register addresses.
Definition: duc_block_control.hpp:146
std::optional< uint32_t > m_addr
Definition: duc_block_control.hpp:152
uint16_t minor_compat
Definition: duc_block_control.hpp:148
uint32_t interp_addr
Definition: duc_block_control.hpp:154
uint32_t freq_addr
Definition: duc_block_control.hpp:155
uint16_t major_compat
Definition: duc_block_control.hpp:147
uint32_t time_incr_addr
Definition: duc_block_control.hpp:157
std::optional< uint32_t > config_addr
Definition: duc_block_control.hpp:153
uint32_t scale_iq_addr
Definition: duc_block_control.hpp:156
uint32_t num_hb
Definition: duc_block_control.hpp:149
std::optional< uint32_t > n_addr
Definition: duc_block_control.hpp:151
uint32_t cic_max_interp
Definition: duc_block_control.hpp:150