diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/device_addr.cpp | 55 | ||||
-rw-r--r-- | lib/usrp/dboard/base.cpp | 8 | ||||
-rw-r--r-- | lib/usrp/dboard/basic.cpp | 8 | ||||
-rw-r--r-- | lib/usrp_uhd.cpp | 2 |
4 files changed, 43 insertions, 30 deletions
diff --git a/lib/device_addr.cpp b/lib/device_addr.cpp index ac66c0d25..34c61ede8 100644 --- a/lib/device_addr.cpp +++ b/lib/device_addr.cpp @@ -5,36 +5,49 @@ #include <usrp_uhd/device_addr.hpp> #include <sstream> #include <cstring> -#include <cstdio> #include <stdexcept> +#include <boost/format.hpp> +#include <boost/algorithm/string.hpp> //----------------------- u2 mac addr wrapper ------------------------// -usrp_uhd::mac_addr_t::mac_addr_t(const std::string &str){ +usrp_uhd::mac_addr_t::mac_addr_t(const std::string &mac_addr_str){ //ether_aton_r(str.c_str(), &mac_addr); - bool good = false; - char p[6] = {0x00, 0x50, 0xC2, 0x85, 0x30, 0x00}; // Matt's IAB + uint8_t p[6] = {0x00, 0x50, 0xC2, 0x85, 0x30, 0x00}; // Matt's IAB - switch (str.size()){ - case 5: - good = sscanf(str.c_str(), "%hhx:%hhx", &p[4], &p[5]) == 2; - break; - case 17: - good = sscanf(str.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", - &p[0], &p[1], &p[2], &p[3], &p[4], &p[5]) == 6; - break; + try{ + //only allow patterns of xx:xx or xx:xx:xx:xx:xx:xx + //the IAB above will fill in for the shorter pattern + if (mac_addr_str.size() != 5 and mac_addr_str.size() != 17) + throw std::runtime_error("expected exactly 5 or 17 characters"); + + //split the mac addr hex string at the colons + std::vector<std::string> hex_strs; + boost::split(hex_strs, mac_addr_str, boost::is_any_of(":")); + for (size_t i = 0; i < hex_strs.size(); i++){ + int hex_num; + std::istringstream iss(hex_strs[i]); + iss >> std::hex >> hex_num; + p[i] = uint8_t(hex_num); + } + + } + catch(std::exception const& e){ + throw std::runtime_error(str( + boost::format("Invalid mac address: %s\n\t%s") % mac_addr_str % e.what() + )); } - if (not good) throw std::runtime_error("Invalid mac address: " + str); memcpy(&mac_addr, p, sizeof(mac_addr)); } std::string usrp_uhd::mac_addr_t::to_string(void) const{ - char addr_buf[128]; //ether_ntoa_r(&mac_addr, addr_buf); const uint8_t *p = reinterpret_cast<const uint8_t *>(&mac_addr); - sprintf(addr_buf, "%02x:%02x:%02x:%02x:%02x:%02x", - p[0], p[1], p[2], p[3], p[4], p[5]); - return std::string(addr_buf); + return str( + boost::format("%02x:%02x:%02x:%02x:%02x:%02x") + % int(p[0]) % int(p[1]) % int(p[2]) + % int(p[3]) % int(p[4]) % int(p[5]) + ); } std::ostream& operator<<(std::ostream &os, const usrp_uhd::mac_addr_t &x){ @@ -43,9 +56,9 @@ std::ostream& operator<<(std::ostream &os, const usrp_uhd::mac_addr_t &x){ } //----------------------- u2 ipv4 wrapper ----------------------------// -usrp_uhd::ip_addr_t::ip_addr_t(const std::string &str){ - int ret = inet_pton(AF_INET, str.c_str(), &ip_addr); - if (ret == 0) throw std::runtime_error("Invalid ip address: " + str); +usrp_uhd::ip_addr_t::ip_addr_t(const std::string &ip_addr_str){ + int ret = inet_pton(AF_INET, ip_addr_str.c_str(), &ip_addr); + if (ret == 0) throw std::runtime_error("Invalid ip address: " + ip_addr_str); } std::string usrp_uhd::ip_addr_t::to_string(void) const{ @@ -73,7 +86,7 @@ usrp_uhd::device_addr_t::device_addr_t(device_addr_type_t device_addr_type){ } std::string usrp_uhd::device_addr_t::to_string(void) const{ - std::stringstream out; + std::ostringstream out; out << "USRP Type: "; switch(type){ case DEVICE_ADDR_TYPE_AUTO: diff --git a/lib/usrp/dboard/base.cpp b/lib/usrp/dboard/base.cpp index 3166cdedc..c3fc332c9 100644 --- a/lib/usrp/dboard/base.cpp +++ b/lib/usrp/dboard/base.cpp @@ -38,11 +38,11 @@ rx_base::~rx_base(void){ /* NOP */ } -void rx_base::tx_get(const wax::type &key, wax::type &val){ +void rx_base::tx_get(const wax::type &, wax::type &){ throw std::runtime_error("cannot call tx_get on a rx dboard"); } -void rx_base::tx_set(const wax::type &key, const wax::type &val){ +void rx_base::tx_set(const wax::type &, const wax::type &){ throw std::runtime_error("cannot call tx_set on a rx dboard"); } @@ -58,10 +58,10 @@ tx_base::~tx_base(void){ /* NOP */ } -void tx_base::rx_get(const wax::type &key, wax::type &val){ +void tx_base::rx_get(const wax::type &, wax::type &){ throw std::runtime_error("cannot call rx_get on a tx dboard"); } -void tx_base::rx_set(const wax::type &key, const wax::type &val){ +void tx_base::rx_set(const wax::type &, const wax::type &){ throw std::runtime_error("cannot call rx_set on a tx dboard"); } diff --git a/lib/usrp/dboard/basic.cpp b/lib/usrp/dboard/basic.cpp index 120b637b2..1c746815c 100644 --- a/lib/usrp/dboard/basic.cpp +++ b/lib/usrp/dboard/basic.cpp @@ -16,11 +16,11 @@ basic_rx::~basic_rx(void){ /* NOP */ } -void basic_rx::rx_get(const wax::type &key, wax::type &val){ +void basic_rx::rx_get(const wax::type &, wax::type &){ /* TODO */ } -void basic_rx::rx_set(const wax::type &key, const wax::type &val){ +void basic_rx::rx_set(const wax::type &, const wax::type &){ /* TODO */ } @@ -36,10 +36,10 @@ basic_tx::~basic_tx(void){ /* NOP */ } -void basic_tx::tx_get(const wax::type &key, wax::type &val){ +void basic_tx::tx_get(const wax::type &, wax::type &){ /* TODO */ } -void basic_tx::tx_set(const wax::type &key, const wax::type &val){ +void basic_tx::tx_set(const wax::type &, const wax::type &){ /* TODO */ } diff --git a/lib/usrp_uhd.cpp b/lib/usrp_uhd.cpp index a838b717b..7d1e62a13 100644 --- a/lib/usrp_uhd.cpp +++ b/lib/usrp_uhd.cpp @@ -4,5 +4,5 @@ #include <usrp_uhd.hpp> -usrp_uhd::usrp_uhd::usrp_uhd(device_addr_t device_addr){} +usrp_uhd::usrp_uhd::usrp_uhd(device_addr_t){} usrp_uhd::usrp_uhd::~usrp_uhd(void){} |