diff options
| -rw-r--r-- | Makefile.common | 1 | ||||
| -rw-r--r-- | include/usrp_uhd/device_addr.hpp | 4 | ||||
| -rw-r--r-- | include/usrp_uhd/usrp/dboard/interface.hpp | 2 | ||||
| -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 | ||||
| -rw-r--r-- | test/.gitignore | 2 | ||||
| -rw-r--r-- | test/Makefile.am | 2 | ||||
| -rw-r--r-- | test/addr_test.cpp | 41 | ||||
| -rw-r--r-- | test/wax_test.cpp | 2 | 
11 files changed, 92 insertions, 35 deletions
| diff --git a/Makefile.common b/Makefile.common index 8972e4f42..0afe43c7b 100644 --- a/Makefile.common +++ b/Makefile.common @@ -7,6 +7,7 @@ USRP_UHD_LA = $(abs_top_builddir)/lib/libusrp_uhd.la  USRP_UHD_USRP_DBOARD_LA = $(abs_top_builddir)/lib/usrp/dboard/lib.la  GENERAL_CPPFLAGS = \ +	-W -Wall -Werror -ansi -pedantic \  	-I$(top_srcdir)/include \  	$(BOOST_CPPFLAGS) diff --git a/include/usrp_uhd/device_addr.hpp b/include/usrp_uhd/device_addr.hpp index f0be44c1f..c082d9f84 100644 --- a/include/usrp_uhd/device_addr.hpp +++ b/include/usrp_uhd/device_addr.hpp @@ -18,7 +18,7 @@ namespace usrp_uhd{      */      struct mac_addr_t{          struct ether_addr mac_addr; -        mac_addr_t(const std::string &str = "00:00:00:00:00:00"); +        mac_addr_t(const std::string &mac_addr_str = "00:00:00:00:00:00");          std::string to_string(void) const;      }; @@ -28,7 +28,7 @@ namespace usrp_uhd{      */      struct ip_addr_t{          struct in_addr ip_addr; -        ip_addr_t(const std::string &str = "0.0.0.0"); +        ip_addr_t(const std::string &ip_addr_str = "0.0.0.0");          std::string to_string(void) const;      }; diff --git a/include/usrp_uhd/usrp/dboard/interface.hpp b/include/usrp_uhd/usrp/dboard/interface.hpp index e6fdd9ad1..acbfc6d70 100644 --- a/include/usrp_uhd/usrp/dboard/interface.hpp +++ b/include/usrp_uhd/usrp/dboard/interface.hpp @@ -23,7 +23,7 @@ public:      //tells the host which device to use      enum spi_dev_t{          SPI_TX_DEV, -        SPI_RX_DEV, +        SPI_RX_DEV      };      //args for writing spi data 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){} diff --git a/test/.gitignore b/test/.gitignore index 3d6649c66..28c7c29da 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,3 +1,3 @@  /Makefile  /Makefile.in -/wax_test +/*_test diff --git a/test/Makefile.am b/test/Makefile.am index e5b1bc1e1..31deb7391 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -13,8 +13,10 @@ LDADD = \  	$(USRP_UHD_LA)  noinst_PROGRAMS = \ +	addr_test \  	wax_test +addr_test_SOURCES = addr_test.cpp  wax_test_SOURCES = wax_test.cpp  TESTS = $(noinst_PROGRAMS) diff --git a/test/addr_test.cpp b/test/addr_test.cpp new file mode 100644 index 000000000..11fe8c1dd --- /dev/null +++ b/test/addr_test.cpp @@ -0,0 +1,41 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#include <usrp_uhd/device_addr.hpp> +#include <iostream> +#include <stdexcept> +#include <boost/format.hpp> +#include <boost/current_function.hpp> + +#define THROW_ASSERT(expr) \ +if (not (expr)){ \ +    throw std::runtime_error(str( \ +        boost::format("%s %s %s %s") \ +        % #expr % BOOST_CURRENT_FUNCTION % __FILE__ % __LINE__ \ +    )); \ +} + +int main(void){ +    try{ +        std::cout << "Testing mac addr:" << std::endl; +        const std::string mac_addr_str("00:01:23:45:67:89"); +        usrp_uhd::mac_addr_t mac_addr(mac_addr_str); +        std::cout << "Input: " << mac_addr_str << std::endl; +        std::cout << "Output: " << mac_addr << std::endl; +        THROW_ASSERT(mac_addr.to_string() == mac_addr_str); + +        std::cout << "Testing ip addr:" << std::endl; +        const std::string ip_addr_str("192.168.1.10"); +        usrp_uhd::ip_addr_t ip_addr(ip_addr_str); +        std::cout << "Input: " << ip_addr_str << std::endl; +        std::cout << "Output: " << ip_addr << std::endl; +        THROW_ASSERT(ip_addr.to_string() == ip_addr_str); + +        std::cout << "done" << std::endl; +    }catch(std::exception const& e){ +        std::cerr << "Exception: " << e.what() << std::endl; +        return ~0; +    } +    return 0; +} diff --git a/test/wax_test.cpp b/test/wax_test.cpp index 88c9e0f32..06f17b9b7 100644 --- a/test/wax_test.cpp +++ b/test/wax_test.cpp @@ -74,7 +74,7 @@ int main(void){          std::cout << test_type << std::endl;          std::cout << "done" << std::endl;      }catch(std::exception const& e){ -        std::cout << "Exception: " << e.what() << std::endl; +        std::cerr << "Exception: " << e.what() << std::endl;          return ~0;      }      return 0; | 
