USRP Hardware Driver and USRP Manual  Version: 4.4.0.HEAD-0-g5fac246b
UHD and USRP Manual
radio_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>
15 #include <uhd/types/direction.hpp>
16 #include <uhd/types/eeprom.hpp>
17 #include <uhd/types/ranges.hpp>
18 #include <uhd/types/sensors.hpp>
19 #include <uhd/types/stream_cmd.hpp>
20 
21 namespace uhd { namespace rfnoc {
22 
31 {
32 public:
33  static const std::string ALL_LOS;
34  static const std::string ALL_GAINS;
35  static constexpr size_t ALL_CHANS = size_t(~0);
36 
38 
39  /**************************************************************************
40  * Rate-Related API Calls
41  *************************************************************************/
43  //
44  // This function will coerce the rate and return the actual, current value.
45  virtual double set_rate(const double rate) = 0;
46 
48  virtual double get_rate() const = 0;
49 
51  virtual uhd::meta_range_t get_rate_range() const = 0;
52 
54  //
55  // Some radios may operate on multiple samples per clock cycle, usually in
56  // order to handle large bandwidths without requiring very fast FPGA clock
57  // rates.
58  //
59  // When the SPC value is greater than one, certain API calls may behave
60  // slightly differently. This is most relevant for issue_stream_cmd(). Other
61  // commands may round their execution time to the next integer multiple of
62  // SPC as well.
63  //
64  // Ultimately, the exact impact of SPC is device-dependent.
65  virtual size_t get_spc() const = 0;
66 
67  /**************************************************************************
68  * Time-Related API Calls
69  *************************************************************************/
74  virtual uint64_t get_ticks_now() = 0;
79  virtual uhd::time_spec_t get_time_now() = 0;
80 
81  /**************************************************************************
82  * RF-Related API Calls
83  *************************************************************************/
86  virtual std::vector<std::string> get_tx_gain_profile_names(
87  const size_t chan) const = 0;
88 
91  virtual std::vector<std::string> get_rx_gain_profile_names(
92  const size_t chan) const = 0;
93 
96  virtual void set_tx_gain_profile(const std::string& profile, const size_t chan) = 0;
97 
100  virtual void set_rx_gain_profile(const std::string& profile, const size_t chan) = 0;
101 
104  virtual std::string get_tx_gain_profile(const size_t chan) const = 0;
105 
108  virtual std::string get_rx_gain_profile(const size_t chan) const = 0;
109 
110  /**************************************************************************
111  * Calibration-Related API Calls
112  *************************************************************************/
120  virtual void set_tx_dc_offset(const std::complex<double>& offset, size_t chan) = 0;
121 
126  virtual meta_range_t get_tx_dc_offset_range(size_t chan) const = 0;
127 
135  virtual void set_tx_iq_balance(
136  const std::complex<double>& correction, size_t chan) = 0;
137 
149  virtual void set_rx_dc_offset(const bool enb, size_t chan = ALL_CHANS) = 0;
150 
158  virtual void set_rx_dc_offset(const std::complex<double>& offset, size_t chan) = 0;
159 
164  virtual meta_range_t get_rx_dc_offset_range(size_t chan) const = 0;
165 
171  virtual void set_rx_iq_balance(const bool enb, size_t chan) = 0;
172 
178  virtual void set_rx_iq_balance(
179  const std::complex<double>& correction, size_t chan) = 0;
180 
181  /**************************************************************************
182  * GPIO Controls
183  *************************************************************************/
188  virtual std::vector<std::string> get_gpio_banks() const = 0;
189 
204  virtual void set_gpio_attr(
205  const std::string& bank, const std::string& attr, const uint32_t value) = 0;
206 
222  virtual uint32_t get_gpio_attr(const std::string& bank, const std::string& attr) = 0;
223 
224  /**************************************************************************
225  * Sensor API
226  *************************************************************************/
231  virtual std::vector<std::string> get_rx_sensor_names(size_t chan) const = 0;
232 
239  virtual uhd::sensor_value_t get_rx_sensor(const std::string& name, size_t chan) = 0;
240 
245  virtual std::vector<std::string> get_tx_sensor_names(size_t chan) const = 0;
246 
253  virtual uhd::sensor_value_t get_tx_sensor(const std::string& name, size_t chan) = 0;
254 
255  /**************************************************************************
256  * Streaming-Related API Calls
257  *************************************************************************/
272  virtual void issue_stream_cmd(
273  const uhd::stream_cmd_t& stream_cmd, const size_t port) = 0;
274 
277  virtual void enable_rx_timestamps(const bool enable, const size_t chan) = 0;
278 
279  /**************************************************************************
280  * Radio Identification API Calls
281  *************************************************************************/
283  virtual std::string get_slot_name() const = 0;
284 
286  //
287  // Example: "0" -> 0 (for UBX), or "A" -> 0 (for E310)
288  virtual size_t get_chan_from_dboard_fe(
289  const std::string& fe, const uhd::direction_t direction) const = 0;
290 
292  //
293  // Example: 0 -> "0" (for UBX), or 0 -> "A" (for E310)
294  virtual std::string get_dboard_fe_from_chan(
295  const size_t chan, const uhd::direction_t direction) const = 0;
296 
298  virtual std::string get_fe_name(
299  const size_t chan, const uhd::direction_t direction) const = 0;
300 
301  /**************************************************************************
302  * EEPROM API Calls
303  *************************************************************************/
305  //
306  // Note: EEPROMs have finite numbers of write cycles, so don't overuse this
307  // method!
308  virtual void set_db_eeprom(const uhd::eeprom_map_t& db_eeprom) = 0;
309 
311  virtual uhd::eeprom_map_t get_db_eeprom() = 0;
312 };
313 
314 }} // namespace uhd::rfnoc
uhd::rfnoc::radio_control::get_tx_sensor
virtual uhd::sensor_value_t get_tx_sensor(const std::string &name, size_t chan)=0
uhd::rfnoc::radio_control::ALL_CHANS
static constexpr size_t ALL_CHANS
Definition: radio_control.hpp:35
uhd::rfnoc::radio_control::enable_rx_timestamps
virtual void enable_rx_timestamps(const bool enable, const size_t chan)=0
uhd::rfnoc::radio_control::ALL_LOS
static const std::string ALL_LOS
Definition: radio_control.hpp:33
sensors.hpp
device_addr.hpp
core_iface.hpp
uhd::features::discoverable_feature_getter_iface
Definition: discoverable_feature_getter_iface.hpp:17
uhd::rfnoc::radio_control::set_db_eeprom
virtual void set_db_eeprom(const uhd::eeprom_map_t &db_eeprom)=0
Update the daughterboard EEPROM.
config.hpp
uhd::rfnoc::noc_block_base
Definition: noc_block_base.hpp:42
uhd::rfnoc::radio_control::get_spc
virtual size_t get_spc() const =0
Return the samples per clock (SPC) value of this radio.
uhd::rfnoc::radio_control::set_rx_iq_balance
virtual void set_rx_iq_balance(const bool enb, size_t chan)=0
uhd::rfnoc::radio_control::get_time_now
virtual uhd::time_spec_t get_time_now()=0
uhd::rfnoc::radio_control::get_rate
virtual double get_rate() const =0
Get the sample rate.
discoverable_feature_getter_iface.hpp
uhd::rfnoc::radio_control::get_tx_gain_profile
virtual std::string get_tx_gain_profile(const size_t chan) const =0
uhd::rfnoc::radio_control::get_rx_gain_profile_names
virtual std::vector< std::string > get_rx_gain_profile_names(const size_t chan) const =0
uhd::rfnoc::radio_control::get_db_eeprom
virtual uhd::eeprom_map_t get_db_eeprom()=0
Return the content of the daughterboard EEPROM.
stream_cmd.hpp
uhd::rfnoc::radio_control::get_tx_gain_profile_names
virtual std::vector< std::string > get_tx_gain_profile_names(const size_t chan) const =0
uhd::rfnoc::radio_control::get_rx_sensor_names
virtual std::vector< std::string > get_rx_sensor_names(size_t chan) const =0
uhd::rfnoc::radio_control::get_slot_name
virtual std::string get_slot_name() const =0
Returns this radio's slot name (typically "A" or "B")
uhd::rfnoc::radio_control::get_rx_sensor
virtual uhd::sensor_value_t get_rx_sensor(const std::string &name, size_t chan)=0
uhd::rfnoc::radio_control::set_rx_gain_profile
virtual void set_rx_gain_profile(const std::string &profile, const size_t chan)=0
uhd::rfnoc::radio_control::get_rx_dc_offset_range
virtual meta_range_t get_rx_dc_offset_range(size_t chan) const =0
uhd::rfnoc::rf_control::core_iface
Definition: core_iface.hpp:25
uhd
Definition: build_info.hpp:12
uhd::time_spec_t
Definition: time_spec.hpp:28
uhd::rfnoc::rf_control::power_reference_iface
Definition: power_reference_iface.hpp:22
eeprom.hpp
uhd::rfnoc::radio_control::ALL_GAINS
static const std::string ALL_GAINS
Definition: radio_control.hpp:34
uhd::rfnoc::radio_control
Definition: radio_control.hpp:27
ranges.hpp
uhd::rfnoc::radio_control::get_rate_range
virtual uhd::meta_range_t get_rate_range() const =0
Return a list of valid rates.
uhd::rfnoc::radio_control::get_gpio_attr
virtual uint32_t get_gpio_attr(const std::string &bank, const std::string &attr)=0
uhd::stream_cmd_t
Definition: stream_cmd.hpp:39
uhd::rfnoc::radio_control::get_gpio_banks
virtual std::vector< std::string > get_gpio_banks() const =0
uhd::rfnoc::radio_control::get_tx_sensor_names
virtual std::vector< std::string > get_tx_sensor_names(size_t chan) const =0
uhd::rfnoc::radio_control::get_chan_from_dboard_fe
virtual size_t get_chan_from_dboard_fe(const std::string &fe, const uhd::direction_t direction) const =0
Return the channel that corresponds to a frontend's name.
uhd::rfnoc::radio_control::get_rx_gain_profile
virtual std::string get_rx_gain_profile(const size_t chan) const =0
uhd::rfnoc::radio_control::get_fe_name
virtual std::string get_fe_name(const size_t chan, const uhd::direction_t direction) const =0
Return the name of the frontend, as given by the dboard driver.
noc_block_base.hpp
uhd::rfnoc::radio_control::set_rx_dc_offset
virtual void set_rx_dc_offset(const bool enb, size_t chan=ALL_CHANS)=0
power_reference_iface.hpp
uhd::rfnoc::radio_control::issue_stream_cmd
virtual void issue_stream_cmd(const uhd::stream_cmd_t &stream_cmd, const size_t port)=0
uhd::rfnoc::radio_control::get_dboard_fe_from_chan
virtual std::string get_dboard_fe_from_chan(const size_t chan, const uhd::direction_t direction) const =0
Return the frontend name for a channel index.
uhd::rfnoc::radio_control::get_tx_dc_offset_range
virtual meta_range_t get_tx_dc_offset_range(size_t chan) const =0
uhd::eeprom_map_t
std::map< std::string, std::vector< uint8_t > > eeprom_map_t
Definition: eeprom.hpp:16
direction.hpp
uhd::rfnoc::radio_control::set_tx_dc_offset
virtual void set_tx_dc_offset(const std::complex< double > &offset, size_t chan)=0
uhd::rfnoc::radio_control::set_tx_iq_balance
virtual void set_tx_iq_balance(const std::complex< double > &correction, size_t chan)=0
RFNOC_DECLARE_BLOCK
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
uhd::rfnoc::radio_control::get_ticks_now
virtual uint64_t get_ticks_now()=0
uhd::rfnoc::radio_control::set_tx_gain_profile
virtual void set_tx_gain_profile(const std::string &profile, const size_t chan)=0
uhd::rfnoc::radio_control::set_gpio_attr
virtual void set_gpio_attr(const std::string &bank, const std::string &attr, const uint32_t value)=0
uhd::rfnoc::radio_control::set_rate
virtual double set_rate(const double rate)=0
Set the sample rate.
uhd::sensor_value_t
Definition: sensors.hpp:28
uhd::meta_range_t
Definition: ranges.hpp:65
uhd::direction_t
direction_t
Definition: direction.hpp:12