summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-03-17 17:55:20 -0800
committerJosh Blum <josh@joshknows.com>2010-03-17 17:55:20 -0800
commit69aaffa6d8d4614dbf6b751fe058e39fced68153 (patch)
tree1a3958527b79eeb0297146dccff7fd76b0f46a7f
parent83c463d09613b72817a837117c5f0b23975c8def (diff)
downloaduhd-69aaffa6d8d4614dbf6b751fe058e39fced68153.tar.gz
uhd-69aaffa6d8d4614dbf6b751fe058e39fced68153.tar.bz2
uhd-69aaffa6d8d4614dbf6b751fe058e39fced68153.zip
got uhd almost compiling in windowze. figured out special flags. also had to use boost stdint because its missing in visual c++, added a bunch of numeric casts to reduce warnings
-rw-r--r--host/CMakeLists.txt19
-rw-r--r--host/include/uhd/device_addr.hpp5
-rw-r--r--host/include/uhd/metadata.hpp8
-rw-r--r--host/include/uhd/time_spec.hpp8
-rw-r--r--host/include/uhd/transport/vrt.hpp14
-rw-r--r--host/include/uhd/usrp/dboard_id.hpp4
-rw-r--r--host/include/uhd/usrp/dboard_interface.hpp12
-rw-r--r--host/lib/CMakeLists.txt5
-rw-r--r--host/lib/device.cpp2
-rw-r--r--host/lib/device_addr.cpp6
-rw-r--r--host/lib/time_spec.cpp8
-rw-r--r--host/lib/transport/udp_zero_copy_none.cpp10
-rw-r--r--host/lib/transport/vrt.cpp21
-rw-r--r--host/lib/usrp/usrp2/dboard_impl.cpp4
-rw-r--r--host/lib/usrp/usrp2/dboard_interface.cpp28
-rw-r--r--host/lib/usrp/usrp2/dsp_impl.cpp23
-rw-r--r--host/lib/usrp/usrp2/fw_common.h100
-rw-r--r--host/lib/usrp/usrp2/io_impl.cpp65
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.hpp10
-rw-r--r--host/test/vrt_test.cpp2
-rw-r--r--host/test/wax_test.cpp2
21 files changed, 191 insertions, 165 deletions
diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt
index 30f4789a3..3576a690f 100644
--- a/host/CMakeLists.txt
+++ b/host/CMakeLists.txt
@@ -53,10 +53,18 @@ FUNCTION(UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG flag have)
ENDIF(${have})
ENDFUNCTION(UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG)
-UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-Wall HAVE_WALL)
-UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-Wextra HAVE_WEXTRA)
-UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-pedantic HAVE_PEDANTIC)
-UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-ansi HAVE_ANSI)
+IF(UNIX)
+ UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-Wall HAVE_WALL)
+ UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-Wextra HAVE_WEXTRA)
+ UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-pedantic HAVE_PEDANTIC)
+ UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-ansi HAVE_ANSI)
+ENDIF(UNIX)
+
+IF(WIN32)
+ ADD_DEFINITIONS(-Dnot=! -Dand=&& -Dor=||) #logical operators
+ ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) #as requested by vs
+ ADD_DEFINITIONS(-DNOMINMAX) #disables stupidity and enables std::min and std::max
+ENDIF(WIN32)
########################################################################
# Setup Boost
@@ -64,6 +72,7 @@ UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-ansi HAVE_ANSI)
FIND_PACKAGE(Boost 1.36 REQUIRED
date_time
program_options
+ regex
system
thread
unit_test_framework
@@ -78,7 +87,7 @@ LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
INCLUDE(TestBigEndian)
TEST_BIG_ENDIAN(HAVE_BIG_ENDIAN)
IF(HAVE_BIG_ENDIAN)
- ADD_DEFINITIONS("-DHAVE_BIG_ENDIAN=/* */")
+ ADD_DEFINITIONS(-DHAVE_BIG_ENDIAN)
ENDIF(HAVE_BIG_ENDIAN)
########################################################################
diff --git a/host/include/uhd/device_addr.hpp b/host/include/uhd/device_addr.hpp
index ed538453a..1b624b770 100644
--- a/host/include/uhd/device_addr.hpp
+++ b/host/include/uhd/device_addr.hpp
@@ -19,10 +19,9 @@
#define INCLUDED_UHD_DEVICE_ADDR_HPP
#include <uhd/dict.hpp>
+#include <boost/cstdint.hpp>
#include <string>
#include <iostream>
-#include <netinet/ether.h>
-#include <stdint.h>
#include <vector>
namespace uhd{
@@ -32,7 +31,7 @@ namespace uhd{
* Provides conversion between string and binary formats.
*/
struct mac_addr_t{
- struct ether_addr mac_addr;
+ boost::uint8_t mac_addr[6];
mac_addr_t(const std::string &mac_addr_str = "00:00:00:00:00:00");
std::string to_string(void) const;
};
diff --git a/host/include/uhd/metadata.hpp b/host/include/uhd/metadata.hpp
index 0588ef0ed..ce72ff14b 100644
--- a/host/include/uhd/metadata.hpp
+++ b/host/include/uhd/metadata.hpp
@@ -28,9 +28,9 @@ namespace uhd{
* The receive routines will convert IF data headers into metadata.
*/
struct rx_metadata_t{
- uint32_t stream_id;
- bool has_stream_id;
+ boost::uint32_t stream_id;
time_spec_t time_spec;
+ bool has_stream_id;
bool has_time_spec;
bool is_fragment;
@@ -44,9 +44,9 @@ struct rx_metadata_t{
* The send routines will convert the metadata to IF data headers.
*/
struct tx_metadata_t{
- uint32_t stream_id;
- bool has_stream_id;
+ boost::uint32_t stream_id;
time_spec_t time_spec;
+ bool has_stream_id;
bool has_time_spec;
bool start_of_burst;
bool end_of_burst;
diff --git a/host/include/uhd/time_spec.hpp b/host/include/uhd/time_spec.hpp
index 7e182236b..588758824 100644
--- a/host/include/uhd/time_spec.hpp
+++ b/host/include/uhd/time_spec.hpp
@@ -16,7 +16,7 @@
//
#include <boost/date_time/posix_time/posix_time.hpp>
-#include <stdint.h>
+#include <boost/cstdint.hpp>
#ifndef INCLUDED_UHD_TIME_SPEC_HPP
#define INCLUDED_UHD_TIME_SPEC_HPP
@@ -30,8 +30,8 @@ namespace uhd{
* and for controlling the start of streaming for applicable dsps.
*/
struct time_spec_t{
- uint32_t secs;
- uint32_t ticks;
+ boost::uint32_t secs;
+ boost::uint32_t ticks;
/*!
* Create a time_spec_t that holds a wildcard time.
@@ -44,7 +44,7 @@ namespace uhd{
* \param new_secs the new seconds
* \param new_ticks the new ticks (default = 0)
*/
- time_spec_t(uint32_t new_secs, uint32_t new_ticks = 0);
+ time_spec_t(boost::uint32_t new_secs, boost::uint32_t new_ticks = 0);
/*!
* Create a time_spec_t from boost posix time.
diff --git a/host/include/uhd/transport/vrt.hpp b/host/include/uhd/transport/vrt.hpp
index 1700d2785..3b5bf41bf 100644
--- a/host/include/uhd/transport/vrt.hpp
+++ b/host/include/uhd/transport/vrt.hpp
@@ -38,7 +38,7 @@ namespace vrt{
*/
void pack(
const tx_metadata_t &metadata, //input
- uint32_t *header_buff, //output
+ boost::uint32_t *header_buff, //output
size_t &num_header_words32, //output
size_t num_payload_words32, //input
size_t &num_packet_words32, //output
@@ -55,12 +55,12 @@ namespace vrt{
* \param packet_count the packet count sequence number
*/
void unpack(
- rx_metadata_t &metadata, //output
- const uint32_t *header_buff, //input
- size_t &num_header_words32, //output
- size_t &num_payload_words32, //output
- size_t num_packet_words32, //input
- size_t &packet_count //output
+ rx_metadata_t &metadata, //output
+ const boost::uint32_t *header_buff, //input
+ size_t &num_header_words32, //output
+ size_t &num_payload_words32, //output
+ size_t num_packet_words32, //input
+ size_t &packet_count //output
);
} //namespace vrt
diff --git a/host/include/uhd/usrp/dboard_id.hpp b/host/include/uhd/usrp/dboard_id.hpp
index 34406863d..62c61661c 100644
--- a/host/include/uhd/usrp/dboard_id.hpp
+++ b/host/include/uhd/usrp/dboard_id.hpp
@@ -15,15 +15,15 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
+#include <boost/cstdint.hpp>
#include <string>
-#include <stdint.h>
#ifndef INCLUDED_UHD_USRP_DBOARD_ID_HPP
#define INCLUDED_UHD_USRP_DBOARD_ID_HPP
namespace uhd{ namespace usrp{
-typedef uint16_t dboard_id_t;
+typedef boost::uint16_t dboard_id_t;
static const dboard_id_t ID_NONE = 0xffff;
diff --git a/host/include/uhd/usrp/dboard_interface.hpp b/host/include/uhd/usrp/dboard_interface.hpp
index 84e1f5b22..b00643550 100644
--- a/host/include/uhd/usrp/dboard_interface.hpp
+++ b/host/include/uhd/usrp/dboard_interface.hpp
@@ -19,8 +19,8 @@
#define INCLUDED_UHD_USRP_DBOARD_INTERFACE_HPP
#include <boost/shared_ptr.hpp>
+#include <boost/cstdint.hpp>
#include <vector>
-#include <stdint.h>
namespace uhd{ namespace usrp{
@@ -33,7 +33,7 @@ namespace uhd{ namespace usrp{
class dboard_interface{
public:
typedef boost::shared_ptr<dboard_interface> sptr;
- typedef std::vector<uint8_t> byte_vector_t;
+ typedef std::vector<boost::uint8_t> byte_vector_t;
//tells the host which unit to use
enum unit_type_t{
@@ -96,7 +96,7 @@ public:
* \param rx_value 16-bits, 0=FPGA output low, 1=FPGA output high
* \param mask 16-bits, 0=software, 1=atr
*/
- virtual void set_atr_reg(gpio_bank_t bank, uint16_t tx_value, uint16_t rx_value, uint16_t mask) = 0;
+ virtual void set_atr_reg(gpio_bank_t bank, boost::uint16_t tx_value, boost::uint16_t rx_value, boost::uint16_t mask) = 0;
/*!
* Set daughterboard GPIO data direction register.
@@ -105,7 +105,7 @@ public:
* \param value 16-bits, 0=FPGA input, 1=FPGA output
* \param mask 16-bits, 0=ignore, 1=set
*/
- virtual void set_gpio_ddr(gpio_bank_t bank, uint16_t value, uint16_t mask) = 0;
+ virtual void set_gpio_ddr(gpio_bank_t bank, boost::uint16_t value, boost::uint16_t mask) = 0;
/*!
* Set daughterboard GPIO pin values.
@@ -114,7 +114,7 @@ public:
* \param value 16 bits, 0=low, 1=high
* \param mask 16 bits, 0=ignore, 1=set
*/
- virtual void write_gpio(gpio_bank_t bank, uint16_t value, uint16_t mask) = 0;
+ virtual void write_gpio(gpio_bank_t bank, boost::uint16_t value, boost::uint16_t mask) = 0;
/*!
* Read daughterboard GPIO pin values
@@ -122,7 +122,7 @@ public:
* \param bank GPIO_TX_BANK or GPIO_RX_BANK
* \return the value of the gpio bank
*/
- virtual uint16_t read_gpio(gpio_bank_t bank) = 0;
+ virtual boost::uint16_t read_gpio(gpio_bank_t bank) = 0;
/*!
* \brief Write to I2C peripheral
diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt
index 1d2c5471b..46e1b0947 100644
--- a/host/lib/CMakeLists.txt
+++ b/host/lib/CMakeLists.txt
@@ -61,4 +61,7 @@ ADD_LIBRARY(uhd SHARED ${libuhd_sources})
TARGET_LINK_LIBRARIES(uhd ${Boost_LIBRARIES})
-INSTALL(TARGETS uhd LIBRARY DESTINATION ${LIBRARY_DIR})
+INSTALL(TARGETS uhd
+ LIBRARY DESTINATION ${LIBRARY_DIR}
+ ARCHIVE DESTINATION ${LIBRARY_DIR}
+)
diff --git a/host/lib/device.cpp b/host/lib/device.cpp
index 897084427..cd8a01ab4 100644
--- a/host/lib/device.cpp
+++ b/host/lib/device.cpp
@@ -136,7 +136,7 @@ device::sptr device::make(const device_addr_t &hint, size_t which){
return hash_to_device[dev_hash].lock();
}
//create and register a new device
- catch(const std::assert_error &e){
+ catch(const std::assert_error &){
device::sptr dev = maker(dev_addr);
hash_to_device[dev_hash] = dev;
return dev;
diff --git a/host/lib/device_addr.cpp b/host/lib/device_addr.cpp
index 9514df981..d26bb4b9d 100644
--- a/host/lib/device_addr.cpp
+++ b/host/lib/device_addr.cpp
@@ -28,7 +28,7 @@ uhd::mac_addr_t::mac_addr_t(const std::string &mac_addr_str_){
std::string mac_addr_str = (mac_addr_str_ == "")? "ff:ff:ff:ff:ff:ff" : mac_addr_str_;
//ether_aton_r(str.c_str(), &mac_addr);
- uint8_t p[6] = {0x00, 0x50, 0xC2, 0x85, 0x30, 0x00}; // Matt's IAB
+ boost::uint8_t p[6] = {0x00, 0x50, 0xC2, 0x85, 0x30, 0x00}; // Matt's IAB
try{
//only allow patterns of xx:xx or xx:xx:xx:xx:xx:xx
@@ -43,7 +43,7 @@ uhd::mac_addr_t::mac_addr_t(const std::string &mac_addr_str_){
int hex_num;
std::istringstream iss(hex_strs[i]);
iss >> std::hex >> hex_num;
- p[i] = uint8_t(hex_num);
+ p[i] = boost::uint8_t(hex_num);
}
}
@@ -58,7 +58,7 @@ uhd::mac_addr_t::mac_addr_t(const std::string &mac_addr_str_){
std::string uhd::mac_addr_t::to_string(void) const{
//ether_ntoa_r(&mac_addr, addr_buf);
- const uint8_t *p = reinterpret_cast<const uint8_t *>(&mac_addr);
+ const boost::uint8_t *p = reinterpret_cast<const boost::uint8_t *>(&mac_addr);
return str(
boost::format("%02x:%02x:%02x:%02x:%02x:%02x")
% int(p[0]) % int(p[1]) % int(p[2])
diff --git a/host/lib/time_spec.cpp b/host/lib/time_spec.cpp
index 193441342..210010394 100644
--- a/host/lib/time_spec.cpp
+++ b/host/lib/time_spec.cpp
@@ -24,17 +24,17 @@ time_spec_t::time_spec_t(void){
ticks = ~0;
}
-time_spec_t::time_spec_t(uint32_t new_secs, uint32_t new_ticks){
+time_spec_t::time_spec_t(boost::uint32_t new_secs, boost::uint32_t new_ticks){
secs = new_secs;
ticks = new_ticks;
}
static const boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1));
-static double time_tick_rate(boost::posix_time::time_duration::ticks_per_second());
+static double time_tick_rate = double(boost::posix_time::time_duration::ticks_per_second());
time_spec_t::time_spec_t(boost::posix_time::ptime time, double tick_rate){
boost::posix_time::time_duration td = time - epoch;
- secs = td.total_seconds();
+ secs = boost::uint32_t(td.total_seconds());
double time_ticks_per_device_ticks = time_tick_rate/tick_rate;
- ticks = td.fractional_seconds()/time_ticks_per_device_ticks;
+ ticks = boost::uint32_t(td.fractional_seconds()/time_ticks_per_device_ticks);
}
diff --git a/host/lib/transport/udp_zero_copy_none.cpp b/host/lib/transport/udp_zero_copy_none.cpp
index e29530cf1..219ae8720 100644
--- a/host/lib/transport/udp_zero_copy_none.cpp
+++ b/host/lib/transport/udp_zero_copy_none.cpp
@@ -16,8 +16,10 @@
//
#include <uhd/transport/udp_zero_copy.hpp>
+#include <boost/cstdint.hpp>
#include <boost/thread.hpp>
#include <boost/format.hpp>
+#include <iostream>
using namespace uhd::transport;
@@ -36,7 +38,7 @@ public:
}
~smart_buffer_impl(void){
- delete [] boost::asio::buffer_cast<const uint32_t *>(_buff);
+ delete [] boost::asio::buffer_cast<const boost::uint32_t *>(_buff);
}
const boost::asio::const_buffer &get(void) const{
@@ -89,12 +91,12 @@ udp_zero_copy_impl::udp_zero_copy_impl(const std::string &addr, const std::strin
// set the rx socket buffer size:
// pick a huge size, and deal with whatever we get
- set_recv_buff_size(54321e3); //some big number!
+ set_recv_buff_size(size_t(54321e3)); //some big number!
size_t current_buff_size = get_recv_buff_size();
std::cout << boost::format(
"Current rx socket buffer size: %d\n"
) % current_buff_size;
- if (current_buff_size < .1e6) std::cout << boost::format(
+ if (current_buff_size < size_t(.1e6)) std::cout << boost::format(
"Adjust max rx socket buffer size (linux only):\n"
" sysctl -w net.core.rmem_max=VALUE\n"
);
@@ -119,7 +121,7 @@ smart_buffer::sptr udp_zero_copy_impl::recv(void){
}
//allocate memory and create buffer
- uint32_t *buff_mem = new uint32_t[available/sizeof(uint32_t)];
+ boost::uint32_t *buff_mem = new boost::uint32_t[available/sizeof(boost::uint32_t)];
boost::asio::mutable_buffer buff(buff_mem, available);
//receive only if data is available
diff --git a/host/lib/transport/vrt.cpp b/host/lib/transport/vrt.cpp
index 5029df217..a06b5bf21 100644
--- a/host/lib/transport/vrt.cpp
+++ b/host/lib/transport/vrt.cpp
@@ -16,20 +16,21 @@
//
#include <uhd/transport/vrt.hpp>
-#include <netinet/in.h>
+#include <boost/asio.hpp> //endianness conversion
#include <stdexcept>
+using namespace uhd;
using namespace uhd::transport;
void vrt::pack(
const tx_metadata_t &metadata, //input
- uint32_t *header_buff, //output
+ boost::uint32_t *header_buff, //output
size_t &num_header_words32, //output
size_t num_payload_words32, //input
size_t &num_packet_words32, //output
size_t packet_count //input
){
- uint32_t vrt_hdr_flags = 0;
+ boost::uint32_t vrt_hdr_flags = 0;
num_header_words32 = 1;
//load the vrt header and flags
@@ -58,18 +59,18 @@ void vrt::pack(
}
void vrt::unpack(
- rx_metadata_t &metadata, //output
- const uint32_t *header_buff, //input
- size_t &num_header_words32, //output
- size_t &num_payload_words32, //output
- size_t num_packet_words32, //input
- size_t &packet_count //output
+ rx_metadata_t &metadata, //output
+ const boost::uint32_t *header_buff, //input
+ size_t &num_header_words32, //output
+ size_t &num_payload_words32, //output
+ size_t num_packet_words32, //input
+ size_t &packet_count //output
){
//clear the metadata
metadata = rx_metadata_t();
//extract vrt header
- uint32_t vrt_hdr_word = ntohl(header_buff[0]);
+ boost::uint32_t vrt_hdr_word = ntohl(header_buff[0]);
size_t packet_words32 = vrt_hdr_word & 0xffff;
packet_count = (vrt_hdr_word >> 16) & 0xf;
diff --git a/host/lib/usrp/usrp2/dboard_impl.cpp b/host/lib/usrp/usrp2/dboard_impl.cpp
index 502a7daa0..60622ca47 100644
--- a/host/lib/usrp/usrp2/dboard_impl.cpp
+++ b/host/lib/usrp/usrp2/dboard_impl.cpp
@@ -62,7 +62,7 @@ void usrp2_impl::dboard_init(void){
void usrp2_impl::update_mux_config(void){
//calculate the rx mux
- uint32_t rx_mux = 0;
+ boost::uint32_t rx_mux = 0;
ASSERT_THROW(_rx_subdevs_in_use.size() == 1);
wax::obj rx_subdev = _dboard_manager->get_rx_subdev(_rx_subdevs_in_use.at(0));
std::cout << "Using: " << rx_subdev[SUBDEV_PROP_NAME].as<std::string>() << std::endl;
@@ -76,7 +76,7 @@ void usrp2_impl::update_mux_config(void){
}
//calculate the tx mux
- uint32_t tx_mux = 0x10;
+ boost::uint32_t tx_mux = 0x10;
ASSERT_THROW(_tx_subdevs_in_use.size() == 1);
wax::obj tx_subdev = _dboard_manager->get_tx_subdev(_tx_subdevs_in_use.at(0));
std::cout << "Using: " << tx_subdev[SUBDEV_PROP_NAME].as<std::string>() << std::endl;
diff --git a/host/lib/usrp/usrp2/dboard_interface.cpp b/host/lib/usrp/usrp2/dboard_interface.cpp
index cefd69ba9..d20465147 100644
--- a/host/lib/usrp/usrp2/dboard_interface.cpp
+++ b/host/lib/usrp/usrp2/dboard_interface.cpp
@@ -28,10 +28,10 @@ public:
void write_aux_dac(unit_type_t, int, int);
int read_aux_adc(unit_type_t, int);
- void set_atr_reg(gpio_bank_t, uint16_t, uint16_t, uint16_t);
- void set_gpio_ddr(gpio_bank_t, uint16_t, uint16_t);
- void write_gpio(gpio_bank_t, uint16_t, uint16_t);
- uint16_t read_gpio(gpio_bank_t);
+ void set_atr_reg(gpio_bank_t, boost::uint16_t, boost::uint16_t, boost::uint16_t);
+ void set_gpio_ddr(gpio_bank_t, boost::uint16_t, boost::uint16_t);
+ void write_gpio(gpio_bank_t, boost::uint16_t, boost::uint16_t);
+ boost::uint16_t read_gpio(gpio_bank_t);
void write_i2c(int, const byte_vector_t &);
byte_vector_t read_i2c(int, size_t);
@@ -89,7 +89,7 @@ double usrp2_dboard_interface::get_tx_clock_rate(void){
* \param bank the dboard interface gpio bank enum
* \return an over the wire representation
*/
-static uint8_t gpio_bank_to_otw(dboard_interface::gpio_bank_t bank){
+static boost::uint8_t gpio_bank_to_otw(dboard_interface::gpio_bank_t bank){
switch(bank){
case uhd::usrp::dboard_interface::GPIO_TX_BANK: return USRP2_DIR_TX;
case uhd::usrp::dboard_interface::GPIO_RX_BANK: return USRP2_DIR_RX;
@@ -97,7 +97,7 @@ static uint8_t gpio_bank_to_otw(dboard_interface::gpio_bank_t bank){
throw std::invalid_argument("unknown gpio bank type");
}
-void usrp2_dboard_interface::set_gpio_ddr(gpio_bank_t bank, uint16_t value, uint16_t mask){
+void usrp2_dboard_interface::set_gpio_ddr(gpio_bank_t bank, boost::uint16_t value, boost::uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_USE_THESE_GPIO_DDR_SETTINGS_BRO);
@@ -110,7 +110,7 @@ void usrp2_dboard_interface::set_gpio_ddr(gpio_bank_t bank, uint16_t value, uint
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_GOT_THE_GPIO_DDR_SETTINGS_DUDE);
}
-void usrp2_dboard_interface::write_gpio(gpio_bank_t bank, uint16_t value, uint16_t mask){
+void usrp2_dboard_interface::write_gpio(gpio_bank_t bank, boost::uint16_t value, boost::uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_SET_YOUR_GPIO_PIN_OUTS_BRO);
@@ -123,7 +123,7 @@ void usrp2_dboard_interface::write_gpio(gpio_bank_t bank, uint16_t value, uint16
ASSERT_THROW(htonl(in_data.id) == USRP2_CTRL_ID_I_SET_THE_GPIO_PIN_OUTS_DUDE);
}
-uint16_t usrp2_dboard_interface::read_gpio(gpio_bank_t bank){
+boost::uint16_t usrp2_dboard_interface::read_gpio(gpio_bank_t bank){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_GIVE_ME_YOUR_GPIO_PIN_VALS_BRO);
@@ -135,7 +135,7 @@ uint16_t usrp2_dboard_interface::read_gpio(gpio_bank_t bank){
return ntohs(in_data.data.gpio_config.value);
}
-void usrp2_dboard_interface::set_atr_reg(gpio_bank_t bank, uint16_t tx_value, uint16_t rx_value, uint16_t mask){
+void usrp2_dboard_interface::set_atr_reg(gpio_bank_t bank, boost::uint16_t tx_value, boost::uint16_t rx_value, boost::uint16_t mask){
//setup the out data
usrp2_ctrl_data_t out_data;
out_data.id = htonl(USRP2_CTRL_ID_USE_THESE_ATR_SETTINGS_BRO);
@@ -158,7 +158,7 @@ void usrp2_dboard_interface::set_atr_reg(gpio_bank_t bank, uint16_t tx_value, ui
* \param dev the dboard interface spi dev enum
* \return an over the wire representation
*/
-static uint8_t spi_dev_to_otw(dboard_interface::spi_dev_t dev){
+static boost::uint8_t spi_dev_to_otw(dboard_interface::spi_dev_t dev){
switch(dev){
case uhd::usrp::dboard_interface::SPI_TX_DEV: return USRP2_DIR_TX;
case uhd::usrp::dboard_interface::SPI_RX_DEV: return USRP2_DIR_RX;
@@ -172,7 +172,7 @@ static uint8_t spi_dev_to_otw(dboard_interface::spi_dev_t dev){
* \param latch the dboard interface spi latch enum
* \return an over the wire representation
*/
-static uint8_t spi_latch_to_otw(dboard_interface::spi_latch_t latch){
+static boost::uint8_t spi_latch_to_otw(dboard_interface::spi_latch_t latch){
switch(latch){
case uhd::usrp::dboard_interface::SPI_LATCH_RISE: return USRP2_CLK_EDGE_RISE;
case uhd::usrp::dboard_interface::SPI_LATCH_FALL: return USRP2_CLK_EDGE_FALL;
@@ -186,7 +186,7 @@ static uint8_t spi_latch_to_otw(dboard_interface::spi_latch_t latch){
* \param push the dboard interface spi push enum
* \return an over the wire representation
*/
-static uint8_t spi_push_to_otw(dboard_interface::spi_push_t push){
+static boost::uint8_t spi_push_to_otw(dboard_interface::spi_push_t push){
switch(push){
case uhd::usrp::dboard_interface::SPI_PUSH_RISE: return USRP2_CLK_EDGE_RISE;
case uhd::usrp::dboard_interface::SPI_PUSH_FALL: return USRP2_CLK_EDGE_FALL;
@@ -286,7 +286,7 @@ dboard_interface::byte_vector_t usrp2_dboard_interface::read_i2c(int i2c_addr, s
* \param unit the dboard interface unit type enum
* \return an over the wire representation
*/
-static uint8_t spi_dev_to_otw(dboard_interface::unit_type_t unit){
+static boost::uint8_t spi_dev_to_otw(dboard_interface::unit_type_t unit){
switch(unit){
case uhd::usrp::dboard_interface::UNIT_TYPE_TX: return USRP2_DIR_TX;
case uhd::usrp::dboard_interface::UNIT_TYPE_RX: return USRP2_DIR_RX;
@@ -300,7 +300,7 @@ void usrp2_dboard_interface::write_aux_dac(dboard_interface::unit_type_t unit, i
out_data.id = htonl(USRP2_CTRL_ID_WRITE_THIS_TO_THE_AUX_DAC_BRO);
out_data.data.aux_args.dir = spi_dev_to_otw(unit);
out_data.data.aux_args.which = which;
- out_data.data.aux_args.dir = htonl(value);
+ out_data.data.aux_args.value = htonl(value);
//send and recv
usrp2_ctrl_data_t in_data = _impl->ctrl_send_and_recv(out_data);
diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp
index 7520c1757..54ed45e41 100644
--- a/host/lib/usrp/usrp2/dsp_impl.cpp
+++ b/host/lib/usrp/usrp2/dsp_impl.cpp
@@ -18,6 +18,7 @@
#include <uhd/utils.hpp>
#include <boost/format.hpp>
#include <boost/assign/list_of.hpp>
+#include <boost/math/special_functions/round.hpp>
#include "usrp2_impl.hpp"
using namespace uhd;
@@ -25,14 +26,20 @@ using namespace uhd;
static const size_t default_decim = 16;
static const size_t default_interp = 16;
+#define rint boost::math::iround
+
+template <class T> T log2(T num){
+ return std::log(num)/std::log(T(2));
+}
+
/***********************************************************************
* DDC Helper Methods
**********************************************************************/
-static uint32_t calculate_freq_word_and_update_actual_freq(freq_t &freq, freq_t clock_freq){
- double scale_factor = pow(2.0, 32);
+static boost::uint32_t calculate_freq_word_and_update_actual_freq(freq_t &freq, freq_t clock_freq){
+ double scale_factor = std::pow(2.0, 32);
//calculate the freq register word
- uint32_t freq_word = rint((freq / clock_freq) * scale_factor);
+ boost::uint32_t freq_word = rint((freq / clock_freq) * scale_factor);
//update the actual frequency
freq = (double(freq_word) / scale_factor) * clock_freq;
@@ -40,8 +47,8 @@ static uint32_t calculate_freq_word_and_update_actual_freq(freq_t &freq, freq_t
return freq_word;
}
-static uint32_t calculate_iq_scale_word(int16_t i, int16_t q){
- return (uint16_t(i) << 16) | (uint16_t(q) << 0);
+static boost::uint32_t calculate_iq_scale_word(boost::int16_t i, boost::int16_t q){
+ return (boost::uint16_t(i) << 16) | (boost::uint16_t(q) << 0);
}
void usrp2_impl::init_ddc_config(void){
@@ -69,7 +76,7 @@ void usrp2_impl::update_ddc_config(void){
calculate_freq_word_and_update_actual_freq(_ddc_freq, get_master_clock_freq())
);
out_data.data.ddc_args.decim = htonl(_ddc_decim);
- static const uint32_t default_rx_scale_iq = 1024;
+ static const boost::int16_t default_rx_scale_iq = 1024;
out_data.data.ddc_args.scale_iq = htonl(
calculate_iq_scale_word(default_rx_scale_iq, default_rx_scale_iq)
);
@@ -211,8 +218,8 @@ void usrp2_impl::update_duc_config(void){
while(tmp_interp > 128) tmp_interp /= 2;
// Calculate closest multiplier constant to reverse gain absent scale multipliers
- size_t interp_cubed = pow(tmp_interp, 3);
- size_t scale = rint((4096*pow(2, ceil(log2(interp_cubed))))/(1.65*interp_cubed));
+ double interp_cubed = std::pow(double(tmp_interp), 3);
+ boost::int16_t scale = rint((4096*std::pow(2, ceil(log2(interp_cubed))))/(1.65*interp_cubed));
//setup the out data
usrp2_ctrl_data_t out_data;
diff --git a/host/lib/usrp/usrp2/fw_common.h b/host/lib/usrp/usrp2/fw_common.h
index 03e8d3a37..9740448ee 100644
--- a/host/lib/usrp/usrp2/fw_common.h
+++ b/host/lib/usrp/usrp2/fw_common.h
@@ -24,7 +24,11 @@
* Therefore, this header may only contain valid C code.
*/
#ifdef __cplusplus
+#include <boost/cstdint.hpp>
+#define _SINS_ boost:://stdint namespace when in c++
extern "C" {
+#else
+#include <stdint.h>
#endif
// size of the vrt header and trailer to the host
@@ -128,78 +132,78 @@ typedef enum{
} usrp2_clk_edge_t;
typedef struct{
- uint32_t id;
- uint32_t seq;
+ _SINS_ uint32_t id;
+ _SINS_ uint32_t seq;
union{
- uint32_t ip_addr;
- uint8_t mac_addr[6];
+ _SINS_ uint32_t ip_addr;
+ _SINS_ uint8_t mac_addr[6];
struct {
- uint16_t rx_id;
- uint16_t tx_id;
+ _SINS_ uint16_t rx_id;
+ _SINS_ uint16_t tx_id;
} dboard_ids;
struct {
- uint8_t pps_source;
- uint8_t pps_polarity;
- uint8_t ref_source;
- uint8_t _pad;
+ _SINS_ uint8_t pps_source;
+ _SINS_ uint8_t pps_polarity;
+ _SINS_ uint8_t ref_source;
+ _SINS_ uint8_t _pad;
} clock_config;
struct {
- uint8_t bank;
- uint8_t _pad[3];
- uint16_t value;
- uint16_t mask;
+ _SINS_ uint8_t bank;
+ _SINS_ uint8_t _pad[3];
+ _SINS_ uint16_t value;
+ _SINS_ uint16_t mask;
} gpio_config;
struct {
- uint8_t bank;
- uint8_t _pad[3];
- uint16_t tx_value;
- uint16_t rx_value;
- uint16_t mask;
+ _SINS_ uint8_t bank;
+ _SINS_ uint8_t _pad[3];
+ _SINS_ uint16_t tx_value;
+ _SINS_ uint16_t rx_value;
+ _SINS_ uint16_t mask;
} atr_config;
struct {
- uint8_t dev;
- uint8_t latch;
- uint8_t push;
- uint8_t readback;
- uint8_t bytes;
- uint8_t data[sizeof(uint32_t)];
+ _SINS_ uint8_t dev;
+ _SINS_ uint8_t latch;
+ _SINS_ uint8_t push;
+ _SINS_ uint8_t readback;
+ _SINS_ uint8_t bytes;
+ _SINS_ uint8_t data[sizeof(_SINS_ uint32_t)];
} spi_args;
struct {
- uint8_t addr;
- uint8_t bytes;
- uint8_t data[sizeof(uint32_t)];
+ _SINS_ uint8_t addr;
+ _SINS_ uint8_t bytes;
+ _SINS_ uint8_t data[sizeof(_SINS_ uint32_t)];
} i2c_args;
struct {
- uint8_t dir;
- uint8_t which;
- uint8_t _pad[2];
- uint32_t value;
+ _SINS_ uint8_t dir;
+ _SINS_ uint8_t which;
+ _SINS_ uint8_t _pad[2];
+ _SINS_ uint32_t value;
} aux_args;
struct {
- uint32_t freq_word;
- uint32_t decim;
- uint32_t scale_iq;
+ _SINS_ uint32_t freq_word;
+ _SINS_ uint32_t decim;
+ _SINS_ uint32_t scale_iq;
} ddc_args;
struct {
- uint8_t enabled;
- uint8_t _pad[3];
- uint32_t secs;
- uint32_t ticks;
- uint32_t samples;
+ _SINS_ uint8_t enabled;
+ _SINS_ uint8_t _pad[3];
+ _SINS_ uint32_t secs;
+ _SINS_ uint32_t ticks;
+ _SINS_ uint32_t samples;
} streaming;
struct {
- uint32_t freq_word;
- uint32_t interp;
- uint32_t scale_iq;
+ _SINS_ uint32_t freq_word;
+ _SINS_ uint32_t interp;
+ _SINS_ uint32_t scale_iq;
} duc_args;
struct {
- uint32_t secs;
- uint32_t ticks;
- uint8_t now;
+ _SINS_ uint32_t secs;
+ _SINS_ uint32_t ticks;
+ _SINS_ uint8_t now;
} time_args;
struct {
- uint32_t rx_mux;
- uint32_t tx_mux;
+ _SINS_ uint32_t rx_mux;
+ _SINS_ uint32_t tx_mux;
} mux_args;
} data;
} usrp2_ctrl_data_t;
diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp
index e52c1e576..dc8eea243 100644
--- a/host/lib/usrp/usrp2/io_impl.cpp
+++ b/host/lib/usrp/usrp2/io_impl.cpp
@@ -16,6 +16,7 @@
//
#include <complex>
+#include <algorithm>
#include <boost/format.hpp>
#include "usrp2_impl.hpp"
@@ -27,11 +28,11 @@ namespace asio = boost::asio;
/***********************************************************************
* Constants
**********************************************************************/
-typedef std::complex<float> fc32_t;
-typedef std::complex<int16_t> sc16_t;
+typedef std::complex<float> fc32_t;
+typedef std::complex<boost::int16_t> sc16_t;
-static const float shorts_per_float = pow(2.0, 15);
-static const float floats_per_short = 1.0/shorts_per_float;
+static const float shorts_per_float = float(1 << 15);
+static const float floats_per_short = float(1.0/shorts_per_float);
/***********************************************************************
* Helper Functions
@@ -41,7 +42,7 @@ void usrp2_impl::io_init(void){
_rx_copy_buff = asio::buffer("", 0);
//send a small data packet so the usrp2 knows the udp source port
- uint32_t zero_data = 0;
+ boost::uint32_t zero_data = 0;
_data_transport->send(asio::buffer(&zero_data, sizeof(zero_data)));
}
@@ -66,37 +67,37 @@ static const bool is_big_endian = false;
#endif
static inline void host_floats_to_usrp2_items(
- uint32_t *usrp2_items,
+ boost::uint32_t *usrp2_items,
const fc32_t *host_floats,
size_t num_samps
){
unrolled_loop(i, num_samps,{
- uint16_t real = host_floats[i].real()*shorts_per_float;
- uint16_t imag = host_floats[i].imag()*shorts_per_float;
+ boost::uint16_t real = boost::int16_t(host_floats[i].real()*shorts_per_float);
+ boost::uint16_t imag = boost::int16_t(host_floats[i].imag()*shorts_per_float);
usrp2_items[i] = htonl((real << 16) | (imag << 0));
});
}
static inline void usrp2_items_to_host_floats(
fc32_t *host_floats,
- const uint32_t *usrp2_items,
+ const boost::uint32_t *usrp2_items,
size_t num_samps
){
unrolled_loop(i, num_samps,{
- uint32_t item = ntohl(usrp2_items[i]);
- int16_t real = item >> 16;
- int16_t imag = item >> 0;
- host_floats[i] = fc32_t(real*floats_per_short, imag*floats_per_short);
+ boost::uint32_t item = ntohl(usrp2_items[i]);
+ boost::int16_t real = boost::uint16_t(item >> 16);
+ boost::int16_t imag = boost::uint16_t(item >> 0);
+ host_floats[i] = fc32_t(float(real*floats_per_short), float(imag*floats_per_short));
});
}
static inline void host_items_to_usrp2_items(
- uint32_t *usrp2_items,
- const uint32_t *host_items,
+ boost::uint32_t *usrp2_items,
+ const boost::uint32_t *host_items,
size_t num_samps
){
if (is_big_endian){
- std::memcpy(usrp2_items, host_items, num_samps*sizeof(uint32_t));
+ std::memcpy(usrp2_items, host_items, num_samps*sizeof(boost::uint32_t));
}
else{
unrolled_loop(i, num_samps, usrp2_items[i] = htonl(host_items[i]));
@@ -104,12 +105,12 @@ static inline void host_items_to_usrp2_items(
}
static inline void usrp2_items_to_host_items(
- uint32_t *host_items,
- const uint32_t *usrp2_items,
+ boost::uint32_t *host_items,
+ const boost::uint32_t *usrp2_items,
size_t num_samps
){
if (is_big_endian){
- std::memcpy(host_items, usrp2_items, num_samps*sizeof(uint32_t));
+ std::memcpy(host_items, usrp2_items, num_samps*sizeof(boost::uint32_t));
}
else{
unrolled_loop(i, num_samps, host_items[i] = ntohl(usrp2_items[i]));
@@ -124,12 +125,12 @@ void usrp2_impl::recv_raw(rx_metadata_t &metadata){
_rx_smart_buff = _data_transport->recv();
//unpack the vrt header
- size_t num_packet_words32 = asio::buffer_size(_rx_smart_buff->get())/sizeof(uint32_t);
+ size_t num_packet_words32 = asio::buffer_size(_rx_smart_buff->get())/sizeof(boost::uint32_t);
if (num_packet_words32 == 0){
_rx_copy_buff = boost::asio::buffer("", 0);
return; //must exit here after setting the buffer
}
- const uint32_t *vrt_hdr = asio::buffer_cast<const uint32_t *>(_rx_smart_buff->get());
+ const boost::uint32_t *vrt_hdr = asio::buffer_cast<const boost::uint32_t *>(_rx_smart_buff->get());
size_t num_header_words32_out, num_payload_words32_out, packet_count_out;
try{
vrt::unpack(
@@ -156,7 +157,7 @@ void usrp2_impl::recv_raw(rx_metadata_t &metadata){
//setup the rx buffer to point to the data
_rx_copy_buff = asio::buffer(
vrt_hdr + num_header_words32_out,
- num_payload_words32_out*sizeof(uint32_t)
+ num_payload_words32_out*sizeof(boost::uint32_t)
);
}
@@ -168,8 +169,8 @@ size_t usrp2_impl::send(
const tx_metadata_t &metadata,
const std::string &type
){
- uint32_t tx_mem[_mtu/sizeof(uint32_t)];
- uint32_t *items = tx_mem + vrt::max_header_words32; //offset for data
+ boost::uint32_t tx_mem[_mtu/sizeof(boost::uint32_t)];
+ boost::uint32_t *items = tx_mem + vrt::max_header_words32; //offset for data
size_t num_samps = _max_tx_samples_per_packet;
//calculate the number of samples to be copied
@@ -180,13 +181,13 @@ size_t usrp2_impl::send(
}
else if (type == "16sc"){
num_samps = std::min(asio::buffer_size(buff)/sizeof(sc16_t), num_samps);
- host_items_to_usrp2_items(items, asio::buffer_cast<const uint32_t*>(buff), num_samps);
+ host_items_to_usrp2_items(items, asio::buffer_cast<const boost::uint32_t*>(buff), num_samps);
}
else{
throw std::runtime_error(str(boost::format("usrp2 send: cannot handle type \"%s\"") % type));
}
- uint32_t vrt_hdr[vrt::max_header_words32];
+ boost::uint32_t vrt_hdr[vrt::max_header_words32];
size_t num_header_words32, num_packet_words32;
size_t packet_count = _tx_stream_id_to_packet_seq[metadata.stream_id]++;
@@ -202,10 +203,10 @@ size_t usrp2_impl::send(
//copy in the vrt header (yes we left space)
items -= num_header_words32;
- std::memcpy(items, vrt_hdr, num_header_words32*sizeof(uint32_t));
+ std::memcpy(items, vrt_hdr, num_header_words32*sizeof(boost::uint32_t));
//send and return number of samples
- _data_transport->send(asio::buffer(items, num_packet_words32*sizeof(uint32_t)));
+ _data_transport->send(asio::buffer(items, num_packet_words32*sizeof(boost::uint32_t)));
return num_samps;
}
@@ -231,8 +232,8 @@ size_t usrp2_impl::recv(
//and a pointer into the usrp2 received items memory
size_t bytes_to_copy = asio::buffer_size(_rx_copy_buff);
if (bytes_to_copy == 0) return 0; //nothing to receive
- size_t num_samps = bytes_to_copy/sizeof(uint32_t);
- const uint32_t *items = asio::buffer_cast<const uint32_t*>(_rx_copy_buff);
+ size_t num_samps = bytes_to_copy/sizeof(boost::uint32_t);
+ const boost::uint32_t *items = asio::buffer_cast<const boost::uint32_t*>(_rx_copy_buff);
//calculate the number of samples to be copied
//and copy the samples from the recv buffer
@@ -242,7 +243,7 @@ size_t usrp2_impl::recv(
}
else if (type == "16sc"){
num_samps = std::min(asio::buffer_size(buff)/sizeof(sc16_t), num_samps);
- usrp2_items_to_host_items(asio::buffer_cast<uint32_t*>(buff), items, num_samps);
+ usrp2_items_to_host_items(asio::buffer_cast<boost::uint32_t*>(buff), items, num_samps);
}
else{
throw std::runtime_error(str(boost::format("usrp2 recv: cannot handle type \"%s\"") % type));
@@ -250,7 +251,7 @@ size_t usrp2_impl::recv(
//update the rx copy buffer to reflect the bytes copied
_rx_copy_buff = asio::buffer(
- items + num_samps, bytes_to_copy - num_samps*sizeof(uint32_t)
+ items + num_samps, bytes_to_copy - num_samps*sizeof(boost::uint32_t)
);
return num_samps;
diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp
index 2c6b6f8c9..765c523fe 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.hpp
@@ -115,17 +115,17 @@ public:
private:
//the raw io interface (samples are in the usrp2 native format)
void recv_raw(uhd::rx_metadata_t &);
- uhd::dict<uint32_t, size_t> _tx_stream_id_to_packet_seq;
- uhd::dict<uint32_t, size_t> _rx_stream_id_to_packet_seq;
+ uhd::dict<boost::uint32_t, size_t> _tx_stream_id_to_packet_seq;
+ uhd::dict<boost::uint32_t, size_t> _rx_stream_id_to_packet_seq;
static const size_t _mtu = 1500; //FIXME we have no idea
static const size_t _hdrs = (2 + 14 + 20 + 8); //size of headers (pad, eth, ip, udp)
static const size_t _max_rx_samples_per_packet =
- (_mtu - _hdrs)/sizeof(uint32_t) -
+ (_mtu - _hdrs)/sizeof(boost::uint32_t) -
USRP2_HOST_RX_VRT_HEADER_WORDS32 -
USRP2_HOST_RX_VRT_TRAILER_WORDS32
;
static const size_t _max_tx_samples_per_packet =
- (_mtu - _hdrs)/sizeof(uint32_t) -
+ (_mtu - _hdrs)/sizeof(boost::uint32_t) -
uhd::transport::vrt::max_header_words32
;
uhd::transport::smart_buffer::sptr _rx_smart_buff;
@@ -137,7 +137,7 @@ private:
uhd::transport::udp_zero_copy::sptr _data_transport;
//private vars for dealing with send/recv control
- uint32_t _ctrl_seq_num;
+ boost::uint32_t _ctrl_seq_num;
boost::mutex _ctrl_mutex;
//methods and shadows for clock configuration
diff --git a/host/test/vrt_test.cpp b/host/test/vrt_test.cpp
index d80908c74..40116e110 100644
--- a/host/test/vrt_test.cpp
+++ b/host/test/vrt_test.cpp
@@ -25,7 +25,7 @@ static void pack_and_unpack(
size_t num_payload_words32,
size_t packet_count
){
- uint32_t header_buff[vrt::max_header_words32];
+ boost::uint32_t header_buff[vrt::max_header_words32];
size_t num_header_words32;
size_t num_packet_words32;
diff --git a/host/test/wax_test.cpp b/host/test/wax_test.cpp
index b793b2690..cb3b12052 100644
--- a/host/test/wax_test.cpp
+++ b/host/test/wax_test.cpp
@@ -79,7 +79,7 @@ BOOST_AUTO_TEST_CASE(test_set_get){
for (size_t i = 0; i < 10; i++){
for (size_t j = 0; j < 10; j++){
for (size_t k = 0; k < 10; k++){
- float val = i * j * k + i + j + k;
+ float val = float(i * j * k + i + j + k);
//std::cout << i << " " << j << " " << k << std::endl;
wd[i][j][k] = val;
BOOST_CHECK_EQUAL(val, wd[i][j][k].as<float>());