UHD
003.005.003-781-g91040b6f
|
00001 // 00002 // Copyright 2010-2012 Ettus Research LLC 00003 // 00004 // This program is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 // 00017 00018 #ifndef INCLUDED_UHD_USRP_MULTI_USRP_HPP 00019 #define INCLUDED_UHD_USRP_MULTI_USRP_HPP 00020 00021 //define API capabilities for compile time detection of new features 00022 #define UHD_USRP_MULTI_USRP_REF_SOURCES_API 00023 #define UHD_USRP_MULTI_USRP_GET_RATES_API 00024 #define UHD_USRP_MULTI_USRP_FRONTEND_CAL_API 00025 #define UHD_USRP_MULTI_USRP_COMMAND_TIME_API 00026 #define UHD_USRP_MULTI_USRP_BW_RANGE_API 00027 #define UHD_USRP_MULTI_USRP_USER_REGS_API 00028 #define UHD_USRP_MULTI_USRP_GET_USRP_INFO_API 00029 00030 #include <uhd/config.hpp> 00031 #include <uhd/device.hpp> 00032 #include <uhd/deprecated.hpp> 00033 #include <uhd/types/ranges.hpp> 00034 #include <uhd/types/stream_cmd.hpp> 00035 #include <uhd/types/tune_request.hpp> 00036 #include <uhd/types/tune_result.hpp> 00037 #include <uhd/types/sensors.hpp> 00038 #include <uhd/usrp/subdev_spec.hpp> 00039 #include <uhd/usrp/dboard_iface.hpp> 00040 #include <boost/shared_ptr.hpp> 00041 #include <boost/utility.hpp> 00042 #include <complex> 00043 #include <string> 00044 #include <vector> 00045 00046 namespace uhd{ namespace usrp{ 00047 00094 class UHD_API multi_usrp : boost::noncopyable{ 00095 public: 00096 typedef boost::shared_ptr<multi_usrp> sptr; 00097 00099 static const size_t ALL_MBOARDS = size_t(~0); 00100 00102 static const size_t ALL_CHANS = size_t(~0); 00103 00105 static const std::string ALL_GAINS; 00106 00112 static sptr make(const device_addr_t &dev_addr); 00113 00119 virtual device::sptr get_device(void) = 0; 00120 00122 rx_streamer::sptr get_rx_stream(const stream_args_t &args){ 00123 return this->get_device()->get_rx_stream(args); 00124 } 00125 00127 tx_streamer::sptr get_tx_stream(const stream_args_t &args){ 00128 return this->get_device()->get_tx_stream(args); 00129 } 00130 00138 virtual dict<std::string, std::string> get_usrp_rx_info(size_t chan = 0) = 0; 00139 00147 virtual dict<std::string, std::string> get_usrp_tx_info(size_t chan = 0) = 0; 00148 00149 /******************************************************************* 00150 * Mboard methods 00151 ******************************************************************/ 00152 00163 virtual void set_master_clock_rate(double rate, size_t mboard = ALL_MBOARDS) = 0; 00164 00170 virtual double get_master_clock_rate(size_t mboard = 0) = 0; 00171 00176 virtual std::string get_pp_string(void) = 0; 00177 00183 virtual std::string get_mboard_name(size_t mboard = 0) = 0; 00184 00190 virtual time_spec_t get_time_now(size_t mboard = 0) = 0; 00191 00197 virtual time_spec_t get_time_last_pps(size_t mboard = 0) = 0; 00198 00210 virtual void set_time_now(const time_spec_t &time_spec, size_t mboard = ALL_MBOARDS) = 0; 00211 00224 virtual void set_time_next_pps(const time_spec_t &time_spec, size_t mboard = ALL_MBOARDS) = 0; 00225 00241 virtual void set_time_unknown_pps(const time_spec_t &time_spec) = 0; 00242 00249 virtual bool get_time_synchronized(void) = 0; 00250 00261 virtual void set_command_time(const uhd::time_spec_t &time_spec, size_t mboard = ALL_MBOARDS) = 0; 00262 00268 virtual void clear_command_time(size_t mboard = ALL_MBOARDS) = 0; 00269 00282 virtual void issue_stream_cmd(const stream_cmd_t &stream_cmd, size_t chan = ALL_CHANS) = 0; 00283 00292 virtual void set_clock_config(const clock_config_t &clock_config, size_t mboard = ALL_MBOARDS) = 0; 00293 00302 virtual void set_time_source(const std::string &source, const size_t mboard = ALL_MBOARDS) = 0; 00303 00309 virtual std::string get_time_source(const size_t mboard) = 0; 00310 00316 virtual std::vector<std::string> get_time_sources(const size_t mboard) = 0; 00317 00325 virtual void set_clock_source(const std::string &source, const size_t mboard = ALL_MBOARDS) = 0; 00326 00332 virtual std::string get_clock_source(const size_t mboard) = 0; 00333 00339 virtual std::vector<std::string> get_clock_sources(const size_t mboard) = 0; 00340 00349 virtual void set_clock_source_out(const bool enb, const size_t mboard = ALL_MBOARDS) = 0; 00350 00359 virtual void set_time_source_out(const bool enb, const size_t mboard = ALL_MBOARDS) = 0; 00360 00364 virtual size_t get_num_mboards(void) = 0; 00365 00372 virtual sensor_value_t get_mboard_sensor(const std::string &name, size_t mboard = 0) = 0; 00373 00379 virtual std::vector<std::string> get_mboard_sensor_names(size_t mboard = 0) = 0; 00380 00388 virtual void set_user_register(const boost::uint8_t addr, const boost::uint32_t data, size_t mboard = ALL_MBOARDS) = 0; 00389 00390 /******************************************************************* 00391 * RX methods 00392 ******************************************************************/ 00401 virtual void set_rx_subdev_spec(const uhd::usrp::subdev_spec_t &spec, size_t mboard = ALL_MBOARDS) = 0; 00402 00408 virtual uhd::usrp::subdev_spec_t get_rx_subdev_spec(size_t mboard = 0) = 0; 00409 00415 virtual size_t get_rx_num_channels(void) = 0; 00416 00422 virtual std::string get_rx_subdev_name(size_t chan = 0) = 0; 00423 00429 virtual void set_rx_rate(double rate, size_t chan = ALL_CHANS) = 0; 00430 00436 virtual double get_rx_rate(size_t chan = 0) = 0; 00437 00443 virtual meta_range_t get_rx_rates(size_t chan = 0) = 0; 00444 00451 virtual tune_result_t set_rx_freq( 00452 const tune_request_t &tune_request, size_t chan = 0 00453 ) = 0; 00454 00460 virtual double get_rx_freq(size_t chan = 0) = 0; 00461 00471 virtual freq_range_t get_rx_freq_range(size_t chan = 0) = 0; 00472 00478 virtual freq_range_t get_fe_rx_freq_range(size_t chan = 0) = 0; 00479 00487 virtual void set_rx_gain(double gain, const std::string &name, size_t chan = 0) = 0; 00488 00490 void set_rx_gain(double gain, size_t chan = 0){ 00491 return this->set_rx_gain(gain, ALL_GAINS, chan); 00492 } 00493 00501 virtual double get_rx_gain(const std::string &name, size_t chan = 0) = 0; 00502 00504 double get_rx_gain(size_t chan = 0){ 00505 return this->get_rx_gain(ALL_GAINS, chan); 00506 } 00507 00515 virtual gain_range_t get_rx_gain_range(const std::string &name, size_t chan = 0) = 0; 00516 00518 gain_range_t get_rx_gain_range(size_t chan = 0){ 00519 return this->get_rx_gain_range(ALL_GAINS, chan); 00520 } 00521 00528 virtual std::vector<std::string> get_rx_gain_names(size_t chan = 0) = 0; 00529 00535 virtual void set_rx_antenna(const std::string &ant, size_t chan = 0) = 0; 00536 00542 virtual std::string get_rx_antenna(size_t chan = 0) = 0; 00543 00549 virtual std::vector<std::string> get_rx_antennas(size_t chan = 0) = 0; 00550 00556 UHD_DEPRECATED bool get_rx_lo_locked(size_t chan = 0){ 00557 return this->get_rx_sensor("lo_locked", chan).to_bool(); 00558 } 00559 00565 virtual void set_rx_bandwidth(double bandwidth, size_t chan = 0) = 0; 00566 00572 virtual double get_rx_bandwidth(size_t chan = 0) = 0; 00573 00579 virtual meta_range_t get_rx_bandwidth_range(size_t chan = 0) = 0; 00580 00587 UHD_DEPRECATED double read_rssi(size_t chan = 0){ 00588 return this->get_rx_sensor("rssi", chan).to_real(); 00589 } 00590 00598 virtual dboard_iface::sptr get_rx_dboard_iface(size_t chan = 0) = 0; 00599 00606 virtual sensor_value_t get_rx_sensor(const std::string &name, size_t chan = 0) = 0; 00607 00613 virtual std::vector<std::string> get_rx_sensor_names(size_t chan = 0) = 0; 00614 00627 virtual void set_rx_dc_offset(const bool enb, size_t chan = ALL_CHANS) = 0; 00628 00636 virtual void set_rx_dc_offset(const std::complex<double> &offset, size_t chan = ALL_CHANS) = 0; 00637 00645 virtual void set_rx_iq_balance(const std::complex<double> &correction, size_t chan = ALL_CHANS) = 0; 00646 00647 /******************************************************************* 00648 * TX methods 00649 ******************************************************************/ 00658 virtual void set_tx_subdev_spec(const uhd::usrp::subdev_spec_t &spec, size_t mboard = ALL_MBOARDS) = 0; 00659 00665 virtual uhd::usrp::subdev_spec_t get_tx_subdev_spec(size_t mboard = 0) = 0; 00666 00672 virtual size_t get_tx_num_channels(void) = 0; 00673 00679 virtual std::string get_tx_subdev_name(size_t chan = 0) = 0; 00680 00686 virtual void set_tx_rate(double rate, size_t chan = ALL_CHANS) = 0; 00687 00693 virtual double get_tx_rate(size_t chan = 0) = 0; 00694 00700 virtual meta_range_t get_tx_rates(size_t chan = 0) = 0; 00701 00708 virtual tune_result_t set_tx_freq( 00709 const tune_request_t &tune_request, size_t chan = 0 00710 ) = 0; 00711 00717 virtual double get_tx_freq(size_t chan = 0) = 0; 00718 00728 virtual freq_range_t get_tx_freq_range(size_t chan = 0) = 0; 00729 00735 virtual freq_range_t get_fe_tx_freq_range(size_t chan = 0) = 0; 00736 00744 virtual void set_tx_gain(double gain, const std::string &name, size_t chan = 0) = 0; 00745 00747 void set_tx_gain(double gain, size_t chan = 0){ 00748 return this->set_tx_gain(gain, ALL_GAINS, chan); 00749 } 00750 00758 virtual double get_tx_gain(const std::string &name, size_t chan = 0) = 0; 00759 00761 double get_tx_gain(size_t chan = 0){ 00762 return this->get_tx_gain(ALL_GAINS, chan); 00763 } 00764 00772 virtual gain_range_t get_tx_gain_range(const std::string &name, size_t chan = 0) = 0; 00773 00775 gain_range_t get_tx_gain_range(size_t chan = 0){ 00776 return this->get_tx_gain_range(ALL_GAINS, chan); 00777 } 00778 00785 virtual std::vector<std::string> get_tx_gain_names(size_t chan = 0) = 0; 00786 00792 virtual void set_tx_antenna(const std::string &ant, size_t chan = 0) = 0; 00793 00799 virtual std::string get_tx_antenna(size_t chan = 0) = 0; 00800 00806 virtual std::vector<std::string> get_tx_antennas(size_t chan = 0) = 0; 00807 00813 UHD_DEPRECATED bool get_tx_lo_locked(size_t chan = 0){ 00814 return this->get_tx_sensor("lo_locked", chan).to_bool(); 00815 } 00816 00822 virtual void set_tx_bandwidth(double bandwidth, size_t chan = 0) = 0; 00823 00829 virtual double get_tx_bandwidth(size_t chan = 0) = 0; 00830 00836 virtual meta_range_t get_tx_bandwidth_range(size_t chan = 0) = 0; 00837 00845 virtual dboard_iface::sptr get_tx_dboard_iface(size_t chan = 0) = 0; 00846 00853 virtual sensor_value_t get_tx_sensor(const std::string &name, size_t chan = 0) = 0; 00854 00860 virtual std::vector<std::string> get_tx_sensor_names(size_t chan = 0) = 0; 00861 00868 virtual void set_tx_dc_offset(const std::complex<double> &offset, size_t chan = ALL_CHANS) = 0; 00869 00877 virtual void set_tx_iq_balance(const std::complex<double> &correction, size_t chan = ALL_CHANS) = 0; 00878 00879 /******************************************************************* 00880 * GPIO methods 00881 ******************************************************************/ 00882 00888 virtual std::vector<std::string> get_gpio_banks(const size_t mboard) = 0; 00889 00906 virtual void set_gpio_attr(const std::string &bank, const std::string &attr, const boost::uint32_t value, const boost::uint32_t mask = 0xffffffff, const size_t mboard = 0) = 0; 00907 00924 virtual boost::uint32_t get_gpio_attr(const std::string &bank, const std::string &attr, const size_t mboard = 0) = 0; 00925 00926 }; 00927 00928 }} 00929 00930 #endif /* INCLUDED_UHD_USRP_MULTI_USRP_HPP */