From f743c922d6412c3e3362f289bd6196f3754c5616 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Nov 2016 19:18:54 -0600 Subject: Remove and recreate properties with member function callbacks in legacy_compat_impl dtor to prevent future sessions from calling into the destroyed bound functions --- host/lib/rfnoc/legacy_compat.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'host') diff --git a/host/lib/rfnoc/legacy_compat.cpp b/host/lib/rfnoc/legacy_compat.cpp index e1eff757e..b660a21c7 100644 --- a/host/lib/rfnoc/legacy_compat.cpp +++ b/host/lib/rfnoc/legacy_compat.cpp @@ -103,6 +103,15 @@ uhd::meta_range_t lambda_const_meta_range(const double start, const double stop, { return uhd::meta_range_t(start, stop, step); } + +/*! Recreate passed property without bound subscribers. Maintains current property value. +*/ +template +static void recreate_property(const uhd::fs_path &path, uhd::property_tree::sptr &tree) { + T temp = tree->access(path).get(); + tree->remove(path); + tree->create(path).set(temp); +} /************************************************************************ * Class Definition ***********************************************************************/ @@ -169,6 +178,11 @@ public: } } + ~legacy_compat_impl() + { + remove_prop_subscribers(); + } + /************************************************************************ * API Calls ***********************************************************************/ @@ -590,6 +604,24 @@ private: // methods } } + + /*! Remove properties with bound functions in property tree and recreate + */ + void remove_prop_subscribers() + { + for (size_t mboard_idx = 0; mboard_idx < _num_mboards; mboard_idx++) { + uhd::fs_path root = mb_root(mboard_idx); + // Subdev specs + if (_tree->exists(root / "tx_subdev_spec")) { + recreate_property(root / "tx_subdev_spec", _tree); + } + + if (_tree->exists(root / "rx_subdev_spec")) { + recreate_property(root / "rx_subdev_spec", _tree); + } + } + } + /*! Default block connections. * * Tx connections: -- cgit v1.2.3 From ee4bb488684ddd913edfcb4cc09a50d94bf8a1f0 Mon Sep 17 00:00:00 2001 From: meserve Date: Fri, 18 Nov 2016 16:50:36 -0600 Subject: device: change hashing test logic from try-throw-catch to if-else Allows to trigger on catches during debugging. Reviewed-By: Martin Braun --- host/lib/device.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'host') diff --git a/host/lib/device.cpp b/host/lib/device.cpp index ff4bbc212..c75ecad77 100644 --- a/host/lib/device.cpp +++ b/host/lib/device.cpp @@ -162,13 +162,11 @@ device::sptr device::make(const device_addr_t &hint, device_filter_t filter, siz static uhd::dict > hash_to_device; //try to find an existing device - try{ - UHD_ASSERT_THROW(hash_to_device.has_key(dev_hash)); - UHD_ASSERT_THROW(not hash_to_device[dev_hash].expired()); + if (hash_to_device.has_key(dev_hash) and not hash_to_device[dev_hash].expired()){ return hash_to_device[dev_hash].lock(); } - //create and register a new device - catch(const uhd::assertion_error &){ + else { + //create and register a new device device::sptr dev = maker(dev_addr); hash_to_device[dev_hash] = dev; return dev; -- cgit v1.2.3 From bafc0a045cbea2bb2e5aee9c4f95855bb6fde8d3 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Fri, 28 Oct 2016 13:54:45 -0700 Subject: cmake: Remove duplicate definitions of UHD_VERSION --- host/cmake/Modules/UHDGlobalDefs.cmake | 1 - host/include/config.h.in | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'host') diff --git a/host/cmake/Modules/UHDGlobalDefs.cmake b/host/cmake/Modules/UHDGlobalDefs.cmake index 167861402..70d1a654b 100644 --- a/host/cmake/Modules/UHDGlobalDefs.cmake +++ b/host/cmake/Modules/UHDGlobalDefs.cmake @@ -28,7 +28,6 @@ IF(UHD_VERSION_DEVEL) ELSE() MATH(EXPR UHD_VERSION_ADDED "1000000 * ${TRIMMED_VERSION_MAJOR} + 10000 * ${TRIMMED_VERSION_API} + 100 * ${TRIMMED_VERSION_ABI} + ${TRIMMED_VERSION_PATCH}") ENDIF(UHD_VERSION_DEVEL) -ADD_DEFINITIONS(-DUHD_VERSION=${UHD_VERSION_ADDED}) ## RFNoC IF(ENABLE_RFNOC) diff --git a/host/include/config.h.in b/host/include/config.h.in index 8931d6580..8e72a1f00 100644 --- a/host/include/config.h.in +++ b/host/include/config.h.in @@ -23,4 +23,6 @@ #cmakedefine UHD_VERSION_ABI ${TRIMMED_VERSION_ABI} #cmakedefine UHD_VERSION_PATCH ${TRIMMED_VERSION_PATCH} #cmakedefine ENABLE_USB +#ifndef UHD_VERSION #cmakedefine UHD_VERSION @UHD_VERSION_ADDED@ +#endif -- cgit v1.2.3 From e40ea4f2b8739cc105680e6c06b2ff6d060aabe5 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Tue, 22 Nov 2016 17:29:34 -0800 Subject: docs: Added comments on JTAGging via Vivado for X3x0 --- host/docs/usrp_x3x0.dox | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'host') diff --git a/host/docs/usrp_x3x0.dox b/host/docs/usrp_x3x0.dox index 8a3d52a7d..ac59c86a3 100644 --- a/host/docs/usrp_x3x0.dox +++ b/host/docs/usrp_x3x0.dox @@ -226,23 +226,16 @@ To connect to this JTAG device, simply connect your computer to the USB JTAG port on the front of the X3x0 device. You may now use the JTAG programmer in the same way you would use any other, including: +- Vivado (standard workflow, see below) - Xilinx Programming Tools (ISE, iMPACT) - Xilinx Chipscope - Digilent ADEPT -In order to use the JTAG programmer with the Xilinx tools, the Digilent drivers and plugin have to be installed first. -Although recent versions of ISE ship with the driver, it has to still be manually installed. +In order to use the JTAG programmer with the Xilinx tools, the Digilent drivers and plugin have to be installed first. Although recent versions of Vivado ship with the driver, it has to still be manually installed. -\b Note: Sometimes the ISE shipped versions are newer than the ones available via Digilent's website. It is therefore advisable to -use the ISE provided plugin and drivers. +To install first locate your Vivado installation path on a Linux system (default is `/opt/Xilinx/Vivado/`): -To install first locate your ISE installation path on a Linux system (default is `/opt/Xilinx/`): - - sudo /ISE_DS/common/bin/lin64/digilent/install_digilent.sh - -Afterwards either reboot or force udev to reload its rules by: - - sudo udevadm control --reload + sudo `find /opt/Xilinx/Vivado/ -name install_digilent.sh` The USRP-X series device should now be usable with all the tools mentioned above. @@ -304,9 +297,16 @@ that the requested image is already loaded onto the FPGA then it will not reload \subsection x3x0_load_fpga_imgs_jtag Use JTAG to load FPGA images The USRP-X Series device features an on-board USB-JTAG programmer that can be accessed on the front-panel -of the device. The iMPACT tool in the Xilinx Programming Tools (ISE, iMPACT) package can be used to load an image over the JTAG interface. This can be useful for unbricking devices. +of the device. There are multiple tools available to access the FPGA through the JTAG connector (see \ref x3x0_jtag). + +If you have Vivado installed, we provide a command-line script to flash images. Make sure your X3x0 is powered on and connected to your computer using the front panel USB JTAG connector (USB 2.0 is fine for this). Head to the X3x0 FPGA directory, then run the following commands: + + $ cd uhd/fpga-src/usrp3/top/x300 # Assuming this is where the FPGA code is checked out + $ source ./setupenv.sh + $ viv_jtag_program /path/to/bitfile.bit + -If you have iMPACT installed, you can use the `impact_jtag_programmer.sh` tool to install images. Make sure your X3x0 is powered on and connected to your computer using the front panel USB JTAG connector (USB 2.0 is fine for this). Then run the tool: +If you have iMPACT installed, you can use the `impact_jtag_programmer.sh` tool to install images. Then run the tool: /impact_jtag_programmer.sh --fpga-path= -- cgit v1.2.3 From f00463d2c39185d70eeef8772de74e3a68f26843 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:37:03 -0800 Subject: rfnoc: Matched signatures for clear() --- host/include/uhd/rfnoc/block_ctrl_base.hpp | 2 +- host/lib/rfnoc/block_ctrl_base.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'host') diff --git a/host/include/uhd/rfnoc/block_ctrl_base.hpp b/host/include/uhd/rfnoc/block_ctrl_base.hpp index 725f0d966..f770cf129 100644 --- a/host/include/uhd/rfnoc/block_ctrl_base.hpp +++ b/host/include/uhd/rfnoc/block_ctrl_base.hpp @@ -306,7 +306,7 @@ public: * * TODO: Find better name (it disconnects, clears FC...) */ - void clear(const size_t port = 0/* reserved, currently not used */); + void clear(); /*********************************************************************** * Argument handling diff --git a/host/lib/rfnoc/block_ctrl_base.cpp b/host/lib/rfnoc/block_ctrl_base.cpp index c273fa76b..a4e7cb391 100644 --- a/host/lib/rfnoc/block_ctrl_base.cpp +++ b/host/lib/rfnoc/block_ctrl_base.cpp @@ -409,7 +409,7 @@ void block_ctrl_base::clear_command_time(const size_t port) iface_sptr->set_time(time_spec_t(0.0)); } -void block_ctrl_base::clear(const size_t /* port */) +void block_ctrl_base::clear() { UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::clear() " << std::endl; // Call parent... -- cgit v1.2.3 From b1d08e41e6b5ccb52e447ebd6ca4b1300bb99735 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:42:29 -0800 Subject: dma fifo: Removed superfluous attribute --- host/lib/usrp/cores/dma_fifo_core_3000.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'host') diff --git a/host/lib/usrp/cores/dma_fifo_core_3000.cpp b/host/lib/usrp/cores/dma_fifo_core_3000.cpp index 908ba906e..e1a841b96 100644 --- a/host/lib/usrp/cores/dma_fifo_core_3000.cpp +++ b/host/lib/usrp/cores/dma_fifo_core_3000.cpp @@ -223,7 +223,7 @@ public: public: dma_fifo_core_3000_impl(wb_iface::sptr iface, const size_t base, const size_t readback): - _iface(iface), _base(base), _fifo_readback(iface, base, readback), + _iface(iface), _fifo_readback(iface, base, readback), _fifo_ctrl_reg(base), _base_addr_reg(base), _addr_mask_reg(base), _bist_ctrl_reg(base), _bist_cfg_reg(base), _bist_delay_reg(base), _bist_sid_reg(base) { @@ -368,7 +368,6 @@ private: private: wb_iface::sptr _iface; - const size_t _base; boost::mutex _mutex; bool _has_ext_bist; -- cgit v1.2.3 From 666e8c9bcd8ca8422c0a72204c29bc66c17a093f Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:43:24 -0800 Subject: b100: Removed superfluous FX2 vid/pid --- host/lib/usrp/b100/b100_impl.cpp | 2 -- host/lib/usrp/usrp1/usrp1_impl.cpp | 2 -- 2 files changed, 4 deletions(-) (limited to 'host') diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp index d0b9d835d..1a38bf3b7 100644 --- a/host/lib/usrp/b100/b100_impl.cpp +++ b/host/lib/usrp/b100/b100_impl.cpp @@ -39,8 +39,6 @@ using namespace uhd::transport; const uint16_t B100_VENDOR_ID = 0x2500; const uint16_t B100_PRODUCT_ID = 0x0002; -const uint16_t FX2_VENDOR_ID = 0x04b4; -const uint16_t FX2_PRODUCT_ID = 0x8613; static const boost::posix_time::milliseconds REENUMERATION_TIMEOUT_MS(3000); /*********************************************************************** diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index baecc6081..09352c5e0 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -38,8 +38,6 @@ using namespace uhd::transport; const uint16_t USRP1_VENDOR_ID = 0xfffe; const uint16_t USRP1_PRODUCT_ID = 0x0002; -const uint16_t FX2_VENDOR_ID = 0x04b4; -const uint16_t FX2_PRODUCT_ID = 0x8613; static const boost::posix_time::milliseconds REENUMERATION_TIMEOUT_MS(3000); const std::vector usrp1_impl::_dboard_slots = boost::assign::list_of -- cgit v1.2.3 From 7c9cc6df10706b5e0ddad29b7e11d518ce8ce9b1 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:45:33 -0800 Subject: lib: Removed superfluous variable in gain_group --- host/lib/utils/gain_group.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'host') diff --git a/host/lib/utils/gain_group.cpp b/host/lib/utils/gain_group.cpp index e907a6573..9428702d1 100644 --- a/host/lib/utils/gain_group.cpp +++ b/host/lib/utils/gain_group.cpp @@ -27,8 +27,6 @@ using namespace uhd; -static const bool verbose = false; - static bool compare_by_step_size( const size_t &rhs, const size_t &lhs, std::vector &fcns ){ -- cgit v1.2.3 From 097b0334ad22fbbe375963043e8afb4369b95bba Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:52:59 -0800 Subject: transport: Removed some superfluous variables --- host/lib/transport/nirio/niriok_proxy_impl_v1.cpp | 10 +++++----- host/lib/transport/nirio_zero_copy.cpp | 2 -- host/lib/transport/udp_zero_copy.cpp | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) (limited to 'host') diff --git a/host/lib/transport/nirio/niriok_proxy_impl_v1.cpp b/host/lib/transport/nirio/niriok_proxy_impl_v1.cpp index 444e98f1b..dbe9e4abd 100644 --- a/host/lib/transport/nirio/niriok_proxy_impl_v1.cpp +++ b/host/lib/transport/nirio/niriok_proxy_impl_v1.cpp @@ -49,11 +49,11 @@ const uint32_t NIRIO_IOCTL_GET_IFACE_NUM = METHOD_BUFFERED, FILE_READ_DATA); ///< Get the interface number for a device -const uint32_t NIRIO_IOCTL_GET_SESSION = - CTL_CODE(FILE_DEVICE_UNKNOWN, - NIRIO_IOCTL_BASE + 8, - METHOD_BUFFERED, - FILE_READ_ACCESS); ///< Gets a previously opened session to a device +//const uint32_t NIRIO_IOCTL_GET_SESSION = + //CTL_CODE(FILE_DEVICE_UNKNOWN, + //NIRIO_IOCTL_BASE + 8, + //METHOD_BUFFERED, + //FILE_READ_ACCESS); ///< Gets a previously opened session to a device const uint32_t NIRIO_IOCTL_POST_OPEN = CTL_CODE(FILE_DEVICE_UNKNOWN, diff --git a/host/lib/transport/nirio_zero_copy.cpp b/host/lib/transport/nirio_zero_copy.cpp index 1eb431a19..8bec49a5f 100644 --- a/host/lib/transport/nirio_zero_copy.cpp +++ b/host/lib/transport/nirio_zero_copy.cpp @@ -75,7 +75,6 @@ private: nirio_fifo& _fifo; fifo_data_t* _typed_buffer; const size_t _frame_size; - size_t _num_frames; }; class nirio_zero_copy_msb : public managed_send_buffer @@ -116,7 +115,6 @@ private: nirio_fifo& _fifo; fifo_data_t* _typed_buffer; const size_t _frame_size; - size_t _num_frames; }; class nirio_zero_copy_impl : public nirio_zero_copy { diff --git a/host/lib/transport/udp_zero_copy.cpp b/host/lib/transport/udp_zero_copy.cpp index 70fb5b552..036a84a05 100644 --- a/host/lib/transport/udp_zero_copy.cpp +++ b/host/lib/transport/udp_zero_copy.cpp @@ -32,7 +32,7 @@ using namespace uhd::transport; namespace asio = boost::asio; //A reasonable number of frames for send/recv and async/sync -static const size_t DEFAULT_NUM_FRAMES = 32; +//static const size_t DEFAULT_NUM_FRAMES = 32; /*********************************************************************** * Check registry for correct fast-path setting (windows only) -- cgit v1.2.3 From 26d047f821221f516eefa58e56daea7a93cb54e2 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 09:53:10 -0800 Subject: usrp2: Removed superfluous helper function --- host/lib/usrp/usrp2/io_impl.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'host') diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp index ae39028a1..199436fa2 100644 --- a/host/lib/usrp/usrp2/io_impl.cpp +++ b/host/lib/usrp/usrp2/io_impl.cpp @@ -50,10 +50,6 @@ static UHD_INLINE pt::time_duration to_time_dur(double timeout){ return pt::microseconds(long(timeout*1e6)); } -static UHD_INLINE double from_time_dur(const pt::time_duration &time_dur){ - return 1e-6*time_dur.total_microseconds(); -} - /*********************************************************************** * constants **********************************************************************/ -- cgit v1.2.3 From da2c235bdaddd1f4aa576f08d9ab8e47a25e03e5 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 11:45:43 -0800 Subject: transport: Fixed memory leak in muxed_zero_copy_if --- host/lib/transport/muxed_zero_copy_if.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'host') diff --git a/host/lib/transport/muxed_zero_copy_if.cpp b/host/lib/transport/muxed_zero_copy_if.cpp index 7a2b76165..37bea7355 100644 --- a/host/lib/transport/muxed_zero_copy_if.cpp +++ b/host/lib/transport/muxed_zero_copy_if.cpp @@ -106,7 +106,7 @@ private: stream_mrb(size_t size) : _buff(new char[size]) {} ~stream_mrb() { - delete _buff; + delete[] _buff; } void release() {} @@ -118,7 +118,7 @@ private: } private: - char *_buff; + char *_buff; }; class stream_impl : public zero_copy_if -- cgit v1.2.3 From 33c0b32db12ee154b1090360fbf76634590fdd3e Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Wed, 23 Nov 2016 11:52:32 -0800 Subject: lib: Removed more superfluous variables --- host/lib/usrp/b200/b200_iface.cpp | 2 +- host/lib/usrp/common/adf5355.cpp | 12 ++++++------ host/lib/usrp/dboard/db_ubx.cpp | 2 -- host/lib/usrp/usrp2/usrp2_iface.cpp | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) (limited to 'host') diff --git a/host/lib/usrp/b200/b200_iface.cpp b/host/lib/usrp/b200/b200_iface.cpp index 4e6dd2144..6f9bdd330 100644 --- a/host/lib/usrp/b200/b200_iface.cpp +++ b/host/lib/usrp/b200/b200_iface.cpp @@ -59,7 +59,7 @@ const static uint8_t B200_VREQ_SET_FW_HASH = 0x1E; const static uint8_t B200_VREQ_GET_FW_HASH = 0x1F; const static uint8_t B200_VREQ_LOOP = 0x22; const static uint8_t B200_VREQ_FPGA_CONFIG = 0x55; -const static uint8_t B200_VREQ_FPGA_RESET = 0x62; +//const static uint8_t B200_VREQ_FPGA_RESET = 0x62; const static uint8_t B200_VREQ_GPIF_RESET = 0x72; const static uint8_t B200_VREQ_GET_USB = 0x80; const static uint8_t B200_VREQ_GET_STATUS = 0x83; diff --git a/host/lib/usrp/common/adf5355.cpp b/host/lib/usrp/common/adf5355.cpp index ee9b54622..ee9d1d1d9 100644 --- a/host/lib/usrp/common/adf5355.cpp +++ b/host/lib/usrp/common/adf5355.cpp @@ -34,21 +34,21 @@ double todbl(data_t val) { } static const double ADF5355_DOUBLER_MAX_REF_FREQ = 60e6; -static const double ADF5355_MAX_FREQ_PFD = 125e6; -static const double ADF5355_PRESCALER_THRESH = 7e9; +//static const double ADF5355_MAX_FREQ_PFD = 125e6; +//static const double ADF5355_PRESCALER_THRESH = 7e9; static const double ADF5355_MIN_VCO_FREQ = 3.4e9; -static const double ADF5355_MAX_VCO_FREQ = 6.8e9; +//static const double ADF5355_MAX_VCO_FREQ = 6.8e9; static const double ADF5355_MAX_OUT_FREQ = 6.8e9; static const double ADF5355_MIN_OUT_FREQ = (3.4e9 / 64); -static const double ADF5355_MAX_OUTB_FREQ = (6.8e9 * 2); -static const double ADF5355_MIN_OUTB_FREQ = (3.4e9 * 2); +//static const double ADF5355_MAX_OUTB_FREQ = (6.8e9 * 2); +//static const double ADF5355_MIN_OUTB_FREQ = (3.4e9 * 2); static const double ADF5355_PHASE_RESYNC_TIME = 400e-6; static const uint32_t ADF5355_MOD1 = 16777216; static const uint32_t ADF5355_MAX_MOD2 = 16384; -static const uint16_t ADF5355_MIN_INT_PRESCALER_89 = 75; +//static const uint16_t ADF5355_MIN_INT_PRESCALER_89 = 75; class adf5355_impl : public adf5355_iface { diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp index 05a02c321..82472fd9b 100644 --- a/host/lib/usrp/dboard/db_ubx.cpp +++ b/host/lib/usrp/dboard/db_ubx.cpp @@ -1246,8 +1246,6 @@ private: power_mode_t _power_mode; std::string _xcvr_mode; size_t _rev; - double _prev_tx_freq; - double _prev_rx_freq; ubx_gpio_reg_t _tx_gpio_reg; ubx_gpio_reg_t _rx_gpio_reg; int64_t _tx_sync_delay; diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index 522d6c6d0..021f0e3e5 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -62,7 +62,7 @@ static const uint32_t MIN_PROTO_COMPAT_I2C = 7; // The register compat number must reflect the protocol compatibility // and the compatibility of the register mapping (more likely to change). static const uint32_t MIN_PROTO_COMPAT_REG = 10; -static const uint32_t MIN_PROTO_COMPAT_UART = 7; +//static const uint32_t MIN_PROTO_COMPAT_UART = 7; class usrp2_iface_impl : public usrp2_iface{ public: -- cgit v1.2.3