From 0cd5375b5c8a928f112a963d9c9c2556bafed108 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Tue, 5 Oct 2010 10:30:28 -0700
Subject: uhd: replaced frame params for the zero copy interfaces with a device
 address

the device address gives a key, value pair of infinite optional capabilities

added a cast option to the device address to cast string to type T

added call to the zero_copy_if to get send and recv frame sizes

changed the usrp2 impl to calculate recv/send spp from the data transport
---
 host/lib/usrp/usrp1/usrp1_impl.cpp | 48 ++++++++++++++------------------------
 1 file changed, 18 insertions(+), 30 deletions(-)

(limited to 'host/lib/usrp/usrp1/usrp1_impl.cpp')

diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp
index 6ebd6bb09..276ca86f6 100644
--- a/host/lib/usrp/usrp1/usrp1_impl.cpp
+++ b/host/lib/usrp/usrp1/usrp1_impl.cpp
@@ -106,17 +106,8 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)
 /***********************************************************************
  * Make
  **********************************************************************/
-template<typename output_type> static output_type cast_from_dev_addr(
-    const device_addr_t &device_addr,
-    const std::string &key,
-    output_type def_val
-){
-    return (device_addr.has_key(key))?
-        boost::lexical_cast<output_type>(device_addr[key]) : def_val;
-}
+static device::sptr usrp1_make(const device_addr_t &device_addr){
 
-static device::sptr usrp1_make(const device_addr_t &device_addr)
-{
     //extract the FPGA path for the USRP1
     std::string usrp1_fpga_image = find_image_path(
         device_addr.has_key("fpga")? device_addr["fpga"] : "usrp1_fpga.rbf"
@@ -127,29 +118,26 @@ static device::sptr usrp1_make(const device_addr_t &device_addr)
     std::vector<usb_device_handle::sptr> device_list =
         usb_device_handle::get_device_list(USRP1_VENDOR_ID, USRP1_PRODUCT_ID);
 
-    //create data and control transports
-    usb_zero_copy::sptr data_transport;
-    usrp_ctrl::sptr usrp_ctrl;
-
-
-    BOOST_FOREACH(usb_device_handle::sptr handle, device_list) {
-        if (handle->get_serial() == device_addr["serial"]) {
-            usb_control::sptr ctrl_transport = usb_control::make(handle);
-            usrp_ctrl = usrp_ctrl::make(ctrl_transport);
-            usrp_ctrl->usrp_load_fpga(usrp1_fpga_image);
-
-            data_transport = usb_zero_copy::make(
-                handle,        // identifier
-                6,             // IN endpoint
-                2,             // OUT endpoint
-                size_t(cast_from_dev_addr<double>(device_addr, "recv_xfer_size", 0)),
-                size_t(cast_from_dev_addr<double>(device_addr, "recv_num_xfers", 0)),
-                size_t(cast_from_dev_addr<double>(device_addr, "send_xfer_size", 0)),
-                size_t(cast_from_dev_addr<double>(device_addr, "send_num_xfers", 0))
-            );
+    //locate the matching handle in the device list
+    usb_device_handle::sptr handle;
+    BOOST_FOREACH(usb_device_handle::sptr dev_handle, device_list) {
+        if (dev_handle->get_serial() == device_addr["serial"]){
+            handle = dev_handle;
             break;
         }
     }
+    UHD_ASSERT_THROW(handle.get() != NULL); //better be found
+
+    //create control objects and a data transport
+    usb_control::sptr ctrl_transport = usb_control::make(handle);
+    usrp_ctrl::sptr usrp_ctrl = usrp_ctrl::make(ctrl_transport);
+    usrp_ctrl->usrp_load_fpga(usrp1_fpga_image);
+    usb_zero_copy::sptr data_transport = usb_zero_copy::make(
+        handle,        // identifier
+        6,             // IN endpoint
+        2,             // OUT endpoint
+        device_addr    // param hints
+    );
 
     //create the usrp1 implementation guts
     return device::sptr(new usrp1_impl(data_transport, usrp_ctrl));
-- 
cgit v1.2.3