diff options
| author | Josh Blum <josh@joshknows.com> | 2010-08-09 18:29:13 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-08-09 18:29:13 -0700 | 
| commit | f6c3178c7ce7b255c3bcf9ade6d9d61b5de79ae1 (patch) | |
| tree | 0635d82780e6870cb0a2fd90640a31349368df9d | |
| parent | b99c2c0417a453b1d9ed3c9d77989ce32db4fd88 (diff) | |
| download | uhd-f6c3178c7ce7b255c3bcf9ade6d9d61b5de79ae1.tar.gz uhd-f6c3178c7ce7b255c3bcf9ade6d9d61b5de79ae1.tar.bz2 uhd-f6c3178c7ce7b255c3bcf9ade6d9d61b5de79ae1.zip | |
usrp2: added fpga compat number, renamed firmware proto version to compat
| -rw-r--r-- | firmware/microblaze/apps/txrx_uhd.c | 11 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/fw_common.h | 6 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_iface.cpp | 24 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_regs.hpp | 1 | 
5 files changed, 28 insertions, 16 deletions
| diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c index 092d216aa..f0a9702be 100644 --- a/firmware/microblaze/apps/txrx_uhd.c +++ b/firmware/microblaze/apps/txrx_uhd.c @@ -181,9 +181,9 @@ void handle_udp_ctrl_packet(      uint32_t ctrl_data_in_id = ctrl_data_in->id;      //ensure that the protocol versions match -    if (payload_len >= sizeof(uint32_t) && ctrl_data_in->proto_ver != USRP2_PROTO_VERSION){ -        printf("!Error in control packet handler: Expected protocol version %d, but got %d\n", -            USRP2_PROTO_VERSION, ctrl_data_in->proto_ver +    if (payload_len >= sizeof(uint32_t) && ctrl_data_in->proto_ver != USRP2_FW_COMPAT_NUM){ +        printf("!Error in control packet handler: Expected compatibility number %d, but got %d\n", +            USRP2_FW_COMPAT_NUM, ctrl_data_in->proto_ver          );          ctrl_data_in_id = USRP2_CTRL_ID_WAZZUP_BRO;      } @@ -198,7 +198,7 @@ void handle_udp_ctrl_packet(      //setup the output data      usrp2_ctrl_data_t ctrl_data_out = { -        .proto_ver = USRP2_PROTO_VERSION, +        .proto_ver = USRP2_FW_COMPAT_NUM,          .id=USRP2_CTRL_ID_HUH_WHAT,          .seq=ctrl_data_in->seq      }; @@ -441,7 +441,8 @@ main(void)    print_mac_addr(ethernet_mac_addr()->addr);    newline();    print_ip_addr(get_ip_addr()); newline(); -  printf("Control protocol version: %d\n", USRP2_PROTO_VERSION); +  printf("FPGA compatibility number: %d\n", USRP2_FPGA_COMPAT_NUM); +  printf("Firmware compatibility number: %d\n", USRP2_FW_COMPAT_NUM);    ethernet_register_link_changed_callback(link_changed_callback);    ethernet_init(); diff --git a/host/lib/usrp/usrp2/fw_common.h b/host/lib/usrp/usrp2/fw_common.h index c4dabf5bc..a781c1a21 100644 --- a/host/lib/usrp/usrp2/fw_common.h +++ b/host/lib/usrp/usrp2/fw_common.h @@ -32,9 +32,9 @@ extern "C" {      #define __stdint(type) type  #endif -//defines the protocol version in this shared header -//increment this value when the protocol is changed -#define USRP2_PROTO_VERSION 5 +//fpga and firmware compatibility numbers +#define USRP2_FPGA_COMPAT_NUM 1 +#define USRP2_FW_COMPAT_NUM 5  //used to differentiate control packets over data port  #define USRP2_INVALID_VRT_HEADER 0 diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index a21157d76..4124221ef 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -15,6 +15,7 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // +#include "usrp2_regs.hpp"  #include "usrp2_iface.hpp"  #include <uhd/utils/assert.hpp>  #include <uhd/types/dict.hpp> @@ -22,6 +23,7 @@  #include <boost/foreach.hpp>  #include <boost/asio.hpp> //used for htonl and ntohl  #include <boost/assign/list_of.hpp> +#include <boost/format.hpp>  #include <stdexcept>  #include <algorithm> @@ -47,6 +49,15 @@ public:   **********************************************************************/      usrp2_iface_impl(udp_simple::sptr ctrl_transport){          _ctrl_transport = ctrl_transport; + +         //check the fpga compatibility number +        const boost::uint32_t fpga_compat_num = this->peek32(U2_REG_COMPAT_NUM_RB); +        if (fpga_compat_num != USRP2_FPGA_COMPAT_NUM){ +            throw std::runtime_error(str(boost::format( +                "Expected fpga compatibility number %d, but got %d:\n" +                "The fpga build is not compatible with the host code build." +            ) % int(USRP2_FPGA_COMPAT_NUM) % fpga_compat_num)); +        }      }      ~usrp2_iface_impl(void){ @@ -168,7 +179,7 @@ public:          //fill in the seq number and send          usrp2_ctrl_data_t out_copy = out_data; -        out_copy.proto_ver = htonl(USRP2_PROTO_VERSION); +        out_copy.proto_ver = htonl(USRP2_FW_COMPAT_NUM);          out_copy.seq = htonl(++_ctrl_seq_num);          _ctrl_transport->send(boost::asio::buffer(&out_copy, sizeof(usrp2_ctrl_data_t))); @@ -177,12 +188,11 @@ public:          const usrp2_ctrl_data_t *ctrl_data_in = reinterpret_cast<const usrp2_ctrl_data_t *>(usrp2_ctrl_data_in_mem);          while(true){              size_t len = _ctrl_transport->recv(boost::asio::buffer(usrp2_ctrl_data_in_mem), CONTROL_TIMEOUT_MS); -            if(len >= sizeof(boost::uint32_t) and ntohl(ctrl_data_in->proto_ver) != USRP2_PROTO_VERSION){ -                throw std::runtime_error(str( -                    boost::format("Expected protocol version %d, but got %d\n" -                    "The firmware build does not match the host code build." -                    ) % int(USRP2_PROTO_VERSION) % ntohl(ctrl_data_in->proto_ver) -                )); +            if(len >= sizeof(boost::uint32_t) and ntohl(ctrl_data_in->proto_ver) != USRP2_FW_COMPAT_NUM){ +                throw std::runtime_error(str(boost::format( +                    "Expected protocol compatibility number %d, but got %d:\n" +                    "The firmware build is not compatible with the host code build." +                ) % int(USRP2_FW_COMPAT_NUM) % ntohl(ctrl_data_in->proto_ver)));              }              if (len >= sizeof(usrp2_ctrl_data_t) and ntohl(ctrl_data_in->seq) == _ctrl_seq_num){                  return *ctrl_data_in; diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index 2c314c085..21f411afe 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -97,7 +97,7 @@ static uhd::device_addrs_t usrp2_find(const device_addr_t &hint){      //send a hello control packet      usrp2_ctrl_data_t ctrl_data_out; -    ctrl_data_out.proto_ver = htonl(USRP2_PROTO_VERSION); +    ctrl_data_out.proto_ver = htonl(USRP2_FW_COMPAT_NUM);      ctrl_data_out.id = htonl(USRP2_CTRL_ID_WAZZUP_BRO);      udp_transport->send(boost::asio::buffer(&ctrl_data_out, sizeof(ctrl_data_out))); diff --git a/host/lib/usrp/usrp2/usrp2_regs.hpp b/host/lib/usrp/usrp2/usrp2_regs.hpp index cc9094ae7..9d306090b 100644 --- a/host/lib/usrp/usrp2/usrp2_regs.hpp +++ b/host/lib/usrp/usrp2/usrp2_regs.hpp @@ -107,6 +107,7 @@  #define U2_REG_TIME64_SECS_RB  (0xCC00 + 4*10)  #define U2_REG_TIME64_TICKS_RB (0xCC00 + 4*11) +#define U2_REG_COMPAT_NUM_RB   (0xCC00 + 4*12)  //pps flags (see above)  #define U2_FLAG_TIME64_PPS_NEGEDGE (0 << 0) | 
