From 26ada5ee709fc4d7e195d19720b467c14368bc05 Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Fri, 19 Mar 2010 18:08:20 -0800
Subject: added install path for dll, fixed idiotic msvc error where making a
 vector with proxies crashes the app, seems to be ok with the sptr fix, in
 other good news, discover usrps works in my vm for the usrp2

---
 host/lib/CMakeLists.txt             |  5 +++--
 host/lib/usrp/usrp2/dboard_impl.cpp |  4 ++--
 host/lib/usrp/usrp2/dsp_impl.cpp    |  4 ++--
 host/lib/usrp/usrp2/mboard_impl.cpp | 10 ++++-----
 host/lib/usrp/usrp2/usrp2_impl.cpp  |  2 +-
 host/lib/usrp/usrp2/usrp2_impl.hpp  | 43 +++++++++++++++++++------------------
 6 files changed, 35 insertions(+), 33 deletions(-)

(limited to 'host/lib')

diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt
index 8e6bd693c..875a065af 100644
--- a/host/lib/CMakeLists.txt
+++ b/host/lib/CMakeLists.txt
@@ -64,6 +64,7 @@ TARGET_LINK_LIBRARIES(uhd ${Boost_LIBRARIES})
 SET_TARGET_PROPERTIES(uhd PROPERTIES DEFINE_SYMBOL "UHD_DLL_EXPORTS")
 
 INSTALL(TARGETS uhd
-    LIBRARY DESTINATION ${LIBRARY_DIR}
-    ARCHIVE DESTINATION ${LIBRARY_DIR}
+    LIBRARY DESTINATION ${LIBRARY_DIR} # .so file
+    ARCHIVE DESTINATION ${LIBRARY_DIR} # .lib file
+    RUNTIME DESTINATION ${LIBRARY_DIR} # .dll file
 )
diff --git a/host/lib/usrp/usrp2/dboard_impl.cpp b/host/lib/usrp/usrp2/dboard_impl.cpp
index 60622ca47..66e02d469 100644
--- a/host/lib/usrp/usrp2/dboard_impl.cpp
+++ b/host/lib/usrp/usrp2/dboard_impl.cpp
@@ -45,11 +45,11 @@ void usrp2_impl::dboard_init(void){
     );
 
     //load dboards
