UHD
003.005.000-31-stable
|
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 00344 virtual size_t get_num_mboards(void) = 0; 00345 00352 virtual sensor_value_t get_mboard_sensor(const std::string &name, size_t mboard = 0) = 0; 00353 00359 virtual std::vector<std::string> get_mboard_sensor_names(size_t mboard = 0) = 0; 00360 00368 virtual void set_user_register(const boost::uint8_t addr, const boost::uint32_t data, size_t mboard = ALL_MBOARDS) = 0; 00369 00370 /******************************************************************* 00371 * RX methods 00372 ******************************************************************/ 00381 virtual void set_rx_subdev_spec(const uhd::usrp::subdev_spec_t &spec, size_t mboard = ALL_MBOARDS) = 0; 00382 00388 virtual uhd::usrp::subdev_spec_t get_rx_subdev_spec(size_t mboard = 0) = 0; 00389 00395 virtual size_t get_rx_num_channels(void) = 0; 00396 00402 virtual std::string get_rx_subdev_name(size_t chan = 0) = 0; 00403 00409 virtual void set_rx_rate(double rate, size_t chan = ALL_CHANS) = 0; 00410 00416 virtual double get_rx_rate(size_t chan = 0) = 0; 00417 00423 virtual meta_range_t get_rx_rates(size_t chan = 0) = 0; 00424 00431 virtual tune_result_t set_rx_freq( 00432 const tune_request_t &tune_request, size_t chan = 0 00433 ) = 0; 00434 00440 virtual double get_rx_freq(size_t chan = 0) = 0; 00441 00447 virtual freq_range_t get_rx_freq_range(size_t chan = 0) = 0; 00448 00454 virtual freq_range_t get_fe_rx_freq_range(size_t chan = 0) = 0; 00455 00463 virtual void set_rx_gain(double gain, const std::string &name, size_t chan = 0) = 0; 00464 00466 void set_rx_gain(double gain, size_t chan = 0){ 00467 return this->set_rx_gain(gain, ALL_GAINS, chan); 00468 } 00469 00477 virtual double get_rx_gain(const std::string &name, size_t chan = 0) = 0; 00478 00480 double get_rx_gain(size_t chan = 0){ 00481 return this->get_rx_gain(ALL_GAINS, chan); 00482 } 00483 00491 virtual gain_range_t get_rx_gain_range(const std::string &name, size_t chan = 0) = 0; 00492 00494 gain_range_t get_rx_gain_range(size_t chan = 0){ 00495 return this->get_rx_gain_range(ALL_GAINS, chan); 00496 } 00497 00504 virtual std::vector<std::string> get_rx_gain_names(size_t chan = 0) = 0; 00505 00511 virtual void set_rx_antenna(const std::string &ant, size_t chan = 0) = 0; 00512 00518 virtual std::string get_rx_antenna(size_t chan = 0) = 0; 00519 00525 virtual std::vector<std::string> get_rx_antennas(size_t chan = 0) = 0; 00526 00532 UHD_DEPRECATED bool get_rx_lo_locked(size_t chan = 0){ 00533 return this->get_rx_sensor("lo_locked", chan).to_bool(); 00534 } 00535 00541 virtual void set_rx_bandwidth(double bandwidth, size_t chan = 0) = 0; 00542 00548 virtual double get_rx_bandwidth(size_t chan = 0) = 0; 00549 00555 virtual meta_range_t get_rx_bandwidth_range(size_t chan = 0) = 0; 00556 00563 UHD_DEPRECATED double read_rssi(size_t chan = 0){ 00564 return this->get_rx_sensor("rssi", chan).to_real(); 00565 } 00566 00574 virtual dboard_iface::sptr get_rx_dboard_iface(size_t chan = 0) = 0; 00575 00582 virtual sensor_value_t get_rx_sensor(const std::string &name, size_t chan = 0) = 0; 00583 00589 virtual std::vector<std::string> get_rx_sensor_names(size_t chan = 0) = 0; 00590 00603 virtual void set_rx_dc_offset(const bool enb, size_t chan = ALL_CHANS) = 0; 00604 00612 virtual void set_rx_dc_offset(const std::complex<double> &offset, size_t chan = ALL_CHANS) = 0; 00613 00621 virtual void set_rx_iq_balance(const std::complex<double> &correction, size_t chan = ALL_CHANS) = 0; 00622 00623 /******************************************************************* 00624 * TX methods 00625 ******************************************************************/ 00634 virtual void set_tx_subdev_spec(const uhd::usrp::subdev_spec_t &spec, size_t mboard = ALL_MBOARDS) = 0; 00635 00641 virtual uhd::usrp::subdev_spec_t get_tx_subdev_spec(size_t mboard = 0) = 0; 00642 00648 virtual size_t get_tx_num_channels(void) = 0; 00649 00655 virtual std::string get_tx_subdev_name(size_t chan = 0) = 0; 00656 00662 virtual void set_tx_rate(double rate, size_t chan = ALL_CHANS) = 0; 00663 00669 virtual double get_tx_rate(size_t chan = 0) = 0; 00670 00676 virtual meta_range_t get_tx_rates(size_t chan = 0) = 0; 00677 00684 virtual tune_result_t set_tx_freq( 00685 const tune_request_t &tune_request, size_t chan = 0 00686 ) = 0; 00687 00693 virtual double get_tx_freq(size_t chan = 0) = 0; 00694 00700 virtual freq_range_t get_tx_freq_range(size_t chan = 0) = 0; 00701 00707 virtual freq_range_t get_fe_tx_freq_range(size_t chan = 0) = 0; 00708 00716 virtual void set_tx_gain(double gain, const std::string &name, size_t chan = 0) = 0; 00717 00719 void set_tx_gain(double gain, size_t chan = 0){ 00720 return this->set_tx_gain(gain, ALL_GAINS, chan); 00721 } 00722 00730 virtual double get_tx_gain(const std::string &name, size_t chan = 0) = 0; 00731 00733 double get_tx_gain(size_t chan = 0){ 00734 return this->get_tx_gain(ALL_GAINS, chan); 00735 } 00736 00744 virtual gain_range_t get_tx_gain_range(const std::string &name, size_t chan = 0) = 0; 00745 00747 gain_range_t get_tx_gain_range(size_t chan = 0){ 00748 return this->get_tx_gain_range(ALL_GAINS, chan); 00749 } 00750 00757 virtual std::vector<std::string> get_tx_gain_names(size_t chan = 0) = 0; 00758 00764 virtual void set_tx_antenna(const std::string &ant, size_t chan = 0) = 0; 00765 00771 virtual std::string get_tx_antenna(size_t chan = 0) = 0; 00772 00778 virtual std::vector<std::string> get_tx_antennas(size_t chan = 0) = 0; 00779 00785 UHD_DEPRECATED bool get_tx_lo_locked(size_t chan = 0){ 00786 return this->get_tx_sensor("lo_locked", chan).to_bool(); 00787 } 00788 00794 virtual void set_tx_bandwidth(double bandwidth, size_t chan = 0) = 0; 00795 00801 virtual double get_tx_bandwidth(size_t chan = 0) = 0; 00802 00808 virtual meta_range_t get_tx_bandwidth_range(size_t chan = 0) = 0; 00809 00817 virtual dboard_iface::sptr get_tx_dboard_iface(size_t chan = 0) = 0; 00818 00825 virtual sensor_value_t get_tx_sensor(const std::string &name, size_t chan = 0) = 0; 00826 00832 virtual std::vector<std::string> get_tx_sensor_names(size_t chan = 0) = 0; 00833 00840 virtual void set_tx_dc_offset(const std::complex<double> &offset, size_t chan = ALL_CHANS) = 0; 00841 00849 virtual void set_tx_iq_balance(const std::complex<double> &correction, size_t chan = ALL_CHANS) = 0; 00850 00851 }; 00852 00853 }} 00854 00855 #endif /* INCLUDED_UHD_USRP_MULTI_USRP_HPP */