summaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-07-07 17:15:45 -0700
committerJosh Blum <josh@joshknows.com>2010-07-07 17:15:45 -0700
commit516b722fa17123b6ae95b551c71f0b052d129f78 (patch)
tree248ca0e2d34a1761aad3e59e955be74c743dad09 /host/lib
parent79c513d0b21127a5a4cfa6a70213630364a281db (diff)
downloaduhd-516b722fa17123b6ae95b551c71f0b052d129f78.tar.gz
uhd-516b722fa17123b6ae95b551c71f0b052d129f78.tar.bz2
uhd-516b722fa17123b6ae95b551c71f0b052d129f78.zip
uhd: change pack/unpack for 64-bit numbers to reflect hardware implementation
Diffstat (limited to 'host/lib')
-rwxr-xr-xhost/lib/transport/gen_vrt_if_packet.py10
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp2
2 files changed, 9 insertions, 3 deletions
diff --git a/host/lib/transport/gen_vrt_if_packet.py b/host/lib/transport/gen_vrt_if_packet.py
index 7910ff60d..9b5bfca02 100755
--- a/host/lib/transport/gen_vrt_if_packet.py
+++ b/host/lib/transport/gen_vrt_if_packet.py
@@ -62,7 +62,10 @@ using namespace uhd::transport;
#set $tlr_p = 0b10000
static UHD_INLINE void pack_uint64_$(suffix)(boost::uint64_t num, boost::uint32_t *mem){
- *(reinterpret_cast<boost::uint64_t *>(mem)) = $(XE_MACRO)(num);
+ //*(reinterpret_cast<boost::uint64_t *>(mem)) = $(XE_MACRO)(num);
+ //second word is lower 32 bits due to fpga implementation
+ mem[1] = $(XE_MACRO)(boost::uint32_t(num >> 0));
+ mem[0] = $(XE_MACRO)(boost::uint32_t(num >> 32));
}
void vrt::if_hdr_pack_$(suffix)(
@@ -137,7 +140,10 @@ void vrt::if_hdr_pack_$(suffix)(
}
static UHD_INLINE void unpack_uint64_$(suffix)(boost::uint64_t &num, const boost::uint32_t *mem){
- num = $(XE_MACRO)(*reinterpret_cast<const boost::uint64_t *>(mem));
+ //num = $(XE_MACRO)(*reinterpret_cast<const boost::uint64_t *>(mem));
+ //second word is lower 32 bits due to fpga implementation
+ num = boost::uint64_t($(XE_MACRO)(mem[1])) << 0;
+ num |= boost::uint64_t($(XE_MACRO)(mem[0])) << 32;
}
void vrt::if_hdr_unpack_$(suffix)(
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index faf4a5c7e..8552edd1f 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -161,7 +161,7 @@ public:
//loop until we get the packet or timeout
boost::uint8_t usrp2_ctrl_data_in_mem[USRP2_UDP_BYTES]; //allocate max bytes for recv
- usrp2_ctrl_data_t *ctrl_data_in = reinterpret_cast<usrp2_ctrl_data_t *>(usrp2_ctrl_data_in_mem);
+ 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));
if(len >= sizeof(boost::uint32_t) and ntohl(ctrl_data_in->proto_ver) != USRP2_PROTO_VERSION){