USRP Hardware Driver and USRP Manual  Version: 4.0.0.0-0-unknown
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>
13 #include <uhd/types/direction.hpp>
14 #include <uhd/types/eeprom.hpp>
15 #include <uhd/types/ranges.hpp>
16 #include <uhd/types/sensors.hpp>
17 #include <uhd/types/stream_cmd.hpp>
18 
19 namespace uhd { namespace rfnoc {
20 
25 {
26 public:
27  static const std::string ALL_LOS;
28  static const std::string ALL_GAINS;
29  static constexpr size_t ALL_CHANS = size_t(~0);
30 
32 
33  /**************************************************************************
34  * Rate-Related API Calls
35  *************************************************************************/
37  //
38  // This function will coerce the rate and return the actual, current value.
39  virtual double set_rate(const double rate) = 0;
40 
42  virtual double get_rate() const = 0;
43 
45  virtual uhd::meta_range_t get_rate_range() const = 0;
46 
47  /**************************************************************************
48  * RF-Related API Calls
49  *************************************************************************/
54  virtual std::string get_tx_antenna(const size_t chan) const = 0;
55 
60  virtual std::vector<std::string> get_tx_antennas(const size_t chan) const = 0;
61 
66  virtual void set_tx_antenna(const std::string& ant, const size_t chan) = 0;
67 
72  virtual std::string get_rx_antenna(const size_t chan) const = 0;
73 
78  virtual std::vector<std::string> get_rx_antennas(const size_t chan) const = 0;
79 
84  virtual void set_rx_antenna(const std::string& ant, const size_t chan) = 0;
85 
90  virtual double get_tx_frequency(const size_t chan) = 0;
91 
105  virtual double set_tx_frequency(const double freq, size_t chan) = 0;
106 
109  virtual void set_tx_tune_args(const uhd::device_addr_t& args, const size_t chan) = 0;
110 
115  virtual uhd::freq_range_t get_tx_frequency_range(const size_t chan) const = 0;
116 
121  virtual double get_rx_frequency(const size_t chan) = 0;
122 
135  virtual double set_rx_frequency(const double freq, const size_t chan) = 0;
136 
139  virtual void set_rx_tune_args(const uhd::device_addr_t& args, const size_t chan) = 0;
140 
145  virtual uhd::freq_range_t get_rx_frequency_range(const size_t chan) const = 0;
146 
149  virtual std::vector<std::string> get_tx_gain_names(const size_t chan) const = 0;
150 
153  virtual uhd::gain_range_t get_tx_gain_range(const size_t chan) const = 0;
154 
158  const std::string& name, const size_t chan) const = 0;
159 
164  virtual double get_tx_gain(const size_t chan) = 0;
165 
170  virtual double get_tx_gain(const std::string& name, const size_t chan) = 0;
171 
182  virtual double set_tx_gain(const double gain, const size_t chan) = 0;
183 
191  virtual double set_tx_gain(
192  const double gain, const std::string& name, const size_t chan) = 0;
193 
210  virtual bool has_tx_power_reference(const size_t chan) = 0;
211 
227  const double power_dbm, const size_t chan) = 0;
228 
241  virtual double get_tx_power_reference(const size_t chan) = 0;
242 
262  virtual std::vector<std::string> get_tx_power_ref_keys(const size_t chan = 0) = 0;
263 
273  virtual meta_range_t get_tx_power_range(const size_t chan) = 0;
274 
277  virtual std::vector<std::string> get_rx_gain_names(const size_t chan) const = 0;
278 
281  virtual uhd::gain_range_t get_rx_gain_range(const size_t chan) const = 0;
282 
286  const std::string& name, const size_t chan) const = 0;
287 
292  virtual double get_rx_gain(const size_t chan) = 0;
293 
298  virtual double get_rx_gain(const std::string& name, const size_t chan) = 0;
299 
307  virtual double set_rx_gain(const double gain, const size_t chan) = 0;
308 
316  virtual double set_rx_gain(
317  const double gain, const std::string& name, const size_t chan) = 0;
318 
323  virtual void set_rx_agc(const bool enable, const size_t chan) = 0;
324 
341  virtual bool has_rx_power_reference(const size_t chan) = 0;
342 
358  const double power_dbm, const size_t chan) = 0;
359 
372  virtual double get_rx_power_reference(const size_t chan) = 0;
373 
393  virtual std::vector<std::string> get_rx_power_ref_keys(const size_t chan = 0) = 0;
394 
404  virtual meta_range_t get_rx_power_range(const size_t chan) = 0;
405 
408  virtual std::vector<std::string> get_tx_gain_profile_names(
409  const size_t chan) const = 0;
410 
413  virtual std::vector<std::string> get_rx_gain_profile_names(
414  const size_t chan) const = 0;
415 
418  virtual void set_tx_gain_profile(const std::string& profile, const size_t chan) = 0;
419 
422  virtual void set_rx_gain_profile(const std::string& profile, const size_t chan) = 0;
423 
426  virtual std::string get_tx_gain_profile(const size_t chan) const = 0;
427 
430  virtual std::string get_rx_gain_profile(const size_t chan) const = 0;
431 
434  virtual meta_range_t get_tx_bandwidth_range(size_t chan) const = 0;
435 
440  virtual double get_tx_bandwidth(const size_t chan) = 0;
441 
448  virtual double set_tx_bandwidth(const double bandwidth, const size_t chan) = 0;
449 
452  virtual meta_range_t get_rx_bandwidth_range(size_t chan) const = 0;
453 
458  virtual double get_rx_bandwidth(const size_t chan) = 0;
459 
466  virtual double set_rx_bandwidth(const double bandwidth, const size_t chan) = 0;
467 
468  /**************************************************************************
469  * LO Controls
470  *************************************************************************/
476  virtual std::vector<std::string> get_rx_lo_names(const size_t chan) const = 0;
477 
486  virtual std::vector<std::string> get_rx_lo_sources(
487  const std::string& name, const size_t chan) const = 0;
488 
498  const std::string& name, const size_t chan) const = 0;
499 
509  virtual void set_rx_lo_source(
510  const std::string& src, const std::string& name, const size_t chan) = 0;
511 
520  virtual const std::string get_rx_lo_source(
521  const std::string& name, const size_t chan) = 0;
522 
532  bool enabled, const std::string& name, const size_t chan) = 0;
533 
540  const std::string& name, const size_t chan) const = 0;
541 
549  virtual double set_rx_lo_freq(
550  double freq, const std::string& name, const size_t chan) = 0;
551 
560  virtual double get_rx_lo_freq(const std::string& name, const size_t chan) = 0;
561 
567  virtual std::vector<std::string> get_tx_lo_names(const size_t chan) const = 0;
568 
577  virtual std::vector<std::string> get_tx_lo_sources(
578  const std::string& name, const size_t chan) = 0;
579 
589  const std::string& name, const size_t chan) = 0;
590 
600  virtual void set_tx_lo_source(
601  const std::string& src, const std::string& name, const size_t chan) = 0;
602 
611  virtual const std::string get_tx_lo_source(
612  const std::string& name, const size_t chan) = 0;
613 
623  const bool enabled, const std::string& name, const size_t chan) = 0;
624 
630  virtual bool get_tx_lo_export_enabled(const std::string& name, const size_t chan) = 0;
631 
641  virtual double set_tx_lo_freq(
642  const double freq, const std::string& name, const size_t chan) = 0;
643 
655  virtual double get_tx_lo_freq(const std::string& name, const size_t chan) = 0;
656 
657  /**************************************************************************
658  * Calibration-Related API Calls
659  *************************************************************************/
667  virtual void set_tx_dc_offset(const std::complex<double>& offset, size_t chan) = 0;
668 
673  virtual meta_range_t get_tx_dc_offset_range(size_t chan) const = 0;
674 
682  virtual void set_tx_iq_balance(
683  const std::complex<double>& correction, size_t chan) = 0;
684 
696  virtual void set_rx_dc_offset(const bool enb, size_t chan = ALL_CHANS) = 0;
697 
705  virtual void set_rx_dc_offset(const std::complex<double>& offset, size_t chan) = 0;
706 
711  virtual meta_range_t get_rx_dc_offset_range(size_t chan) const = 0;
712 
718  virtual void set_rx_iq_balance(const bool enb, size_t chan) = 0;
719 
725  virtual void set_rx_iq_balance(
726  const std::complex<double>& correction, size_t chan) = 0;
727 
728  /**************************************************************************
729  * GPIO Controls
730  *************************************************************************/
735  virtual std::vector<std::string> get_gpio_banks() const = 0;
736 
751  virtual void set_gpio_attr(
752  const std::string& bank, const std::string& attr, const uint32_t value) = 0;
753 
769  virtual uint32_t get_gpio_attr(const std::string& bank, const std::string& attr) = 0;
770 
771  /**************************************************************************
772  * Sensor API
773  *************************************************************************/
778  virtual std::vector<std::string> get_rx_sensor_names(size_t chan) const = 0;
779 
786  virtual uhd::sensor_value_t get_rx_sensor(const std::string& name, size_t chan) = 0;
787 
792  virtual std::vector<std::string> get_tx_sensor_names(size_t chan) const = 0;
793 
800  virtual uhd::sensor_value_t get_tx_sensor(const std::string& name, size_t chan) = 0;
801 
802  /**************************************************************************
803  * Streaming-Related API Calls
804  *************************************************************************/
810  virtual void issue_stream_cmd(
811  const uhd::stream_cmd_t& stream_cmd, const size_t port) = 0;
812 
815  virtual void enable_rx_timestamps(const bool enable, const size_t chan) = 0;
816 
817  /**************************************************************************
818  * Radio Identification API Calls
819  *************************************************************************/
821  virtual std::string get_slot_name() const = 0;
822 
824  //
825  // Example: "0" -> 0 (for UBX), or "A" -> 0 (for E310)
826  virtual size_t get_chan_from_dboard_fe(
827  const std::string& fe, const uhd::direction_t direction) const = 0;
828 
830  //
831  // Example: 0 -> "0" (for UBX), or 0 -> "A" (for E310)
832  virtual std::string get_dboard_fe_from_chan(
833  const size_t chan, const uhd::direction_t direction) const = 0;
834 
836  virtual std::string get_fe_name(
837  const size_t chan, const uhd::direction_t direction) const = 0;
838 
839  /**************************************************************************
840  * EEPROM API Calls
841  *************************************************************************/
843  //
844  // Note: EEPROMs have finite numbers of write cycles, so don't overuse this
845  // method!
846  virtual void set_db_eeprom(const uhd::eeprom_map_t& db_eeprom) = 0;
847 
850 };
851 
852 }} // namespace uhd::rfnoc
Definition: device_addr.hpp:38
Definition: discoverable_feature_getter_iface.hpp:18
Definition: noc_block_base.hpp:42
Definition: radio_control.hpp:25
virtual std::string get_rx_antenna(const size_t chan) const =0
virtual std::vector< std::string > get_gpio_banks() const =0
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.
virtual uhd::freq_range_t get_tx_frequency_range(const size_t chan) const =0
virtual meta_range_t get_tx_power_range(const size_t chan)=0
virtual const std::string get_rx_lo_source(const std::string &name, const size_t chan)=0
virtual uint32_t get_gpio_attr(const std::string &bank, const std::string &attr)=0
virtual double get_tx_gain(const size_t chan)=0
virtual meta_range_t get_rx_dc_offset_range(size_t chan) const =0
virtual std::vector< std::string > get_rx_lo_sources(const std::string &name, const size_t chan) const =0
virtual void set_tx_dc_offset(const std::complex< double > &offset, size_t chan)=0
virtual std::string get_slot_name() const =0
Returns this radio's slot name (typically "A" or "B")
virtual const std::string get_tx_lo_source(const std::string &name, const size_t chan)=0
virtual meta_range_t get_tx_bandwidth_range(size_t chan) const =0
virtual double set_rx_frequency(const double freq, const size_t chan)=0
virtual std::vector< std::string > get_rx_lo_names(const size_t chan) const =0
virtual double set_tx_bandwidth(const double bandwidth, const size_t chan)=0
virtual double get_tx_lo_freq(const std::string &name, const size_t chan)=0
virtual void issue_stream_cmd(const uhd::stream_cmd_t &stream_cmd, const size_t port)=0
virtual bool get_tx_lo_export_enabled(const std::string &name, const size_t chan)=0
virtual void set_tx_tune_args(const uhd::device_addr_t &args, const size_t chan)=0
virtual void set_rx_iq_balance(const bool enb, size_t chan)=0
static const std::string ALL_LOS
Definition: radio_control.hpp:27
virtual double get_tx_frequency(const size_t chan)=0
virtual std::vector< std::string > get_tx_gain_profile_names(const size_t chan) const =0
virtual void enable_rx_timestamps(const bool enable, const size_t chan)=0
virtual double set_rx_bandwidth(const double bandwidth, const size_t chan)=0
virtual std::vector< std::string > get_tx_lo_names(const size_t chan) const =0
virtual void set_db_eeprom(const uhd::eeprom_map_t &db_eeprom)=0
Update the daughterboard EEPROM.
virtual void set_tx_lo_export_enabled(const bool enabled, const std::string &name, const size_t chan)=0
virtual uhd::gain_range_t get_rx_gain_range(const size_t chan) const =0
virtual double get_rx_frequency(const size_t chan)=0
virtual uhd::eeprom_map_t get_db_eeprom()=0
Return the content of the daughterboard EEPROM.
virtual uhd::freq_range_t get_rx_frequency_range(const size_t chan) const =0
virtual uhd::meta_range_t get_rate_range() const =0
Return a list of valid rates.
virtual double get_rate() const =0
Get the sample rate.
virtual void set_tx_iq_balance(const std::complex< double > &correction, size_t chan)=0
virtual double set_tx_gain(const double gain, const size_t chan)=0
virtual void set_rx_antenna(const std::string &ant, const size_t chan)=0
virtual std::string get_tx_antenna(const size_t chan) const =0
virtual double set_rate(const double rate)=0
Set the sample rate.
virtual freq_range_t get_rx_lo_freq_range(const std::string &name, const size_t chan) const =0
virtual std::vector< std::string > get_rx_antennas(const size_t chan) const =0
virtual void set_rx_dc_offset(const bool enb, size_t chan=ALL_CHANS)=0
virtual double set_rx_gain(const double gain, const size_t chan)=0
virtual double get_rx_power_reference(const size_t chan)=0
virtual uhd::sensor_value_t get_rx_sensor(const std::string &name, size_t chan)=0
virtual freq_range_t get_tx_lo_freq_range(const std::string &name, const size_t chan)=0
virtual meta_range_t get_tx_dc_offset_range(size_t chan) const =0
virtual double get_rx_gain(const size_t chan)=0
virtual void set_rx_power_reference(const double power_dbm, const size_t chan)=0
virtual void set_rx_gain_profile(const std::string &profile, const size_t chan)=0
virtual meta_range_t get_rx_bandwidth_range(size_t chan) const =0
virtual std::vector< std::string > get_tx_gain_names(const size_t chan) const =0
virtual double get_rx_bandwidth(const size_t chan)=0
virtual bool has_tx_power_reference(const size_t chan)=0
virtual void set_rx_agc(const bool enable, const size_t chan)=0
virtual double get_tx_power_reference(const size_t chan)=0
virtual std::string get_tx_gain_profile(const size_t chan) const =0
static const std::string ALL_GAINS
Definition: radio_control.hpp:28
virtual std::vector< std::string > get_rx_gain_profile_names(const size_t chan) const =0
static constexpr size_t ALL_CHANS
Definition: radio_control.hpp:29
virtual double set_tx_frequency(const double freq, size_t chan)=0
virtual void set_tx_power_reference(const double power_dbm, const size_t chan)=0
virtual std::vector< std::string > get_rx_sensor_names(size_t chan) const =0
virtual void set_gpio_attr(const std::string &bank, const std::string &attr, const uint32_t value)=0
virtual uhd::gain_range_t get_tx_gain_range(const size_t chan) const =0
virtual void set_tx_antenna(const std::string &ant, const size_t chan)=0
virtual void set_tx_gain_profile(const std::string &profile, const size_t chan)=0
virtual std::vector< std::string > get_rx_power_ref_keys(const size_t chan=0)=0
virtual std::vector< std::string > get_tx_sensor_names(size_t chan) const =0
virtual bool has_rx_power_reference(const size_t chan)=0
virtual double set_tx_lo_freq(const double freq, const std::string &name, const size_t chan)=0
virtual void set_tx_lo_source(const std::string &src, const std::string &name, const size_t chan)=0
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.
virtual std::vector< std::string > get_tx_lo_sources(const std::string &name, const size_t chan)=0
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.
virtual std::vector< std::string > get_rx_gain_names(const size_t chan) const =0
virtual double set_rx_lo_freq(double freq, const std::string &name, const size_t chan)=0
virtual double get_rx_lo_freq(const std::string &name, const size_t chan)=0
virtual meta_range_t get_rx_power_range(const size_t chan)=0
virtual void set_rx_lo_export_enabled(bool enabled, const std::string &name, const size_t chan)=0
virtual double get_tx_bandwidth(const size_t chan)=0
virtual uhd::sensor_value_t get_tx_sensor(const std::string &name, size_t chan)=0
virtual std::vector< std::string > get_tx_antennas(const size_t chan) const =0
virtual bool get_rx_lo_export_enabled(const std::string &name, const size_t chan) const =0
virtual std::string get_rx_gain_profile(const size_t chan) const =0
virtual void set_rx_lo_source(const std::string &src, const std::string &name, const size_t chan)=0
virtual std::vector< std::string > get_tx_power_ref_keys(const size_t chan=0)=0
virtual void set_rx_tune_args(const uhd::device_addr_t &args, const size_t chan)=0
Definition: build_info.hpp:12
direction_t
Definition: direction.hpp:12
std::map< std::string, std::vector< uint8_t > > eeprom_map_t
Definition: eeprom.hpp:15
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:21
Definition: ranges.hpp:65
Definition: sensors.hpp:29
Definition: stream_cmd.hpp:36