aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-11-05 17:39:18 -0700
committerJosh Blum <josh@joshknows.com>2010-11-05 17:39:18 -0700
commit94a492dc40a6450ada3fe34a7440c31077d9690e (patch)
tree2a6f90356b067d732e7f2a3366003fc71269ee61 /host/lib/usrp
parent3ac3457184bc3b251ce7398eee56c931983abe65 (diff)
downloaduhd-94a492dc40a6450ada3fe34a7440c31077d9690e.tar.gz
uhd-94a492dc40a6450ada3fe34a7440c31077d9690e.tar.bz2
uhd-94a492dc40a6450ada3fe34a7440c31077d9690e.zip
uhd: rename identifier for usrp1 eeprom, and fix offsets, add serial support to usrp2
Diffstat (limited to 'host/lib/usrp')
-rw-r--r--host/lib/usrp/mboard_eeprom.cpp30
-rw-r--r--host/lib/usrp/usrp1/mboard_impl.cpp2
-rw-r--r--host/lib/usrp/usrp1/usrp1_iface.cpp2
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.cpp57
4 files changed, 48 insertions, 43 deletions
diff --git a/host/lib/usrp/mboard_eeprom.cpp b/host/lib/usrp/mboard_eeprom.cpp
index 81dc6f194..49d429674 100644
--- a/host/lib/usrp/mboard_eeprom.cpp
+++ b/host/lib/usrp/mboard_eeprom.cpp
@@ -94,6 +94,9 @@ static void load_nxxx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
mb_eeprom["name"] = bytes_to_string(iface.read_eeprom(
NXXX_EEPROM_ADDR, USRP_NXXX_OFFSETS["name"], NAME_MAX_LEN
));
+
+ //empty serial correction: use the mac address
+ if (mb_eeprom["serial"].empty()) mb_eeprom["serial"] = mb_eeprom["mac-addr"];
}
static void store_nxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
@@ -129,37 +132,38 @@ static void store_nxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
}
/***********************************************************************
- * Implementation of BXXX load/store
+ * Implementation of B1XX load/store
**********************************************************************/
-static const boost::uint8_t BXXX_EEPROM_ADDR = 0x50;
+static const boost::uint8_t B1XX_EEPROM_ADDR = 0x50;
+static const size_t B1XXX_SERIAL_LEN = 8;
-static const uhd::dict<std::string, boost::uint8_t> USRP_BXXX_OFFSETS = boost::assign::map_list_of
+static const uhd::dict<std::string, boost::uint8_t> USRP_B1XX_OFFSETS = boost::assign::map_list_of
("serial", 0xf8)
- ("name", 0xf8 + SERIAL_LEN)
+ ("name", 0xf8 - NAME_MAX_LEN)
;
-static void load_bxxx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
+static void load_b1xx(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
//extract the serial
mb_eeprom["serial"] = bytes_to_string(iface.read_eeprom(
- BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["serial"], SERIAL_LEN
+ B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["serial"], B1XXX_SERIAL_LEN
));
//extract the name
mb_eeprom["name"] = bytes_to_string(iface.read_eeprom(
- BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["name"], NAME_MAX_LEN
+ B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["name"], NAME_MAX_LEN
));
}
-static void store_bxxx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
+static void store_b1xx(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
//store the serial
iface.write_eeprom(
- BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["serial"],
- string_to_bytes(mb_eeprom["serial"], SERIAL_LEN)
+ B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["serial"],
+ string_to_bytes(mb_eeprom["serial"], B1XXX_SERIAL_LEN)
);
//store the name
iface.write_eeprom(
- BXXX_EEPROM_ADDR, USRP_BXXX_OFFSETS["name"],
+ B1XX_EEPROM_ADDR, USRP_B1XX_OFFSETS["name"],
string_to_bytes(mb_eeprom["name"], NAME_MAX_LEN)
);
}
@@ -174,13 +178,13 @@ mboard_eeprom_t::mboard_eeprom_t(void){
mboard_eeprom_t::mboard_eeprom_t(i2c_iface &iface, map_type map){
switch(map){
case MAP_NXXX: load_nxxx(*this, iface); break;
- case MAP_BXXX: load_bxxx(*this, iface); break;
+ case MAP_B1XX: load_b1xx(*this, iface); break;
}
}
void mboard_eeprom_t::commit(i2c_iface &iface, map_type map){
switch(map){
case MAP_NXXX: store_nxxx(*this, iface); break;
- case MAP_BXXX: store_bxxx(*this, iface); break;
+ case MAP_B1XX: store_b1xx(*this, iface); break;
}
}
diff --git a/host/lib/usrp/usrp1/mboard_impl.cpp b/host/lib/usrp/usrp1/mboard_impl.cpp
index 86f78a7a9..952da8dce 100644
--- a/host/lib/usrp/usrp1/mboard_impl.cpp
+++ b/host/lib/usrp/usrp1/mboard_impl.cpp
@@ -379,7 +379,7 @@ void usrp1_impl::mboard_set(const wax::obj &key, const wax::obj &val)
case MBOARD_PROP_EEPROM_MAP:
_iface->mb_eeprom = val.as<mboard_eeprom_t>();
- _iface->mb_eeprom.commit(*_iface, mboard_eeprom_t::MAP_BXXX);
+ _iface->mb_eeprom.commit(*_iface, mboard_eeprom_t::MAP_B1XX);
return;
default: UHD_THROW_PROP_SET_ERROR();
diff --git a/host/lib/usrp/usrp1/usrp1_iface.cpp b/host/lib/usrp/usrp1/usrp1_iface.cpp
index dcba3e819..691c51fe8 100644
--- a/host/lib/usrp/usrp1/usrp1_iface.cpp
+++ b/host/lib/usrp/usrp1/usrp1_iface.cpp
@@ -38,7 +38,7 @@ public:
usrp1_iface_impl(usrp_ctrl::sptr ctrl_transport)
{
_ctrl_transport = ctrl_transport;
- mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_BXXX);
+ mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_B1XX);
}
~usrp1_iface_impl(void)
diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp
index 6625cf3e7..5f549c4fd 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.cpp
@@ -102,36 +102,37 @@ static uhd::device_addrs_t usrp2_find(const device_addr_t &hint){
while(true){
size_t len = udp_transport->recv(asio::buffer(usrp2_ctrl_data_in_mem), DISCOVERY_TIMEOUT_MS);
//std::cout << len << "\n";
- if (len > offsetof(usrp2_ctrl_data_t, data)){
- //handle the received data
- switch(ntohl(ctrl_data_in->id)){
- case USRP2_CTRL_ID_WAZZUP_DUDE:
- //make a boost asio ipv4 with the raw addr in host byte order
- boost::asio::ip::address_v4 ip_addr(ntohl(ctrl_data_in->data.ip_addr));
- device_addr_t new_addr;
- new_addr["type"] = "usrp2";
- new_addr["addr"] = ip_addr.to_string();
- //Attempt to read the name from the EEPROM and perform filtering.
- //This operation can throw due to COMPAT mismatch. That is OK.
- //We will allow the device to be found and the COMPAT mismatch
- //will be thrown as an exception in the factory function.
- try{
- new_addr["name"] = usrp2_iface::make(udp_simple::make_connected(
- new_addr["addr"], num2str(USRP2_UDP_CTRL_PORT))
- )->mb_eeprom["name"];
- if (not hint.has_key("name") or hint["name"] == new_addr["name"]){
- usrp2_addrs.push_back(new_addr);
- }
+ if (len > offsetof(usrp2_ctrl_data_t, data) and ntohl(ctrl_data_in->id) == USRP2_CTRL_ID_WAZZUP_DUDE){
+ //make a boost asio ipv4 with the raw addr in host byte order
+ boost::asio::ip::address_v4 ip_addr(ntohl(ctrl_data_in->data.ip_addr));
+ device_addr_t new_addr;
+ new_addr["type"] = "usrp2";
+ new_addr["addr"] = ip_addr.to_string();
+ //Attempt to read the name from the EEPROM and perform filtering.
+ //This operation can throw due to COMPAT mismatch. That is OK.
+ //We will allow the device to be found and the COMPAT mismatch
+ //will be thrown as an exception in the factory function.
+ try{
+ mboard_eeprom_t mb_eeprom = usrp2_iface::make(
+ udp_simple::make_connected(new_addr["addr"], num2str(USRP2_UDP_CTRL_PORT))
+ )->mb_eeprom;
+ new_addr["name"] = mb_eeprom["name"];
+ new_addr["serial"] = mb_eeprom["serial"];
+ if (
+ (not hint.has_key("name") or hint["name"] == new_addr["name"]) and
+ (not hint.has_key("serial") or hint["serial"] == new_addr["serial"])
+ ){
+ usrp2_addrs.push_back(new_addr);
}
- catch(const std::exception &e){
- uhd::warning::post(
- std::string("Ignoring discovered device\n")
- + e.what()
- );
- }
- //dont break here, it will exit the while loop
- //just continue on to the next loop iteration
}
+ catch(const std::exception &e){
+ uhd::warning::post(
+ std::string("Ignoring discovered device\n")
+ + e.what()
+ );
+ }
+ //dont break here, it will exit the while loop
+ //just continue on to the next loop iteration
}
if (len == 0) break; //timeout
}