diff options
author | Josh Blum <josh@joshknows.com> | 2012-03-26 17:53:03 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2012-03-26 17:53:03 -0700 |
commit | 74a9352c5f50afca06924180bbbdd75cdfb8b439 (patch) | |
tree | 7cf45aec56c06017da00cd9409be4d0bd79f4346 /host/lib/usrp/usrp2 | |
parent | 948727634db7d41d3da184a97b6ef394118b343d (diff) | |
parent | 097f20df1653c33035b6dcfefbbef22572426c65 (diff) | |
download | uhd-74a9352c5f50afca06924180bbbdd75cdfb8b439.tar.gz uhd-74a9352c5f50afca06924180bbbdd75cdfb8b439.tar.bz2 uhd-74a9352c5f50afca06924180bbbdd75cdfb8b439.zip |
Merge branch 'maint'
Diffstat (limited to 'host/lib/usrp/usrp2')
-rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index 20a74db2c..e6e8ca675 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -121,12 +121,26 @@ static device_addrs_t usrp2_find(const device_addr_t &hint_){ //new_addr["addr"] = ip_addr.to_string(); new_addr["addr"] = udp_transport->get_recv_addr(); + //Attempt a simple 2-way communication with a connected socket. + //Reason: Although the USRP will respond the broadcast above, + //we may not be able to communicate directly (non-broadcast). + udp_simple::sptr ctrl_xport = udp_simple::make_connected( + new_addr["addr"], BOOST_STRINGIZE(USRP2_UDP_CTRL_PORT) + ); + ctrl_xport->send(boost::asio::buffer(&ctrl_data_out, sizeof(ctrl_data_out))); + size_t len = ctrl_xport->recv(asio::buffer(usrp2_ctrl_data_in_mem)); + if (len > offsetof(usrp2_ctrl_data_t, data) and ntohl(ctrl_data_in->id) == USRP2_CTRL_ID_WAZZUP_DUDE){ + //found the device, open up for communication! + } + else{ + //otherwise we don't find it... + continue; + } + //Attempt to read the name from the EEPROM and perform filtering. //This operation can throw due to compatibility mismatch. try{ - usrp2_iface::sptr iface = usrp2_iface::make(udp_simple::make_connected( - new_addr["addr"], BOOST_STRINGIZE(USRP2_UDP_CTRL_PORT) - )); + usrp2_iface::sptr iface = usrp2_iface::make(ctrl_xport); if (iface->is_device_locked()) continue; //ignore locked devices mboard_eeprom_t mb_eeprom = iface->mb_eeprom; new_addr["name"] = mb_eeprom["name"]; |