-    _rx_dboards[""] = wax_obj_proxy(
+    _rx_dboards[""] = wax_obj_proxy::make(
         boost::bind(&usrp2_impl::rx_dboard_get, this, _1, _2),
         boost::bind(&usrp2_impl::rx_dboard_set, this, _1, _2)
     );
-    _tx_dboards[""] = wax_obj_proxy(
+    _tx_dboards[""] = wax_obj_proxy::make(
         boost::bind(&usrp2_impl::tx_dboard_get, this, _1, _2),
         boost::bind(&usrp2_impl::tx_dboard_set, this, _1, _2)
     );
diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp
index 54ed45e41..34cce0afb 100644
--- a/host/lib/usrp/usrp2/dsp_impl.cpp
+++ b/host/lib/usrp/usrp2/dsp_impl.cpp
@@ -53,7 +53,7 @@ static boost::uint32_t calculate_iq_scale_word(boost::int16_t i, boost::int16_t
 
 void usrp2_impl::init_ddc_config(void){
     //create the ddc in the rx dsp dict
-    _rx_dsps["ddc0"] = wax_obj_proxy(
+    _rx_dsps["ddc0"] = wax_obj_proxy::make(
         boost::bind(&usrp2_impl::ddc_get, this, _1, _2),
         boost::bind(&usrp2_impl::ddc_set, this, _1, _2)
     );
@@ -201,7 +201,7 @@ void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){
  **********************************************************************/
 void usrp2_impl::init_duc_config(void){
     //create the duc in the tx dsp dict
-    _tx_dsps["duc0"] = wax_obj_proxy(
+    _tx_dsps["duc0"] = wax_obj_proxy::make(
         boost::bind(&usrp2_impl::duc_get, this, _1, _2),
         boost::bind(&usrp2_impl::duc_set, this, _1, _2)
     );
diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp
index 4b15c7f3e..4f63e6cc9 100644
--- a/host/lib/usrp/usrp2/mboard_impl.cpp
+++ b/host/lib/usrp/usrp2/mboard_impl.cpp
@@ -25,7 +25,7 @@ using namespace uhd;
  * Helper Methods
  **********************************************************************/
 void usrp2_impl::mboard_init(void){
-    _mboards[""] = wax_obj_proxy(
+    _mboards[""] = wax_obj_proxy::make(
         boost::bind(&usrp2_impl::mboard_get, this, _1, _2),
         boost::bind(&usrp2_impl::mboard_set, this, _1, _2)
     );
@@ -137,7 +137,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){
 
     case MBOARD_PROP_RX_DBOARD:
         ASSERT_THROW(_rx_dboards.has_key(name));
-        val = _rx_dboards[name].get_link();
+        val = _rx_dboards[name]->get_link();
         return;
 
     case MBOARD_PROP_RX_DBOARD_NAMES:
@@ -146,7 +146,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){
 
     case MBOARD_PROP_TX_DBOARD:
         ASSERT_THROW(_tx_dboards.has_key(name));
-        val = _tx_dboards[name].get_link();
+        val = _tx_dboards[name]->get_link();
         return;
 
     case MBOARD_PROP_TX_DBOARD_NAMES:
@@ -159,7 +159,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){
 
     case MBOARD_PROP_RX_DSP:
         ASSERT_THROW(_rx_dsps.has_key(name));
-        val = _rx_dsps[name].get_link();
+        val = _rx_dsps[name]->get_link();
         return;
 
     case MBOARD_PROP_RX_DSP_NAMES:
@@ -168,7 +168,7 @@ void usrp2_impl::mboard_get(const wax::obj &key_, wax::obj &val){
 
     case MBOARD_PROP_TX_DSP:
         ASSERT_THROW(_tx_dsps.has_key(name));
-        val = _tx_dsps[name].get_link();
+        val = _tx_dsps[name]->get_link();
         return;
 
     case MBOARD_PROP_TX_DSP_NAMES:
diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp
index 22b7e109f..bdf8cc55b 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.cpp
@@ -191,7 +191,7 @@ void usrp2_impl::get(const wax::obj &key_, wax::obj &val){
 
     case DEVICE_PROP_MBOARD:
         ASSERT_THROW(_mboards.has_key(name));
-        val = _mboards[name].get_link();
+        val = _mboards[name]->get_link();
         return;
 
     case DEVICE_PROP_MBOARD_NAMES:
diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp
index 765c523fe..59e23aba5 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.hpp
@@ -15,6 +15,9 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //
 
+#ifndef INCLUDED_USRP2_IMPL_HPP
+#define INCLUDED_USRP2_IMPL_HPP
+
 #include <uhd/usrp/usrp2.hpp>
 #include <uhd/dict.hpp>
 #include <uhd/props.hpp>
@@ -28,9 +31,6 @@
 #include <uhd/usrp/dboard_manager.hpp>
 #include "fw_common.h"
 
-#ifndef INCLUDED_USRP2_IMPL_HPP
-#define INCLUDED_USRP2_IMPL_HPP
-
 class usrp2_impl; //dummy class declaration
 
 /*!
@@ -50,20 +50,25 @@ class wax_obj_proxy : public wax::obj{
 public:
     typedef boost::function<void(const wax::obj &, wax::obj &)>       get_t;
     typedef boost::function<void(const wax::obj &, const wax::obj &)> set_t;
+    typedef boost::shared_ptr<wax_obj_proxy> sptr;
+
+    static sptr make(const get_t &get, const set_t &set){
+        return sptr(new wax_obj_proxy(get, set));
+    }
 
-    wax_obj_proxy(void){
+    ~wax_obj_proxy(void){
         /* NOP */
     }
 
+private:
+    get_t _get;
+    set_t _set;
+
     wax_obj_proxy(const get_t &get, const set_t &set){
         _get = get;
         _set = set;
     };
 
-    ~wax_obj_proxy(void){
-        /* NOP */
-    }
-
     void get(const wax::obj &key, wax::obj &val){
         return _get(key, val);
     }
@@ -71,10 +76,6 @@ public:
     void set(const wax::obj &key, const wax::obj &val){
         return _set(key, val);
     }
-
-private:
-    get_t _get;
-    set_t _set;
 };
 
 /*!
@@ -98,10 +99,6 @@ public:
 
     ~usrp2_impl(void);
 
-    //properties interface
-    void get(const wax::obj &, wax::obj &);
-    void set(const wax::obj &, const wax::obj &);
-
     //performs a control transaction
     usrp2_ctrl_data_t ctrl_send_and_recv(const usrp2_ctrl_data_t &);
 
@@ -113,6 +110,10 @@ public:
     size_t recv(const boost::asio::mutable_buffer &, uhd::rx_metadata_t &, const std::string &);
 
 private:
+    //device properties interface
+    void get(const wax::obj &, wax::obj &);
+    void set(const wax::obj &, const wax::obj &);
+
     //the raw io interface (samples are in the usrp2 native format)
     void recv_raw(uhd::rx_metadata_t &);
     uhd::dict<boost::uint32_t, size_t> _tx_stream_id_to_packet_seq;
@@ -159,18 +160,18 @@ private:
     void mboard_init(void);
     void mboard_get(const wax::obj &, wax::obj &);
     void mboard_set(const wax::obj &, const wax::obj &);
-    uhd::dict<std::string, wax_obj_proxy> _mboards;
+    uhd::dict<std::string, wax_obj_proxy::sptr> _mboards;
 
     //properties interface for rx dboard
     void rx_dboard_get(const wax::obj &, wax::obj &);
     void rx_dboard_set(const wax::obj &, const wax::obj &);
-    uhd::dict<std::string, wax_obj_proxy> _rx_dboards;
+    uhd::dict<std::string, wax_obj_proxy::sptr> _rx_dboards;
     uhd::prop_names_t _rx_subdevs_in_use;
 
     //properties interface for tx dboard
     void tx_dboard_get(const wax::obj &, wax::obj &);
     void tx_dboard_set(const wax::obj &, const wax::obj &);
-    uhd::dict<std::string, wax_obj_proxy> _tx_dboards;
+    uhd::dict<std::string, wax_obj_proxy::sptr> _tx_dboards;
     uhd::prop_names_t _tx_subdevs_in_use;
     void update_mux_config(void);
 
@@ -193,12 +194,12 @@ private:
     //properties interface for ddc
     void ddc_get(const wax::obj &, wax::obj &);
     void ddc_set(const wax::obj &, const wax::obj &);
-    uhd::dict<std::string, wax_obj_proxy> _rx_dsps;
+    uhd::dict<std::string, wax_obj_proxy::sptr> _rx_dsps;
 
     //properties interface for duc
     void duc_get(const wax::obj &, wax::obj &);
     void duc_set(const wax::obj &, const wax::obj &);
-    uhd::dict<std::string, wax_obj_proxy> _tx_dsps;
+    uhd::dict<std::string, wax_obj_proxy::sptr> _tx_dsps;
 
 };
 
-- 
cgit v1.2.3