aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-09-19 16:14:12 -0700
committerJosh Blum <josh@joshknows.com>2011-09-19 16:14:12 -0700
commitc35462adaf8e7ede3da961df92ddbfc78b2c8708 (patch)
treee84ac9c6e5a5281e2106efd2cd4cc515c944dd19
parentb20c9fc836a0f32666739dcd143692149eb66c68 (diff)
downloaduhd-c35462adaf8e7ede3da961df92ddbfc78b2c8708.tar.gz
uhd-c35462adaf8e7ede3da961df92ddbfc78b2c8708.tar.bz2
uhd-c35462adaf8e7ede3da961df92ddbfc78b2c8708.zip
usb: added interface args to usb abstractions
-rw-r--r--host/docs/transport.rst2
-rw-r--r--host/include/uhd/transport/usb_control.hpp3
-rw-r--r--host/include/uhd/transport/usb_zero_copy.hpp8
-rw-r--r--host/lib/transport/libusb1_control.cpp8
-rw-r--r--host/lib/transport/libusb1_zero_copy.cpp18
-rw-r--r--host/lib/transport/usb_dummy_impl.cpp5
-rw-r--r--host/lib/usrp/b100/b100_impl.cpp14
-rw-r--r--host/lib/usrp/usrp1/usrp1_impl.cpp10
8 files changed, 38 insertions, 30 deletions
diff --git a/host/docs/transport.rst b/host/docs/transport.rst
index 1ee5b0879..ccfc79269 100644
--- a/host/docs/transport.rst
+++ b/host/docs/transport.rst
@@ -136,7 +136,7 @@ so that non-root users may access the device:
::
- cd <install-path>
+ cd <install-path>/share/uhd/utils
sudo cp uhd-usrp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
diff --git a/host/include/uhd/transport/usb_control.hpp b/host/include/uhd/transport/usb_control.hpp
index e6c32f78e..2af4b3bbe 100644
--- a/host/include/uhd/transport/usb_control.hpp
+++ b/host/include/uhd/transport/usb_control.hpp
@@ -32,8 +32,9 @@ public:
* the host to device using the Default Control Pipe.
*
* \param handle a device handle that uniquely identifies a USB device
+ * \param interface the USB interface number for the control transport
*/
- static sptr make(usb_device_handle::sptr handle);
+ static sptr make(usb_device_handle::sptr handle, const size_t interface);
/*!
* Submit a USB device request:
diff --git a/host/include/uhd/transport/usb_zero_copy.hpp b/host/include/uhd/transport/usb_zero_copy.hpp
index dc344ad8b..24b709ec9 100644
--- a/host/include/uhd/transport/usb_zero_copy.hpp
+++ b/host/include/uhd/transport/usb_zero_copy.hpp
@@ -46,15 +46,19 @@ public:
* The underlying implementation may be platform specific.
*
* \param handle a device handle that uniquely identifying the device
+ * \param recv_interface an integer specifiying an IN interface number
* \param recv_endpoint an integer specifiying an IN endpoint number
+ * \param send_interface an integer specifiying an OUT interface number
* \param send_endpoint an integer specifiying an OUT endpoint number
* \param hints optional parameters to pass to the underlying transport
* \return a new zero copy usb object
*/
static sptr make(
usb_device_handle::sptr handle,
- size_t recv_endpoint,
- size_t send_endpoint,
+ const size_t recv_interface,
+ const size_t recv_endpoint,
+ const size_t send_interface,
+ const size_t send_endpoint,
const device_addr_t &hints = device_addr_t()
);
diff --git a/host/lib/transport/libusb1_control.cpp b/host/lib/transport/libusb1_control.cpp
index bce3d4b0b..3d9b38785 100644
--- a/host/lib/transport/libusb1_control.cpp
+++ b/host/lib/transport/libusb1_control.cpp
@@ -28,10 +28,10 @@ const int libusb_timeout = 0;
**********************************************************************/
class libusb_control_impl : public usb_control {
public:
- libusb_control_impl(libusb::device_handle::sptr handle):
+ libusb_control_impl(libusb::device_handle::sptr handle, const size_t interface):
_handle(handle)
{
- _handle->claim_interface(0 /* control interface */);
+ _handle->claim_interface(interface);
}
ssize_t submit(boost::uint8_t request_type,
@@ -60,8 +60,8 @@ private:
/***********************************************************************
* USB control public make functions
**********************************************************************/
-usb_control::sptr usb_control::make(usb_device_handle::sptr handle){
+usb_control::sptr usb_control::make(usb_device_handle::sptr handle, const size_t interface){
return sptr(new libusb_control_impl(libusb::device_handle::get_cached_handle(
boost::static_pointer_cast<libusb::special_handle>(handle)->get_device()
- )));
+ ), interface));
}
diff --git a/host/lib/transport/libusb1_zero_copy.cpp b/host/lib/transport/libusb1_zero_copy.cpp
index ada664286..28d6cdd5b 100644
--- a/host/lib/transport/libusb1_zero_copy.cpp
+++ b/host/lib/transport/libusb1_zero_copy.cpp
@@ -159,8 +159,10 @@ public:
libusb_zero_copy_impl(
libusb::device_handle::sptr handle,
- size_t recv_endpoint,
- size_t send_endpoint,
+ const size_t recv_interface,
+ const size_t recv_endpoint,
+ const size_t send_interface,
+ const size_t send_endpoint,
const device_addr_t &hints
):
_handle(handle),
@@ -173,8 +175,8 @@ public:
_next_recv_buff_index(0),
_next_send_buff_index(0)
{
- _handle->claim_interface(2 /*in interface*/);
- _handle->claim_interface(1 /*out interface*/);
+ _handle->claim_interface(recv_interface);
+ _handle->claim_interface(send_interface);
//allocate libusb transfer structs and managed receive buffers
for (size_t i = 0; i < get_num_recv_frames(); i++){
@@ -280,14 +282,16 @@ private:
**********************************************************************/
usb_zero_copy::sptr usb_zero_copy::make(
usb_device_handle::sptr handle,
- size_t recv_endpoint,
- size_t send_endpoint,
+ const size_t recv_interface,
+ const size_t recv_endpoint,
+ const size_t send_interface,
+ const size_t send_endpoint,
const device_addr_t &hints
){
libusb::device_handle::sptr dev_handle(libusb::device_handle::get_cached_handle(
boost::static_pointer_cast<libusb::special_handle>(handle)->get_device()
));
return sptr(new libusb_zero_copy_impl(
- dev_handle, recv_endpoint, send_endpoint, hints
+ dev_handle, recv_interface, recv_endpoint, send_interface, send_endpoint, hints
));
}
diff --git a/host/lib/transport/usb_dummy_impl.cpp b/host/lib/transport/usb_dummy_impl.cpp
index 930678405..7be753f76 100644
--- a/host/lib/transport/usb_dummy_impl.cpp
+++ b/host/lib/transport/usb_dummy_impl.cpp
@@ -27,13 +27,12 @@ std::vector<usb_device_handle::sptr> usb_device_handle::get_device_list(boost::u
return std::vector<usb_device_handle::sptr>(); //empty list
}
-usb_control::sptr usb_control::make(usb_device_handle::sptr){
+usb_control::sptr usb_control::make(usb_device_handle::sptr, const size_t){
throw uhd::not_implemented_error("no usb support -> usb_control::make not implemented");
}
usb_zero_copy::sptr usb_zero_copy::make(
- usb_device_handle::sptr,
- size_t, size_t, const device_addr_t &
+ usb_device_handle::sptr, const size_t, const size_t, const size_t, const size_t, const device_addr_t &
){
throw uhd::not_implemented_error("no usb support -> usb_zero_copy::make not implemented");
}
diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp
index 89c9598b3..39996a821 100644
--- a/host/lib/usrp/b100/b100_impl.cpp
+++ b/host/lib/usrp/b100/b100_impl.cpp
@@ -83,7 +83,7 @@ static device_addrs_t b100_find(const device_addr_t &hint)
UHD_LOG << "the firmware image: " << b100_fw_image << std::endl;
usb_control::sptr control;
- try{control = usb_control::make(handle);}
+ try{control = usb_control::make(handle, 0);}
catch(const uhd::exception &){continue;} //ignore claimed
fx2_ctrl::make(control)->usrp_load_firmware(b100_fw_image);
@@ -100,7 +100,7 @@ static device_addrs_t b100_find(const device_addr_t &hint)
//Attempt to read the name from the EEPROM and perform filtering.
try{
- usb_control::sptr control = usb_control::make(handle);
+ usb_control::sptr control = usb_control::make(handle, 0);
fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control);
const mboard_eeprom_t mb_eeprom = mboard_eeprom_t(*fx2_ctrl, mboard_eeprom_t::MAP_B000);
new_addr["name"] = mb_eeprom["name"];
@@ -159,7 +159,7 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
UHD_ASSERT_THROW(handle.get() != NULL); //better be found
//create control objects
- usb_control::sptr fx2_transport = usb_control::make(handle);
+ usb_control::sptr fx2_transport = usb_control::make(handle, 0);
_fx2_ctrl = fx2_ctrl::make(fx2_transport);
this->check_fw_compat(); //check after making fx2
//-- setup clock after making fx2 and before loading fpga --//
@@ -175,8 +175,8 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
_ctrl_transport = usb_zero_copy::make(
handle,
- 8,
- 4,
+ 4, 8, //interface, endpoint
+ 3, 4, //interface, endpoint
ctrl_xport_args
);
@@ -216,8 +216,8 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
_data_transport = usb_zero_copy::make_wrapper(
usb_zero_copy::make(
handle, // identifier
- 6, // IN endpoint
- 2, // OUT endpoint
+ 2, 6, // IN interface, endpoint
+ 1, 2, // OUT interface, endpoint
data_xport_args // param hints
)
);
diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp
index b2da16837..dbf7a5092 100644
--- a/host/lib/usrp/usrp1/usrp1_impl.cpp
+++ b/host/lib/usrp/usrp1/usrp1_impl.cpp
@@ -87,7 +87,7 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)
UHD_LOG << "USRP1 firmware image: " << usrp1_fw_image << std::endl;
usb_control::sptr control;
- try{control = usb_control::make(handle);}
+ try{control = usb_control::make(handle, 0);}
catch(const uhd::exception &){continue;} //ignore claimed
fx2_ctrl::make(control)->usrp_load_firmware(usrp1_fw_image);
@@ -99,7 +99,7 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)
BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) {
usb_control::sptr control;
- try{control = usb_control::make(handle);}
+ try{control = usb_control::make(handle, 0);}
catch(const uhd::exception &){continue;} //ignore claimed
fx2_ctrl::sptr fx2_ctrl = fx2_ctrl::make(control);
@@ -161,13 +161,13 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
// Create controller objects
////////////////////////////////////////////////////////////////////
//usb_control::sptr usb_ctrl = usb_control::make(handle);
- _fx2_ctrl = fx2_ctrl::make(usb_control::make(handle));
+ _fx2_ctrl = fx2_ctrl::make(usb_control::make(handle, 0));
_fx2_ctrl->usrp_load_fpga(usrp1_fpga_image);
_fx2_ctrl->usrp_init();
_data_transport = usb_zero_copy::make(
handle, // identifier
- 6, // IN endpoint
- 2, // OUT endpoint
+ 2, 6, // IN interface, endpoint
+ 1, 2, // OUT interface, endpoint
device_addr // param hints
);
_iface = usrp1_iface::make(_fx2_ctrl);