aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp2
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/usrp2')
-rw-r--r--host/lib/usrp/usrp2/CMakeLists.txt2
-rw-r--r--host/lib/usrp/usrp2/clock_ctrl.cpp2
-rw-r--r--host/lib/usrp/usrp2/mboard_impl.cpp2
-rw-r--r--host/lib/usrp/usrp2/mboard_rev.cpp89
-rw-r--r--host/lib/usrp/usrp2/mboard_rev.hpp114
-rw-r--r--host/lib/usrp/usrp2/usrp2_clk_regs.hpp4
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp8
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.hpp8
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.cpp4
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.hpp6
10 files changed, 222 insertions, 17 deletions
diff --git a/host/lib/usrp/usrp2/CMakeLists.txt b/host/lib/usrp/usrp2/CMakeLists.txt
index f7984fce5..a09c833bd 100644
--- a/host/lib/usrp/usrp2/CMakeLists.txt
+++ b/host/lib/usrp/usrp2/CMakeLists.txt
@@ -48,6 +48,8 @@ IF(ENABLE_USRP2)
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/gps_ctrl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/io_impl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_impl.cpp
+ ${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_rev.cpp
+ ${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_rev.hpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/serdes_ctrl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/serdes_ctrl.hpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/usrp2_iface.cpp
diff --git a/host/lib/usrp/usrp2/clock_ctrl.cpp b/host/lib/usrp/usrp2/clock_ctrl.cpp
index c652b592b..04bbd6ba3 100644
--- a/host/lib/usrp/usrp2/clock_ctrl.cpp
+++ b/host/lib/usrp/usrp2/clock_ctrl.cpp
@@ -17,7 +17,7 @@
#include "clock_ctrl.hpp"
#include "ad9510_regs.hpp"
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include "usrp2_regs.hpp" //spi slave constants
#include "usrp2_clk_regs.hpp"
#include <uhd/utils/assert.hpp>
diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp
index 805fd23db..9ccf90bbb 100644
--- a/host/lib/usrp/usrp2/mboard_impl.cpp
+++ b/host/lib/usrp/usrp2/mboard_impl.cpp
@@ -20,7 +20,7 @@
#include <uhd/usrp/misc_utils.hpp>
#include <uhd/usrp/dsp_utils.hpp>
#include <uhd/usrp/mboard_props.hpp>
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include <uhd/utils/assert.hpp>
#include <uhd/utils/algorithm.hpp>
#include <uhd/types/mac_addr.hpp>
diff --git a/host/lib/usrp/usrp2/mboard_rev.cpp b/host/lib/usrp/usrp2/mboard_rev.cpp
new file mode 100644
index 000000000..9d0ff89f5
--- /dev/null
+++ b/host/lib/usrp/usrp2/mboard_rev.cpp
@@ -0,0 +1,89 @@
+//
+// Copyright 2010 Ettus Research LLC
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+
+#include "mboard_rev.hpp"
+#include <boost/lexical_cast.hpp>
+#include <boost/format.hpp>
+#include <sstream>
+#include <iostream>
+
+static const mboard_rev_t usrp2p_first_hw_rev = mboard_rev_t(0x0A00);
+
+mboard_rev_t::mboard_rev_t(boost::uint16_t rev){
+ _rev = rev;
+}
+
+mboard_rev_t mboard_rev_t::none(void){
+ return mboard_rev_t();
+}
+
+mboard_rev_t mboard_rev_t::from_uint16(boost::uint16_t uint16){
+ return mboard_rev_t(uint16);
+}
+
+boost::uint16_t mboard_rev_t::to_uint16(void) const{
+ return _rev;
+}
+
+//used with lexical cast to parse a hex string
+template <class T> struct to_hex{
+ T value;
+ operator T() const {return value;}
+ friend std::istream& operator>>(std::istream& in, to_hex& out){
+ in >> std::hex >> out.value;
+ return in;
+ }
+};
+
+mboard_rev_t mboard_rev_t::from_string(const std::string &string){
+ if (string.substr(0, 2) == "0x"){
+ return mboard_rev_t::from_uint16(boost::lexical_cast<to_hex<boost::uint16_t> >(string));
+ }
+ return mboard_rev_t::from_uint16(boost::lexical_cast<boost::uint16_t>(string));
+}
+
+std::string mboard_rev_t::to_string(void) const{
+ return str(boost::format("0x%04x") % this->to_uint16());
+}
+
+std::string mboard_rev_t::to_pp_string(void) const{
+ if(this->is_usrp2p()) {
+ return str(boost::format("USRP2+, major rev %i, minor rev %i") % int(this->major()) % int(this->minor()));
+ } else {
+ return str(boost::format("USRP2, major rev %i, minor rev %i") % int(this->major()) % int(this->minor()));
+ }
+}
+
+bool mboard_rev_t::is_usrp2p(void) const{
+ return _rev >= usrp2p_first_hw_rev;
+}
+
+boost::uint8_t mboard_rev_t::major(void) const{
+ return _rev >> 8;
+}
+
+boost::uint8_t mboard_rev_t::minor(void) const{
+ return _rev & 0xff;
+}
+
+bool operator==(const mboard_rev_t &lhs, const mboard_rev_t &rhs){
+ return lhs.to_uint16() == rhs.to_uint16();
+}
+
+bool operator<(const mboard_rev_t &lhs, const mboard_rev_t &rhs){
+ return lhs.to_uint16() < rhs.to_uint16();
+}
diff --git a/host/lib/usrp/usrp2/mboard_rev.hpp b/host/lib/usrp/usrp2/mboard_rev.hpp
new file mode 100644
index 000000000..a1b1d9605
--- /dev/null
+++ b/host/lib/usrp/usrp2/mboard_rev.hpp
@@ -0,0 +1,114 @@
+//
+// Copyright 2010 Ettus Research LLC
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+
+#ifndef INCLUDED_MBOARD_REV_HPP
+#define INCLUDED_MBOARD_REV_HPP
+
+#include <uhd/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/operators.hpp>
+#include <string>
+
+class UHD_API mboard_rev_t : boost::equality_comparable<mboard_rev_t>, boost::less_than_comparable<mboard_rev_t>{
+ public:
+ /*!
+ * Create a mboard rev from an integer.
+ * \param rev the integer representation
+ */
+ mboard_rev_t(boost::uint16_t rev = 0xffff);
+
+ /*!
+ * Obtain a mboard rev that represents an invalid/uninit mboard ID
+ * \return the mboard rev with the 0xffff rev.
+ */
+ static mboard_rev_t none(void);
+
+ /*!
+ * Create a new mboard rev from an integer representation.
+ * \param uint16 an unsigned 16 bit integer
+ * \return a new mboard rev containing the integer
+ */
+ static mboard_rev_t from_uint16(boost::uint16_t uint16);
+
+ /*!
+ * Get the mboard rev represented as an integer.
+ * \return an unsigned 16 bit integer representation
+ */
+ boost::uint16_t to_uint16(void) const;
+
+ /*!
+ * Create a new mboard rev from a string representation.
+ * If the string has a 0x prefix, it will be parsed as hex.
+ * \param string a numeric string, possibly hex
+ * \return a new dboard id containing the integer
+ */
+ static mboard_rev_t from_string(const std::string &string);
+
+ /*!
+ * Get the mboard rev represented as an integer.
+ * \return a hex string representation with 0x prefix
+ */
+ std::string to_string(void) const;
+
+ /*!
+ * Get the pretty print representation of this mboard rev.
+ * \return a string with the mboard name and rev number
+ */
+ std::string to_pp_string(void) const;
+
+ /*!
+ * Tell you if you're USRP2 or USRP2+
+ * \return true if USRP2+, false if USRP2
+ */
+ bool is_usrp2p(void) const;
+
+ /*!
+ * Get the major revision number
+ * \return major revision number
+ */
+ boost::uint8_t major(void) const;
+
+ /*!
+ * Get the minor revision number
+ * \return minor revision number
+ */
+ boost::uint8_t minor(void) const;
+
+ private:
+ boost::uint16_t _rev; //internal representation
+ };
+
+ /*!
+ * Comparator operator overloaded for mboard rev.
+ * The boost::equality_comparable provides the !=.
+ * \param lhs the mboard rev to the left of the operator
+ * \param rhs the mboard rev to the right of the operator
+ * \return true when the mboard revs are equal
+ */
+ UHD_API bool operator==(const mboard_rev_t &lhs, const mboard_rev_t &rhs);
+
+ /*!
+ * Comparator operator overloaded for mboard rev.
+ * The boost::less_than_comparable provides the >, <=, >=.
+ * \param lhs the mboard rev to the left of the operator
+ * \param rhs the mboard rev to the right of the operator
+ * \return true when lhs < rhs
+ */
+
+ UHD_API bool operator<(const mboard_rev_t &lhs, const mboard_rev_t &rhs);
+
+#endif /* INCLUDED_MBOARD_REV_HPP */
diff --git a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
index edbdfa15d..fcfd1e227 100644
--- a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
+++ b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
@@ -18,13 +18,13 @@
#ifndef INCLUDED_USRP2_CLK_REGS_HPP
#define INCLUDED_USRP2_CLK_REGS_HPP
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include "usrp2_regs.hpp"
class usrp2_clk_regs_t {
public:
usrp2_clk_regs_t(void) { ; }
- usrp2_clk_regs_t(uhd::usrp::mboard_rev_t hw_rev) {
+ usrp2_clk_regs_t(mboard_rev_t hw_rev) {
test = 0;
fpga = 1;
adc = (hw_rev.is_usrp2p()) ? 2 : 4;
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index a5b39ceed..d5ac14155 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -19,7 +19,7 @@
#include "usrp2_iface.hpp"
#include <uhd/utils/assert.hpp>
#include <uhd/types/dict.hpp>
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include <boost/thread.hpp>
#include <boost/foreach.hpp>
#include <boost/asio.hpp> //used for htonl and ntohl
@@ -54,7 +54,7 @@ public:
//extract the mboard rev numbers
byte_vector_t rev_bytes = read_eeprom(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_REV, 2);
- set_hw_rev(uhd::usrp::mboard_rev_t::from_uint16(rev_bytes.at(0) | (rev_bytes.at(1) << 8)));
+ set_hw_rev(mboard_rev_t::from_uint16(rev_bytes.at(0) | (rev_bytes.at(1) << 8)));
//check the fpga compatibility number
const boost::uint32_t fpga_compat_num = this->peek32(this->regs.compat_num_rb);
@@ -265,12 +265,12 @@ public:
/***********************************************************************
* Get/set hardware revision
**********************************************************************/
- void set_hw_rev(uhd::usrp::mboard_rev_t rev) {
+ void set_hw_rev(mboard_rev_t rev) {
hw_rev = rev;
regs = usrp2_get_regs(rev); //might be a better place to do this
}
- uhd::usrp::mboard_rev_t get_hw_rev(void) {
+ mboard_rev_t get_hw_rev(void) {
return hw_rev;
}
diff --git a/host/lib/usrp/usrp2/usrp2_iface.hpp b/host/lib/usrp/usrp2/usrp2_iface.hpp
index 53a8e4bc8..fee3b23af 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.hpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.hpp
@@ -23,7 +23,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>
#include <boost/cstdint.hpp>
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include <utility>
#include "fw_common.h"
#include "usrp2_regs.hpp"
@@ -113,12 +113,12 @@ public:
* Set the hardware revision number. Also selects the proper register set for the device.
* \param rev the 16-bit revision
*/
- virtual void set_hw_rev(uhd::usrp::mboard_rev_t rev) = 0;
+ virtual void set_hw_rev(mboard_rev_t rev) = 0;
/*! Return the hardware revision number
* \return hardware revision
*/
- virtual uhd::usrp::mboard_rev_t get_hw_rev(void) = 0;
+ virtual mboard_rev_t get_hw_rev(void) = 0;
/*!
* Register map selected from USRP2/USRP2+.
@@ -127,7 +127,7 @@ public:
/*!
* Hardware revision as returned by the device.
*/
- uhd::usrp::mboard_rev_t hw_rev;
+ mboard_rev_t hw_rev;
};
#endif /* INCLUDED_USRP2_IFACE_HPP */
diff --git a/host/lib/usrp/usrp2/usrp2_regs.cpp b/host/lib/usrp/usrp2/usrp2_regs.cpp
index f9b54b76e..0f0360c95 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.cpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.cpp
@@ -15,14 +15,14 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#include "usrp2_regs.hpp"
int sr_addr(int misc_output_base, int sr) {
return misc_output_base + 4 * sr;
}
-usrp2_regs_t usrp2_get_regs(uhd::usrp::mboard_rev_t hw_rev) {
+usrp2_regs_t usrp2_get_regs(mboard_rev_t hw_rev) {
//how about you just make this dependent on hw_rev instead of doing the init before main, and give up the const globals, since the application won't ever need both.
const int misc_output_base = (hw_rev.is_usrp2p()) ? USRP2P_MISC_OUTPUT_BASE : USRP2_MISC_OUTPUT_BASE,
diff --git a/host/lib/usrp/usrp2/usrp2_regs.hpp b/host/lib/usrp/usrp2/usrp2_regs.hpp
index bb15ed496..0d68c65c2 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.hpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.hpp
@@ -18,7 +18,7 @@
#ifndef INCLUDED_USRP2_REGS_HPP
#define INCLUDED_USRP2_REGS_HPP
-#include <uhd/usrp/mboard_rev.hpp>
+#include "mboard_rev.hpp"
#define USRP2_MISC_OUTPUT_BASE 0xD400
#define USRP2_GPIO_BASE 0xC800
@@ -30,7 +30,7 @@
#define USRP2P_ATR_BASE 0x3800
#define USRP2P_BP_STATUS_BASE 0x3300
-const uhd::usrp::mboard_rev_t USRP2P_FIRST_HW_REV(0x0A00);
+const mboard_rev_t USRP2P_FIRST_HW_REV(0x0A00);
typedef struct {
int sr_misc;
@@ -103,7 +103,7 @@ typedef struct {
extern const usrp2_regs_t usrp2_regs; //the register definitions, set in usrp2_regs.cpp and usrp2p_regs.cpp
-usrp2_regs_t usrp2_get_regs(uhd::usrp::mboard_rev_t hw_rev);
+usrp2_regs_t usrp2_get_regs(mboard_rev_t hw_rev);
////////////////////////////////////////////////////
// Settings Bus, Slave #7, Not Byte Addressable!