aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/CMakeLists.txt7
-rw-r--r--host/lib/cal/CMakeLists.txt32
-rw-r--r--host/lib/cal/interpolation.hpp71
-rw-r--r--host/lib/cal/interpolation.ipp203
-rw-r--r--host/lib/cal/power_container_impl.cpp80
-rw-r--r--host/lib/cal/power_container_impl.hpp77
-rw-r--r--host/lib/convert/convert_fc32_item32.cpp2
-rw-r--r--host/lib/convert/convert_impl.cpp19
-rw-r--r--host/lib/convert/convert_pack_sc12.cpp2
-rw-r--r--host/lib/convert/convert_unpack_sc12.cpp2
-rw-r--r--host/lib/device.cpp21
-rw-r--r--host/lib/device3.cpp8
-rw-r--r--host/lib/experts/expert_container.cpp21
-rw-r--r--host/lib/experts/expert_nodes.hpp9
-rw-r--r--host/lib/image_loader.cpp9
-rw-r--r--host/lib/property_tree.cpp13
-rw-r--r--host/lib/rfnoc/block_ctrl_base.cpp72
-rw-r--r--host/lib/rfnoc/block_ctrl_base_factory.cpp10
-rw-r--r--host/lib/rfnoc/blockdef_xml_impl.cpp43
-rw-r--r--host/lib/rfnoc/ctrl_iface.cpp116
-rw-r--r--host/lib/rfnoc/ctrl_iface.hpp12
-rw-r--r--host/lib/rfnoc/ddc_block_ctrl_impl.cpp8
-rw-r--r--host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp8
-rw-r--r--host/lib/rfnoc/duc_block_ctrl_impl.cpp8
-rw-r--r--host/lib/rfnoc/graph_impl.cpp28
-rw-r--r--host/lib/rfnoc/legacy_compat.cpp72
-rw-r--r--host/lib/rfnoc/nocscript/block_iface.cpp26
-rw-r--r--host/lib/rfnoc/nocscript/expression.cpp23
-rw-r--r--host/lib/rfnoc/nocscript/expression.hpp3
-rw-r--r--host/lib/rfnoc/nocscript/function_table.cpp1
-rw-r--r--host/lib/rfnoc/node_ctrl_base.cpp4
-rw-r--r--host/lib/rfnoc/radio_ctrl_impl.cpp130
-rw-r--r--host/lib/rfnoc/radio_ctrl_impl.hpp31
-rw-r--r--host/lib/rfnoc/rx_stream_terminator.cpp23
-rw-r--r--host/lib/rfnoc/sink_block_ctrl_base.cpp6
-rw-r--r--host/lib/rfnoc/sink_node_ctrl.cpp6
-rw-r--r--host/lib/rfnoc/source_block_ctrl_base.cpp16
-rw-r--r--host/lib/rfnoc/source_node_ctrl.cpp6
-rw-r--r--host/lib/rfnoc/tick_node_ctrl.cpp2
-rw-r--r--host/lib/rfnoc/tx_stream_terminator.cpp6
-rw-r--r--host/lib/rfnoc/tx_stream_terminator.hpp4
-rw-r--r--host/lib/rfnoc/utils.hpp4
-rw-r--r--host/lib/rfnoc/xports.hpp2
-rw-r--r--host/lib/transport/if_addrs.cpp4
-rw-r--r--host/lib/transport/libusb1_base.cpp19
-rw-r--r--host/lib/transport/libusb1_zero_copy.cpp9
-rw-r--r--host/lib/transport/nirio/niusrprio_session.cpp1
-rw-r--r--host/lib/transport/nirio/rpc/rpc_client.cpp22
-rw-r--r--host/lib/transport/nirio_zero_copy.cpp8
-rw-r--r--host/lib/transport/super_recv_packet_handler.hpp33
-rw-r--r--host/lib/transport/super_send_packet_handler.hpp4
-rw-r--r--host/lib/transport/tcp_zero_copy.cpp4
-rw-r--r--host/lib/transport/udp_common.hpp12
-rw-r--r--host/lib/transport/udp_simple.cpp6
-rw-r--r--host/lib/transport/udp_wsa_zero_copy.cpp24
-rw-r--r--host/lib/transport/udp_zero_copy.cpp17
-rw-r--r--host/lib/transport/xport_benchmarker.cpp6
-rw-r--r--host/lib/transport/xport_benchmarker.hpp2
-rw-r--r--host/lib/transport/zero_copy_flow_ctrl.cpp7
-rw-r--r--host/lib/transport/zero_copy_recv_offload.cpp6
-rw-r--r--host/lib/types/byte_vector.cpp3
-rw-r--r--host/lib/types/device_addr.cpp21
-rw-r--r--host/lib/types/mac_addr.cpp5
-rw-r--r--host/lib/types/ranges.cpp23
-rw-r--r--host/lib/types/sensors.cpp5
-rw-r--r--host/lib/types/sensors_c.cpp5
-rw-r--r--host/lib/types/sid.cpp10
-rw-r--r--host/lib/uhd.rc.in4
-rw-r--r--host/lib/usrp/b100/b100_impl.cpp29
-rw-r--r--host/lib/usrp/b100/clock_ctrl.cpp23
-rw-r--r--host/lib/usrp/b100/codec_ctrl.cpp6
-rw-r--r--host/lib/usrp/b100/io_impl.cpp6
-rw-r--r--host/lib/usrp/b100/usb_zero_copy_wrapper.cpp3
-rw-r--r--host/lib/usrp/b200/b200_iface.cpp34
-rw-r--r--host/lib/usrp/b200/b200_image_loader.cpp5
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp63
-rw-r--r--host/lib/usrp/b200/b200_io_impl.cpp18
-rw-r--r--host/lib/usrp/b200/b200_uart.cpp5
-rw-r--r--host/lib/usrp/common/CMakeLists.txt1
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.cpp6
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_client.h4
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.cpp37
-rw-r--r--host/lib/usrp/common/ad936x_manager.cpp21
-rw-r--r--host/lib/usrp/common/ad936x_manager.hpp1
-rw-r--r--host/lib/usrp/common/adf4001_ctrl.cpp2
-rw-r--r--host/lib/usrp/common/adf435x.hpp17
-rw-r--r--host/lib/usrp/common/apply_corrections.cpp15
-rw-r--r--host/lib/usrp/common/async_packet_handler.hpp17
-rw-r--r--host/lib/usrp/common/constrained_device_args.hpp11
-rw-r--r--host/lib/usrp/common/fifo_ctrl_excelsior.cpp8
-rw-r--r--host/lib/usrp/common/fx2_ctrl.cpp14
-rw-r--r--host/lib/usrp/common/fx2_ctrl.hpp38
-rw-r--r--host/lib/usrp/common/max287x.hpp17
-rw-r--r--host/lib/usrp/common/recv_packet_demuxer.cpp4
-rw-r--r--host/lib/usrp/common/recv_packet_demuxer_3000.hpp41
-rw-r--r--host/lib/usrp/common/validate_subdev_spec.cpp9
-rw-r--r--host/lib/usrp/cores/dma_fifo_core_3000.cpp2
-rw-r--r--host/lib/usrp/cores/gpio_atr_3000.hpp12
-rw-r--r--host/lib/usrp/cores/i2c_core_100.cpp4
-rw-r--r--host/lib/usrp/cores/i2c_core_100_wb32.cpp4
-rw-r--r--host/lib/usrp/cores/i2c_core_200.cpp4
-rw-r--r--host/lib/usrp/cores/radio_ctrl_core_3000.cpp16
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_200.cpp4
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_3000.cpp6
-rw-r--r--host/lib/usrp/cores/rx_vita_core_3000.cpp4
-rw-r--r--host/lib/usrp/cores/spi_core_100.cpp4
-rw-r--r--host/lib/usrp/cores/spi_core_3000.cpp2
-rw-r--r--host/lib/usrp/cores/time_core_3000.cpp10
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_200.cpp4
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_3000.cpp4
-rw-r--r--host/lib/usrp/dboard/db_basic_and_lf.cpp2
-rw-r--r--host/lib/usrp/dboard/db_cbx.cpp6
-rw-r--r--host/lib/usrp/dboard/db_dbsrx.cpp70
-rw-r--r--host/lib/usrp/dboard/db_dbsrx2.cpp37
-rw-r--r--host/lib/usrp/dboard/db_rfx.cpp22
-rw-r--r--host/lib/usrp/dboard/db_sbx_common.cpp16
-rw-r--r--host/lib/usrp/dboard/db_sbx_common.hpp2
-rw-r--r--host/lib/usrp/dboard/db_sbx_version3.cpp6
-rw-r--r--host/lib/usrp/dboard/db_sbx_version4.cpp6
-rw-r--r--host/lib/usrp/dboard/db_tvrx.cpp28
-rw-r--r--host/lib/usrp/dboard/db_tvrx2.cpp128
-rw-r--r--host/lib/usrp/dboard/db_twinrx.cpp2
-rw-r--r--host/lib/usrp/dboard/db_ubx.cpp32
-rw-r--r--host/lib/usrp/dboard/db_unknown.cpp7
-rw-r--r--host/lib/usrp/dboard/db_wbx_common.cpp10
-rw-r--r--host/lib/usrp/dboard/db_wbx_version2.cpp12
-rw-r--r--host/lib/usrp/dboard/db_wbx_version3.cpp12
-rw-r--r--host/lib/usrp/dboard/db_wbx_version4.cpp12
-rw-r--r--host/lib/usrp/dboard/db_xcvr2450.cpp24
-rw-r--r--host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp6
-rw-r--r--host/lib/usrp/dboard/twinrx/twinrx_experts.cpp5
-rw-r--r--host/lib/usrp/dboard_eeprom.cpp10
-rw-r--r--host/lib/usrp/dboard_eeprom_c.cpp6
-rw-r--r--host/lib/usrp/dboard_manager.cpp27
-rw-r--r--host/lib/usrp/device3/device3_impl.cpp32
-rw-r--r--host/lib/usrp/device3/device3_impl.hpp7
-rw-r--r--host/lib/usrp/device3/device3_io_impl.cpp149
-rw-r--r--host/lib/usrp/e100/clock_ctrl.cpp25
-rw-r--r--host/lib/usrp/e100/codec_ctrl.cpp6
-rw-r--r--host/lib/usrp/e100/e100_ctrl.cpp9
-rw-r--r--host/lib/usrp/e100/e100_impl.cpp38
-rw-r--r--host/lib/usrp/e100/e100_mmap_zero_copy.cpp46
-rw-r--r--host/lib/usrp/e100/fpga_downloader.cpp17
-rw-r--r--host/lib/usrp/e100/io_impl.cpp6
-rw-r--r--host/lib/usrp/e300/e300_common.cpp7
-rw-r--r--host/lib/usrp/e300/e300_common.hpp2
-rw-r--r--host/lib/usrp/e300/e300_defaults.hpp2
-rw-r--r--host/lib/usrp/e300/e300_eeprom_manager.cpp10
-rw-r--r--host/lib/usrp/e300/e300_fifo_config.cpp19
-rw-r--r--host/lib/usrp/e300/e300_impl.cpp93
-rw-r--r--host/lib/usrp/e300/e300_impl.hpp3
-rw-r--r--host/lib/usrp/e300/e300_io_impl.cpp17
-rw-r--r--host/lib/usrp/e300/e300_network.cpp56
-rw-r--r--host/lib/usrp/e300/e300_remote_codec_ctrl.cpp2
-rw-r--r--host/lib/usrp/e300/e300_sensor_manager.cpp6
-rw-r--r--host/lib/usrp/e300/e300_sysfs_hooks.cpp8
-rw-r--r--host/lib/usrp/gps_ctrl.cpp48
-rw-r--r--host/lib/usrp/gpsd_iface.cpp3
-rw-r--r--host/lib/usrp/mboard_eeprom.cpp19
-rw-r--r--host/lib/usrp/multi_usrp.cpp108
-rw-r--r--host/lib/usrp/n230/CMakeLists.txt1
-rw-r--r--host/lib/usrp/n230/n230_clk_pps_ctrl.cpp9
-rw-r--r--host/lib/usrp/n230/n230_eeprom_manager.cpp8
-rw-r--r--host/lib/usrp/n230/n230_frontend_ctrl.cpp2
-rw-r--r--host/lib/usrp/n230/n230_fw_comm_protocol.h (renamed from host/lib/usrp/common/fw_comm_protocol.h)6
-rw-r--r--host/lib/usrp/n230/n230_fw_ctrl_iface.cpp (renamed from host/lib/usrp/common/usrp3_fw_ctrl_iface.cpp)41
-rw-r--r--host/lib/usrp/n230/n230_fw_ctrl_iface.hpp (renamed from host/lib/usrp/common/usrp3_fw_ctrl_iface.hpp)14
-rw-r--r--host/lib/usrp/n230/n230_impl.cpp36
-rw-r--r--host/lib/usrp/n230/n230_resource_manager.cpp32
-rw-r--r--host/lib/usrp/n230/n230_resource_manager.hpp8
-rw-r--r--host/lib/usrp/n230/n230_stream_manager.cpp19
-rw-r--r--host/lib/usrp/n230/n230_uart.cpp2
-rw-r--r--host/lib/usrp/subdev_spec.cpp15
-rw-r--r--host/lib/usrp/usrp1/codec_ctrl.cpp26
-rw-r--r--host/lib/usrp/usrp1/io_impl.cpp33
-rw-r--r--host/lib/usrp/usrp1/soft_time_ctrl.cpp5
-rw-r--r--host/lib/usrp/usrp1/usrp1_calc_mux.hpp6
-rw-r--r--host/lib/usrp/usrp1/usrp1_iface.cpp20
-rw-r--r--host/lib/usrp/usrp1/usrp1_impl.cpp46
-rw-r--r--host/lib/usrp/usrp1/usrp1_impl.hpp6
-rw-r--r--host/lib/usrp/usrp2/clock_ctrl.cpp1
-rw-r--r--host/lib/usrp/usrp2/codec_ctrl.cpp3
-rw-r--r--host/lib/usrp/usrp2/dboard_iface.cpp2
-rw-r--r--host/lib/usrp/usrp2/io_impl.cpp51
-rw-r--r--host/lib/usrp/usrp2/n200_image_loader.cpp4
-rw-r--r--host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp2
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp7
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.cpp64
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.hpp2
-rw-r--r--host/lib/usrp/usrp_c.cpp3
-rw-r--r--host/lib/usrp/x300/x300_adc_ctrl.cpp1
-rw-r--r--host/lib/usrp/x300/x300_clock_ctrl.cpp5
-rw-r--r--host/lib/usrp/x300/x300_dac_ctrl.cpp5
-rw-r--r--host/lib/usrp/x300/x300_dboard_iface.cpp2
-rw-r--r--host/lib/usrp/x300/x300_fw_common.h18
-rw-r--r--host/lib/usrp/x300/x300_fw_ctrl.cpp21
-rw-r--r--host/lib/usrp/x300/x300_fw_uart.cpp5
-rw-r--r--host/lib/usrp/x300/x300_image_loader.cpp238
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp186
-rw-r--r--host/lib/usrp/x300/x300_impl.hpp9
-rw-r--r--host/lib/usrp/x300/x300_io_impl.cpp10
-rw-r--r--host/lib/usrp/x300/x300_mb_eeprom.cpp2
-rw-r--r--host/lib/usrp/x300/x300_radio_ctrl_impl.cpp330
-rw-r--r--host/lib/usrp/x300/x300_radio_ctrl_impl.hpp21
-rw-r--r--host/lib/usrp_clock/multi_usrp_clock.cpp5
-rw-r--r--host/lib/usrp_clock/octoclock/octoclock_eeprom.cpp4
-rw-r--r--host/lib/usrp_clock/octoclock/octoclock_image_loader.cpp3
-rw-r--r--host/lib/usrp_clock/octoclock/octoclock_impl.cpp48
-rw-r--r--host/lib/usrp_clock/usrp_clock_c.cpp3
-rw-r--r--host/lib/utils/CMakeLists.txt37
-rw-r--r--host/lib/utils/csv.cpp3
-rw-r--r--host/lib/utils/gain_group.cpp17
-rw-r--r--host/lib/utils/load_modules.cpp3
-rw-r--r--host/lib/utils/log.cpp511
-rw-r--r--host/lib/utils/msg.cpp130
-rw-r--r--host/lib/utils/paths.cpp9
-rw-r--r--host/lib/utils/tasks.cpp63
-rw-r--r--host/lib/utils/thread.cpp (renamed from host/lib/utils/thread_priority.cpp)20
-rw-r--r--host/lib/utils/thread_priority_c.cpp4
-rw-r--r--host/lib/version.cpp13
220 files changed, 3358 insertions, 2109 deletions
diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt
index 0cd89953c..fce1021c1 100644
--- a/host/lib/CMakeLists.txt
+++ b/host/lib/CMakeLists.txt
@@ -91,6 +91,7 @@ INCLUDE_SUBDIRECTORY(ic_reg_maps)
INCLUDE_SUBDIRECTORY(types)
INCLUDE_SUBDIRECTORY(convert)
INCLUDE_SUBDIRECTORY(rfnoc)
+INCLUDE_SUBDIRECTORY(cal)
INCLUDE_SUBDIRECTORY(usrp)
INCLUDE_SUBDIRECTORY(usrp_clock)
INCLUDE_SUBDIRECTORY(utils)
@@ -140,10 +141,10 @@ ENDIF(ENABLE_C_API)
# Add DLL resource file to Windows build
########################################################################
IF(MSVC)
- MATH(EXPR TRIMMED_VERSION_MAJOR_API "${TRIMMED_VERSION_MAJOR} * 1000 + ${TRIMMED_VERSION_API}")
- SET(RC_TRIMMED_VERSION_PATCH ${TRIMMED_VERSION_PATCH})
+ MATH(EXPR RC_VERSION_MAJOR_API "${UHD_VERSION_MAJOR} * 1000 + ${UHD_VERSION_API}")
+ SET(RC_VERSION_PATCH ${UHD_VERSION_PATCH})
IF(UHD_VERSION_DEVEL)
- SET(RC_TRIMMED_VERSION_PATCH "999")
+ SET(RC_VERSION_PATCH "999")
ENDIF(UHD_VERSION_DEVEL)
# Allow a custom .rc template file to be used
diff --git a/host/lib/cal/CMakeLists.txt b/host/lib/cal/CMakeLists.txt
new file mode 100644
index 000000000..5c616a9da
--- /dev/null
+++ b/host/lib/cal/CMakeLists.txt
@@ -0,0 +1,32 @@
+#
+# Copyright 2016 Ettus Research
+#
+# 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/>.
+#
+
+########################################################################
+# This file included, use CMake directory variables
+########################################################################
+INCLUDE(CheckIncludeFileCXX)
+MESSAGE(STATUS "")
+
+########################################################################
+# Convert types generation
+########################################################################
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
+
+LIBUHD_APPEND_SOURCES(
+ ${CMAKE_CURRENT_SOURCE_DIR}/power_container_impl.cpp
+)
diff --git a/host/lib/cal/interpolation.hpp b/host/lib/cal/interpolation.hpp
new file mode 100644
index 000000000..34f084fbd
--- /dev/null
+++ b/host/lib/cal/interpolation.hpp
@@ -0,0 +1,71 @@
+//
+// Copyright 2016 Ettus Research
+//
+// 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_UHD_INTERPOLATION_HPP
+#define INCLUDED_UHD_INTERPOLATION_HPP
+
+#include <uhd/exception.hpp>
+#include <boost/format.hpp>
+#include <map>
+#include <cmath>
+
+namespace uhd {
+namespace cal {
+
+template<typename in_type, typename out_type>
+struct interp
+{
+public:
+ typedef std::vector<in_type> args_t;
+ typedef std::map<args_t, out_type> container_t;
+
+ /*!
+ * Nearest neighbor interpolation given a mapping: R^n -> R
+ *
+ * 1) search for the nearest point in R^n
+ * 2) find the nearest output scalars in R
+ *
+ * \param data input data container
+ * \param args input data point
+ * \returns interpolated output value
+ */
+ const out_type nn_interp(container_t &data, const args_t &args);
+
+ /*!
+ * Bilinear interpolation given a mapping: R^2 -> R
+ *
+ * 1) search for 4 surrounding points in R^2
+ * 2) find the output scalars in R
+ * 3) solve the system of equations given our input mappings
+ *
+ * \param data input data container
+ * \param args input data point
+ * \returns interpolated output value
+ */
+ const out_type bl_interp(container_t &data, const args_t &args);
+
+private:
+ /*!
+ * Calculate the distance between two points
+ */
+ static in_type calc_dist(const args_t &a, const args_t &b);
+};
+
+} // namespace cal
+} // namespace uhd
+
+#endif /* INCLUDED_UHD_INTERPOLATION_HPP */
diff --git a/host/lib/cal/interpolation.ipp b/host/lib/cal/interpolation.ipp
new file mode 100644
index 000000000..f27b5e209
--- /dev/null
+++ b/host/lib/cal/interpolation.ipp
@@ -0,0 +1,203 @@
+//
+// Copyright 2016 Ettus Research
+//
+// 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_UHD_INTERPOLATION_IPP
+#define INCLUDED_UHD_INTERPOLATION_IPP
+
+#include "interpolation.hpp"
+#include <uhd/utils/log.hpp>
+// This is a bugfix for Boost 1.64, maybe future Boosts won't need this
+#if BOOST_VERSION >= 106400
+# include <boost/serialization/array_wrapper.hpp>
+#endif // end of bugfix
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/lu.hpp>
+
+using namespace boost::numeric;
+
+namespace uhd {
+namespace cal {
+
+#define CAL_INTERP_METHOD(return_type, method, args, ...) \
+ template<typename in_type, typename out_type> \
+ return_type interp<in_type, out_type>::\
+ method(args, __VA_ARGS__)
+
+#define ARGS_T typename interp<in_type, out_type>::args_t
+#define CONTAINER_T typename interp<in_type, out_type>::container_t
+
+CAL_INTERP_METHOD(in_type, calc_dist, const ARGS_T &a, const ARGS_T &b)
+{
+ in_type dist = 0;
+ for (size_t i = 0; i < std::min(a.size(), b.size()); i++)
+ {
+ dist += std::abs(a[i] - b[i]);
+ }
+ return dist;
+}
+
+CAL_INTERP_METHOD(const out_type, nn_interp, CONTAINER_T &data, const ARGS_T &args)
+{
+ // Check the cache for the output
+ if (data.find(args) != data.end()) {
+ return data[args];
+ }
+
+ out_type output = 0;
+ in_type min_dist = 0;
+ typename container_t::const_iterator citer;
+ for (citer = data.begin(); citer != data.end(); citer++)
+ {
+ in_type dist = calc_dist(citer->first, args);
+ if (citer == data.begin() || dist < min_dist) {
+ min_dist = dist;
+ output = data[citer->first];
+ }
+ }
+
+ return output;
+}
+
+CAL_INTERP_METHOD(const out_type, bl_interp, CONTAINER_T &data, const ARGS_T &args)
+{
+ if (args.size() != 2) {
+ throw uhd::assertion_error(str(boost::format(
+ "Bilinear interpolation expects 2D values. Received %d.")
+ % args.size()
+ ));
+ }
+
+ if (data.size() < 4) {
+ throw uhd::assertion_error(str(boost::format(
+ "Bilinear interpolation requires at least 4 input points. Found %d.")
+ % data.size()
+ ));
+ }
+
+ // Locate the nearest 4 points
+ typedef std::pair<interp<in_type, out_type>::args_t, out_type> cal_pair_t;
+ typename std::vector<cal_pair_t> nearest;
+
+ // Initialize the resulting pair to something
+ cal_pair_t pair = *data.begin();
+
+ for (size_t i = 0; i < 4; i++) {
+ bool init = true;
+ in_type min_dist = 0;
+ typename container_t::const_iterator citer;
+ for (citer = data.begin(); citer != data.end(); citer++)
+ {
+ cal_pair_t temp = *citer;
+ if (std::find(nearest.begin(), nearest.end(), temp) == nearest.end())
+ {
+ in_type dist = calc_dist(citer->first, args);
+ if (dist < min_dist || init)
+ {
+ min_dist = dist;
+ pair = temp;
+ init = false;
+ }
+ }
+ }
+ // Push back the nearest pair
+ nearest.push_back(pair);
+ }
+
+ //
+ // Since these points are not grid aligned,
+ // we perform irregular bilinear interpolation.
+ // This math involves finding our interpolation
+ // function using lagrange multipliers:
+ //
+ // f(x, y) = ax^2 + bxy + cy^2 + dx + ey + f
+ //
+ // The solution is to solve the following system:
+ //
+ // A x b
+ // | E X' | | s | - | 0 |
+ // | X 0 | | l | - | z |
+ //
+ // where s is a vector of the above coefficients.
+ //
+ typename ublas::matrix<in_type> A(10, 10, 0.0);
+
+ // E
+ A(0, 0) = 1.0; A(1, 1) = 1.0; A(2, 2) = 1.0;
+
+ in_type x1, x2, x3, x4;
+ in_type y1, y2, y3, y4;
+
+ x1 = nearest[0].first[0]; y1 = nearest[0].first[1];
+ x2 = nearest[1].first[0]; y2 = nearest[1].first[1];
+ x3 = nearest[2].first[0]; y3 = nearest[2].first[1];
+ x4 = nearest[3].first[0]; y4 = nearest[3].first[1];
+
+ // X
+ A(0, 6) = x1*x1; A(1, 6) = x1*y1; A(2, 6) = y1*y1; A(3, 6) = x1; A(4, 6) = y1; A(5, 6) = 1.0;
+ A(0, 7) = x2*x2; A(1, 7) = x2*y2; A(2, 7) = y2*y2; A(3, 7) = x2; A(4, 7) = y2; A(5, 7) = 1.0;
+ A(0, 8) = x3*x3; A(1, 8) = x3*y3; A(2, 8) = y3*y3; A(3, 8) = x3; A(4, 8) = y3; A(5, 8) = 1.0;
+ A(0, 9) = x4*x4; A(1, 9) = x4*y4; A(2, 9) = y4*y4; A(3, 9) = x4; A(4, 9) = y4; A(5, 9) = 1.0;
+
+ // X'
+ A(6, 0) = x1*x1; A(6, 1) = x1*y1; A(6, 2) = y1*y1; A(6, 3) = x1; A(6, 4) = y1; A(6, 5) = 1.0;
+ A(7, 0) = x2*x2; A(7, 1) = x2*y2; A(7, 2) = y2*y2; A(7, 3) = x2; A(7, 4) = y2; A(7, 5) = 1.0;
+ A(8, 0) = x3*x3; A(8, 1) = x3*y3; A(8, 2) = y3*y3; A(8, 3) = x3; A(8, 4) = y3; A(8, 5) = 1.0;
+ A(9, 0) = x4*x4; A(9, 1) = x4*y4; A(9, 2) = y4*y4; A(9, 3) = x4; A(9, 4) = y4; A(9, 5) = 1.0;
+
+ // z
+ typename ublas::vector<in_type> b(10, 0.0);
+ b(6) = nearest[0].second;
+ b(7) = nearest[1].second;
+ b(8) = nearest[2].second;
+ b(9) = nearest[3].second;
+
+ typename ublas::matrix<in_type> A_t = A;
+ typename ublas::vector<in_type> s = b;
+ typename ublas::permutation_matrix<in_type> P(A_t.size1());
+
+ // Use LUP factorization to solve for the coefficients
+ // We're solving the problem in the form of Ax = b
+ bool is_singular = ublas::lu_factorize(A_t, P);
+
+ out_type output = 0;
+
+ // Fall back to 1D interpolation if the matrix is singular
+ if (is_singular) {
+ // Warn the user that the A matrix is singular
+ UHD_LOGGER_WARNING("CAL") << "Bilinear interpolation: singular matrix detected. "
+ << "Performing 1D linear interpolation against the nearest measurements. "
+ << "Provide calibration data with more measurements";
+
+ output = (b[7] - b[6]) / 2.0;
+ output += b[6];
+ return output;
+ }
+ ublas::lu_substitute(A_t, P, s);
+
+ in_type x = args[0];
+ in_type y = args[1];
+
+ // Utilize the solution to calculate the interpolation function
+ output = s[0]*x*x + s[1]*x*y + s[2]*y*y + s[3]*x + s[4]*y + s[5];
+ return output;
+}
+
+} // namespace cal
+} // namespace uhd
+
+#endif /* INCLUDED_UHD_INTERPOLATION_IPP */
diff --git a/host/lib/cal/power_container_impl.cpp b/host/lib/cal/power_container_impl.cpp
new file mode 100644
index 000000000..5d07c3b7e
--- /dev/null
+++ b/host/lib/cal/power_container_impl.cpp
@@ -0,0 +1,80 @@
+//
+// Copyright 2016 Ettus Research
+//
+// 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 "power_container_impl.hpp"
+#include <uhd/exception.hpp>
+#include <boost/format.hpp>
+
+using namespace uhd;
+using namespace uhd::cal;
+
+power_container::sptr power_container::make()
+{
+ return power_container::sptr(new power_container_impl());
+}
+
+power_container_impl::power_container_impl() :
+ _nargs(0), _mode(interp_mode_t::NEAREST)
+{
+ /* NOP */
+}
+
+double power_container_impl::get(const std::vector<double> &args)
+{
+ this->verify_nargs(args);
+ switch (_mode)
+ {
+ case interp_mode_t::BILINEAR :
+ return _interpolator.bl_interp(_data, args);
+ case interp_mode_t::NEAREST :
+ return _interpolator.nn_interp(_data, args);
+ default:
+ return _interpolator.nn_interp(_data, args);
+ }
+}
+
+void power_container_impl::add(const double output, const std::vector<double> &args)
+{
+ if (_nargs == 0)
+ {
+ _nargs = args.size();
+ _mode = _nargs == 2 ? interp_mode_t::BILINEAR : interp_mode_t::NEAREST;
+ }
+ this->verify_nargs(args);
+ _data[args] = output;
+}
+
+void power_container_impl::add_metadata(const power_container::metadata_t &data)
+{
+ _metadata = data;
+}
+
+const power_container_impl::metadata_t &power_container_impl::get_metadata()
+{
+ return _metadata;
+}
+
+void power_container_impl::verify_nargs(const std::vector<double> &args)
+{
+ // Check that the number of arguments expected are correct
+ if (args.size() != _nargs) {
+ throw uhd::assertion_error(str(boost::format(
+ "power_container_impl: Expected %d number of arguments/values instead of %d")
+ % _nargs % args.size()
+ ));
+ }
+}
diff --git a/host/lib/cal/power_container_impl.hpp b/host/lib/cal/power_container_impl.hpp
new file mode 100644
index 000000000..4c2bcab79
--- /dev/null
+++ b/host/lib/cal/power_container_impl.hpp
@@ -0,0 +1,77 @@
+//
+// Copyright 2016 Ettus Research
+//
+// 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_UHD_CAL_POWER_CONTAINER_IMPL_HPP
+#define INCLUDED_UHD_CAL_POWER_CONTAINER_IMPL_HPP
+
+#include "interpolation.ipp"
+#include <uhd/cal/power_container.hpp>
+
+namespace uhd {
+namespace cal {
+
+enum interp_mode_t
+{
+ BILINEAR, //! linear interpolation
+ NEAREST //! nearest neighbor interpolation
+};
+
+class power_container_impl : public power_container {
+public:
+ typedef std::map<std::vector<double>, double> container_t;
+
+ power_container_impl();
+
+ double get(const std::vector<double> &args);
+ const metadata_t &get_metadata();
+
+ void add(const double output, const std::vector<double> &args);
+ void add_metadata(const metadata_t &data);
+
+private:
+ // Container data to be serialized
+ size_t _nargs;
+ metadata_t _metadata;
+ interp_mode_t _mode;
+ container_t _data;
+
+ interp<double, double> _interpolator;
+
+ void verify_nargs(const std::vector<double> &args);
+
+protected:
+ friend class boost::serialization::access;
+
+ void serialize(iarchive_type & ar, const unsigned int) {
+ ar & _nargs;
+ ar & _metadata;
+ ar & _mode;
+ ar & _data;
+ }
+
+ void serialize(oarchive_type & ar, const unsigned int) {
+ ar & _nargs;
+ ar & _metadata;
+ ar & _mode;
+ ar & _data;
+ }
+};
+
+} // namespace cal
+} // namespace uhd
+
+#endif /* INCLUDED_UHD_CAL_POWER_CONTAINER_IMPL_HPP */
diff --git a/host/lib/convert/convert_fc32_item32.cpp b/host/lib/convert/convert_fc32_item32.cpp
index 4a188780a..38f71a62b 100644
--- a/host/lib/convert/convert_fc32_item32.cpp
+++ b/host/lib/convert/convert_fc32_item32.cpp
@@ -17,7 +17,7 @@
#include "convert_common.hpp"
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/math/special_functions/round.hpp>
#include <vector>
diff --git a/host/lib/convert/convert_impl.cpp b/host/lib/convert/convert_impl.cpp
index d624bf970..33f88d70b 100644
--- a/host/lib/convert/convert_impl.cpp
+++ b/host/lib/convert/convert_impl.cpp
@@ -22,7 +22,6 @@
#include <uhd/exception.hpp>
#include <stdint.h>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <complex>
using namespace uhd;
@@ -81,10 +80,7 @@ void uhd::convert::register_converter(
get_table()[id][prio] = fcn;
//----------------------------------------------------------------//
- UHD_LOGV(always) << "register_converter: " << id.to_pp_string() << std::endl
- << " prio: " << prio << std::endl
- << std::endl
- ;
+ UHD_LOG_TRACE("CONVERT", boost::format("register_converter: %s prio: %s") % id.to_string() % prio)
//----------------------------------------------------------------//
}
@@ -100,12 +96,11 @@ convert::function_type convert::get_converter(
//find a matching priority
priority_type best_prio = -1;
- BOOST_FOREACH(priority_type prio_i, get_table()[id].keys()){
+ for(priority_type prio_i: get_table()[id].keys()){
if (prio_i == prio) {
//----------------------------------------------------------------//
- UHD_LOGV(always) << "get_converter: For converter ID: " << id.to_pp_string() << std::endl
- << "Using prio: " << prio << std::endl
- << std::endl
+ UHD_LOGGER_DEBUG("CONVERT") << "get_converter: For converter ID: " << id.to_pp_string()
+ << " Using prio: " << prio;
;
//----------------------------------------------------------------//
return get_table()[id][prio];
@@ -118,10 +113,8 @@ convert::function_type convert::get_converter(
"Cannot find a conversion routine [with prio] for " + id.to_pp_string());
//----------------------------------------------------------------//
- UHD_LOGV(always) << "get_converter: For converter ID: " << id.to_pp_string() << std::endl
- << "Using prio: " << best_prio << std::endl
- << std::endl
- ;
+ UHD_LOGGER_DEBUG("CONVERT") << "get_converter: For converter ID: " << id.to_pp_string()
+ << " Using prio: " << best_prio;
//----------------------------------------------------------------//
//otherwise, return best prio
diff --git a/host/lib/convert/convert_pack_sc12.cpp b/host/lib/convert/convert_pack_sc12.cpp
index fd32fc95f..aaa6f2632 100644
--- a/host/lib/convert/convert_pack_sc12.cpp
+++ b/host/lib/convert/convert_pack_sc12.cpp
@@ -17,7 +17,7 @@
#include "convert_common.hpp"
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/math/special_functions/round.hpp>
#include <vector>
diff --git a/host/lib/convert/convert_unpack_sc12.cpp b/host/lib/convert/convert_unpack_sc12.cpp
index acc815951..f42e51c00 100644
--- a/host/lib/convert/convert_unpack_sc12.cpp
+++ b/host/lib/convert/convert_unpack_sc12.cpp
@@ -17,7 +17,7 @@
#include "convert_common.hpp"
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/math/special_functions/round.hpp>
#include <vector>
diff --git a/host/lib/device.cpp b/host/lib/device.cpp
index c75ecad77..f8b2fc498 100644
--- a/host/lib/device.cpp
+++ b/host/lib/device.cpp
@@ -19,10 +19,9 @@
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/static.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/functional/hash.hpp>
@@ -53,7 +52,7 @@ static size_t hash_device_addr(
boost::hash_combine(hash, dev_addr["resource"]);
}
else {
- BOOST_FOREACH(const std::string &key, uhd::sorted(dev_addr.keys())){
+ for(const std::string &key: uhd::sorted(dev_addr.keys())){
boost::hash_combine(hash, key);
boost::hash_combine(hash, dev_addr[key]);
}
@@ -74,7 +73,7 @@ void device::register_device(
const make_t &make,
const device_filter_t filter
){
- UHD_LOGV(always) << "registering device" << std::endl;
+ // UHD_LOGGER_TRACE("UHD") << "registering device";
get_dev_fcn_regs().push_back(dev_fcn_reg_t(find, make, filter));
}
@@ -90,7 +89,7 @@ device_addrs_t device::find(const device_addr_t &hint, device_filter_t filter){
device_addrs_t device_addrs;
- BOOST_FOREACH(const dev_fcn_reg_t &fcn, get_dev_fcn_regs()) {
+ for(const dev_fcn_reg_t &fcn: get_dev_fcn_regs()) {
try {
if (filter == ANY or fcn.get<2>() == filter) {
device_addrs_t discovered_addrs = fcn.get<0>()(hint);
@@ -102,7 +101,7 @@ device_addrs_t device::find(const device_addr_t &hint, device_filter_t filter){
}
}
catch (const std::exception &e) {
- UHD_MSG(error) << "Device discovery error: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("UHD") << "Device discovery error: " << e.what();
}
}
@@ -118,17 +117,17 @@ device::sptr device::make(const device_addr_t &hint, device_filter_t filter, siz
typedef boost::tuple<device_addr_t, make_t> dev_addr_make_t;
std::vector<dev_addr_make_t> dev_addr_makers;
- BOOST_FOREACH(const dev_fcn_reg_t &fcn, get_dev_fcn_regs()){
+ for(const dev_fcn_reg_t &fcn: get_dev_fcn_regs()){
try{
if(filter == ANY or fcn.get<2>() == filter){
- BOOST_FOREACH(device_addr_t dev_addr, fcn.get<0>()(hint)){
+ for(device_addr_t dev_addr: fcn.get<0>()(hint)){
//append the discovered address and its factory function
dev_addr_makers.push_back(dev_addr_make_t(dev_addr, fcn.get<1>()));
}
}
}
catch(const std::exception &e){
- UHD_MSG(error) << "Device discovery error: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("UHD") << "Device discovery error: " << e.what() ;
}
}
@@ -150,11 +149,11 @@ device::sptr device::make(const device_addr_t &hint, device_filter_t filter, siz
device_addr_t dev_addr; make_t maker;
boost::tie(dev_addr, maker) = dev_addr_makers.at(which);
size_t dev_hash = hash_device_addr(dev_addr);
- UHD_LOG << boost::format("Device hash: %u") % dev_hash << std::endl;
+ UHD_LOGGER_TRACE("UHD") << boost::format("Device hash: %u") % dev_hash ;
//copy keys that were in hint but not in dev_addr
//this way, we can pass additional transport arguments
- BOOST_FOREACH(const std::string &key, hint.keys()){
+ for(const std::string &key: hint.keys()){
if (not dev_addr.has_key(key)) dev_addr[key] = hint[key];
}
diff --git a/host/lib/device3.cpp b/host/lib/device3.cpp
index 3b316e8ea..044459aec 100644
--- a/host/lib/device3.cpp
+++ b/host/lib/device3.cpp
@@ -15,9 +15,10 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include <boost/format.hpp>
#include <uhd/device3.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
+#include <boost/format.hpp>
+#include <boost/thread/lock_guard.hpp>
using namespace uhd;
using namespace uhd::rfnoc;
@@ -68,7 +69,8 @@ std::vector<rfnoc::block_id_t> device3::find_blocks(const std::string &block_id_
void device3::clear()
{
- BOOST_FOREACH(const block_ctrl_base::sptr &block, _rfnoc_block_ctrl) {
+ boost::lock_guard<boost::mutex> lock(_block_ctrl_mutex);
+ for(const block_ctrl_base::sptr &block: _rfnoc_block_ctrl) {
block->clear();
}
}
diff --git a/host/lib/experts/expert_container.cpp b/host/lib/experts/expert_container.cpp
index 853e3e4b7..f010293b7 100644
--- a/host/lib/experts/expert_container.cpp
+++ b/host/lib/experts/expert_container.cpp
@@ -17,9 +17,8 @@
#include "expert_container.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/make_shared.hpp>
@@ -185,7 +184,7 @@ public:
EX_LOG(1, "cycle check ... PASSED");
} else {
EX_LOG(1, "cycle check ... ERROR!!!");
- BOOST_FOREACH(const std::string& e, back_edges) {
+ for(const std::string& e: back_edges) {
EX_LOG(2, "back edge: " + e);
}
}
@@ -193,7 +192,7 @@ public:
//Test 2: Check data node input and output edges
std::vector<std::string> data_node_issues;
- BOOST_FOREACH(const vertex_map_t::value_type& v, _datanode_map) {
+ for(const vertex_map_t::value_type& v: _datanode_map) {
size_t in_count = 0, out_count = 0;
for (std::pair<edge_iter, edge_iter> ei = boost::edges(_expert_dag);
ei.first != ei.second;
@@ -238,7 +237,7 @@ public:
EX_LOG(1, "data node check ... PASSED");
} else {
EX_LOG(1, "data node check ... WARNING!");
- BOOST_FOREACH(const std::string& i, data_node_issues) {
+ for(const std::string& i: data_node_issues) {
EX_LOG(2, i);
}
}
@@ -246,7 +245,7 @@ public:
//Test 3: Check worker node input and output edges
std::vector<std::string> worker_issues;
- BOOST_FOREACH(const vertex_map_t::value_type& v, _worker_map) {
+ for(const vertex_map_t::value_type& v: _worker_map) {
size_t in_count = 0, out_count = 0;
for (std::pair<edge_iter, edge_iter> ei = boost::edges(_expert_dag);
ei.first != ei.second;
@@ -268,7 +267,7 @@ public:
EX_LOG(1, "worker check ... PASSED");
} else {
EX_LOG(1, "worker check ... WARNING!");
- BOOST_FOREACH(const std::string& i, worker_issues) {
+ for(const std::string& i: worker_issues) {
EX_LOG(2, i);
}
}
@@ -347,7 +346,7 @@ protected:
_worker_map.insert(vertex_map_t::value_type(worker->get_name(), gr_node));
//For each input, add an edge from the input to this node
- BOOST_FOREACH(const std::string& node_name, worker->get_inputs()) {
+ for(const std::string& node_name: worker->get_inputs()) {
vertex_map_t::const_iterator node = _datanode_map.find(node_name);
if (node != _datanode_map.end()) {
boost::add_edge((*node).second, gr_node, _expert_dag);
@@ -358,7 +357,7 @@ protected:
}
//For each output, add an edge from this node to the output
- BOOST_FOREACH(const std::string& node_name, worker->get_outputs()) {
+ for(const std::string& node_name: worker->get_outputs()) {
vertex_map_t::const_iterator node = _datanode_map.find(node_name);
if (node != _datanode_map.end()) {
boost::add_edge(gr_node, (*node).second, _expert_dag);
@@ -423,7 +422,7 @@ private:
boost::depth_first_search(_expert_dag, boost::visitor(cdet_vis));
if (not back_edges.empty()) {
std::string edges;
- BOOST_FOREACH(const std::string& e, back_edges) {
+ for(const std::string& e: back_edges) {
edges += "* " + e + "";
}
throw uhd::runtime_error("Cannot resolve expert because it has at least one cycle!\n"
@@ -514,7 +513,7 @@ private:
{
std::string indents;
for (size_t i = 0; i < depth; i++) indents += "- ";
- UHD_MSG(fastpath) << "[expert::" + _name + "] " << indents << str << std::endl;
+ UHD_LOG_DEBUG("EXPERT","[expert::" + _name + "] " << indents << str)
}
private:
diff --git a/host/lib/experts/expert_nodes.hpp b/host/lib/experts/expert_nodes.hpp
index 6040cd19e..4a285cc80 100644
--- a/host/lib/experts/expert_nodes.hpp
+++ b/host/lib/experts/expert_nodes.hpp
@@ -23,7 +23,6 @@
#include <uhd/utils/dirty_tracked.hpp>
#include <uhd/types/time_spec.hpp>
#include <boost/function.hpp>
-#include <boost/foreach.hpp>
#include <boost/thread/recursive_mutex.hpp>
#include <boost/thread.hpp>
#include <boost/units/detail/utility.hpp>
@@ -409,7 +408,7 @@ namespace uhd { namespace experts {
// Worker node specific
std::list<std::string> get_inputs() const {
std::list<std::string> retval;
- BOOST_FOREACH(data_accessor_t* acc, _inputs) {
+ for(data_accessor_t* acc: _inputs) {
retval.push_back(acc->node().get_name());
}
return retval;
@@ -417,7 +416,7 @@ namespace uhd { namespace experts {
std::list<std::string> get_outputs() const {
std::list<std::string> retval;
- BOOST_FOREACH(data_accessor_t* acc, _outputs) {
+ for(data_accessor_t* acc: _outputs) {
retval.push_back(acc->node().get_name());
}
return retval;
@@ -442,14 +441,14 @@ namespace uhd { namespace experts {
// Graph resolution specific
virtual bool is_dirty() const {
bool inputs_dirty = false;
- BOOST_FOREACH(data_accessor_t* acc, _inputs) {
+ for(data_accessor_t* acc: _inputs) {
inputs_dirty |= acc->node().is_dirty();
}
return inputs_dirty;
}
virtual void mark_clean() {
- BOOST_FOREACH(data_accessor_t* acc, _inputs) {
+ for(data_accessor_t* acc: _inputs) {
acc->node().mark_clean();
}
}
diff --git a/host/lib/image_loader.cpp b/host/lib/image_loader.cpp
index 91dd325dd..8b56d607e 100644
--- a/host/lib/image_loader.cpp
+++ b/host/lib/image_loader.cpp
@@ -20,13 +20,12 @@
#include <utility>
#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <uhd/exception.hpp>
#include <uhd/image_loader.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/static.hpp>
namespace fs = boost::filesystem;
@@ -47,8 +46,8 @@ UHD_SINGLETON_FCN(string_map_t, get_recovery_strings);
void uhd::image_loader::register_image_loader(const std::string &device_type,
const loader_fcn_t &loader_fcn,
const std::string &recovery_instructions){
- UHD_LOGV(always) << "Registering image loader and recovery instructions for "
- << device_type << std::endl;
+ // UHD_LOGGER_TRACE("UHD") << "Registering image loader and recovery instructions for "
+ // << device_type;
get_image_loaders().insert(loader_fcn_pair_t(device_type, loader_fcn));
get_recovery_strings().insert(string_pair_t(device_type, recovery_instructions));
@@ -69,7 +68,7 @@ bool uhd::image_loader::load(const uhd::image_loader::image_loader_args_t &image
else return get_image_loaders().at(type)(image_loader_args);
}
else{
- BOOST_FOREACH(const loader_fcn_pair_t &loader_fcn_pair, get_image_loaders()){
+ for(const loader_fcn_pair_t &loader_fcn_pair: get_image_loaders()){
if(loader_fcn_pair.second(image_loader_args)) return true;
}
return false;
diff --git a/host/lib/property_tree.cpp b/host/lib/property_tree.cpp
index 76d7bccba..b5ad10b21 100644
--- a/host/lib/property_tree.cpp
+++ b/host/lib/property_tree.cpp
@@ -17,7 +17,6 @@
#include <uhd/property_tree.hpp>
#include <uhd/types/dict.hpp>
-#include <boost/foreach.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/make_shared.hpp>
#include <iostream>
@@ -67,7 +66,7 @@ fs_path uhd::operator/(const fs_path &lhs, const fs_path &rhs){
fs_path uhd::operator/(const fs_path &lhs, size_t rhs)
{
- fs_path rhs_str = boost::lexical_cast<std::string>(rhs);
+ fs_path rhs_str = std::to_string(rhs);
return lhs / rhs_str;
}
@@ -98,7 +97,7 @@ public:
node_type *parent = NULL;
node_type *node = &_guts->root;
- BOOST_FOREACH(const std::string &name, path_tokenizer(path)){
+ for(const std::string &name: path_tokenizer(path)){
if (not node->has_key(name)) throw_path_not_found(path);
parent = node;
node = &(*node)[name];
@@ -112,7 +111,7 @@ public:
boost::mutex::scoped_lock lock(_guts->mutex);
node_type *node = &_guts->root;
- BOOST_FOREACH(const std::string &name, path_tokenizer(path)){
+ for(const std::string &name: path_tokenizer(path)){
if (not node->has_key(name)) return false;
node = &(*node)[name];
}
@@ -124,7 +123,7 @@ public:
boost::mutex::scoped_lock lock(_guts->mutex);
node_type *node = &_guts->root;
- BOOST_FOREACH(const std::string &name, path_tokenizer(path)){
+ for(const std::string &name: path_tokenizer(path)){
if (not node->has_key(name)) throw_path_not_found(path);
node = &(*node)[name];
}
@@ -137,7 +136,7 @@ public:
boost::mutex::scoped_lock lock(_guts->mutex);
node_type *node = &_guts->root;
- BOOST_FOREACH(const std::string &name, path_tokenizer(path)){
+ for(const std::string &name: path_tokenizer(path)){
if (not node->has_key(name)) (*node)[name] = node_type();
node = &(*node)[name];
}
@@ -150,7 +149,7 @@ public:
boost::mutex::scoped_lock lock(_guts->mutex);
node_type *node = &_guts->root;
- BOOST_FOREACH(const std::string &name, path_tokenizer(path)){
+ for(const std::string &name: path_tokenizer(path)){
if (not node->has_key(name)) throw_path_not_found(path);
node = &(*node)[name];
}
diff --git a/host/lib/rfnoc/block_ctrl_base.cpp b/host/lib/rfnoc/block_ctrl_base.cpp
index a6eecc20b..1a753403a 100644
--- a/host/lib/rfnoc/block_ctrl_base.cpp
+++ b/host/lib/rfnoc/block_ctrl_base.cpp
@@ -20,16 +20,15 @@
#include "ctrl_iface.hpp"
#include "nocscript/block_iface.hpp"
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/convert.hpp>
#include <uhd/rfnoc/block_ctrl_base.hpp>
#include <uhd/rfnoc/constants.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/bind.hpp>
-#define UHD_BLOCK_LOG() UHD_LOGV(never)
+#define UHD_BLOCK_LOG() UHD_LOGGER_TRACE("RFNOC")
using namespace uhd;
using namespace uhd::rfnoc;
@@ -48,17 +47,16 @@ inline uint32_t _sr_to_addr64(uint32_t reg) { return reg * 8; }; // for peek64
block_ctrl_base::block_ctrl_base(
const make_args_t &make_args
) : _tree(make_args.tree),
- _transport_is_big_endian(make_args.is_big_endian),
_ctrl_ifaces(make_args.ctrl_ifaces),
_base_address(make_args.base_address & 0xFFF0)
{
- UHD_BLOCK_LOG() << "block_ctrl_base()" << std::endl;
+ UHD_BLOCK_LOG() << "block_ctrl_base()" ;
/*** Identify this block (NoC-ID, block-ID, and block definition) *******/
// Read NoC-ID (name is passed in through make_args):
uint64_t noc_id = sr_read64(SR_READBACK_REG_ID);
_block_def = blockdef::make_from_noc_id(noc_id);
- if (_block_def) UHD_BLOCK_LOG() << "Found valid blockdef" << std::endl;
+ if (_block_def) UHD_BLOCK_LOG() << "Found valid blockdef" ;
if (not _block_def)
_block_def = blockdef::make_from_noc_id(DEFAULT_NOC_ID);
UHD_ASSERT_THROW(_block_def);
@@ -70,7 +68,7 @@ block_ctrl_base::block_ctrl_base(
}
UHD_BLOCK_LOG()
<< "NOC ID: " << str(boost::format("0x%016X ") % noc_id)
- << "Block ID: " << _block_id << std::endl;
+ << "Block ID: " << _block_id ;
/*** Initialize property tree *******************************************/
_root_path = "xbar/" + _block_id.get_local();
@@ -81,7 +79,7 @@ block_ctrl_base::block_ctrl_base(
/*** Configure ports ****************************************************/
size_t n_valid_input_buffers = 0;
- BOOST_FOREACH(const size_t ctrl_port, get_ctrl_ports()) {
+ for(const size_t ctrl_port: get_ctrl_ports()) {
// Set source addresses:
sr_write(SR_BLOCK_SID, get_address(ctrl_port), ctrl_port);
// Set sink buffer sizes:
@@ -95,7 +93,7 @@ block_ctrl_base::block_ctrl_base(
/*** Register names *****************************************************/
blockdef::registers_t sregs = _block_def->get_settings_registers();
- BOOST_FOREACH(const std::string &reg_name, sregs.keys()) {
+ for(const std::string &reg_name: sregs.keys()) {
if (DEFAULT_NAMED_SR.has_key(reg_name)) {
throw uhd::runtime_error(str(
boost::format("Register name %s is already defined!")
@@ -106,7 +104,7 @@ block_ctrl_base::block_ctrl_base(
.set(sregs.get(reg_name));
}
blockdef::registers_t rbacks = _block_def->get_readback_registers();
- BOOST_FOREACH(const std::string &reg_name, rbacks.keys()) {
+ for(const std::string &reg_name: rbacks.keys()) {
_tree->create<size_t>(_root_path / "registers"/ "rb" / reg_name)
.set(rbacks.get(reg_name));
}
@@ -116,10 +114,10 @@ block_ctrl_base::block_ctrl_base(
_init_port_defs("out", _block_def->get_output_ports());
// FIXME this warning always fails until the input buffer code above is fixed
if (_tree->list(_root_path / "ports/in").size() != n_valid_input_buffers) {
- UHD_MSG(warning) <<
+ UHD_LOGGER_WARNING("RFNOC") <<
boost::format("[%s] defines %d input buffer sizes, but %d input ports")
% get_block_id().get() % n_valid_input_buffers % _tree->list(_root_path / "ports/in").size()
- << std::endl;
+ ;
}
/*** Init default block args ********************************************/
@@ -138,14 +136,14 @@ void block_ctrl_base::_init_port_defs(
const size_t first_port_index
) {
size_t port_index = first_port_index;
- BOOST_FOREACH(const blockdef::port_t &port_def, ports) {
+ for(const blockdef::port_t &port_def: ports) {
fs_path port_path = _root_path / "ports" / direction / port_index;
if (not _tree->exists(port_path)) {
_tree->create<blockdef::port_t>(port_path);
}
UHD_RFNOC_BLOCK_TRACE() << "Adding port definition at " << port_path
<< boost::format(": type = '%s' pkt_size = '%s' vlen = '%s'") % port_def["type"] % port_def["pkt_size"] % port_def["vlen"]
- << std::endl;
+ ;
_tree->access<blockdef::port_t>(port_path).set(port_def);
port_index++;
}
@@ -155,12 +153,12 @@ void block_ctrl_base::_init_block_args()
{
blockdef::args_t args = _block_def->get_args();
fs_path arg_path = _root_path / "args";
- BOOST_FOREACH(const size_t port, get_ctrl_ports()) {
+ for(const size_t port: get_ctrl_ports()) {
_tree->create<std::string>(arg_path / port);
}
// First, create all nodes.
- BOOST_FOREACH(const blockdef::arg_t &arg, args) {
+ for(const blockdef::arg_t &arg: args) {
fs_path arg_type_path = arg_path / arg["port"] / arg["name"] / "type";
_tree->create<std::string>(arg_type_path).set(arg["type"]);
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
@@ -174,7 +172,7 @@ void block_ctrl_base::_init_block_args()
// TODO: Add coercer
#define _SUBSCRIBE_CHECK_AND_RUN(type, arg_tag, error_message) \
_tree->access<type>(arg_val_path).add_coerced_subscriber(boost::bind((&nocscript::block_iface::run_and_check), _nocscript_iface, arg[#arg_tag], error_message))
- BOOST_FOREACH(const blockdef::arg_t &arg, args) {
+ for(const blockdef::arg_t &arg: args) {
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
if (not arg["check"].empty()) {
if (arg["type"] == "string") { _SUBSCRIBE_CHECK_AND_RUN(string, check, arg["check_message"]); }
@@ -193,12 +191,12 @@ void block_ctrl_base::_init_block_args()
}
// Finally: Set the values. This will call subscribers, if we have any.
- BOOST_FOREACH(const blockdef::arg_t &arg, args) {
+ for(const blockdef::arg_t &arg: args) {
fs_path arg_val_path = arg_path / arg["port"] / arg["name"] / "value";
if (not arg["value"].empty()) {
if (arg["type"] == "int_vector") { throw uhd::runtime_error("not yet implemented: int_vector"); }
- else if (arg["type"] == "int") { _tree->access<int>(arg_val_path).set(boost::lexical_cast<int>(arg["value"])); }
- else if (arg["type"] == "double") { _tree->access<double>(arg_val_path).set(boost::lexical_cast<double>(arg["value"])); }
+ else if (arg["type"] == "int") { _tree->access<int>(arg_val_path).set(std::stoi(arg["value"])); }
+ else if (arg["type"] == "double") { _tree->access<double>(arg_val_path).set(std::stod(arg["value"])); }
else if (arg["type"] == "string") { _tree->access<string>(arg_val_path).set(arg["value"]); }
else { UHD_THROW_INVALID_CODE_PATH(); }
}
@@ -218,7 +216,7 @@ std::vector<size_t> block_ctrl_base::get_ctrl_ports() const
std::vector<size_t> ctrl_ports;
ctrl_ports.reserve(_ctrl_ifaces.size());
std::pair<size_t, wb_iface::sptr> it;
- BOOST_FOREACH(it, _ctrl_ifaces) {
+ for(auto it: _ctrl_ifaces) {
ctrl_ports.push_back(it.first);
}
return ctrl_ports;
@@ -227,7 +225,7 @@ std::vector<size_t> block_ctrl_base::get_ctrl_ports() const
void block_ctrl_base::sr_write(const uint32_t reg, const uint32_t data, const size_t port)
{
//UHD_BLOCK_LOG() << " ";
- //UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%d, %08X, %d)") % reg % data % port << std::endl;
+ //UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%d, %08X, %d)") % reg % data % port ;
if (not _ctrl_ifaces.count(port)) {
throw uhd::key_error(str(boost::format("[%s] sr_write(): No such port: %d") % get_block_id().get() % port));
}
@@ -254,7 +252,7 @@ void block_ctrl_base::sr_write(const std::string &reg, const uint32_t data, cons
reg_addr = uint32_t(_tree->access<size_t>(_root_path / "registers" / "sr" / reg).get());
}
UHD_BLOCK_LOG() << " ";
- UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%s, %08X) ==> ") % reg % data << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << boost::format("sr_write(%s, %08X) ==> ") % reg % data ;
return sr_write(reg_addr, data, port);
}
@@ -341,7 +339,7 @@ void block_ctrl_base::set_command_time(
const size_t port
) {
if (port == ANY_PORT) {
- BOOST_FOREACH(const size_t specific_port, get_ctrl_ports()) {
+ for(const size_t specific_port: get_ctrl_ports()) {
set_command_time(time_spec, specific_port);
}
return;
@@ -379,7 +377,7 @@ void block_ctrl_base::set_command_tick_rate(
const size_t port
) {
if (port == ANY_PORT) {
- BOOST_FOREACH(const size_t specific_port, get_ctrl_ports()) {
+ for(const size_t specific_port: get_ctrl_ports()) {
set_command_tick_rate(tick_rate, specific_port);
}
return;
@@ -412,11 +410,11 @@ void block_ctrl_base::clear_command_time(const size_t port)
void block_ctrl_base::clear()
{
- UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::clear() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::clear() " ;
// Call parent...
node_ctrl_base::clear();
// ...then child
- BOOST_FOREACH(const size_t port_index, get_ctrl_ports()) {
+ for(const size_t port_index: get_ctrl_ports()) {
_clear(port_index);
}
}
@@ -431,7 +429,7 @@ uint32_t block_ctrl_base::get_address(size_t block_port) {
**********************************************************************/
void block_ctrl_base::set_args(const uhd::device_addr_t &args, const size_t port)
{
- BOOST_FOREACH(const std::string &key, args.keys()) {
+ for(const std::string &key: args.keys()) {
if (_tree->exists(get_arg_path(key, port))) {
set_arg(key, args.get(key), port);
}
@@ -455,10 +453,10 @@ void block_ctrl_base::set_arg(const std::string &key, const std::string &val, co
_tree->access<std::string>(arg_val_path).set(val);
}
else if (type == "int") {
- _tree->access<int>(arg_val_path).set(boost::lexical_cast<int>(val));
+ _tree->access<int>(arg_val_path).set(std::stoi(val));
}
else if (type == "double") {
- _tree->access<double>(arg_val_path).set(boost::lexical_cast<double>(val));
+ _tree->access<double>(arg_val_path).set(std::stod(val));
}
else if (type == "int_vector") {
throw uhd::runtime_error("not yet implemented: int_vector");
@@ -474,7 +472,7 @@ void block_ctrl_base::set_arg(const std::string &key, const std::string &val, co
device_addr_t block_ctrl_base::get_args(const size_t port) const
{
device_addr_t args;
- BOOST_FOREACH(const std::string &key, _tree->list(_root_path / "args" / port)) {
+ for(const std::string &key: _tree->list(_root_path / "args" / port)) {
args[key] = get_arg(key);
}
return args;
@@ -496,10 +494,10 @@ std::string block_ctrl_base::get_arg(const std::string &key, const size_t port)
return _tree->access<std::string>(arg_val_path).get();
}
else if (type == "int") {
- return boost::lexical_cast<std::string>(_tree->access<int>(arg_val_path).get());
+ return std::to_string(_tree->access<int>(arg_val_path).get());
}
else if (type == "double") {
- return boost::lexical_cast<std::string>(_tree->access<double>(arg_val_path).get());
+ return std::to_string(_tree->access<double>(arg_val_path).get());
}
else if (type == "int_vector") {
throw uhd::runtime_error("not yet implemented: int_vector");
@@ -535,7 +533,7 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.item_type = port_def["type"];
}
- //UHD_RFNOC_BLOCK_TRACE() << " item type: " << stream_sig.item_type << std::endl;
+ //UHD_RFNOC_BLOCK_TRACE() << " item type: " << stream_sig.item_type ;
// Vector length
if (port_def.is_variable("vlen")) {
@@ -546,7 +544,7 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.vlen = boost::lexical_cast<size_t>(port_def["vlen"]);
}
- //UHD_RFNOC_BLOCK_TRACE() << " vector length: " << stream_sig.vlen << std::endl;
+ //UHD_RFNOC_BLOCK_TRACE() << " vector length: " << stream_sig.vlen ;
// Packet size
if (port_def.is_variable("pkt_size")) {
@@ -568,7 +566,7 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
} else {
stream_sig.packet_size = boost::lexical_cast<size_t>(port_def["pkt_size"]);
}
- //UHD_RFNOC_BLOCK_TRACE() << " packet size: " << stream_sig.vlen << std::endl;
+ //UHD_RFNOC_BLOCK_TRACE() << " packet size: " << stream_sig.vlen ;
return stream_sig;
}
@@ -579,7 +577,7 @@ stream_sig_t block_ctrl_base::_resolve_port_def(const blockdef::port_t &port_def
**********************************************************************/
void block_ctrl_base::_clear(const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::_clear() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "block_ctrl_base::_clear() " ;
sr_write(SR_CLEAR_TX_FC, 0x00C1EA12, port); // 'CLEAR', but we can write anything, really
sr_write(SR_CLEAR_RX_FC, 0x00C1EA12, port); // 'CLEAR', but we can write anything, really
}
diff --git a/host/lib/rfnoc/block_ctrl_base_factory.cpp b/host/lib/rfnoc/block_ctrl_base_factory.cpp
index 0e2d5ae03..9e32b81d7 100644
--- a/host/lib/rfnoc/block_ctrl_base_factory.cpp
+++ b/host/lib/rfnoc/block_ctrl_base_factory.cpp
@@ -16,12 +16,12 @@
//
#include <boost/format.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/blockdef.hpp>
#include <uhd/rfnoc/block_ctrl_base.hpp>
-#define UHD_FACTORY_LOG() UHD_LOGV(never)
+#define UHD_FACTORY_LOG() UHD_LOGGER_TRACE("RFNOC")
using namespace uhd;
using namespace uhd::rfnoc;
@@ -59,7 +59,7 @@ static void lookup_block_key(uint64_t noc_id, make_args_t &make_args)
make_args.block_name = bd->get_name();
return;
} catch (std::exception &e) {
- UHD_MSG(warning) << str(boost::format("Error while looking up name for NoC-ID %016X.\n%s") % noc_id % e.what()) << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << str(boost::format("Error while looking up name for NoC-ID %016X.\n%s") % noc_id % e.what()) ;
}
make_args.block_key = DEFAULT_BLOCK_NAME;
@@ -71,7 +71,7 @@ block_ctrl_base::sptr block_ctrl_base::make(
const make_args_t &make_args_,
uint64_t noc_id
) {
- UHD_FACTORY_LOG() << "[RFNoC Factory] block_ctrl_base::make() " << std::endl;
+ UHD_FACTORY_LOG() << "[RFNoC Factory] block_ctrl_base::make() " ;
make_args_t make_args = make_args_;
// Check if a block key was specified, in this case, we *must* either
@@ -90,7 +90,7 @@ block_ctrl_base::sptr block_ctrl_base::make(
make_args.block_name = make_args.block_key;
}
- UHD_FACTORY_LOG() << "[RFNoC Factory] Using controller key '" << make_args.block_key << "' and block name '" << make_args.block_name << "'" << std::endl;
+ UHD_FACTORY_LOG() << "[RFNoC Factory] Using controller key '" << make_args.block_key << "' and block name '" << make_args.block_name << "'" ;
return get_block_fcn_regs()[make_args.block_key](make_args);
}
diff --git a/host/lib/rfnoc/blockdef_xml_impl.cpp b/host/lib/rfnoc/blockdef_xml_impl.cpp
index 78d1995d1..cf975b3c2 100644
--- a/host/lib/rfnoc/blockdef_xml_impl.cpp
+++ b/host/lib/rfnoc/blockdef_xml_impl.cpp
@@ -18,10 +18,9 @@
#include <uhd/exception.hpp>
#include <uhd/rfnoc/constants.hpp>
#include <uhd/rfnoc/blockdef.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
@@ -57,7 +56,7 @@ blockdef::port_t::port_t()
{
// This guarantees that we can access these keys
// even if they were never initialized:
- BOOST_FOREACH(const std::string &key, PORT_ARGS.keys()) {
+ for(const std::string &key: PORT_ARGS.keys()) {
set(key, PORT_ARGS[key]);
}
}
@@ -77,7 +76,7 @@ bool blockdef::port_t::is_keyword(const std::string &key) const
bool blockdef::port_t::is_valid() const
{
// Check we have all the keys:
- BOOST_FOREACH(const std::string &key, PORT_ARGS.keys()) {
+ for(const std::string &key: PORT_ARGS.keys()) {
if (not has_key(key)) {
return false;
}
@@ -90,7 +89,7 @@ bool blockdef::port_t::is_valid() const
std::string blockdef::port_t::to_string() const
{
std::string result;
- BOOST_FOREACH(const std::string &key, PORT_ARGS.keys()) {
+ for(const std::string &key: PORT_ARGS.keys()) {
if (has_key(key)) {
result += str(boost::format("%s=%s,") % key % get(key));
}
@@ -125,7 +124,7 @@ blockdef::arg_t::arg_t()
{
// This guarantees that we can access these keys
// even if they were never initialized:
- BOOST_FOREACH(const std::string &key, ARG_ARGS.keys()) {
+ for(const std::string &key: ARG_ARGS.keys()) {
set(key, ARG_ARGS[key]);
}
}
@@ -133,7 +132,7 @@ blockdef::arg_t::arg_t()
bool blockdef::arg_t::is_valid() const
{
// 1. Check we have all the keys:
- BOOST_FOREACH(const std::string &key, ARG_ARGS.keys()) {
+ for(const std::string &key: ARG_ARGS.keys()) {
if (not has_key(key)) {
return false;
}
@@ -151,7 +150,7 @@ bool blockdef::arg_t::is_valid() const
std::string blockdef::arg_t::to_string() const
{
std::string result;
- BOOST_FOREACH(const std::string &key, ARG_ARGS.keys()) {
+ for(const std::string &key: ARG_ARGS.keys()) {
if (has_key(key)) {
result += str(boost::format("%s=%s,") % key % get(key));
}
@@ -218,13 +217,13 @@ public:
pt::ptree propt;
try {
read_xml(filename.string(), propt);
- BOOST_FOREACH(pt::ptree::value_type &v, propt.get_child("nocblock.ids")) {
+ for(pt::ptree::value_type &v: propt.get_child("nocblock.ids")) {
if (v.first == "id" and match_noc_id(v.second.data(), noc_id)) {
return true;
}
}
} catch (std::exception &e) {
- UHD_MSG(warning) << "has_noc_id(): caught exception " << e.what() << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << "has_noc_id(): caught exception " << e.what() ;
return false;
}
return false;
@@ -234,7 +233,7 @@ public:
_type(type),
_noc_id(noc_id)
{
- //UHD_MSG(status) << "Reading XML file: " << filename.string().c_str() << std::endl;
+ //UHD_LOGGER_INFO("RFNOC") << "Reading XML file: " << filename.string().c_str() ;
read_xml(filename.string(), _pt);
try {
// Check key is valid
@@ -302,16 +301,16 @@ public:
std::set<size_t> port_numbers;
size_t n_ports = 0;
ports_t ports;
- BOOST_FOREACH(pt::ptree::value_type &v, _pt.get_child("nocblock.ports")) {
+ for(pt::ptree::value_type &v: _pt.get_child("nocblock.ports")) {
if (v.first != port_type) continue;
// Now we have the correct sink or source node:
port_t port;
- BOOST_FOREACH(const std::string &key, port_t::PORT_ARGS.keys()) {
+ for(const std::string &key: port_t::PORT_ARGS.keys()) {
port[key] = v.second.get(key, port_t::PORT_ARGS[key]);
}
// We have to be extra-careful with the port numbers:
if (port["port"].empty()) {
- port["port"] = boost::lexical_cast<std::string>(n_ports);
+ port["port"] = std::to_string(n_ports);
}
size_t new_port_number;
try {
@@ -338,10 +337,10 @@ public:
std::vector<size_t> get_all_port_numbers()
{
std::set<size_t> set_ports;
- BOOST_FOREACH(const port_t &port, get_input_ports()) {
+ for(const port_t &port: get_input_ports()) {
set_ports.insert(boost::lexical_cast<size_t>(port["port"]));
}
- BOOST_FOREACH(const port_t &port, get_output_ports()) {
+ for(const port_t &port: get_output_ports()) {
set_ports.insert(boost::lexical_cast<size_t>(port["port"]));
}
return std::vector<size_t>(set_ports.begin(), set_ports.end());
@@ -353,17 +352,17 @@ public:
args_t args;
bool is_valid = true;
pt::ptree def;
- BOOST_FOREACH(pt::ptree::value_type &v, _pt.get_child("nocblock.args", def)) {
+ for(pt::ptree::value_type &v: _pt.get_child("nocblock.args", def)) {
arg_t arg;
if (v.first != "arg") continue;
- BOOST_FOREACH(const std::string &key, arg_t::ARG_ARGS.keys()) {
+ for(const std::string &key: arg_t::ARG_ARGS.keys()) {
arg[key] = v.second.get(key, arg_t::ARG_ARGS[key]);
}
if (arg["type"].empty()) {
arg["type"] = "string";
}
if (not arg.is_valid()) {
- UHD_MSG(warning) << boost::format("Found invalid argument: %s") % arg.to_string() << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << boost::format("Found invalid argument: %s") % arg.to_string() ;
is_valid = false;
}
args.push_back(arg);
@@ -391,7 +390,7 @@ public:
{
registers_t registers;
pt::ptree def;
- BOOST_FOREACH(pt::ptree::value_type &v, _pt.get_child("nocblock.registers", def)) {
+ for(pt::ptree::value_type &v: _pt.get_child("nocblock.registers", def)) {
if (v.first != reg_type) continue;
registers[v.second.get<std::string>("name")] =
boost::lexical_cast<size_t>(v.second.get<size_t>("address"));
@@ -419,7 +418,7 @@ blockdef::sptr blockdef::make_from_noc_id(uint64_t noc_id)
std::vector<fs::path> valid;
// Check if any of the paths exist
- BOOST_FOREACH(const fs::path &base_path, paths) {
+ for(const fs::path &base_path: paths) {
fs::path this_path = base_path / XML_BLOCKS_SUBDIR;
if (fs::exists(this_path) and fs::is_directory(this_path)) {
valid.push_back(this_path);
@@ -436,7 +435,7 @@ blockdef::sptr blockdef::make_from_noc_id(uint64_t noc_id)
}
// Iterate over all paths
- BOOST_FOREACH(const fs::path &path, valid) {
+ for(const fs::path &path: valid) {
// Iterate over all .xml files
fs::directory_iterator end_itr;
for (fs::directory_iterator i(path); i != end_itr; ++i) {
diff --git a/host/lib/rfnoc/ctrl_iface.cpp b/host/lib/rfnoc/ctrl_iface.cpp
index b2ac1778e..3a16f7ec1 100644
--- a/host/lib/rfnoc/ctrl_iface.cpp
+++ b/host/lib/rfnoc/ctrl_iface.cpp
@@ -16,9 +16,8 @@
//
#include "ctrl_iface.hpp"
-#include "async_packet_handler.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/transport/bounded_buffer.hpp>
@@ -37,7 +36,6 @@ using namespace uhd::transport;
static const double ACK_TIMEOUT = 2.0; //supposed to be worst case practical timeout
static const double MASSIVE_TIMEOUT = 10.0; //for when we wait on a timed command
-static const size_t SR_READBACK = 32;
ctrl_iface::~ctrl_iface(void){
/* NOP */
@@ -60,13 +58,12 @@ public:
_name(name),
_seq_out(0),
_timeout(ACK_TIMEOUT),
- _resp_queue(128/*max response msgs*/),
- _resp_queue_size(_resp_xport ? _resp_xport->get_num_recv_frames() : 3),
+ _resp_queue_size(_resp_xport->get_num_recv_frames()),
_rb_address(uhd::rfnoc::SR_READBACK)
{
- if (resp_xport) {
- while (resp_xport->get_recv_buff(0.0)) {} //flush
- }
+ UHD_ASSERT_THROW(_ctrl_xport);
+ UHD_ASSERT_THROW(_resp_xport);
+ while (resp_xport->get_recv_buff(0.0)) {} //flush
this->set_time(uhd::time_spec_t(0.0));
this->set_tick_rate(1.0); //something possible but bogus
}
@@ -76,7 +73,6 @@ public:
_timeout = ACK_TIMEOUT; //reset timeout to something small
UHD_SAFE_CALL(
this->peek32(0);//dummy peek with the purpose of ack'ing all packets
- _async_task.reset();//now its ok to release the task
)
}
@@ -172,7 +168,7 @@ private:
//load payload
pkt[packet_info.num_header_words32+0] = (_bige)? uhd::htonx(addr) : uhd::htowx(addr);
pkt[packet_info.num_header_words32+1] = (_bige)? uhd::htonx(data) : uhd::htowx(data);
- //UHD_MSG(status) << boost::format("0x%08x, 0x%08x\n") % addr % data;
+ //UHD_LOGGER_INFO("RFNOC") << boost::format("0x%08x, 0x%08x\n") % addr % data;
//send the buffer over the interface
_outstanding_seqs.push(_seq_out);
buff->commit(sizeof(uint32_t)*(packet_info.num_packet_words32));
@@ -196,50 +192,16 @@ private:
uint32_t const *pkt = NULL;
managed_recv_buffer::sptr buff;
- //get buffer from response endpoint - or die in timeout
- if (_resp_xport)
- {
- buff = _resp_xport->get_recv_buff(_timeout);
- try
- {
- UHD_ASSERT_THROW(bool(buff));
- UHD_ASSERT_THROW(buff->size() > 0);
- }
- catch(const std::exception &ex)
- {
- throw uhd::io_error(str(boost::format("Block ctrl (%s) no response packet - %s") % _name % ex.what()));
- }
- pkt = buff->cast<const uint32_t *>();
- packet_info.num_packet_words32 = buff->size()/sizeof(uint32_t);
+ buff = _resp_xport->get_recv_buff(_timeout);
+ try {
+ UHD_ASSERT_THROW(bool(buff));
+ UHD_ASSERT_THROW(buff->size() > 0);
}
-
- //get buffer from response endpoint - or die in timeout
- else
- {
- /*
- * Couldn't get message with haste.
- * Now check both possible queues for messages.
- * Messages should come in on _resp_queue,
- * but could end up in dump_queue.
- * If we don't get a message --> Die in timeout.
- */
- double accum_timeout = 0.0;
- const double short_timeout = 0.005; // == 5ms
- while(not ((_resp_queue.pop_with_haste(resp_buff))
- || (check_dump_queue(resp_buff))
- || (_resp_queue.pop_with_timed_wait(resp_buff, short_timeout))
- )){
- /*
- * If a message couldn't be received within a given timeout
- * --> throw AssertionError!
- */
- accum_timeout += short_timeout;
- UHD_ASSERT_THROW(accum_timeout < _timeout);
- }
-
- pkt = resp_buff.data;
- packet_info.num_packet_words32 = sizeof(resp_buff)/sizeof(uint32_t);
+ catch(const std::exception &ex) {
+ throw uhd::io_error(str(boost::format("Block ctrl (%s) no response packet - %s") % _name % ex.what()));
}
+ pkt = buff->cast<const uint32_t *>();
+ packet_info.num_packet_words32 = buff->size()/sizeof(uint32_t);
//parse the buffer
try
@@ -250,15 +212,15 @@ private:
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "[" << _name << "] Block ctrl bad VITA packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("RFNOC") << "[" << _name << "] Block ctrl bad VITA packet: " << ex.what() ;
if (buff){
- UHD_MSG(status) << boost::format("%08X") % pkt[0] << std::endl;
- UHD_MSG(status) << boost::format("%08X") % pkt[1] << std::endl;
- UHD_MSG(status) << boost::format("%08X") % pkt[2] << std::endl;
- UHD_MSG(status) << boost::format("%08X") % pkt[3] << std::endl;
+ UHD_LOGGER_INFO("RFNOC") << boost::format("%08X") % pkt[0] ;
+ UHD_LOGGER_INFO("RFNOC") << boost::format("%08X") % pkt[1] ;
+ UHD_LOGGER_INFO("RFNOC") << boost::format("%08X") % pkt[2] ;
+ UHD_LOGGER_INFO("RFNOC") << boost::format("%08X") % pkt[3] ;
}
else{
- UHD_MSG(status) << "buff is NULL" << std::endl;
+ UHD_LOGGER_INFO("RFNOC") << "buff is NULL" ;
}
}
@@ -306,48 +268,11 @@ private:
return 0;
}
- /*
- * If ctrl_core waits for a message that didn't arrive it can search for it in the dump queue.
- * This actually happens during shutdown.
- * handle_async_task can't access queue anymore thus it returns the corresponding message.
- * msg_task class implements a dump_queue to store such messages.
- * With check_dump_queue we can check if a message we are waiting for got stranded there.
- * If a message got stuck we get it here and push it onto our own message_queue.
- */
- bool check_dump_queue(resp_buff_type& b) {
- const size_t min_buff_size = 8; // Same value as in b200_io_impl->handle_async_task
- uint32_t recv_sid = (((_sid)<<16)|((_sid)>>16));
- uhd::msg_task::msg_payload_t msg;
- do{
- msg = _async_task->get_msg_from_dump_queue(recv_sid);
- }
- while(msg.size() < min_buff_size && msg.size() != 0);
-
- if(msg.size() >= min_buff_size) {
- memcpy(b.data, &msg.front(), std::min(msg.size(), sizeof(b.data)));
- return true;
- }
- return false;
- }
-
- void push_response(const uint32_t *buff)
- {
- resp_buff_type resp_buff;
- std::memcpy(resp_buff.data, buff, sizeof(resp_buff));
- _resp_queue.push_with_haste(resp_buff);
- }
-
- void hold_task(uhd::msg_task::sptr task)
- {
- _async_task = task;
- }
-
const vrt::if_packet_info_t::link_type_t _link_type;
const vrt::if_packet_info_t::packet_type_t _packet_type;
const bool _bige;
const uhd::transport::zero_copy_if::sptr _ctrl_xport;
const uhd::transport::zero_copy_if::sptr _resp_xport;
- uhd::msg_task::sptr _async_task;
const uint32_t _sid;
const std::string _name;
boost::mutex _mutex;
@@ -357,7 +282,6 @@ private:
double _tick_rate;
double _timeout;
std::queue<size_t> _outstanding_seqs;
- bounded_buffer<resp_buff_type> _resp_queue;
const size_t _resp_queue_size;
const size_t _rb_address;
diff --git a/host/lib/rfnoc/ctrl_iface.hpp b/host/lib/rfnoc/ctrl_iface.hpp
index 3690874f9..5e88c3dd6 100644
--- a/host/lib/rfnoc/ctrl_iface.hpp
+++ b/host/lib/rfnoc/ctrl_iface.hpp
@@ -47,18 +47,6 @@ public:
const std::string &name = "0"
);
- //! Hold a ref to a task thats feeding push response
- virtual void hold_task(uhd::msg_task::sptr task) = 0;
-
- //! Push a response externall (resp_xport is NULL)
- virtual void push_response(const uint32_t *buff) = 0;
-
- //! Set the command time that will activate
- virtual void set_time(const uhd::time_spec_t &time) = 0;
-
- //! Get the command time that will activate
- virtual uhd::time_spec_t get_time(void) = 0;
-
//! Set the tick rate (converting time into ticks)
virtual void set_tick_rate(const double rate) = 0;
};
diff --git a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
index 8c8b07afd..b0b510cde 100644
--- a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
@@ -17,7 +17,7 @@
#include "dsp_core_utils.hpp"
#include <uhd/rfnoc/ddc_block_ctrl.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/convert.hpp>
#include <uhd/types/ranges.hpp>
#include <boost/math/special_functions/round.hpp>
@@ -150,10 +150,10 @@ public:
const uhd::stream_cmd_t &stream_cmd_,
const size_t chan
) {
- UHD_RFNOC_BLOCK_TRACE() << "ddc_block_ctrl_base::issue_stream_cmd()" << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "ddc_block_ctrl_base::issue_stream_cmd()" ;
if (list_upstream_nodes().count(chan) == 0) {
- UHD_MSG(status) << "No upstream blocks." << std::endl;
+ UHD_LOGGER_INFO("RFNOC") << "No upstream blocks." ;
return;
}
@@ -241,7 +241,7 @@ private:
sr_write("M", 1, chan);
if (decim > 1 and hb_enable == 0) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("RFNOC") << boost::format(
"The requested decimation is odd; the user should expect passband CIC rolloff.\n"
"Select an even decimation to ensure that a halfband filter is enabled.\n"
"Decimations factorable by 4 will enable 2 halfbands, those factorable by 8 will enable 3 halfbands.\n"
diff --git a/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp b/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
index aea7c591c..93f599314 100644
--- a/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/dma_fifo_block_ctrl_impl.cpp
@@ -19,7 +19,7 @@
#include "dma_fifo_core_3000.hpp"
#include "wb_iface_adapter.hpp"
#include <uhd/convert.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/wb_iface.hpp>
#include <boost/make_shared.hpp>
#include <boost/thread/mutex.hpp>
@@ -64,18 +64,18 @@ public:
_perifs[i].depth = DEFAULT_SIZE;
_perifs[i].core = dma_fifo_core_3000::make(_perifs[i].ctrl, USER_SR_BASE, USER_RB_BASE);
_perifs[i].core->resize(_perifs[i].base_addr, _perifs[i].depth);
- UHD_MSG(status) << boost::format("[DMA FIFO] Running BIST for FIFO %d... ") % i;
+ UHD_LOGGER_INFO("RFNOC") << boost::format("[DMA FIFO] Running BIST for FIFO %d... ") % i;
if (_perifs[i].core->ext_bist_supported()) {
uint32_t bisterr = _perifs[i].core->run_bist();
if (bisterr != 0) {
throw uhd::runtime_error(str(boost::format("BIST failed! (code: %d)\n") % bisterr));
} else {
double throughput = _perifs[i].core->get_bist_throughput(BUS_CLK_RATE);
- UHD_MSG(status) << (boost::format("pass (Throughput: %.1fMB/s)") % (throughput/1e6)) << std::endl;
+ UHD_LOGGER_INFO("RFNOC") << (boost::format("pass (Throughput: %.1fMB/s)") % (throughput/1e6)) ;
}
} else {
if (_perifs[i].core->run_bist() == 0) {
- UHD_MSG(status) << "pass\n";
+ UHD_LOGGER_INFO("RFNOC") << "pass\n";
} else {
throw uhd::runtime_error("BIST failed!\n");
}
diff --git a/host/lib/rfnoc/duc_block_ctrl_impl.cpp b/host/lib/rfnoc/duc_block_ctrl_impl.cpp
index d755bf519..d0742a6d0 100644
--- a/host/lib/rfnoc/duc_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/duc_block_ctrl_impl.cpp
@@ -17,7 +17,7 @@
#include "dsp_core_utils.hpp"
#include <uhd/rfnoc/duc_block_ctrl.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/convert.hpp>
#include <uhd/types/ranges.hpp>
#include <boost/math/special_functions/round.hpp>
@@ -141,7 +141,7 @@ public:
const uhd::stream_cmd_t &stream_cmd_,
const size_t chan
) {
- UHD_RFNOC_BLOCK_TRACE() << "duc_block_ctrl_base::issue_stream_cmd()" << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "duc_block_ctrl_base::issue_stream_cmd()" ;
uhd::stream_cmd_t stream_cmd = stream_cmd_;
if (stream_cmd.stream_mode == uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE or
@@ -150,7 +150,7 @@ public:
stream_cmd.num_samps *= interpolation;
}
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t upstream_node, list_upstream_nodes()) {
+ for(const node_ctrl_base::node_map_pair_t upstream_node: list_upstream_nodes()) {
source_node_ctrl::sptr this_upstream_block_ctrl =
boost::dynamic_pointer_cast<source_node_ctrl>(upstream_node.second.lock());
this_upstream_block_ctrl->issue_stream_cmd(stream_cmd, chan);
@@ -226,7 +226,7 @@ private:
sr_write("M", std::pow(2.0, double(hb_enable)) * (interp & 0xff), chan);
if (interp > 1 and hb_enable == 0) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("RFNOC") << boost::format(
"The requested interpolation is odd; the user should expect passband CIC rolloff.\n"
"Select an even interpolation to ensure that a halfband filter is enabled.\n"
"interpolation = dsp_rate/samp_rate -> %d = (%f MHz)/(%f MHz)\n"
diff --git a/host/lib/rfnoc/graph_impl.cpp b/host/lib/rfnoc/graph_impl.cpp
index 64c6f6abe..31f34580b 100644
--- a/host/lib/rfnoc/graph_impl.cpp
+++ b/host/lib/rfnoc/graph_impl.cpp
@@ -18,7 +18,7 @@
#include "graph_impl.hpp"
#include <uhd/rfnoc/source_block_ctrl_base.hpp>
#include <uhd/rfnoc/sink_block_ctrl_base.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
using namespace uhd::rfnoc;
@@ -32,7 +32,7 @@ graph_impl::graph_impl(
) : _name(name)
, _device_ptr(device_ptr)
{
-
+ UHD_LOG_TRACE("RFNOC", "Instantiating RFNoC graph " << _name);
}
@@ -51,8 +51,15 @@ void graph_impl::connect(
throw uhd::runtime_error("Invalid device");
}
- uhd::rfnoc::source_block_ctrl_base::sptr src = device_ptr->get_block_ctrl<rfnoc::source_block_ctrl_base>(src_block);
- uhd::rfnoc::sink_block_ctrl_base::sptr dst = device_ptr->get_block_ctrl<rfnoc::sink_block_ctrl_base>(dst_block);
+ uhd::rfnoc::source_block_ctrl_base::sptr src =
+ device_ptr->get_block_ctrl<rfnoc::source_block_ctrl_base>(src_block);
+ uhd::rfnoc::sink_block_ctrl_base::sptr dst =
+ device_ptr->get_block_ctrl<rfnoc::sink_block_ctrl_base>(dst_block);
+ UHD_LOGGER_TRACE("RFNOC")
+ << "[" << _name << "] Attempting to connect "
+ << src_block << ":" << src_block_port << " --> "
+ << dst_block << ":" << dst_block_port
+ ;
/********************************************************************
* 1. Draw the edges (logically connect the nodes)
@@ -85,10 +92,11 @@ void graph_impl::connect(
dst->set_upstream_port(actual_dst_block_port, actual_src_block_port);
// At this point, ports are locked and no one else can simply connect
// into them.
- //UHD_MSG(status)
- //<< "[" << _name << "] Connecting "
- //<< src_block << ":" << actual_src_block_port << " --> "
- //<< dst_block << ":" << actual_dst_block_port << std::endl;
+ UHD_LOGGER_TRACE("RFNOC")
+ << "[" << _name << "] Connecting "
+ << src_block << ":" << actual_src_block_port << " --> "
+ << dst_block << ":" << actual_dst_block_port
+ ;
/********************************************************************
* 2. Check IO signatures match
@@ -104,6 +112,7 @@ void graph_impl::connect(
% dst->get_input_signature(actual_dst_block_port)
));
}
+ UHD_LOG_TRACE("RFNOC", "IO signatures match.");
/********************************************************************
* 3. Configure the source block's destination
@@ -120,7 +129,8 @@ void graph_impl::connect(
********************************************************************/
size_t pkt_size = (pkt_size_ != 0) ? pkt_size_ : src->get_output_signature(src_block_port).packet_size;
if (pkt_size == 0) { // Unspecified packet rate. Assume max packet size.
- UHD_MSG(status) << "Assuming max packet size for " << src->get_block_id() << std::endl;
+ UHD_LOGGER_INFO("RFNOC")
+ << "Assuming max packet size for " << src->get_block_id();
pkt_size = uhd::rfnoc::MAX_PACKET_SIZE;
}
// FC window (in packets) depends on FIFO size... ...and packet size.
diff --git a/host/lib/rfnoc/legacy_compat.cpp b/host/lib/rfnoc/legacy_compat.cpp
index bf653a89a..7b80bf175 100644
--- a/host/lib/rfnoc/legacy_compat.cpp
+++ b/host/lib/rfnoc/legacy_compat.cpp
@@ -26,14 +26,14 @@
#include <uhd/types/stream_cmd.hpp>
#include <uhd/types/direction.hpp>
#include <uhd/types/ranges.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/transport/chdr.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <boost/make_shared.hpp>
#include <boost/assign.hpp>
-#define UHD_LEGACY_LOG() UHD_LOGV(never)
+#define UHD_LEGACY_LOG() UHD_LOGGER_TRACE("RFNOC")
using namespace uhd::rfnoc;
using uhd::usrp::subdev_spec_t;
@@ -97,16 +97,6 @@ size_t calc_num_tx_chans_per_radio(
);
}
-double lambda_const_double(const double d)
-{
- return d;
-}
-
-uhd::meta_range_t lambda_const_meta_range(const double start, const double stop, const double step)
-{
- return uhd::meta_range_t(start, stop, step);
-}
-
/*! Recreate passed property without bound subscribers. Maintains current property value.
*/
template <typename T>
@@ -115,6 +105,7 @@ static void recreate_property(const uhd::fs_path &path, uhd::property_tree::sptr
tree->remove(path);
tree->create<T>(path).set(temp);
}
+
/************************************************************************
* Class Definition
***********************************************************************/
@@ -154,16 +145,16 @@ public:
}
connect_blocks();
if (args.has_key("skip_ddc")) {
- UHD_LEGACY_LOG() << "[legacy_compat] Skipping DDCs by user request." << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] Skipping DDCs by user request." ;
} else if (not _has_ddcs) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("RFNOC")
<< "[legacy_compat] No DDCs detected. You will only be able to receive at the radio frontend rate."
- << std::endl;
+ ;
}
if (args.has_key("skip_duc")) {
- UHD_LEGACY_LOG() << "[legacy_compat] Skipping DUCs by user request." << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] Skipping DUCs by user request." ;
} else if (not _has_ducs) {
- UHD_MSG(warning) << "[legacy_compat] No DUCs detected. You will only be able to transmit at the radio frontend rate." << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << "[legacy_compat] No DUCs detected. You will only be able to transmit at the radio frontend rate." ;
}
if (args.has_key("skip_dram")) {
UHD_LEGACY_LOG() << "[legacy_compat] Skipping DRAM by user request." << std::endl;
@@ -172,7 +163,7 @@ public:
UHD_LEGACY_LOG() << "[legacy_compat] Skipping SRAM by user request." << std::endl;
}
if (not _has_dmafifo and not _has_sramfifo) {
- UHD_MSG(warning) << "[legacy_compat] No FIFO detected. Higher transmit rates may encounter errors." << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << "[legacy_compat] No FIFO detected. Higher transmit rates may encounter errors.";
}
for (size_t mboard = 0; mboard < _num_mboards; mboard++) {
@@ -256,7 +247,7 @@ public:
void issue_stream_cmd(const stream_cmd_t &stream_cmd, size_t mboard, size_t chan)
{
- UHD_LEGACY_LOG() << "[legacy_compat] issue_stream_cmd() " << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] issue_stream_cmd() " ;
const size_t &radio_index = _rx_channel_map[mboard][chan].radio_index;
const size_t &port_index = _rx_channel_map[mboard][chan].port_index;
if (_has_ddcs) {
@@ -274,9 +265,9 @@ public:
args.otw_format = "sc16";
}
_update_stream_args_for_streaming<uhd::RX_DIRECTION>(args, _rx_channel_map);
- UHD_LEGACY_LOG() << "[legacy_compat] rx stream args: " << args.args.to_string() << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] rx stream args: " << args.args.to_string() ;
uhd::rx_streamer::sptr streamer = _device->get_rx_stream(args);
- BOOST_FOREACH(const size_t chan, args.channels) {
+ for(const size_t chan: args.channels) {
_rx_stream_cache[chan] = streamer;
}
return streamer;
@@ -291,9 +282,9 @@ public:
args.otw_format = "sc16";
}
_update_stream_args_for_streaming<uhd::TX_DIRECTION>(args, _tx_channel_map);
- UHD_LEGACY_LOG() << "[legacy_compat] tx stream args: " << args.args.to_string() << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] tx stream args: " << args.args.to_string() ;
uhd::tx_streamer::sptr streamer = _device->get_tx_stream(args);
- BOOST_FOREACH(const size_t chan, args.channels) {
+ for(const size_t chan: args.channels) {
_tx_stream_cache[chan] = streamer;
}
return streamer;
@@ -347,14 +338,14 @@ public:
if (_rx_stream_cache.count(chan)) {
uhd::rx_streamer::sptr str_ptr = _rx_stream_cache[chan].lock();
if (str_ptr) {
- BOOST_FOREACH(const rx_stream_map_type::value_type &chan_streamer_pair, _rx_stream_cache) {
+ for(const rx_stream_map_type::value_type &chan_streamer_pair: _rx_stream_cache) {
if (chan_streamer_pair.second.lock() == str_ptr) {
chans_to_change.insert(chan_streamer_pair.first);
}
}
}
}
- BOOST_FOREACH(const size_t this_chan, chans_to_change) {
+ for(const size_t this_chan: chans_to_change) {
size_t mboard, mb_chan;
chan_to_mcp<uhd::RX_DIRECTION>(this_chan, _rx_channel_map, mboard, mb_chan);
const size_t dsp_index = _rx_channel_map[mboard][mb_chan].radio_index;
@@ -390,14 +381,14 @@ public:
if (_tx_stream_cache.count(chan)) {
uhd::tx_streamer::sptr str_ptr = _tx_stream_cache[chan].lock();
if (str_ptr) {
- BOOST_FOREACH(const tx_stream_map_type::value_type &chan_streamer_pair, _tx_stream_cache) {
+ for(const tx_stream_map_type::value_type &chan_streamer_pair: _tx_stream_cache) {
if (chan_streamer_pair.second.lock() == str_ptr) {
chans_to_change.insert(chan_streamer_pair.first);
}
}
}
}
- BOOST_FOREACH(const size_t this_chan, chans_to_change) {
+ for(const size_t this_chan: chans_to_change) {
size_t mboard, mb_chan;
chan_to_mcp<uhd::TX_DIRECTION>(this_chan, _tx_channel_map, mboard, mb_chan);
const size_t dsp_index = _tx_channel_map[mboard][mb_chan].radio_index;
@@ -529,7 +520,10 @@ private: // methods
) {
if (dir == uhd::TX_DIRECTION) {
if (_has_sramfifo) {
- return block_id_t(mboard_idx, SFIFO_BLOCK_NAME, radio_index).to_string();
+ const size_t sfifo_idx =
+ radio_index * _num_tx_chans_per_radio + port_index;
+ port_index = 0;
+ return block_id_t(mboard_idx, SFIFO_BLOCK_NAME, sfifo_idx).to_string();
} else if (_has_dmafifo) {
port_index = radio_index;
return block_id_t(mboard_idx, DFIFO_BLOCK_NAME, 0).to_string();
@@ -590,7 +584,7 @@ private: // methods
const size_t this_spp = get_block_ctrl<radio_ctrl>(i, RADIO_BLOCK_NAME, k)->get_arg<int>("spp");
if (this_spp != _rx_spp) {
- UHD_LOG << str(
+ UHD_LOGGER_WARNING("RFNOC") << str(
boost::format("[legacy compat] Radios have differing spp values: %s has %d, others have %d. UHD will use smaller spp value for all connections. Performance might be not optimal.")
% radio_block_id.to_string() % this_spp % _rx_spp
);
@@ -653,10 +647,10 @@ private: // methods
)
;
_tree->create<double>(rx_dsp_base_path / "freq/value")
- .set_publisher(boost::bind(&lambda_const_double, 0.0))
+ .set_publisher([](){ return 0.0; })
;
_tree->create<uhd::meta_range_t>(rx_dsp_base_path / "freq/range")
- .set_publisher(boost::bind(&lambda_const_meta_range, 0.0, 0.0, 0.0))
+ .set_publisher([](){ return uhd::meta_range_t(0.0, 0.0, 0.0); })
;
}
}
@@ -686,10 +680,10 @@ private: // methods
)
;
_tree->create<double>(tx_dsp_base_path / "freq/value")
- .set_publisher(boost::bind(&lambda_const_double, 0.0))
+ .set_publisher([](){ return 0.0; })
;
_tree->create<uhd::meta_range_t>(tx_dsp_base_path / "freq/range")
- .set_publisher(boost::bind(&lambda_const_meta_range, 0.0, 0.0, 0.0))
+ .set_publisher([](){ return uhd::meta_range_t(0.0, 0.0, 0.0); })
;
}
}
@@ -747,8 +741,11 @@ private: // methods
// Prioritize SRAM over DRAM for performance
if (_has_sramfifo) {
// We have SRAM FIFO *and* DUCs
+ // SRAM FIFOs have only 1 channel per block
+ const size_t sfifo_idx =
+ _num_tx_chans_per_radio * radio + chan;
_graph->connect(
- block_id_t(mboard, SFIFO_BLOCK_NAME, radio), chan,
+ block_id_t(mboard, SFIFO_BLOCK_NAME, sfifo_idx), chan,
block_id_t(mboard, DUC_BLOCK_NAME, radio), chan,
tx_bpp
);
@@ -762,8 +759,11 @@ private: // methods
}
} else if (_has_sramfifo) {
// We have SRAM FIFO, *no* DUCs
+ // SRAM FIFOs have only 1 channel per block
+ const size_t sfifo_idx =
+ _num_tx_chans_per_radio * radio + chan;
_graph->connect(
- block_id_t(mboard, SFIFO_BLOCK_NAME, radio), radio,
+ block_id_t(mboard, SFIFO_BLOCK_NAME, sfifo_idx), 0,
block_id_t(mboard, RADIO_BLOCK_NAME, radio), chan,
tx_bpp
);
@@ -898,7 +898,7 @@ legacy_compat::sptr legacy_compat::make(
if (legacy_cache.count(device.get()) and not legacy_cache.at(device.get()).expired()) {
legacy_compat::sptr legacy_compat_copy = legacy_cache.at(device.get()).lock();
UHD_ASSERT_THROW(bool(legacy_compat_copy));
- UHD_LEGACY_LOG() << "[legacy_compat] Using existing legacy compat object for this device." << std::endl;
+ UHD_LEGACY_LOG() << "[legacy_compat] Using existing legacy compat object for this device." ;
return legacy_compat_copy;
}
diff --git a/host/lib/rfnoc/nocscript/block_iface.cpp b/host/lib/rfnoc/nocscript/block_iface.cpp
index 0d301e5bc..544593def 100644
--- a/host/lib/rfnoc/nocscript/block_iface.cpp
+++ b/host/lib/rfnoc/nocscript/block_iface.cpp
@@ -18,12 +18,12 @@
#include "block_iface.hpp"
#include "function_table.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/assign.hpp>
#include <boost/bind.hpp>
#include <boost/format.hpp>
-#define UHD_NOCSCRIPT_LOG() UHD_LOGV(never)
+#define UHD_NOCSCRIPT_LOG() UHD_LOGGER_TRACE("RFNOC")
using namespace uhd::rfnoc;
using namespace uhd::rfnoc::nocscript;
@@ -116,7 +116,7 @@ void block_iface::run_and_check(const std::string &code, const std::string &erro
{
boost::mutex::scoped_lock local_interpreter_lock(_lil_mutex);
- UHD_NOCSCRIPT_LOG() << "[NocScript] Executing and asserting code: " << code << std::endl;
+ UHD_NOCSCRIPT_LOG() << "[NocScript] Executing and asserting code: " << code ;
expression::sptr e = _parser->create_expr_tree(code);
expression_literal result = e->eval();
if (not result.to_bool()) {
@@ -143,12 +143,12 @@ expression_literal block_iface::_nocscript__sr_write(expression_container::expr_
const uint32_t reg_val = uint32_t(args[1]->eval().get_int());
bool result = true;
try {
- UHD_NOCSCRIPT_LOG() << "[NocScript] Executing SR_WRITE() " << std::endl;
+ UHD_NOCSCRIPT_LOG() << "[NocScript] Executing SR_WRITE() " ;
_block_ptr->sr_write(reg_name, reg_val);
} catch (const uhd::exception &e) {
- UHD_MSG(error) << boost::format("[NocScript] Error while executing SR_WRITE(%s, 0x%X):\n%s")
+ UHD_LOGGER_ERROR("RFNOC") << boost::format("[NocScript] Error while executing SR_WRITE(%s, 0x%X):\n%s")
% reg_name % reg_val % e.what()
- << std::endl;
+ ;
result = false;
}
@@ -195,7 +195,7 @@ expression_literal block_iface::_nocscript__arg_set_int(const expression_contain
if (args.size() == 3) {
port = size_t(args[2]->eval().get_int());
}
- UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name << std::endl;
+ UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name ;
_block_ptr->set_arg<int>(var_name, val, port);
return expression_literal(true);
}
@@ -208,7 +208,7 @@ expression_literal block_iface::_nocscript__arg_set_string(const expression_cont
if (args.size() == 3) {
port = size_t(args[2]->eval().get_int());
}
- UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name << std::endl;
+ UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name ;
_block_ptr->set_arg<std::string>(var_name, val, port);
return expression_literal(true);
}
@@ -221,7 +221,7 @@ expression_literal block_iface::_nocscript__arg_set_double(const expression_cont
if (args.size() == 3) {
port = size_t(args[2]->eval().get_int());
}
- UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name << std::endl;
+ UHD_NOCSCRIPT_LOG() << "[NocScript] Setting $" << var_name ;
_block_ptr->set_arg<double>(var_name, val, port);
return expression_literal(true);
}
@@ -239,8 +239,8 @@ block_iface::sptr block_iface::make(uhd::rfnoc::block_ctrl_base* block_ptr)
expression_literal block_iface::_nocscript__var_get(const expression_container::expr_list_type &args)
{
expression_literal expr = _vars[args[0]->eval().get_string()];
- //std::cout << "[NocScript] Getting var " << args[0]->eval().get_string() << " == " << expr << std::endl;
- //std::cout << "[NocScript] Type " << expr.infer_type() << std::endl;
+ //std::cout << "[NocScript] Getting var " << args[0]->eval().get_string() << " == " << expr ;
+ //std::cout << "[NocScript] Type " << expr.infer_type() ;
//return _vars[args[0]->eval().get_string()];
return expr;
}
@@ -248,8 +248,8 @@ expression_literal block_iface::_nocscript__var_get(const expression_container::
expression_literal block_iface::_nocscript__var_set(const expression_container::expr_list_type &args)
{
_vars[args[0]->eval().get_string()] = args[1]->eval();
- //std::cout << "[NocScript] Set var " << args[0]->eval().get_string() << " to " << _vars[args[0]->eval().get_string()] << std::endl;
- //std::cout << "[NocScript] Type " << _vars[args[0]->eval().get_string()].infer_type() << std::endl;
+ //std::cout << "[NocScript] Set var " << args[0]->eval().get_string() << " to " << _vars[args[0]->eval().get_string()] ;
+ //std::cout << "[NocScript] Type " << _vars[args[0]->eval().get_string()].infer_type() ;
return expression_literal(true);
}
diff --git a/host/lib/rfnoc/nocscript/expression.cpp b/host/lib/rfnoc/nocscript/expression.cpp
index 38d6e2128..4f7d98108 100644
--- a/host/lib/rfnoc/nocscript/expression.cpp
+++ b/host/lib/rfnoc/nocscript/expression.cpp
@@ -18,7 +18,6 @@
#include "expression.hpp"
#include "function_table.hpp"
#include <uhd/utils/cast.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/assign.hpp>
#include <boost/algorithm/string.hpp>
@@ -55,12 +54,12 @@ expression_literal::expression_literal(
if (_val.substr(0, 2) == "0x") {
_int_val = uhd::cast::hexstr_cast<int>(_val);
} else {
- _int_val = boost::lexical_cast<int>(_val);
+ _int_val = std::stoi(_val);
}
break;
case expression::TYPE_DOUBLE:
- _double_val = boost::lexical_cast<double>(_val);
+ _double_val = std::stod(_val);
break;
case expression::TYPE_BOOL:
@@ -68,7 +67,7 @@ expression_literal::expression_literal(
_bool_val = true;
} else {
// lexical cast to bool is too picky
- _bool_val = bool(boost::lexical_cast<int>(_val));
+ _bool_val = bool(std::stoi(_val));
}
break;
@@ -77,8 +76,8 @@ expression_literal::expression_literal(
std::string str_vec = _val.substr(1, _val.size()-2);
std::vector<std::string> subtoken_list;
boost::split(subtoken_list, str_vec, boost::is_any_of(", "), boost::token_compress_on);
- BOOST_FOREACH(const std::string &t, subtoken_list) {
- _int_vector_val.push_back(boost::lexical_cast<int>(t));
+ for(const std::string &t: subtoken_list) {
+ _int_vector_val.push_back(std::stoi(t));
}
break;
}
@@ -143,11 +142,11 @@ bool expression_literal::to_bool() const
{
switch (_type) {
case TYPE_INT:
- return bool(boost::lexical_cast<int>(_val));
+ return bool(std::stoi(_val));
case TYPE_STRING:
return not _val.empty();
case TYPE_DOUBLE:
- return bool(boost::lexical_cast<double>(_val));
+ return bool(std::stod(_val));
case TYPE_BOOL:
return _bool_val;
case TYPE_INT_VECTOR:
@@ -206,11 +205,11 @@ std::string expression_literal::repr() const
{
switch (_type) {
case TYPE_INT:
- return boost::lexical_cast<std::string>(_int_val);
+ return std::to_string(_int_val);
case TYPE_STRING:
return _val;
case TYPE_DOUBLE:
- return boost::lexical_cast<std::string>(_double_val);
+ return std::to_string(_double_val);
case TYPE_BOOL:
return _bool_val ? "TRUE" : "FALSE";
case TYPE_INT_VECTOR:
@@ -299,7 +298,7 @@ expression_literal expression_container::eval()
}
expression_literal ret_val;
- BOOST_FOREACH(const expression::sptr &sub_expr, _sub_exprs) {
+ for(const expression::sptr &sub_expr: _sub_exprs) {
ret_val = sub_expr->eval();
if (_combiner == COMBINE_AND and ret_val.to_bool() == false) {
return ret_val;
@@ -319,7 +318,7 @@ std::string expression_function::to_string(const std::string &name, const argtyp
{
std::string s = name;
int arg_count = 0;
- BOOST_FOREACH(const expression::type_t type, types) {
+ for(const expression::type_t type: types) {
if (arg_count == 0) {
s += "(";
} else {
diff --git a/host/lib/rfnoc/nocscript/expression.hpp b/host/lib/rfnoc/nocscript/expression.hpp
index 1acd02009..6cf649a59 100644
--- a/host/lib/rfnoc/nocscript/expression.hpp
+++ b/host/lib/rfnoc/nocscript/expression.hpp
@@ -17,7 +17,6 @@
#include <uhd/exception.hpp>
#include <boost/shared_ptr.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/function.hpp>
#include <boost/make_shared.hpp>
#include <vector>
@@ -300,7 +299,7 @@ class expression_function : public expression_container
const std::string &name,
const boost::shared_ptr<function_table> func_table
);
- ~expression_function(){};
+ ~expression_function(){}
//! Add an argument expression
virtual void add(expression::sptr new_expr);
diff --git a/host/lib/rfnoc/nocscript/function_table.cpp b/host/lib/rfnoc/nocscript/function_table.cpp
index a4e36c1a1..aabaef635 100644
--- a/host/lib/rfnoc/nocscript/function_table.cpp
+++ b/host/lib/rfnoc/nocscript/function_table.cpp
@@ -18,7 +18,6 @@
#include "function_table.hpp"
#include "basic_functions.hpp"
#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <map>
diff --git a/host/lib/rfnoc/node_ctrl_base.cpp b/host/lib/rfnoc/node_ctrl_base.cpp
index b4d0a30ff..e9424d319 100644
--- a/host/lib/rfnoc/node_ctrl_base.cpp
+++ b/host/lib/rfnoc/node_ctrl_base.cpp
@@ -16,7 +16,7 @@
//
#include <uhd/rfnoc/node_ctrl_base.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/range/adaptor/map.hpp>
using namespace uhd::rfnoc;
@@ -30,7 +30,7 @@ std::string node_ctrl_base::unique_id() const
void node_ctrl_base::clear()
{
- UHD_RFNOC_BLOCK_TRACE() << "node_ctrl_base::clear() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "node_ctrl_base::clear() " ;
// Reset connections:
_upstream_nodes.clear();
_downstream_nodes.clear();
diff --git a/host/lib/rfnoc/radio_ctrl_impl.cpp b/host/lib/rfnoc/radio_ctrl_impl.cpp
index c43d39f71..85ad6ed92 100644
--- a/host/lib/rfnoc/radio_ctrl_impl.cpp
+++ b/host/lib/rfnoc/radio_ctrl_impl.cpp
@@ -16,11 +16,10 @@
//
#include "wb_iface_adapter.hpp"
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/bind.hpp>
#include <uhd/convert.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/ranges.hpp>
#include <uhd/types/direction.hpp>
#include "radio_ctrl_impl.hpp"
@@ -30,6 +29,7 @@ using namespace uhd;
using namespace uhd::rfnoc;
static const size_t BYTES_PER_SAMPLE = 4;
+const std::string radio_ctrl::ALL_LOS = "all";
/****************************************************************************
* Structors and init
@@ -137,7 +137,6 @@ radio_ctrl_impl::radio_ctrl_impl() :
void radio_ctrl_impl::_register_loopback_self_test(size_t chan)
{
- UHD_MSG(status) << "[RFNoC Radio] Performing register loopback test... " << std::flush;
size_t hash = size_t(time(NULL));
for (size_t i = 0; i < 100; i++)
{
@@ -145,12 +144,12 @@ void radio_ctrl_impl::_register_loopback_self_test(size_t chan)
sr_write(regs::TEST, uint32_t(hash), chan);
uint32_t result = user_reg_read32(regs::RB_TEST, chan);
if (result != uint32_t(hash)) {
- UHD_MSG(status) << "fail" << std::endl;
- UHD_MSG(status) << boost::format("expected: %x result: %x") % uint32_t(hash) % result << std::endl;
+ UHD_LOGGER_ERROR("RFNOC RADIO") << "Register loopback test failed";
+ UHD_LOGGER_ERROR("RFNOC RADIO") << boost::format("expected: %x result: %x") % uint32_t(hash) % result ;
return; // exit on any failure
}
}
- UHD_MSG(status) << "pass" << std::endl;
+ UHD_LOGGER_INFO("RFNOC RADIO") << "Register loopback test passed";
}
/****************************************************************************
@@ -196,6 +195,11 @@ double radio_ctrl_impl::set_rx_gain(const double gain, const size_t chan)
return _rx_gain[chan] = gain;
}
+double radio_ctrl_impl::set_rx_bandwidth(const double bandwidth, const size_t chan)
+{
+ return _rx_bandwidth[chan] = bandwidth;
+}
+
void radio_ctrl_impl::set_time_sync(const uhd::time_spec_t &time)
{
_time64->set_time_sync(time);
@@ -236,6 +240,56 @@ double radio_ctrl_impl::get_rx_gain(const size_t chan) /* const */
return _rx_gain[chan];
}
+double radio_ctrl_impl::get_rx_bandwidth(const size_t chan) /* const */
+{
+ return _rx_bandwidth[chan];
+}
+
+std::vector<std::string> radio_ctrl_impl::get_rx_lo_names(const size_t /* chan */)
+{
+ return std::vector<std::string>();
+}
+
+std::vector<std::string> radio_ctrl_impl::get_rx_lo_sources(const std::string & /* name */, const size_t /* chan */)
+{
+ return std::vector<std::string>();
+}
+
+freq_range_t radio_ctrl_impl::get_rx_lo_freq_range(const std::string & /* name */, const size_t /* chan */)
+{
+ return freq_range_t();
+}
+
+void radio_ctrl_impl::set_rx_lo_source(const std::string & /* src */, const std::string & /* name */, const size_t /* chan */)
+{
+ throw uhd::not_implemented_error("set_rx_lo_source is not supported on this radio");
+}
+
+const std::string radio_ctrl_impl::get_rx_lo_source(const std::string & /* name */, const size_t /* chan */)
+{
+ return "internal";
+}
+
+void radio_ctrl_impl::set_rx_lo_export_enabled(bool /* enabled */, const std::string & /* name */, const size_t /* chan */)
+{
+ throw uhd::not_implemented_error("set_rx_lo_export_enabled is not supported on this radio");
+}
+
+bool radio_ctrl_impl::get_rx_lo_export_enabled(const std::string & /* name */, const size_t /* chan */)
+{
+ return false; // Not exporting non-existant LOs
+}
+
+double radio_ctrl_impl::set_rx_lo_freq(double /* freq */, const std::string & /* name */, const size_t /* chan */)
+{
+ throw uhd::not_implemented_error("set_rx_lo_freq is not supported on this radio");
+}
+
+double radio_ctrl_impl::get_rx_lo_freq(const std::string & /* name */, const size_t /* chan */)
+{
+ return 0;
+}
+
/***********************************************************************
* RX Streamer-related methods (from source_block_ctrl_base)
**********************************************************************/
@@ -243,9 +297,9 @@ double radio_ctrl_impl::get_rx_gain(const size_t chan) /* const */
void radio_ctrl_impl::issue_stream_cmd(const uhd::stream_cmd_t &stream_cmd, const size_t chan)
{
boost::mutex::scoped_lock lock(_mutex);
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::issue_stream_cmd() " << chan << " " << char(stream_cmd.stream_mode) << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::issue_stream_cmd() " << chan << " " << char(stream_cmd.stream_mode) ;
if (not _is_streamer_active(uhd::RX_DIRECTION, chan)) {
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::issue_stream_cmd() called on inactive channel. Skipping." << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::issue_stream_cmd() called on inactive channel. Skipping." ;
return;
}
UHD_ASSERT_THROW(stream_cmd.num_samps <= 0x0fffffff);
@@ -284,7 +338,7 @@ std::vector<size_t> radio_ctrl_impl::get_active_rx_ports()
{
std::vector<size_t> active_rx_ports;
typedef std::map<size_t, bool> map_t;
- BOOST_FOREACH(map_t::value_type &m, _rx_streamer_active) {
+ for(map_t::value_type &m: _rx_streamer_active) {
if (m.second) {
active_rx_ports.push_back(m.first);
}
@@ -297,7 +351,7 @@ std::vector<size_t> radio_ctrl_impl::get_active_rx_ports()
**********************************************************************/
void radio_ctrl_impl::set_rx_streamer(bool active, const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::set_rx_streamer() " << port << " -> " << active << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::set_rx_streamer() " << port << " -> " << active ;
if (port > _num_rx_channels) {
throw uhd::value_error(str(
boost::format("[%s] Can't (un)register RX streamer on port %d (invalid port)")
@@ -315,7 +369,7 @@ void radio_ctrl_impl::set_rx_streamer(bool active, const size_t port)
void radio_ctrl_impl::set_tx_streamer(bool active, const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::set_tx_streamer() " << port << " -> " << active << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::set_tx_streamer() " << port << " -> " << active ;
if (port > _num_tx_channels) {
throw uhd::value_error(str(
boost::format("[%s] Can't (un)register TX streamer on port %d (invalid port)")
@@ -336,11 +390,11 @@ void radio_ctrl_impl::set_tx_streamer(bool active, const size_t port)
void radio_ctrl_impl::_update_spp(int spp)
{
boost::mutex::scoped_lock lock(_mutex);
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::_update_spp(): Requested spp: " << spp << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::_update_spp(): Requested spp: " << spp ;
if (spp == 0) {
spp = DEFAULT_PACKET_SIZE / BYTES_PER_SAMPLE;
}
- UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::_update_spp(): Setting spp to: " << spp << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "radio_ctrl_impl::_update_spp(): Setting spp to: " << spp ;
for (size_t i = 0; i < _num_rx_channels; i++) {
sr_write(regs::RX_CTRL_MAXLEN, uint32_t(spp), i);
}
@@ -356,7 +410,6 @@ void radio_ctrl_impl::set_time_next_pps(const time_spec_t &time_spec)
_time64->set_time_next_pps(time_spec);
}
-
time_spec_t radio_ctrl_impl::get_time_now()
{
return _time64->get_time_now();
@@ -367,3 +420,52 @@ time_spec_t radio_ctrl_impl::get_time_last_pps()
return _time64->get_time_last_pps();
}
+void radio_ctrl_impl::set_time_source(const std::string &source)
+{
+ _tree->access<std::string>("time_source/value").set(source);
+}
+
+std::string radio_ctrl_impl::get_time_source()
+{
+ return _tree->access<std::string>("time_source/value").get();
+}
+
+std::vector<std::string> radio_ctrl_impl::get_time_sources()
+{
+ return _tree->access<std::vector<std::string>>("time_source/options").get();
+}
+
+void radio_ctrl_impl::set_clock_source(const std::string &source)
+{
+ _tree->access<std::string>("clock_source/value").set(source);
+}
+
+std::string radio_ctrl_impl::get_clock_source()
+{
+ return _tree->access<std::string>("clock_source/value").get();
+}
+
+std::vector<std::string> radio_ctrl_impl::get_clock_sources()
+{
+ return _tree->access<std::vector<std::string>>("clock_source/options").get();
+}
+
+
+std::vector<std::string> radio_ctrl_impl::get_gpio_banks() const
+{
+ return std::vector<std::string>();
+}
+
+void radio_ctrl_impl::set_gpio_attr(
+ const std::string &,
+ const std::string &,
+ const uint32_t,
+ const uint32_t
+) {
+ throw uhd::not_implemented_error("set_gpio_attr was not defined for this radio");
+}
+
+uint32_t radio_ctrl_impl::get_gpio_attr(const std::string &, const std::string &)
+{
+ throw uhd::not_implemented_error("get_gpio_attr was not defined for this radio");
+}
diff --git a/host/lib/rfnoc/radio_ctrl_impl.hpp b/host/lib/rfnoc/radio_ctrl_impl.hpp
index d6b402120..6f0c82504 100644
--- a/host/lib/rfnoc/radio_ctrl_impl.hpp
+++ b/host/lib/rfnoc/radio_ctrl_impl.hpp
@@ -60,6 +60,7 @@ public:
virtual double set_rx_frequency(const double freq, const size_t chan);
virtual double set_tx_gain(const double gain, const size_t chan);
virtual double set_rx_gain(const double gain, const size_t chan);
+ virtual double set_rx_bandwidth(const double bandwidth, const size_t chan);
virtual double get_rate() const;
virtual std::string get_tx_antenna(const size_t chan) /* const */;
@@ -68,12 +69,41 @@ public:
virtual double get_rx_frequency(const size_t) /* const */;
virtual double get_tx_gain(const size_t) /* const */;
virtual double get_rx_gain(const size_t) /* const */;
+ virtual double get_rx_bandwidth(const size_t) /* const */;
+
+ virtual std::vector<std::string> get_rx_lo_names(const size_t chan);
+ virtual std::vector<std::string> get_rx_lo_sources(const std::string &name, const size_t chan);
+ virtual freq_range_t get_rx_lo_freq_range(const std::string &name, const size_t chan);
+
+ virtual void set_rx_lo_source(const std::string &src, const std::string &name, const size_t chan);
+ virtual const std::string get_rx_lo_source(const std::string &name, const size_t chan);
+
+ virtual void set_rx_lo_export_enabled(bool enabled, const std::string &name, const size_t chan);
+ virtual bool get_rx_lo_export_enabled(const std::string &name, const size_t chan);
+
+ virtual double set_rx_lo_freq(double freq, const std::string &name, const size_t chan);
+ virtual double get_rx_lo_freq(const std::string &name, const size_t chan);
void set_time_now(const time_spec_t &time_spec);
void set_time_next_pps(const time_spec_t &time_spec);
void set_time_sync(const uhd::time_spec_t &time);
time_spec_t get_time_now();
time_spec_t get_time_last_pps();
+ virtual void set_time_source(const std::string &source);
+ virtual std::string get_time_source();
+ virtual std::vector<std::string> get_time_sources();
+ virtual void set_clock_source(const std::string &source);
+ virtual std::string get_clock_source();
+ virtual std::vector<std::string> get_clock_sources();
+
+ virtual std::vector<std::string> get_gpio_banks() const;
+ virtual void set_gpio_attr(
+ const std::string &bank,
+ const std::string &attr,
+ const uint32_t value,
+ const uint32_t mask
+ );
+ virtual uint32_t get_gpio_attr(const std::string &bank, const std::string &attr);
/***********************************************************************
* Block control API calls
@@ -199,6 +229,7 @@ private:
std::map<size_t, double> _rx_freq;
std::map<size_t, double> _tx_gain;
std::map<size_t, double> _rx_gain;
+ std::map<size_t, double> _rx_bandwidth;
std::vector<bool> _continuous_streaming;
}; /* class radio_ctrl_impl */
diff --git a/host/lib/rfnoc/rx_stream_terminator.cpp b/host/lib/rfnoc/rx_stream_terminator.cpp
index 43b3664fc..e05d9cd49 100644
--- a/host/lib/rfnoc/rx_stream_terminator.cpp
+++ b/host/lib/rfnoc/rx_stream_terminator.cpp
@@ -18,10 +18,9 @@
#include "rx_stream_terminator.hpp"
#include "radio_ctrl_impl.hpp"
#include "../transport/super_recv_packet_handler.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/source_node_ctrl.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
using namespace uhd::rfnoc;
@@ -48,8 +47,8 @@ void rx_stream_terminator::set_tx_streamer(bool, const size_t)
void rx_stream_terminator::set_rx_streamer(bool active, const size_t)
{
// TODO this is identical to source_node_ctrl::set_rx_streamer() -> factor out
- UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::set_rx_streamer() " << active << std::endl;
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t upstream_node, _upstream_nodes) {
+ UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::set_rx_streamer() " << active;
+ for(const node_ctrl_base::node_map_pair_t upstream_node: _upstream_nodes) {
source_node_ctrl::sptr curr_upstream_block_ctrl =
boost::dynamic_pointer_cast<source_node_ctrl>(upstream_node.second.lock());
if (curr_upstream_block_ctrl) {
@@ -71,16 +70,16 @@ void rx_stream_terminator::handle_overrun(boost::weak_ptr<uhd::rx_streamer> stre
return;
}
- UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::handle_overrun()" << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::handle_overrun()" ;
boost::shared_ptr<uhd::transport::sph::recv_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<uhd::transport::sph::recv_packet_streamer>(streamer.lock());
if (not my_streamer) return; //If the rx_streamer has expired then overflow handling makes no sense.
bool in_continuous_streaming_mode = true;
int num_channels = 0;
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node, upstream_radio_nodes) {
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node: upstream_radio_nodes) {
num_channels += node->get_active_rx_ports().size();
- BOOST_FOREACH(const size_t port, node->get_active_rx_ports()) {
+ for(const size_t port: node->get_active_rx_ports()) {
in_continuous_streaming_mode = in_continuous_streaming_mode && node->in_continuous_streaming_mode(port);
}
}
@@ -101,8 +100,8 @@ void rx_stream_terminator::handle_overrun(boost::weak_ptr<uhd::rx_streamer> stre
/////////////////////////////////////////////////////////////
// MIMO overflow recovery time
/////////////////////////////////////////////////////////////
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node, upstream_radio_nodes) {
- BOOST_FOREACH(const size_t port, node->get_active_rx_ports()) {
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node: upstream_radio_nodes) {
+ for(const size_t port: node->get_active_rx_ports()) {
// check all the ports on all the radios
node->rx_ctrl_clear_cmds(port);
node->issue_stream_cmd(stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS, port);
@@ -116,8 +115,8 @@ void rx_stream_terminator::handle_overrun(boost::weak_ptr<uhd::rx_streamer> stre
stream_cmd.stream_now = false;
stream_cmd.time_spec = upstream_radio_nodes[0]->get_time_now() + time_spec_t(0.05);
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node, upstream_radio_nodes) {
- BOOST_FOREACH(const size_t port, node->get_active_rx_ports()) {
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl_impl> &node: upstream_radio_nodes) {
+ for(const size_t port: node->get_active_rx_ports()) {
node->issue_stream_cmd(stream_cmd, port);
}
}
@@ -126,7 +125,7 @@ void rx_stream_terminator::handle_overrun(boost::weak_ptr<uhd::rx_streamer> stre
rx_stream_terminator::~rx_stream_terminator()
{
- UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::~rx_stream_terminator() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "rx_stream_terminator::~rx_stream_terminator() " ;
set_rx_streamer(false, 0);
}
diff --git a/host/lib/rfnoc/sink_block_ctrl_base.cpp b/host/lib/rfnoc/sink_block_ctrl_base.cpp
index 55d502ede..48291e02f 100644
--- a/host/lib/rfnoc/sink_block_ctrl_base.cpp
+++ b/host/lib/rfnoc/sink_block_ctrl_base.cpp
@@ -18,7 +18,7 @@
#include "utils.hpp"
#include <uhd/rfnoc/sink_block_ctrl_base.hpp>
#include <uhd/rfnoc/constants.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
using namespace uhd;
using namespace uhd::rfnoc;
@@ -45,7 +45,7 @@ std::vector<size_t> sink_block_ctrl_base::get_input_ports() const
{
std::vector<size_t> input_ports;
input_ports.reserve(_tree->list(_root_path / "ports" / "in").size());
- BOOST_FOREACH(const std::string port, _tree->list(_root_path / "ports" / "in")) {
+ for(const std::string port: _tree->list(_root_path / "ports" / "in")) {
input_ports.push_back(boost::lexical_cast<size_t>(port));
}
return input_ports;
@@ -66,7 +66,7 @@ void sink_block_ctrl_base::configure_flow_control_in(
size_t packets,
size_t block_port
) {
- UHD_RFNOC_BLOCK_TRACE() << boost::format("sink_block_ctrl_base::configure_flow_control_in(cycles=%d, packets=%d)") % cycles % packets << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << boost::format("sink_block_ctrl_base::configure_flow_control_in(cycles=%d, packets=%d)") % cycles % packets ;
uint32_t cycles_word = 0;
if (cycles) {
cycles_word = (1<<31) | cycles;
diff --git a/host/lib/rfnoc/sink_node_ctrl.cpp b/host/lib/rfnoc/sink_node_ctrl.cpp
index 8398641fd..c570b8eca 100644
--- a/host/lib/rfnoc/sink_node_ctrl.cpp
+++ b/host/lib/rfnoc/sink_node_ctrl.cpp
@@ -16,7 +16,7 @@
//
#include "utils.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/sink_node_ctrl.hpp>
#include <uhd/rfnoc/source_node_ctrl.hpp>
@@ -35,10 +35,10 @@ size_t sink_node_ctrl::connect_upstream(
void sink_node_ctrl::set_tx_streamer(bool active, const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "sink_node_ctrl::set_tx_streamer() " << active << " " << port << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "sink_node_ctrl::set_tx_streamer() " << active << " " << port ;
/* Enable all downstream connections:
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t downstream_node, list_downstream_nodes()) {
+ for(const node_ctrl_base::node_map_pair_t downstream_node: list_downstream_nodes()) {
sptr curr_downstream_block_ctrl =
boost::dynamic_pointer_cast<sink_node_ctrl>(downstream_node.second.lock());
if (curr_downstream_block_ctrl) {
diff --git a/host/lib/rfnoc/source_block_ctrl_base.cpp b/host/lib/rfnoc/source_block_ctrl_base.cpp
index 94e271541..4cc889545 100644
--- a/host/lib/rfnoc/source_block_ctrl_base.cpp
+++ b/host/lib/rfnoc/source_block_ctrl_base.cpp
@@ -17,7 +17,7 @@
#include "utils.hpp"
#include <uhd/rfnoc/source_block_ctrl_base.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/constants.hpp>
using namespace uhd;
@@ -30,13 +30,13 @@ void source_block_ctrl_base::issue_stream_cmd(
const uhd::stream_cmd_t &stream_cmd,
const size_t chan
) {
- UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::issue_stream_cmd()" << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::issue_stream_cmd()" ;
if (_upstream_nodes.empty()) {
- UHD_MSG(warning) << "issue_stream_cmd() not implemented for " << get_block_id() << std::endl;
+ UHD_LOGGER_WARNING("RFNOC") << "issue_stream_cmd() not implemented for " << get_block_id() ;
return;
}
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t upstream_node, _upstream_nodes) {
+ for(const node_ctrl_base::node_map_pair_t upstream_node: _upstream_nodes) {
source_node_ctrl::sptr this_upstream_block_ctrl =
boost::dynamic_pointer_cast<source_node_ctrl>(upstream_node.second.lock());
this_upstream_block_ctrl->issue_stream_cmd(stream_cmd, chan);
@@ -64,7 +64,7 @@ std::vector<size_t> source_block_ctrl_base::get_output_ports() const
{
std::vector<size_t> output_ports;
output_ports.reserve(_tree->list(_root_path / "ports" / "out").size());
- BOOST_FOREACH(const std::string port, _tree->list(_root_path / "ports" / "out")) {
+ for(const std::string port: _tree->list(_root_path / "ports" / "out")) {
output_ports.push_back(boost::lexical_cast<size_t>(port));
}
return output_ports;
@@ -77,10 +77,10 @@ void source_block_ctrl_base::set_destination(
uint32_t next_address,
size_t output_block_port
) {
- UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::set_destination() " << uhd::sid_t(next_address) << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::set_destination() " << uhd::sid_t(next_address) ;
sid_t new_sid(next_address);
new_sid.set_src(get_address(output_block_port));
- UHD_RFNOC_BLOCK_TRACE() << " Setting SID: " << new_sid << std::endl << " ";
+ UHD_RFNOC_BLOCK_TRACE() << " Setting SID: " << new_sid << " ";
sr_write(SR_NEXT_DST_SID, (1<<16) | next_address, output_block_port);
}
@@ -89,7 +89,7 @@ void source_block_ctrl_base::configure_flow_control_out(
size_t block_port,
UHD_UNUSED(const uhd::sid_t &sid)
) {
- UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::configure_flow_control_out() buf_size_pkts==" << buf_size_pkts << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "source_block_ctrl_base::configure_flow_control_out() buf_size_pkts==" << buf_size_pkts ;
if (buf_size_pkts < 2) {
throw uhd::runtime_error(str(
boost::format("Invalid window size %d for block %s. Window size must at least be 2.")
diff --git a/host/lib/rfnoc/source_node_ctrl.cpp b/host/lib/rfnoc/source_node_ctrl.cpp
index c97c72354..1b9d427b9 100644
--- a/host/lib/rfnoc/source_node_ctrl.cpp
+++ b/host/lib/rfnoc/source_node_ctrl.cpp
@@ -16,7 +16,7 @@
//
#include "utils.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/source_node_ctrl.hpp>
#include <uhd/rfnoc/sink_node_ctrl.hpp>
@@ -35,10 +35,10 @@ size_t source_node_ctrl::connect_downstream(
void source_node_ctrl::set_rx_streamer(bool active, const size_t port)
{
- UHD_RFNOC_BLOCK_TRACE() << "source_node_ctrl::set_rx_streamer() " << port << " -> " << active << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "source_node_ctrl::set_rx_streamer() " << port << " -> " << active ;
/* This will enable all upstream blocks:
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t upstream_node, list_upstream_nodes()) {
+ for(const node_ctrl_base::node_map_pair_t upstream_node: list_upstream_nodes()) {
sptr curr_upstream_block_ctrl =
boost::dynamic_pointer_cast<source_node_ctrl>(upstream_node.second.lock());
if (curr_upstream_block_ctrl) {
diff --git a/host/lib/rfnoc/tick_node_ctrl.cpp b/host/lib/rfnoc/tick_node_ctrl.cpp
index 5548194ae..625771945 100644
--- a/host/lib/rfnoc/tick_node_ctrl.cpp
+++ b/host/lib/rfnoc/tick_node_ctrl.cpp
@@ -47,7 +47,7 @@ double tick_node_ctrl::get_tick_rate(
);
} // neighbouring_tick_nodes is now initialized
double ret_val = RATE_UNDEFINED;
- BOOST_FOREACH(const sptr &node, neighbouring_tick_nodes) {
+ for(const sptr &node: neighbouring_tick_nodes) {
if (_explored_nodes.count(node)) {
continue;
}
diff --git a/host/lib/rfnoc/tx_stream_terminator.cpp b/host/lib/rfnoc/tx_stream_terminator.cpp
index ee856843d..1d2653d47 100644
--- a/host/lib/rfnoc/tx_stream_terminator.cpp
+++ b/host/lib/rfnoc/tx_stream_terminator.cpp
@@ -44,8 +44,8 @@ void tx_stream_terminator::set_rx_streamer(bool, const size_t)
void tx_stream_terminator::set_tx_streamer(bool active, const size_t /* port */)
{
// TODO this is identical to sink_node_ctrl::set_tx_streamer() -> factor out
- UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::set_tx_streamer() " << active << std::endl;
- BOOST_FOREACH(const node_ctrl_base::node_map_pair_t downstream_node, _downstream_nodes) {
+ UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::set_tx_streamer() " << active;
+ for(const node_ctrl_base::node_map_pair_t downstream_node: _downstream_nodes) {
sink_node_ctrl::sptr curr_downstream_block_ctrl =
boost::dynamic_pointer_cast<sink_node_ctrl>(downstream_node.second.lock());
if (curr_downstream_block_ctrl) {
@@ -61,7 +61,7 @@ void tx_stream_terminator::set_tx_streamer(bool active, const size_t /* port */)
tx_stream_terminator::~tx_stream_terminator()
{
- UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::~tx_stream_terminator() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::~tx_stream_terminator() " ;
set_tx_streamer(false, 0);
}
diff --git a/host/lib/rfnoc/tx_stream_terminator.hpp b/host/lib/rfnoc/tx_stream_terminator.hpp
index 169d7cd6a..dd2b991f6 100644
--- a/host/lib/rfnoc/tx_stream_terminator.hpp
+++ b/host/lib/rfnoc/tx_stream_terminator.hpp
@@ -24,7 +24,7 @@
#include <uhd/rfnoc/scalar_node_ctrl.hpp>
#include <uhd/rfnoc/terminator_node_ctrl.hpp>
#include <uhd/rfnoc/block_ctrl_base.hpp> // For the block macros
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
namespace uhd {
namespace rfnoc {
@@ -51,7 +51,7 @@ public:
void issue_stream_cmd(const uhd::stream_cmd_t &, const size_t)
{
- UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::issue_stream_cmd()" << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "tx_stream_terminator::issue_stream_cmd()" ;
}
// If this is called, then by a send terminator at the other end
diff --git a/host/lib/rfnoc/utils.hpp b/host/lib/rfnoc/utils.hpp
index ecd3d7cfb..1ee10397c 100644
--- a/host/lib/rfnoc/utils.hpp
+++ b/host/lib/rfnoc/utils.hpp
@@ -47,7 +47,7 @@ namespace uhd { namespace rfnoc { namespace utils {
port++;
}
} else {
- BOOST_FOREACH(const size_t allowed_port, allowed_ports) {
+ for(const size_t allowed_port: allowed_ports) {
if (not nodes.count(port)) {
return allowed_port;
}
@@ -65,7 +65,7 @@ namespace uhd { namespace rfnoc { namespace utils {
template <typename T>
static std::set<T> str_list_to_set(const std::vector<std::string> &list) {
std::set<T> return_set;
- BOOST_FOREACH(const std::string &S, list) {
+ for(const std::string &S: list) {
return_set.insert(boost::lexical_cast<T>(S));
}
return return_set;
diff --git a/host/lib/rfnoc/xports.hpp b/host/lib/rfnoc/xports.hpp
index 98cf71b6d..7bd4f2fc8 100644
--- a/host/lib/rfnoc/xports.hpp
+++ b/host/lib/rfnoc/xports.hpp
@@ -16,6 +16,7 @@
//
#include <uhd/types/sid.hpp>
+#include <uhd/types/endianness.hpp>
#include <uhd/transport/zero_copy.hpp>
namespace uhd {
@@ -31,6 +32,7 @@ namespace uhd {
size_t send_buff_size;
uhd::sid_t send_sid;
uhd::sid_t recv_sid;
+ uhd::endianness_t endianness;
};
};
diff --git a/host/lib/transport/if_addrs.cpp b/host/lib/transport/if_addrs.cpp
index 3b8be5dd5..37b41f303 100644
--- a/host/lib/transport/if_addrs.cpp
+++ b/host/lib/transport/if_addrs.cpp
@@ -36,9 +36,9 @@ std::vector<uhd::transport::if_addrs_t> uhd::transport::get_if_addrs(void){
std::vector<if_addrs_t> if_addrs;
struct ifaddrs *ifap;
if (getifaddrs(&ifap) == 0){
- for (struct ifaddrs *iter = ifap; iter != NULL; iter = iter->ifa_next){
+ for (struct ifaddrs *iter = ifap; iter != nullptr; iter = iter->ifa_next){
//ensure that the entries are valid
- if (iter->ifa_addr == NULL) continue;
+ if (iter->ifa_addr == nullptr) continue;
if (iter->ifa_addr->sa_family != AF_INET) continue;
if (iter->ifa_netmask->sa_family != AF_INET) continue;
if (iter->ifa_broadaddr->sa_family != AF_INET) continue;
diff --git a/host/lib/transport/libusb1_base.cpp b/host/lib/transport/libusb1_base.cpp
index d04b679f8..24c9e3471 100644
--- a/host/lib/transport/libusb1_base.cpp
+++ b/host/lib/transport/libusb1_base.cpp
@@ -17,14 +17,13 @@
#include "libusb1_base.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/types/serial.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/thread/mutex.hpp>
-#include <boost/foreach.hpp>
#include <boost/bind.hpp>
#include <cstdlib>
#include <iostream>
@@ -77,7 +76,7 @@ private:
case LIBUSB_ERROR_NO_DEVICE:
throw uhd::io_error(libusb_strerror(LIBUSB_ERROR_NO_DEVICE));
default:
- UHD_MSG(error) << __FUNCTION__ << ": " << libusb_strerror((libusb_error)ret) << std::endl;
+ UHD_LOGGER_ERROR("USB") << __FUNCTION__ << ": " << libusb_strerror((libusb_error)ret) ;
break;
}
}
@@ -227,7 +226,7 @@ public:
std::string string_descriptor((char *)buff, size_t(ret));
byte_vector_t string_vec(string_descriptor.begin(), string_descriptor.end());
std::string out;
- BOOST_FOREACH(uint8_t byte, string_vec){
+ for(uint8_t byte: string_vec){
if (byte < 32 or byte > 127) return out;
out += byte;
}
@@ -276,15 +275,15 @@ public:
{
int ret;
ret = libusb_clear_halt(this->get(), recv_endpoint | 0x80);
- UHD_LOG << "usb device handle: recv endpoint clear: " << libusb_error_name(ret) << std::endl;
+ UHD_LOGGER_TRACE("USB") << "usb device handle: recv endpoint clear: " << libusb_error_name(ret) ;
ret = libusb_clear_halt(this->get(), send_endpoint | 0x00);
- UHD_LOG << "usb device handle: send endpoint clear: " << libusb_error_name(ret) << std::endl;
+ UHD_LOGGER_TRACE("USB") << "usb device handle: send endpoint clear: " << libusb_error_name(ret) ;
}
void reset_device(void)
{
int ret = libusb_reset_device(this->get());
- UHD_LOG << "usb device handle: dev Reset: " << libusb_error_name(ret) << std::endl;
+ UHD_LOGGER_TRACE("USB") << "usb device handle: dev Reset: " << libusb_error_name(ret) ;
}
private:
@@ -321,12 +320,12 @@ libusb::device_handle::sptr libusb::device_handle::get_cached_handle(device::spt
}
catch(const uhd::exception &){
#ifdef UHD_PLATFORM_LINUX
- UHD_MSG(error) <<
+ UHD_LOGGER_ERROR("USB") <<
"USB open failed: insufficient permissions.\n"
"See the application notes for your device.\n"
- << std::endl;
+ ;
#else
- UHD_LOG << "USB open failed: device already claimed." << std::endl;
+ UHD_LOGGER_DEBUG("USB") << "USB open failed: device already claimed." ;
#endif
throw;
}
diff --git a/host/lib/transport/libusb1_zero_copy.cpp b/host/lib/transport/libusb1_zero_copy.cpp
index c32b96b63..39666af94 100644
--- a/host/lib/transport/libusb1_zero_copy.cpp
+++ b/host/lib/transport/libusb1_zero_copy.cpp
@@ -19,9 +19,8 @@
#include <uhd/transport/usb_zero_copy.hpp>
#include <uhd/transport/buffer_pool.hpp>
#include <uhd/transport/bounded_buffer.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
@@ -274,19 +273,19 @@ public:
~libusb_zero_copy_single(void)
{
//cancel all transfers
- BOOST_FOREACH(libusb_transfer *lut, _all_luts)
+ for(libusb_transfer *lut: _all_luts)
{
libusb_cancel_transfer(lut);
}
//process all transfers until timeout occurs
- BOOST_FOREACH(libusb_zero_copy_mb *mb, _enqueued)
+ for(libusb_zero_copy_mb *mb: _enqueued)
{
mb->wait_for_completion(0.01);
}
//free all transfers
- BOOST_FOREACH(libusb_transfer *lut, _all_luts)
+ for(libusb_transfer *lut: _all_luts)
{
libusb_free_transfer(lut);
}
diff --git a/host/lib/transport/nirio/niusrprio_session.cpp b/host/lib/transport/nirio/niusrprio_session.cpp
index 07ec6a266..f1e31572c 100644
--- a/host/lib/transport/nirio/niusrprio_session.cpp
+++ b/host/lib/transport/nirio/niusrprio_session.cpp
@@ -21,7 +21,6 @@
#include <uhd/transport/nirio/status.h>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
-#include <boost/lexical_cast.hpp>
#include <stdio.h>
#include <fstream>
//@TODO: Move the register defs required by the class to a common location
diff --git a/host/lib/transport/nirio/rpc/rpc_client.cpp b/host/lib/transport/nirio/rpc/rpc_client.cpp
index 7beaf9974..96f98ec20 100644
--- a/host/lib/transport/nirio/rpc/rpc_client.cpp
+++ b/host/lib/transport/nirio/rpc/rpc_client.cpp
@@ -25,7 +25,7 @@
if (status) { \
status = (static_cast<size_t>((func)) == exp); \
} else { \
- UHD_LOG << "rpc_client operation skipped: " #func "\n"; \
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client operation skipped: " #func "\n"; \
} \
namespace uhd { namespace usrprio_rpc {
@@ -57,7 +57,7 @@ rpc_client::rpc_client (
tcp::resolver::iterator iterator = resolver.resolve(query);
boost::asio::connect(_socket, iterator);
- UHD_LOG << "rpc_client connected to server." << std::endl;
+ UHD_LOGGER_TRACE("NIRIO") << "rpc_client connected to server." ;
try {
//Perform handshake
@@ -75,24 +75,24 @@ rpc_client::rpc_client (
_hshake_args_client.version >= _hshake_args_server.oldest_comp_version &&
status)
{
- UHD_LOG << "rpc_client bound to server." << std::endl;
+ UHD_LOGGER_TRACE("NIRIO") << "rpc_client bound to server." ;
_wait_for_next_response_header();
//Spawn a thread for the io_service callback handler. This thread will run until rpc_client is destroyed.
_io_service_thread.reset(new boost::thread(boost::bind(&boost::asio::io_service::run, &_io_service)));
} else {
- UHD_LOG << "rpc_client handshake failed." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client handshake failed." ;
_exec_err.assign(boost::asio::error::connection_refused, boost::asio::error::get_system_category());
}
- UHD_LOG << boost::format("rpc_client archive = %d, rpc_server archive = %d\n.") %
+ UHD_LOGGER_TRACE("NIRIO") << boost::format("rpc_client archive = %d, rpc_server archive = %d\n.") %
_hshake_args_client.boost_archive_version %
_hshake_args_server.boost_archive_version;
} catch (boost::exception&) {
- UHD_LOG << "rpc_client handshake aborted." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client handshake aborted." ;
_exec_err.assign(boost::asio::error::connection_refused, boost::asio::error::get_system_category());
}
} catch (boost::exception&) {
- UHD_LOG << "rpc_client connection request cancelled/aborted." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client connection request cancelled/aborted." ;
_exec_err.assign(boost::asio::error::connection_aborted, boost::asio::error::get_system_category());
}
}
@@ -136,18 +136,18 @@ const boost::system::error_code& rpc_client::call(
//Wait for response using condition variable
if (status) {
if (!_exec_gate.timed_wait(lock, timeout)) {
- UHD_LOG << "rpc_client function timed out." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client function timed out." ;
_exec_err.assign(boost::asio::error::timed_out, boost::asio::error::get_system_category());
}
} else {
- UHD_LOG << "rpc_client connection dropped." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client connection dropped." ;
_exec_err.assign(boost::asio::error::connection_aborted, boost::asio::error::get_system_category());
_stop_io_service();
}
//Verify that we are talking to the correct endpoint
if ((_request.header.client_id != _response.header.client_id) && !_exec_err) {
- UHD_LOG << "rpc_client confused about who its talking to." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client confused about who its talking to." ;
_exec_err.assign(boost::asio::error::operation_aborted, boost::asio::error::get_system_category());
}
@@ -180,7 +180,7 @@ void rpc_client::_handle_response_hdr(const boost::system::error_code& err, size
}
} else {
//Unexpected response. Ignore it.
- UHD_LOG << "rpc_client received garbage responses." << std::endl;
+ UHD_LOGGER_DEBUG("NIRIO") << "rpc_client received garbage responses." ;
_exec_err.assign(boost::asio::error::operation_aborted, boost::asio::error::get_system_category());
_wait_for_next_response_header();
diff --git a/host/lib/transport/nirio_zero_copy.cpp b/host/lib/transport/nirio_zero_copy.cpp
index ae32727d7..0635e01cf 100644
--- a/host/lib/transport/nirio_zero_copy.cpp
+++ b/host/lib/transport/nirio_zero_copy.cpp
@@ -19,7 +19,7 @@
#include <stdio.h>
#include <uhd/transport/nirio/nirio_fifo.h>
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/atomic.hpp>
#include <boost/format.hpp>
@@ -149,11 +149,11 @@ public:
_xport_params(xport_params),
_next_recv_buff_index(0), _next_send_buff_index(0)
{
- UHD_LOG << boost::format("Creating PCIe transport for channel %d") % instance << std::endl;
- UHD_LOG << boost::format("nirio zero-copy RX transport configured with frame size = %u, #frames = %u, buffer size = %u\n")
+ UHD_LOGGER_TRACE("NIRIO") << boost::format("Creating PCIe transport for channel %d") % instance ;
+ UHD_LOGGER_TRACE("NIRIO") << boost::format("nirio zero-copy RX transport configured with frame size = %u, #frames = %u, buffer size = %u\n")
% _xport_params.recv_frame_size % _xport_params.num_recv_frames %
(_xport_params.recv_frame_size * _xport_params.num_recv_frames);
- UHD_LOG << boost::format("nirio zero-copy TX transport configured with frame size = %u, #frames = %u, buffer size = %u\n")
+ UHD_LOGGER_TRACE("NIRIO") << boost::format("nirio zero-copy TX transport configured with frame size = %u, #frames = %u, buffer size = %u\n")
% _xport_params.send_frame_size % _xport_params.num_send_frames % (_xport_params.send_frame_size * _xport_params.num_send_frames);
_recv_buffer_pool = buffer_pool::make(_xport_params.num_recv_frames, _xport_params.recv_frame_size);
diff --git a/host/lib/transport/super_recv_packet_handler.hpp b/host/lib/transport/super_recv_packet_handler.hpp
index d34f222e8..4abc73398 100644
--- a/host/lib/transport/super_recv_packet_handler.hpp
+++ b/host/lib/transport/super_recv_packet_handler.hpp
@@ -23,14 +23,13 @@
#include <uhd/exception.hpp>
#include <uhd/convert.hpp>
#include <uhd/stream.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/types/metadata.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/transport/zero_copy.hpp>
#include <boost/dynamic_bitset.hpp>
-#include <boost/foreach.hpp>
#include <boost/function.hpp>
#include <boost/format.hpp>
#include <boost/bind.hpp>
@@ -333,9 +332,9 @@ private:
void reset()
{
buff.reset();
- vrt_hdr = NULL;
+ vrt_hdr = nullptr;
time = time_spec_t(0.0);
- copy_buff = NULL;
+ copy_buff = nullptr;
}
managed_recv_buffer::sptr buff;
const uint32_t *vrt_hdr;
@@ -410,7 +409,7 @@ private:
//get a single packet from the transport layer
managed_recv_buffer::sptr &buff = curr_buffer_info.buff;
buff = _props[index].get_buff(timeout);
- if (buff.get() == NULL) return PACKET_TIMEOUT_ERROR;
+ if (buff.get() == nullptr) return PACKET_TIMEOUT_ERROR;
#ifdef ERROR_INJECT_DROPPED_PACKETS
if (++recvd_packets > 1000)
@@ -418,7 +417,7 @@ private:
recvd_packets = 0;
buff.reset();
buff = _props[index].get_buff(timeout);
- if (buff.get() == NULL) return PACKET_TIMEOUT_ERROR;
+ if (buff.get() == nullptr) return PACKET_TIMEOUT_ERROR;
}
#endif
@@ -461,7 +460,7 @@ private:
const size_t expected_packet_count = _props[index].packet_count;
_props[index].packet_count = (info.ifpi.packet_count + 1) & seq_mask;
if (expected_packet_count != info.ifpi.packet_count){
- //UHD_MSG(status) << "expected: " << expected_packet_count << " got: " << info.ifpi.packet_count << std::endl;
+ //UHD_LOGGER_INFO("STREAMER") << "expected: " << expected_packet_count << " got: " << info.ifpi.packet_count;
if (_props[index].handle_flowctrl) {
// Always update flow control in this case, because we don't
// know which packet was dropped and what state the upstream
@@ -574,9 +573,9 @@ private:
//handle the case where a bad header exists
catch(const uhd::value_error &e){
- UHD_MSG(error) << boost::format(
+ UHD_LOGGER_ERROR("STREAMER") << boost::format(
"The receive packet handler caught a value exception.\n%s"
- ) % e.what() << std::endl;
+ ) % e.what();
std::swap(curr_info, next_info); //save progress from curr -> next
curr_info.metadata.error_code = rx_metadata_t::ERROR_CODE_BAD_PACKET;
return;
@@ -614,10 +613,10 @@ private:
rx_metadata_t metadata = curr_info.metadata;
_props[index].handle_overflow();
curr_info.metadata = metadata;
- UHD_MSG(fastpath) << "O";
+ UHD_LOG_FASTPATH("O")
}
curr_info[index].buff.reset();
- curr_info[index].copy_buff = NULL;
+ curr_info[index].copy_buff = nullptr;
return;
case PACKET_TIMEOUT_ERROR:
@@ -636,18 +635,18 @@ private:
prev_info[index].ifpi.num_payload_words32*sizeof(uint32_t)/_bytes_per_otw_item, _samp_rate);
curr_info.metadata.out_of_sequence = true;
curr_info.metadata.error_code = rx_metadata_t::ERROR_CODE_OVERFLOW;
- UHD_MSG(fastpath) << "D";
+ UHD_LOG_FASTPATH("D")
return;
}
//too many iterations: detect alignment failure
if (iterations++ > _alignment_failure_threshold){
- UHD_MSG(error) << boost::format(
- "The receive packet handler failed to time-align packets.\n"
- "%u received packets were processed by the handler.\n"
- "However, a timestamp match could not be determined.\n"
- ) % iterations << std::endl;
+ UHD_LOGGER_ERROR("STREAMER") << boost::format(
+ "The receive packet handler failed to time-align packets. "
+ "%u received packets were processed by the handler. "
+ "However, a timestamp match could not be determined."
+ ) % iterations;
std::swap(curr_info, next_info); //save progress from curr -> next
curr_info.metadata.error_code = rx_metadata_t::ERROR_CODE_ALIGNMENT;
_props[index].handle_overflow();
diff --git a/host/lib/transport/super_send_packet_handler.hpp b/host/lib/transport/super_send_packet_handler.hpp
index 0acc8df4b..75ba7260b 100644
--- a/host/lib/transport/super_send_packet_handler.hpp
+++ b/host/lib/transport/super_send_packet_handler.hpp
@@ -23,15 +23,15 @@
#include <uhd/exception.hpp>
#include <uhd/convert.hpp>
#include <uhd/stream.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/byteswap.hpp>
+#include <uhd/utils/thread.hpp>
#include <uhd/types/metadata.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/transport/zero_copy.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/thread_time.hpp>
-#include <boost/foreach.hpp>
#include <boost/function.hpp>
#include <iostream>
#include <vector>
diff --git a/host/lib/transport/tcp_zero_copy.cpp b/host/lib/transport/tcp_zero_copy.cpp
index f2ae51695..dc1848b00 100644
--- a/host/lib/transport/tcp_zero_copy.cpp
+++ b/host/lib/transport/tcp_zero_copy.cpp
@@ -18,7 +18,7 @@
#include "udp_common.hpp"
#include <uhd/transport/tcp_zero_copy.hpp>
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/atomic.hpp>
#include <boost/format.hpp>
@@ -144,7 +144,7 @@ public:
_send_buffer_pool(buffer_pool::make(_num_send_frames, _send_frame_size)),
_next_recv_buff_index(0), _next_send_buff_index(0)
{
- UHD_LOG << boost::format("Creating tcp transport for %s %s") % addr % port << std::endl;
+ UHD_LOGGER_TRACE("TCP") << boost::format("Creating tcp transport for %s %s") % addr % port ;
//resolve the address
asio::ip::tcp::resolver resolver(_io_service);
diff --git a/host/lib/transport/udp_common.hpp b/host/lib/transport/udp_common.hpp
index 3ee568432..d6e73cc5f 100644
--- a/host/lib/transport/udp_common.hpp
+++ b/host/lib/transport/udp_common.hpp
@@ -35,6 +35,7 @@ namespace uhd{ namespace transport{
* \return true when the socket is ready for receive
*/
UHD_INLINE bool wait_for_recv_ready(int sock_fd, double timeout){
+#ifdef UHD_PLATFORM_WIN32 // select is more portable than poll unfortunately
//setup timeval for timeout
timeval tv;
//If the tv_usec > 1 second on some platforms, select will
@@ -56,6 +57,17 @@ namespace uhd{ namespace transport{
//call select with timeout on receive socket
return TEMP_FAILURE_RETRY(::select(sock_fd+1, &rset, NULL, NULL, &tv)) > 0;
+#else
+ //calculate the total timeout in milliseconds (from seconds)
+ int total_timeout = int(timeout*1000);
+
+ pollfd pfd_read;
+ pfd_read.fd = sock_fd;
+ pfd_read.events = POLLIN;
+
+ //call poll with timeout on receive socket
+ return ::poll(&pfd_read, 1, total_timeout) > 0;
+#endif
}
}} //namespace uhd::transport
diff --git a/host/lib/transport/udp_simple.cpp b/host/lib/transport/udp_simple.cpp
index 0a93941b8..75862d1a9 100644
--- a/host/lib/transport/udp_simple.cpp
+++ b/host/lib/transport/udp_simple.cpp
@@ -31,7 +31,7 @@ public:
udp_simple_impl(
const std::string &addr, const std::string &port, bool bcast, bool connect
):_connected(connect){
- UHD_LOG << boost::format("Creating udp transport for %s %s") % addr % port << std::endl;
+ UHD_LOGGER_TRACE("UDP") << boost::format("Creating udp transport for %s %s") % addr % port ;
//resolve the address
asio::ip::udp::resolver resolver(_io_service);
@@ -64,6 +64,10 @@ public:
return _recv_endpoint.address().to_string();
}
+ std::string get_send_addr(void){
+ return _send_endpoint.address().to_string();
+ }
+
private:
bool _connected;
asio::io_service _io_service;
diff --git a/host/lib/transport/udp_wsa_zero_copy.cpp b/host/lib/transport/udp_wsa_zero_copy.cpp
index 52382f84d..66af394a9 100644
--- a/host/lib/transport/udp_wsa_zero_copy.cpp
+++ b/host/lib/transport/udp_wsa_zero_copy.cpp
@@ -19,7 +19,7 @@
#include <uhd/transport/udp_zero_copy.hpp>
#include <uhd/transport/udp_simple.hpp> //mtu
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <boost/format.hpp>
#include <vector>
@@ -47,11 +47,11 @@ static void check_registry_for_fast_send_threshold(const size_t mtu){
reg_key.Open(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\AFD\\Parameters", KEY_READ) != ERROR_SUCCESS or
reg_key.QueryDWORDValue("FastSendDatagramThreshold", threshold) != ERROR_SUCCESS or threshold < mtu
){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("UDP") << boost::format(
"The MTU (%d) is larger than the FastSendDatagramThreshold (%d)!\n"
"This will negatively affect the transmit performance.\n"
"See the transport application notes for more detail.\n"
- ) % mtu % threshold << std::endl;
+ ) % mtu % threshold ;
warned = true;
}
reg_key.Close();
@@ -197,7 +197,7 @@ public:
check_registry_for_fast_send_threshold(this->get_send_frame_size());
#endif /*CHECK_REG_SEND_THRESH*/
- UHD_MSG(status) << boost::format("Creating WSA UDP transport for %s:%s") % addr % port << std::endl;
+ UHD_LOGGER_INFO("UDP") << boost::format("Creating WSA UDP transport for %s:%s") % addr % port ;
static uhd_wsa_control uhd_wsa; //makes wsa start happen via lazy initialization
UHD_ASSERT_THROW(_num_send_frames <= WSA_MAXIMUM_WAIT_EVENTS);
@@ -275,6 +275,16 @@ public:
size_t get_num_send_frames(void) const {return _num_send_frames;}
size_t get_send_frame_size(void) const {return _send_frame_size;}
+ uint16_t get_local_port(void) const {
+ struct sockaddr_in addr_info;
+ int addr_len = sizeof(addr_info);
+ uint16_t local_port = 0;
+ if (getsockname( _sock_fd, (SOCKADDR*) &addr_info,
+ &addr_len) == 0){
+ local_port = ntohs(addr_info.sin_port);
+ }
+ return local_port;
+ }
//! Read back the socket's buffer space reserved for receives
size_t get_recv_buff_size(void) {
@@ -327,11 +337,11 @@ void check_usr_buff_size(
size_t user_buff_size, // Set this to zero for no user-defined preference
const std::string tx_rx
){
- UHD_LOG << boost::format(
+ UHD_LOGGER_DEBUG("UDP") << boost::format(
"Target %s sock buff size: %d bytes\n"
"Actual %s sock buff size: %d bytes"
- ) % tx_rx % user_buff_size % tx_rx % actual_buff_size << std::endl;
- if ((user_buff_size != 0.0) and (actual_buff_size < user_buff_size)) UHD_MSG(warning) << boost::format(
+ ) % tx_rx % user_buff_size % tx_rx % actual_buff_size ;
+ if ((user_buff_size != 0.0) and (actual_buff_size < user_buff_size)) UHD_LOGGER_WARNING("UDP") << boost::format(
"The %s buffer could not be resized sufficiently.\n"
"Target sock buff size: %d bytes.\n"
"Actual sock buff size: %d bytes.\n"
diff --git a/host/lib/transport/udp_zero_copy.cpp b/host/lib/transport/udp_zero_copy.cpp
index 63044c1e3..814f41500 100644
--- a/host/lib/transport/udp_zero_copy.cpp
+++ b/host/lib/transport/udp_zero_copy.cpp
@@ -19,7 +19,7 @@
#include <uhd/transport/udp_zero_copy.hpp>
#include <uhd/transport/udp_simple.hpp> //mtu
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/atomic.hpp>
#include <boost/format.hpp>
@@ -50,11 +50,11 @@ static void check_registry_for_fast_send_threshold(const size_t mtu){
reg_key.Open(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\AFD\\Parameters", KEY_READ) != ERROR_SUCCESS or
reg_key.QueryDWORDValue("FastSendDatagramThreshold", threshold) != ERROR_SUCCESS or threshold < mtu
){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("UDP") << boost::format(
"The MTU (%d) is larger than the FastSendDatagramThreshold (%d)!\n"
"This will negatively affect the transmit performance.\n"
"See the transport application notes for more detail.\n"
- ) % mtu % threshold << std::endl;
+ ) % mtu % threshold ;
warned = true;
}
reg_key.Close();
@@ -175,7 +175,7 @@ public:
_send_buffer_pool(buffer_pool::make(xport_params.num_send_frames, xport_params.send_frame_size)),
_next_recv_buff_index(0), _next_send_buff_index(0)
{
- UHD_LOG << boost::format("Creating udp transport for %s %s") % addr % port << std::endl;
+ UHD_LOGGER_TRACE("UDP") << boost::format("Creating udp transport for %s %s") % addr % port ;
#ifdef CHECK_REG_SEND_THRESH
check_registry_for_fast_send_threshold(this->get_send_frame_size());
@@ -244,6 +244,7 @@ public:
size_t get_num_send_frames(void) const {return _num_send_frames;}
size_t get_send_frame_size(void) const {return _send_frame_size;}
+ uint16_t get_local_port(void) const {return _socket->local_endpoint().port();}
private:
//memory management -> buffers and fifos
@@ -272,18 +273,18 @@ template<typename Opt> static size_t resize_buff_helper(
std::string help_message;
#if defined(UHD_PLATFORM_LINUX)
help_message = str(boost::format(
- "Please run: sudo sysctl -w net.core.%smem_max=%d\n"
+ "Please run: sudo sysctl -w net.core.%smem_max=%d"
) % ((name == "recv")?"r":"w") % target_size);
#endif /*defined(UHD_PLATFORM_LINUX)*/
//resize the buffer if size was provided
if (target_size > 0){
actual_size = udp_trans->resize_buff<Opt>(target_size);
- UHD_LOG << boost::format(
+ UHD_LOGGER_DEBUG("UDP") << boost::format(
"Target %s sock buff size: %d bytes\n"
"Actual %s sock buff size: %d bytes"
- ) % name % target_size % name % actual_size << std::endl;
- if (actual_size < target_size) UHD_MSG(warning) << boost::format(
+ ) % name % target_size % name % actual_size ;
+ if (actual_size < target_size) UHD_LOGGER_WARNING("UDP") << boost::format(
"The %s buffer could not be resized sufficiently.\n"
"Target sock buff size: %d bytes.\n"
"Actual sock buff size: %d bytes.\n"
diff --git a/host/lib/transport/xport_benchmarker.cpp b/host/lib/transport/xport_benchmarker.cpp
index d8f533edc..7157c1ae9 100644
--- a/host/lib/transport/xport_benchmarker.cpp
+++ b/host/lib/transport/xport_benchmarker.cpp
@@ -54,9 +54,9 @@ const device_addr_t& xport_benchmarker::benchmark_throughput_chdr
_results["RX-Bytes"] = (boost::format("%.2fMB") % (rx_bytes/(1024*1024))).str();
_results["TX-Throughput"] = (boost::format("%.2fMB/s") % (tx_rate/(1024*1024))).str();
_results["RX-Throughput"] = (boost::format("%.2fMB/s") % (rx_rate/(1024*1024))).str();
- _results["TX-Timeouts"] = boost::lexical_cast<std::string>(_num_tx_timeouts);
- _results["RX-Timeouts"] = boost::lexical_cast<std::string>(_num_rx_timeouts);
- _results["Data-Errors"] = boost::lexical_cast<std::string>(_num_data_errors);
+ _results["TX-Timeouts"] = std::to_string(_num_tx_timeouts);
+ _results["RX-Timeouts"] = std::to_string(_num_rx_timeouts);
+ _results["Data-Errors"] = std::to_string(_num_data_errors);
return _results;
}
diff --git a/host/lib/transport/xport_benchmarker.hpp b/host/lib/transport/xport_benchmarker.hpp
index 7383d34f1..ffafbea5a 100644
--- a/host/lib/transport/xport_benchmarker.hpp
+++ b/host/lib/transport/xport_benchmarker.hpp
@@ -20,7 +20,7 @@
#include <uhd/transport/zero_copy.hpp>
#include <uhd/types/device_addr.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread/thread.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
diff --git a/host/lib/transport/zero_copy_flow_ctrl.cpp b/host/lib/transport/zero_copy_flow_ctrl.cpp
index 06d7934e2..ef8f5c9d1 100644
--- a/host/lib/transport/zero_copy_flow_ctrl.cpp
+++ b/host/lib/transport/zero_copy_flow_ctrl.cpp
@@ -18,7 +18,6 @@
#include <uhd/transport/zero_copy_flow_ctrl.hpp>
#include <uhd/transport/bounded_buffer.hpp>
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/format.hpp>
@@ -38,7 +37,7 @@ public:
zero_copy_flow_ctrl_msb(
flow_ctrl_func flow_ctrl
) :
- _mb(NULL),
+ _mb(nullptr),
_flow_ctrl(flow_ctrl)
{
/* NOP */
@@ -76,7 +75,7 @@ public:
zero_copy_flow_ctrl_mrb(
flow_ctrl_func flow_ctrl
) :
- _mb(NULL),
+ _mb(nullptr),
_flow_ctrl(flow_ctrl)
{
/* NOP */
@@ -128,7 +127,7 @@ public:
_send_flow_ctrl(send_flow_ctrl),
_recv_flow_ctrl(recv_flow_ctrl)
{
- UHD_LOG << "Created zero_copy_flow_ctrl" << std::endl;
+ UHD_LOG_TRACE("TRANSPORT", "Created zero_copy_flow_ctrl");
for (size_t i = 0; i < transport->get_num_send_frames(); i++)
{
diff --git a/host/lib/transport/zero_copy_recv_offload.cpp b/host/lib/transport/zero_copy_recv_offload.cpp
index e8b013abc..e8f75be84 100644
--- a/host/lib/transport/zero_copy_recv_offload.cpp
+++ b/host/lib/transport/zero_copy_recv_offload.cpp
@@ -18,9 +18,10 @@
#include <uhd/transport/zero_copy_recv_offload.hpp>
#include <uhd/transport/bounded_buffer.hpp>
#include <uhd/transport/buffer_pool.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
+#include <uhd/utils/thread.hpp>
#include <boost/format.hpp>
#include <boost/make_shared.hpp>
#include <boost/thread/mutex.hpp>
@@ -47,13 +48,14 @@ public:
_inbox(transport->get_num_recv_frames()),
_recv_done(false)
{
- UHD_LOG << "Created threaded transport" << std::endl;
+ UHD_LOGGER_TRACE("XPORT") << "Created threaded transport" ;
// Create the receive and send threads to offload
// the system calls onto other threads
_recv_thread = boost::thread(
boost::bind(&zero_copy_recv_offload_impl::enqueue_recv, this)
);
+ set_thread_name(&_recv_thread, "zero_copy_recv");
}
// Receive thread flags
diff --git a/host/lib/types/byte_vector.cpp b/host/lib/types/byte_vector.cpp
index 15ae93858..f08b6e088 100644
--- a/host/lib/types/byte_vector.cpp
+++ b/host/lib/types/byte_vector.cpp
@@ -15,7 +15,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include <boost/foreach.hpp>
#include <uhd/types/byte_vector.hpp>
@@ -23,7 +22,7 @@ namespace uhd{
std::string bytes_to_string(const byte_vector_t &bytes){
std::string out;
- BOOST_FOREACH(uint8_t byte, bytes){
+ for(uint8_t byte: bytes){
if (byte < 32 or byte > 127) return out;
out += byte;
}
diff --git a/host/lib/types/device_addr.cpp b/host/lib/types/device_addr.cpp
index 747f61b8d..69380fa26 100644
--- a/host/lib/types/device_addr.cpp
+++ b/host/lib/types/device_addr.cpp
@@ -18,7 +18,6 @@
#include <uhd/types/device_addr.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/tokenizer.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <stdexcept>
@@ -38,10 +37,10 @@ static std::string trim(const std::string &in){
(inp, boost::char_separator<char>(sep))
device_addr_t::device_addr_t(const std::string &args){
- BOOST_FOREACH(const std::string &pair, tokenizer(args, arg_delim)){
+ for(const std::string &pair: tokenizer(args, arg_delim)){
if (trim(pair) == "") continue;
std::vector<std::string> toks;
- BOOST_FOREACH(const std::string &tok, tokenizer(pair, pair_delim)){
+ for(const std::string &tok: tokenizer(pair, pair_delim)){
toks.push_back(tok);
}
if (toks.size() == 1) toks.push_back(""); //pad empty value
@@ -57,7 +56,7 @@ std::string device_addr_t::to_pp_string(void) const{
std::stringstream ss;
ss << "Device Address:" << std::endl;
- BOOST_FOREACH(std::string key, this->keys()){
+ for(std::string key: this->keys()){
ss << boost::format(" %s: %s") % key % this->get(key) << std::endl;
}
return ss.str();
@@ -66,13 +65,13 @@ std::string device_addr_t::to_pp_string(void) const{
std::string device_addr_t::to_string(void) const{
std::string args_str;
size_t count = 0;
- BOOST_FOREACH(const std::string &key, this->keys()){
+ for(const std::string &key: this->keys()){
args_str += ((count++)? arg_delim : "") + key + pair_delim + this->get(key);
}
return args_str;
}
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
device_addrs_t uhd::separate_device_addr(const device_addr_t &dev_addr){
//------------ support old deprecated way and print warning --------
@@ -84,7 +83,7 @@ device_addrs_t uhd::separate_device_addr(const device_addr_t &dev_addr){
for (size_t i = 0; i < addrs.size(); i++){
fixed_dev_addr[str(boost::format("addr%d") % i)] = addrs[i];
}
- UHD_MSG(warning) <<
+ UHD_LOGGER_WARNING("UHD") <<
"addr = <space separated list of ip addresses> is deprecated.\n"
"To address a multi-device, use multiple <key><index> = <val>.\n"
"See the USRP-NXXX application notes. Two device example:\n"
@@ -97,7 +96,7 @@ device_addrs_t uhd::separate_device_addr(const device_addr_t &dev_addr){
//------------------------------------------------------------------
device_addrs_t dev_addrs(1); //must be at least one (obviously)
std::vector<std::string> global_keys; //keys that apply to all (no numerical suffix)
- BOOST_FOREACH(const std::string &key, dev_addr.keys()){
+ for(const std::string &key: dev_addr.keys()){
boost::cmatch matches;
if (not boost::regex_match(key.c_str(), matches, boost::regex("^(\\D+)(\\d*)$"))){
throw std::runtime_error("unknown key format: " + key);
@@ -114,8 +113,8 @@ device_addrs_t uhd::separate_device_addr(const device_addr_t &dev_addr){
}
//copy the global settings across all device addresses
- BOOST_FOREACH(device_addr_t &my_dev_addr, dev_addrs){
- BOOST_FOREACH(const std::string &global_key, global_keys){
+ for(device_addr_t &my_dev_addr: dev_addrs){
+ for(const std::string &global_key: global_keys){
my_dev_addr[global_key] = dev_addr[global_key];
}
}
@@ -125,7 +124,7 @@ device_addrs_t uhd::separate_device_addr(const device_addr_t &dev_addr){
device_addr_t uhd::combine_device_addrs(const device_addrs_t &dev_addrs){
device_addr_t dev_addr;
for (size_t i = 0; i < dev_addrs.size(); i++){
- BOOST_FOREACH(const std::string &key, dev_addrs[i].keys()){
+ for(const std::string &key: dev_addrs[i].keys()){
dev_addr[str(boost::format("%s%d") % key % i)] = dev_addrs[i][key];
}
}
diff --git a/host/lib/types/mac_addr.cpp b/host/lib/types/mac_addr.cpp
index ab71bc0c3..2e5651558 100644
--- a/host/lib/types/mac_addr.cpp
+++ b/host/lib/types/mac_addr.cpp
@@ -18,7 +18,6 @@
#include <uhd/types/mac_addr.hpp>
#include <uhd/exception.hpp>
#include <boost/tokenizer.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <stdint.h>
#include <sstream>
@@ -45,7 +44,7 @@ mac_addr_t mac_addr_t::from_string(const std::string &mac_addr_str){
//split the mac addr hex string at the colons
boost::tokenizer<boost::char_separator<char> > hex_num_toks(
mac_addr_str, boost::char_separator<char>(":"));
- BOOST_FOREACH(const std::string &hex_str, hex_num_toks){
+ for(const std::string &hex_str: hex_num_toks){
int hex_num;
std::istringstream iss(hex_str);
iss >> std::hex >> hex_num;
@@ -68,7 +67,7 @@ byte_vector_t mac_addr_t::to_bytes(void) const{
std::string mac_addr_t::to_string(void) const{
std::string addr = "";
- BOOST_FOREACH(uint8_t byte, this->to_bytes()){
+ for(uint8_t byte: this->to_bytes()){
addr += str(boost::format("%s%02x") % ((addr == "")?"":":") % int(byte));
}
return addr;
diff --git a/host/lib/types/ranges.cpp b/host/lib/types/ranges.cpp
index 82a9a84e1..d22e2fb6a 100644
--- a/host/lib/types/ranges.cpp
+++ b/host/lib/types/ranges.cpp
@@ -18,7 +18,6 @@
#include <uhd/types/ranges.hpp>
#include <uhd/exception.hpp>
#include <boost/math/special_functions/round.hpp>
-#include <boost/foreach.hpp>
#include <algorithm>
#include <sstream>
@@ -64,6 +63,18 @@ const std::string range_t::to_pp_string(void) const{
return ss.str();
}
+bool range_t::operator==(const range_t &other) const{
+ return (other._start == _start and
+ other._step == _step and
+ other._stop == _stop);
+}
+
+bool range_t::operator!=(const range_t &other) const{
+ return (other._start != _start or
+ other._step != _step or
+ other._stop != _stop);
+}
+
/***********************************************************************
* meta_range_t implementation code
**********************************************************************/
@@ -93,7 +104,7 @@ meta_range_t::meta_range_t(
double meta_range_t::start(void) const{
check_meta_range_monotonic(*this);
double min_start = this->front().start();
- BOOST_FOREACH(const range_t &r, (*this)){
+ for(const range_t &r: (*this)){
min_start = std::min(min_start, r.start());
}
return min_start;
@@ -102,7 +113,7 @@ double meta_range_t::start(void) const{
double meta_range_t::stop(void) const{
check_meta_range_monotonic(*this);
double max_stop = this->front().stop();
- BOOST_FOREACH(const range_t &r, (*this)){
+ for(const range_t &r: (*this)){
max_stop = std::max(max_stop, r.stop());
}
return max_stop;
@@ -112,7 +123,7 @@ double meta_range_t::step(void) const{
check_meta_range_monotonic(*this);
std::vector<double> non_zero_steps;
range_t last = this->front();
- BOOST_FOREACH(const range_t &r, (*this)){
+ for(const range_t &r: (*this)){
//steps at each range
if (r.step() > 0) non_zero_steps.push_back(r.step());
//and steps in-between ranges
@@ -128,7 +139,7 @@ double meta_range_t::step(void) const{
double meta_range_t::clip(double value, bool clip_step) const{
check_meta_range_monotonic(*this);
double last_stop = this->front().stop();
- BOOST_FOREACH(const range_t &r, (*this)){
+ for(const range_t &r: (*this)){
//in-between ranges, clip to nearest
if (value < r.start()){
return (std::abs(value - r.start()) < std::abs(value - last_stop))?
@@ -147,7 +158,7 @@ double meta_range_t::clip(double value, bool clip_step) const{
const std::string meta_range_t::to_pp_string(void) const{
std::stringstream ss;
- BOOST_FOREACH(const range_t &r, (*this)){
+ for(const range_t &r: (*this)){
ss << r.to_pp_string() << std::endl;
}
return ss.str();
diff --git a/host/lib/types/sensors.cpp b/host/lib/types/sensors.cpp
index 0406e35d4..5ac48dc4b 100644
--- a/host/lib/types/sensors.cpp
+++ b/host/lib/types/sensors.cpp
@@ -17,7 +17,6 @@
#include <uhd/types/sensors.hpp>
#include <uhd/exception.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/format.hpp>
using namespace uhd;
@@ -92,11 +91,11 @@ bool sensor_value_t::to_bool(void) const{
}
signed sensor_value_t::to_int(void) const{
- return boost::lexical_cast<signed>(value);
+ return std::stoi(value);
}
double sensor_value_t::to_real(void) const{
- return boost::lexical_cast<double>(value);
+ return std::stod(value);
}
sensor_value_t& sensor_value_t::operator=(const sensor_value_t& rhs)
diff --git a/host/lib/types/sensors_c.cpp b/host/lib/types/sensors_c.cpp
index f1976c102..cec4fbaff 100644
--- a/host/lib/types/sensors_c.cpp
+++ b/host/lib/types/sensors_c.cpp
@@ -16,12 +16,9 @@
//
#include <uhd/types/sensors.h>
-
-#include <boost/lexical_cast.hpp>
-
#include <stdexcept>
-#include <string.h>
#include <string>
+#include <string.h>
uhd_error uhd_sensor_value_make_from_bool(
uhd_sensor_value_handle* h,
diff --git a/host/lib/types/sid.cpp b/host/lib/types/sid.cpp
index b697bd614..40f84a2aa 100644
--- a/host/lib/types/sid.cpp
+++ b/host/lib/types/sid.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2014 Ettus Research LLC
+// Copyright 2014-2016 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
@@ -15,12 +15,12 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
+#include <uhd/types/sid.hpp>
+#include <uhd/exception.hpp>
+#include <uhd/utils/cast.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
-#include <uhd/exception.hpp>
-#include <uhd/types/sid.hpp>
-#include <uhd/utils/cast.hpp>
using namespace uhd;
@@ -141,7 +141,7 @@ void sid_t::set_dst_blockport(uint32_t new_blockport)
set_sid((_sid & 0xFFFFFFF0) | ((new_blockport & 0xF) << 0));
}
-sid_t sid_t::reversed()
+sid_t sid_t::reversed() const
{
return sid_t((get_dst() << 16) | get_src());
}
diff --git a/host/lib/uhd.rc.in b/host/lib/uhd.rc.in
index 24177a00a..dee6bb8a3 100644
--- a/host/lib/uhd.rc.in
+++ b/host/lib/uhd.rc.in
@@ -1,8 +1,8 @@
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
- FILEVERSION @TRIMMED_VERSION_MAJOR_API@,@TRIMMED_VERSION_ABI@,@RC_TRIMMED_VERSION_PATCH@,@UHD_GIT_COUNT@
- PRODUCTVERSION @TRIMMED_VERSION_MAJOR_API@,@TRIMMED_VERSION_ABI@,@RC_TRIMMED_VERSION_PATCH@,@UHD_GIT_COUNT@
+ FILEVERSION @RC_VERSION_MAJOR_API@,@UHD_VERSION_ABI@,@RC_VERSION_PATCH@,@UHD_GIT_COUNT@
+ PRODUCTVERSION @RC_VERSION_MAJOR_API@,@UHD_VERSION_ABI@,@RC_VERSION_PATCH@,@UHD_GIT_COUNT@
FILEFLAGSMASK 0x3fL
#ifndef NDEBUG
FILEFLAGS 0x0L
diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp
index 1a38bf3b7..27af43c48 100644
--- a/host/lib/usrp/b100/b100_impl.cpp
+++ b/host/lib/usrp/b100/b100_impl.cpp
@@ -19,7 +19,7 @@
#include "b100_impl.hpp"
#include "b100_regs.hpp"
#include <uhd/transport/usb_control.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/cast.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/static.hpp>
@@ -29,7 +29,6 @@
#include <boost/assign/list_of.hpp>
#include <boost/filesystem.hpp>
#include <boost/thread/thread.hpp>
-#include <boost/lexical_cast.hpp>
#include <cstdio>
#include <iostream>
@@ -73,17 +72,17 @@ static device_addrs_t b100_find(const device_addr_t &hint)
//find the usrps and load firmware
size_t found = 0;
- BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) {
+ for(usb_device_handle::sptr handle: usb_device_handle::get_device_list(vid, pid)) {
//extract the firmware path for the b100
std::string b100_fw_image;
try{
b100_fw_image = find_image_path(hint.get("fw", B100_FW_FILE_NAME));
}
catch(...){
- UHD_MSG(warning) << boost::format("Could not locate B100 firmware. %s\n") % print_utility_error("uhd_images_downloader.py");
+ UHD_LOGGER_WARNING("B100") << boost::format("Could not locate B100 firmware. %s\n") % print_utility_error("uhd_images_downloader.py");
return b100_addrs;
}
- UHD_LOG << "the firmware image: " << b100_fw_image << std::endl;
+ UHD_LOGGER_DEBUG("B100") << "the firmware image: " << b100_fw_image ;
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -102,7 +101,7 @@ static device_addrs_t b100_find(const device_addr_t &hint)
//search for the device until found or timeout
while (boost::get_system_time() < timeout_time and b100_addrs.empty() and found != 0)
{
- BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid))
+ for(usb_device_handle::sptr handle: usb_device_handle::get_device_list(vid, pid))
{
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -161,7 +160,7 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
//locate the matching handle in the device list
usb_device_handle::sptr handle;
- BOOST_FOREACH(usb_device_handle::sptr dev_handle, device_list) {
+ for(usb_device_handle::sptr dev_handle: device_list) {
if (dev_handle->get_serial() == device_addr["serial"]){
handle = dev_handle;
break;
@@ -202,9 +201,9 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
//try reset once in the case of failure
catch(const uhd::exception &ex){
if (initialization_count > 1) throw;
- UHD_MSG(warning) <<
+ UHD_LOGGER_WARNING("B100") <<
"The control endpoint was left in a bad state.\n"
- "Attempting endpoint re-enumeration...\n" << ex.what() << std::endl;
+ "Attempting endpoint re-enumeration...\n" << ex.what() ;
_fifo_ctrl.reset();
_ctrl_transport.reset();
_fx2_ctrl->usrp_fx2_reset();
@@ -230,9 +229,9 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
//try reset once in the case of failure
catch(const uhd::exception &){
if (initialization_count > 1) throw;
- UHD_MSG(warning) <<
+ UHD_LOGGER_WARNING("B100") <<
"The control endpoint was left in a bad state.\n"
- "Attempting endpoint re-enumeration...\n" << std::endl;
+ "Attempting endpoint re-enumeration...\n" ;
_fifo_ctrl.reset();
_ctrl_transport.reset();
_fx2_ctrl->usrp_fx2_reset();
@@ -478,12 +477,12 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
//bind frontend corrections to the dboard freq props
const fs_path db_tx_fe_path = mb_path / "dboards" / "A" / "tx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_tx_fe_path)){
+ for(const std::string &name: _tree->list(db_tx_fe_path)){
_tree->access<double>(db_tx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&b100_impl::set_tx_fe_corrections, this, _1));
}
const fs_path db_rx_fe_path = mb_path / "dboards" / "A" / "rx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_rx_fe_path)){
+ for(const std::string &name: _tree->list(db_rx_fe_path)){
_tree->access<double>(db_rx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&b100_impl::set_rx_fe_corrections, this, _1));
}
@@ -504,10 +503,10 @@ b100_impl::b100_impl(const device_addr_t &device_addr){
.add_coerced_subscriber(boost::bind(&b100_clock_ctrl::set_fpga_clock_rate, _clock_ctrl, _1));
//reset cordic rates and their properties to zero
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "freq" / "value").set(0.0);
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "tx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "tx_dsps")){
_tree->access<double>(mb_path / "tx_dsps" / name / "freq" / "value").set(0.0);
}
diff --git a/host/lib/usrp/b100/clock_ctrl.cpp b/host/lib/usrp/b100/clock_ctrl.cpp
index 5700a321a..010a0a6f8 100644
--- a/host/lib/usrp/b100/clock_ctrl.cpp
+++ b/host/lib/usrp/b100/clock_ctrl.cpp
@@ -18,14 +18,13 @@
#include "clock_ctrl.hpp"
#include "ad9522_regs.hpp"
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/exception.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/safe_call.hpp>
#include <stdint.h>
#include "b100_regs.hpp" //spi slave constants
#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/thread/thread.hpp>
#include <boost/math/common_factor_rt.hpp> //gcd
@@ -149,11 +148,11 @@ static clock_settings_type get_clock_settings(double rate){
cs.chan_divider /= cs.vco_divider;
}
- UHD_LOGV(always)
- << "gcd " << gcd << std::endl
- << "X " << X << std::endl
- << "Y " << Y << std::endl
- << cs.to_pp_string() << std::endl
+ UHD_LOGGER_DEBUG("B100")
+ << "gcd: " << gcd
+ << " X: " << X
+ << " Y: " << Y
+ << cs.to_pp_string()
;
//filter limits on the counters
@@ -167,7 +166,7 @@ static clock_settings_type get_clock_settings(double rate){
if (cs.get_vco_rate() < 1400e6 + vco_bound_pad) continue;
if (cs.get_out_rate() != rate) continue;
- UHD_MSG(status) << "USRP-B100 clock control: " << i << std::endl << cs.to_pp_string() << std::endl;
+ UHD_LOGGER_INFO("B100") << "USRP-B100 clock control: " << i << cs.to_pp_string() ;
return cs;
}
}
@@ -466,7 +465,7 @@ private:
void send_reg(uint16_t addr){
uint32_t reg = _ad9522_regs.get_write_reg(addr);
- UHD_LOGV(often) << "clock control write reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("B100") << "clock control write reg: " << std::hex << reg ;
byte_vector_t buf;
buf.push_back(uint8_t(reg >> 16));
buf.push_back(uint8_t(reg >> 8));
@@ -502,7 +501,7 @@ private:
_ad9522_regs.set_reg(addr, reg);
if (_ad9522_regs.vco_calibration_finished) goto wait_for_ld;
}
- UHD_MSG(error) << "USRP-B100 clock control: VCO calibration timeout" << std::endl;
+ UHD_LOGGER_ERROR("B100") << "USRP-B100 clock control: VCO calibration timeout";
wait_for_ld:
//wait for digital lock detect:
for (size_t ms10 = 0; ms10 < 100; ms10++){
@@ -511,7 +510,7 @@ private:
_ad9522_regs.set_reg(addr, reg);
if (_ad9522_regs.digital_lock_detect) return;
}
- UHD_MSG(error) << "USRP-B100 clock control: lock detection timeout" << std::endl;
+ UHD_LOGGER_ERROR("B100") << "USRP-B100 clock control: lock detection timeout";
}
void soft_sync(void){
@@ -533,7 +532,7 @@ private:
;
//write initial register values and latch/update
- BOOST_FOREACH(const range_t &range, ranges){
+ for(const range_t &range: ranges){
for(uint16_t addr = range.first; addr <= range.second; addr++){
this->send_reg(addr);
}
diff --git a/host/lib/usrp/b100/codec_ctrl.cpp b/host/lib/usrp/b100/codec_ctrl.cpp
index e78608beb..01fd51f52 100644
--- a/host/lib/usrp/b100/codec_ctrl.cpp
+++ b/host/lib/usrp/b100/codec_ctrl.cpp
@@ -259,7 +259,7 @@ void b100_codec_ctrl_impl::write_aux_dac(aux_dac_t which, double volts){
**********************************************************************/
void b100_codec_ctrl_impl::send_reg(uint8_t addr){
uint32_t reg = _ad9862_regs.get_write_reg(addr);
- UHD_LOGV(rarely) << "codec control write reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("B100") << "codec control write reg: " << std::hex << reg ;
_iface->transact_spi(
B100_SPI_SS_AD9862,
spi_config_t::EDGE_RISE,
@@ -269,13 +269,13 @@ void b100_codec_ctrl_impl::send_reg(uint8_t addr){
void b100_codec_ctrl_impl::recv_reg(uint8_t addr){
uint32_t reg = _ad9862_regs.get_read_reg(addr);
- UHD_LOGV(rarely) << "codec control read reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("B100") << "codec control read reg: " << std::hex << reg ;
uint32_t ret = _iface->transact_spi(
B100_SPI_SS_AD9862,
spi_config_t::EDGE_RISE,
reg, 16, true /*rb*/
);
- UHD_LOGV(rarely) << "codec control read ret: " << std::hex << uint16_t(ret & 0xFF) << std::endl;
+ UHD_LOGGER_TRACE("B100") << "codec control read ret: " << std::hex << uint16_t(ret & 0xFF) ;
_ad9862_regs.set_reg(addr, uint8_t(ret&0xff));
}
diff --git a/host/lib/usrp/b100/io_impl.cpp b/host/lib/usrp/b100/io_impl.cpp
index c1810ed8c..7cccc7752 100644
--- a/host/lib/usrp/b100/io_impl.cpp
+++ b/host/lib/usrp/b100/io_impl.cpp
@@ -23,7 +23,7 @@
#include <boost/format.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <boost/make_shared.hpp>
@@ -36,10 +36,10 @@ void b100_impl::update_rates(void){
_tree->access<double>(mb_path / "tick_rate").update();
//and now that the tick rate is set, init the host rates to something
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "rate" / "value").update();
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "tx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "tx_dsps")){
_tree->access<double>(mb_path / "tx_dsps" / name / "rate" / "value").update();
}
}
diff --git a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp
index d57d57f21..ea3e9f87e 100644
--- a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp
+++ b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp
@@ -18,10 +18,9 @@
#include <uhd/transport/usb_zero_copy.hpp>
#include <uhd/transport/buffer_pool.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/atomic.hpp>
-#include <boost/foreach.hpp>
#include <boost/make_shared.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
diff --git a/host/lib/usrp/b200/b200_iface.cpp b/host/lib/usrp/b200/b200_iface.cpp
index 6f9bdd330..3d969dfa6 100644
--- a/host/lib/usrp/b200/b200_iface.cpp
+++ b/host/lib/usrp/b200/b200_iface.cpp
@@ -19,7 +19,7 @@
#include "../../utils/ihex.hpp"
#include <uhd/config.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <boost/functional/hash.hpp>
@@ -211,9 +211,10 @@ public:
void load_firmware(const std::string filestring, UHD_UNUSED(bool force) = false)
{
- if (load_img_msg)
- UHD_MSG(status) << "Loading firmware image: "
- << filestring << "..." << std::flush;
+ if (load_img_msg) {
+ UHD_LOGGER_INFO("B200") << "Loading firmware image: "
+ << filestring << "...";
+ }
ihex_reader file_reader(filestring);
try {
@@ -227,7 +228,6 @@ public:
throw uhd::io_error(str(boost::format("Could not load firmware: \n%s") % e.what()));
}
- UHD_MSG(status) << std::endl;
//TODO
//usrp_set_firmware_hash(hash); //set hash before reset
@@ -446,8 +446,10 @@ public:
wait_count++;
} while(fx3_state != FX3_STATE_FPGA_READY);
- if (load_img_msg) UHD_MSG(status) << "Loading FPGA image: " \
- << filestring << "..." << std::flush;
+ if (load_img_msg) {
+ UHD_LOGGER_INFO("B200") << "Loading FPGA image: "
+ << filestring << "...";
+ }
bytes_to_xfer = 1;
ret = fx3_control_write(B200_VREQ_FPGA_START, 0, 0, out_buff, bytes_to_xfer, 1000);
@@ -485,15 +487,20 @@ public:
else if (nwritten != transfer_count)
throw uhd::io_error((boost::format("load_fpga: short write while transferring bitstream to FX3 (expecting: %d, returned: %d)") % transfer_count % nwritten).str());
+ const size_t LOG_GRANULARITY = 10; // %. Keep this an integer divisor of 100.
if (load_img_msg)
{
- if (bytes_sent == 0) UHD_MSG(status) << " 0%" << std::flush;
- const size_t percent_before = size_t((bytes_sent*100)/file_size);
+ if (bytes_sent == 0) UHD_LOGGER_DEBUG("B200") << " 0%" << std::flush;
+ const size_t percent_before =
+ size_t((bytes_sent*100)/file_size) -
+ (size_t((bytes_sent*100)/file_size) % LOG_GRANULARITY);
bytes_sent += transfer_count;
- const size_t percent_after = size_t((bytes_sent*100)/file_size);
+ const size_t percent_after =
+ size_t((bytes_sent*100)/file_size) -
+ (size_t((bytes_sent*100)/file_size) % LOG_GRANULARITY);
if (percent_before != percent_after)
{
- UHD_MSG(status) << "\b\b\b\b" << std::setw(3) << percent_after << "%" << std::flush;
+ UHD_LOGGER_DEBUG("B200") << std::setw(3) << percent_after << "%";
}
}
}
@@ -515,8 +522,9 @@ public:
usrp_set_fpga_hash(hash);
- if (load_img_msg)
- UHD_MSG(status) << "\b\b\b\b done" << std::endl;
+ if (load_img_msg) {
+ UHD_LOGGER_DEBUG("B200") << "FPGA image loaded!";
+ }
return 0;
}
diff --git a/host/lib/usrp/b200/b200_image_loader.cpp b/host/lib/usrp/b200/b200_image_loader.cpp
index b9c2c0caf..af79a59fc 100644
--- a/host/lib/usrp/b200/b200_image_loader.cpp
+++ b/host/lib/usrp/b200/b200_image_loader.cpp
@@ -16,7 +16,6 @@
//
#include <boost/assign.hpp>
-#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#include <uhd/exception.hpp>
@@ -45,7 +44,7 @@ static b200_iface::sptr get_b200_iface(const image_loader::image_loader_args_t&
mboard_eeprom_t eeprom; // Internal use
if(dev_handles.size() > 0){
- BOOST_FOREACH(usb_device_handle::sptr dev_handle, dev_handles){
+ for(usb_device_handle::sptr dev_handle: dev_handles){
if(dev_handle->firmware_loaded()){
iface = b200_iface::make(usb_control::make(dev_handle,0));
eeprom = mboard_eeprom_t(*iface, "B200");
@@ -74,7 +73,7 @@ static b200_iface::sptr get_b200_iface(const image_loader::image_loader_args_t&
std::string err_msg = "Could not resolve given args to a single B2XX device.\n"
"Applicable devices:\n";
- BOOST_FOREACH(usb_device_handle::sptr dev_handle, applicable_dev_handles){
+ for(usb_device_handle::sptr dev_handle: applicable_dev_handles){
eeprom = mboard_eeprom_t(*b200_iface::make(usb_control::make(dev_handle,0)), "B200");
err_msg += str(boost::format(" * %s (serial=%s)\n")
% B2XX_STR_NAMES.get(get_b200_product(dev_handle, mb_eeprom), "B2XX")
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index e2a0e0b70..a513e1336 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -19,7 +19,7 @@
#include "b200_regs.hpp"
#include <uhd/config.hpp>
#include <uhd/transport/usb_control.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/cast.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/static.hpp>
@@ -60,7 +60,7 @@ public:
}
}
clocking_mode_t get_clocking_mode() {
- return AD9361_XTAL_N_CLK_PATH;
+ return clocking_mode_t::AD9361_XTAL_N_CLK_PATH;
}
digital_interface_mode_t get_digital_interface_mode() {
return AD9361_DDR_FDD_LVCMOS;
@@ -88,7 +88,7 @@ public:
}
}
clocking_mode_t get_clocking_mode() {
- return AD9361_XTAL_N_CLK_PATH;
+ return clocking_mode_t::AD9361_XTAL_N_CLK_PATH;
}
digital_interface_mode_t get_digital_interface_mode() {
return AD9361_DDR_FDD_LVCMOS;
@@ -172,7 +172,7 @@ static device_addrs_t b200_find(const device_addr_t &hint)
//Return an empty list of addresses when an address or resource is specified,
//since an address and resource is intended for a different, non-USB, device.
- BOOST_FOREACH(device_addr_t hint_i, separate_device_addr(hint)) {
+ for(device_addr_t hint_i: separate_device_addr(hint)) {
if (hint_i.has_key("addr") || hint_i.has_key("resource")) return b200_addrs;
}
@@ -182,7 +182,7 @@ static device_addrs_t b200_find(const device_addr_t &hint)
// so that re-enumeration after fw load can occur successfully.
// This requirement is a courtesy of libusb1.0 on windows.
size_t found = 0;
- BOOST_FOREACH(usb_device_handle::sptr handle, get_b200_device_handles(hint)) {
+ for(usb_device_handle::sptr handle: get_b200_device_handles(hint)) {
//extract the firmware path for the b200
std::string b200_fw_image;
try{
@@ -190,10 +190,10 @@ static device_addrs_t b200_find(const device_addr_t &hint)
b200_fw_image = uhd::find_image_path(b200_fw_image, STR(UHD_IMAGES_DIR)); // FIXME
}
catch(uhd::exception &e){
- UHD_MSG(warning) << e.what();
+ UHD_LOGGER_WARNING("B200") << e.what();
return b200_addrs;
}
- UHD_LOG << "the firmware image: " << b200_fw_image << std::endl;
+ UHD_LOGGER_DEBUG("B200") << "the firmware image: " << b200_fw_image ;
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -213,7 +213,7 @@ static device_addrs_t b200_find(const device_addr_t &hint)
//search for the device until found or timeout
while (boost::get_system_time() < timeout_time and b200_addrs.empty() and found != 0)
{
- BOOST_FOREACH(usb_device_handle::sptr handle, get_b200_device_handles(hint))
+ for(usb_device_handle::sptr handle: get_b200_device_handles(hint))
{
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -261,7 +261,7 @@ static device::sptr b200_make(const device_addr_t &device_addr)
return device::sptr(new b200_impl(device_addr, handle));
}
catch (const uhd::usb_error &) {
- UHD_MSG(status) << "Detected bad USB state; resetting." << std::endl;
+ UHD_LOGGER_INFO("B200") << "Detected bad USB state; resetting." ;
libusb::device_handle::sptr dev_handle(libusb::device_handle::get_cached_handle(
boost::static_pointer_cast<libusb::special_handle>(handle)->get_device()
));
@@ -344,7 +344,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
std::vector<usb_device_handle::sptr> device_list = usb_device_handle::get_device_list(vid_pid_pair_list);
//locate the matching handle in the device list
- BOOST_FOREACH(usb_device_handle::sptr dev_handle, device_list) {
+ for(usb_device_handle::sptr dev_handle: device_list) {
try {
if (dev_handle->get_serial() == device_addr["serial"]){
handle = dev_handle;
@@ -390,7 +390,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
_revision = boost::lexical_cast<size_t>(mb_eeprom["revision"]);
}
- UHD_MSG(status) << "Detected Device: " << B2XX_STR_NAMES[_product] << std::endl;
+ UHD_LOGGER_INFO("B200") << "Detected Device: " << B2XX_STR_NAMES[_product] ;
_gpsdo_capable = (not (_product == B200MINI or _product == B205MINI));
@@ -437,7 +437,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
// Create control transport
////////////////////////////////////////////////////////////////////
uint8_t usb_speed = _iface->get_usb_speed();
- UHD_MSG(status) << "Operating over USB " << (int) usb_speed << "." << std::endl;
+ UHD_LOGGER_INFO("B200") << "Operating over USB " << (int) usb_speed << "." ;
const std::string min_frame_size = (usb_speed == 3) ? "1024" : "512";
device_addr_t ctrl_xport_args;
@@ -488,19 +488,18 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
if ((_local_ctrl->peek32(RB32_CORE_STATUS) & 0xff) != B200_GPSDO_ST_NONE)
{
- UHD_MSG(status) << "Detecting internal GPSDO.... " << std::flush;
+ UHD_LOGGER_INFO("B200") << "Detecting internal GPSDO.... " << std::flush;
try
{
_gps = gps_ctrl::make(_async_task_data->gpsdo_uart);
}
catch(std::exception &e)
{
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("B200") << "An error occurred making GPSDO control: " << e.what();
}
if (_gps and _gps->gps_detected())
{
- //UHD_MSG(status) << "found" << std::endl;
- BOOST_FOREACH(const std::string &name, _gps->get_sensors())
+ for(const std::string &name: _gps->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, _gps, name));
@@ -553,7 +552,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
////////////////////////////////////////////////////////////////////
// Init codec - turns on clocks
////////////////////////////////////////////////////////////////////
- UHD_MSG(status) << "Initialize CODEC control..." << std::endl;
+ UHD_LOGGER_INFO("B200") << "Initialize CODEC control..." ;
ad9361_params::sptr client_settings;
if (_product == B200MINI or _product == B205MINI) {
client_settings = boost::make_shared<b2xxmini_ad9361_client_t>();
@@ -610,7 +609,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
////////////////////////////////////////////////////////////////////
// setup radio control
////////////////////////////////////////////////////////////////////
- UHD_MSG(status) << "Initialize Radio control..." << std::endl;
+ UHD_LOGGER_INFO("B200") << "Initialize Radio control..." ;
const size_t num_radio_chains = ((_local_ctrl->peek32(RB32_CORE_STATUS) >> 8) & 0xff);
UHD_ASSERT_THROW(num_radio_chains > 0);
UHD_ASSERT_THROW(num_radio_chains <= 2);
@@ -621,7 +620,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
this->setup_radio(i);
//now test each radio module's connection to the codec interface
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
_codec_mgr->loopback_self_test(
boost::bind(
@@ -641,7 +640,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
.add_coerced_subscriber(boost::bind(&b200_impl::sync_times, this));
_tree->create<time_spec_t>(mb_path / "time" / "pps")
.set_publisher(boost::bind(&time_core_3000::get_time_last_pps, _radio_perifs[0].time64));
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
_tree->access<time_spec_t>(mb_path / "time" / "pps")
.add_coerced_subscriber(boost::bind(&time_core_3000::set_time_next_pps, perif.time64, _1));
@@ -670,7 +669,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
// front panel gpio
////////////////////////////////////////////////////////////////////
_radio_perifs[0].fp_gpio = gpio_atr_3000::make(_radio_perifs[0].ctrl, TOREG(SR_FP_GPIO), RB32_FP_GPIO);
- BOOST_FOREACH(const gpio_attr_map_t::value_type attr, gpio_attr_map)
+ for(const gpio_attr_map_t::value_type attr: gpio_attr_map)
{
_tree->create<uint32_t>(mb_path / "gpio" / "FP0" / attr.second)
.set(0)
@@ -692,7 +691,7 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
////////////////////////////////////////////////////////////////////
// Init the clock rate and the auto mcr appropriately
if (not device_addr.has_key("master_clock_rate")) {
- UHD_MSG(status) << "Setting master clock rate selection to 'automatic'." << std::endl;
+ UHD_LOGGER_INFO("B200") << "Setting master clock rate selection to 'automatic'." ;
}
// We can automatically choose a master clock rate, but not if the user specifies one
const double default_tick_rate = device_addr.cast<double>("master_clock_rate", ad936x_manager::DEFAULT_TICK_RATE);
@@ -701,11 +700,11 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
//subdev spec contains full width of selections
subdev_spec_t rx_spec, tx_spec;
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
{
rx_spec.push_back(subdev_spec_pair_t("A", fe));
}
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
{
tx_spec.push_back(subdev_spec_pair_t("A", fe));
}
@@ -830,7 +829,7 @@ void b200_impl::setup_radio(const size_t dspno)
// create RF frontend interfacing
////////////////////////////////////////////////////////////////////
static const std::vector<direction_t> dirs = boost::assign::list_of(RX_DIRECTION)(TX_DIRECTION);
- BOOST_FOREACH(direction_t dir, dirs) {
+ for(direction_t dir: dirs) {
const std::string x = (dir == RX_DIRECTION) ? "rx" : "tx";
const std::string key = std::string(((dir == RX_DIRECTION) ? "RX" : "TX")) + std::string(((dspno == _fe1) ? "1" : "2"));
const fs_path rf_fe_path
@@ -874,7 +873,7 @@ void b200_impl::setup_radio(const size_t dspno)
void b200_impl::register_loopback_self_test(wb_iface::sptr iface)
{
bool test_fail = false;
- UHD_MSG(status) << "Performing register loopback test... " << std::flush;
+ UHD_LOGGER_INFO("B200") << "Performing register loopback test... " << std::flush;
size_t hash = size_t(time(NULL));
for (size_t i = 0; i < 100; i++)
{
@@ -883,7 +882,7 @@ void b200_impl::register_loopback_self_test(wb_iface::sptr iface)
test_fail = iface->peek32(RB32_TEST) != uint32_t(hash);
if (test_fail) break; //exit loop on any failure
}
- UHD_MSG(status) << ((test_fail)? "fail" : "pass") << std::endl;
+ UHD_LOGGER_INFO("B200") << ((test_fail)? "fail" : "pass") ;
}
/***********************************************************************
@@ -919,20 +918,20 @@ void b200_impl::enforce_tick_rate_limits(size_t chan_count, double tick_rate, co
double b200_impl::set_tick_rate(const double new_tick_rate)
{
- UHD_MSG(status) << (boost::format("Asking for clock rate %.6f MHz... ") % (new_tick_rate/1e6)) << std::flush;
+ UHD_LOGGER_INFO("B200") << (boost::format("Asking for clock rate %.6f MHz... ") % (new_tick_rate/1e6)) << std::flush;
check_tick_rate_with_current_streamers(new_tick_rate); // Defined in b200_io_impl.cpp
// Make sure the clock rate is actually changed before doing
// the full Monty of setting regs and loopback tests etc.
if (std::abs(new_tick_rate - _tick_rate) < 1.0) {
- UHD_MSG(status) << "OK" << std::endl;
+ UHD_LOGGER_INFO("B200") << "OK" ;
return _tick_rate;
}
_tick_rate = _codec_ctrl->set_clock_rate(new_tick_rate);
- UHD_MSG(status) << std::endl << (boost::format("Actually got clock rate %.6f MHz.") % (_tick_rate/1e6)) << std::endl;
+ UHD_LOGGER_INFO("B200") << (boost::format("Actually got clock rate %.6f MHz.") % (_tick_rate/1e6)) ;
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
perif.time64->set_tick_rate(_tick_rate);
perif.time64->self_test();
@@ -1088,7 +1087,7 @@ void b200_impl::update_time_source(const std::string &source)
void b200_impl::set_time(const uhd::time_spec_t& t)
{
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
perif.time64->set_time_sync(t);
_local_ctrl->poke32(TOREG(SR_CORE_SYNC), 1 << 2 | uint32_t(_time_source));
_local_ctrl->poke32(TOREG(SR_CORE_SYNC), _time_source);
diff --git a/host/lib/usrp/b200/b200_io_impl.cpp b/host/lib/usrp/b200/b200_io_impl.cpp
index 0a00b9402..7366b06f5 100644
--- a/host/lib/usrp/b200/b200_io_impl.cpp
+++ b/host/lib/usrp/b200/b200_io_impl.cpp
@@ -45,7 +45,7 @@ void b200_impl::check_tick_rate_with_current_streamers(double rate)
size_t b200_impl::max_chan_count(const std::string &direction /* = "" */)
{
size_t max_count = 0;
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
if ((direction == "RX" or direction.empty()) and not perif.rx_streamer.expired()) {
boost::shared_ptr<sph::recv_packet_streamer> rx_streamer =
@@ -97,7 +97,7 @@ void b200_impl::set_auto_tick_rate(
for (int i = 0; i < 2; i++) { // Loop through rx and tx
std::string dir = (i == 0) ? "tx" : "rx";
// We assume all 'set' DSPs are being used.
- BOOST_FOREACH(const std::string &dsp_no, _tree->list(str(boost::format("/mboards/0/%s_dsps") % dir))) {
+ for(const std::string &dsp_no: _tree->list(str(boost::format("/mboards/0/%s_dsps") % dir))) {
fs_path dsp_path = str(boost::format("/mboards/0/%s_dsps/%s") % dir % dsp_no);
if (dsp_path == tree_dsp_path) {
continue;
@@ -135,9 +135,9 @@ void b200_impl::set_auto_tick_rate(
_tree->access<double>("/mboards/0/tick_rate").set(new_rate);
}
} catch (const uhd::value_error &) {
- UHD_MSG(warning)
- << "Cannot automatically determine an appropriate tick rate for these sampling rates." << std::endl
- << "Consider using different sampling rates, or manually specify a suitable master clock rate." << std::endl;
+ UHD_LOGGER_WARNING("B200")
+ << "Cannot automatically determine an appropriate tick rate for these sampling rates."
+ << "Consider using different sampling rates, or manually specify a suitable master clock rate." ;
return; // Let the others handle this
}
}
@@ -146,14 +146,14 @@ void b200_impl::update_tick_rate(const double new_tick_rate)
{
check_tick_rate_with_current_streamers(new_tick_rate);
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
boost::shared_ptr<sph::recv_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::recv_packet_streamer>(perif.rx_streamer.lock());
if (my_streamer) my_streamer->set_tick_rate(new_tick_rate);
perif.framer->set_tick_rate(new_tick_rate);
}
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
boost::shared_ptr<sph::send_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::send_packet_streamer>(perif.tx_streamer.lock());
@@ -356,7 +356,7 @@ boost::optional<uhd::msg_task::msg_type_t> b200_impl::handle_async_task(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "Error parsing ctrl packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("B200") << "Error parsing ctrl packet: " << ex.what();
break;
}
@@ -370,7 +370,7 @@ boost::optional<uhd::msg_task::msg_type_t> b200_impl::handle_async_task(
//doh!
default:
- UHD_MSG(error) << "Got a ctrl packet with unknown SID " << sid << std::endl;
+ UHD_LOGGER_ERROR("B200") << "Got a ctrl packet with unknown SID " << sid;
}
return boost::none;
}
diff --git a/host/lib/usrp/b200/b200_uart.cpp b/host/lib/usrp/b200/b200_uart.cpp
index 3c49ebf2a..143600c51 100644
--- a/host/lib/usrp/b200/b200_uart.cpp
+++ b/host/lib/usrp/b200/b200_uart.cpp
@@ -20,10 +20,9 @@
#include <uhd/transport/bounded_buffer.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/time_spec.hpp>
#include <uhd/exception.hpp>
-#include <boost/foreach.hpp>
using namespace uhd;
using namespace uhd::transport;
@@ -69,7 +68,7 @@ struct b200_uart_impl : b200_uart
void write_uart(const std::string &buff)
{
- BOOST_FOREACH(const char ch, buff)
+ for(const char ch: buff)
{
this->send_char(ch);
}
diff --git a/host/lib/usrp/common/CMakeLists.txt b/host/lib/usrp/common/CMakeLists.txt
index 9f4cf09b5..9480d0284 100644
--- a/host/lib/usrp/common/CMakeLists.txt
+++ b/host/lib/usrp/common/CMakeLists.txt
@@ -38,5 +38,4 @@ LIBUHD_APPEND_SOURCES(
${CMAKE_CURRENT_SOURCE_DIR}/validate_subdev_spec.cpp
${CMAKE_CURRENT_SOURCE_DIR}/recv_packet_demuxer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/fifo_ctrl_excelsior.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/usrp3_fw_ctrl_iface.cpp
)
diff --git a/host/lib/usrp/common/ad9361_ctrl.cpp b/host/lib/usrp/common/ad9361_ctrl.cpp
index 0dc5e7919..a1c158eae 100644
--- a/host/lib/usrp/common/ad9361_ctrl.cpp
+++ b/host/lib/usrp/common/ad9361_ctrl.cpp
@@ -17,7 +17,7 @@
#include "ad9361_ctrl.hpp"
#include <uhd/types/ranges.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/serial.hpp>
#include <cstring>
#include <boost/format.hpp>
@@ -153,10 +153,10 @@ public:
const double clipped_rate = clock_rate_range.clip(rate);
if (clipped_rate != rate) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("AD936X") << boost::format(
"The requested master_clock_rate %f MHz exceeds bounds imposed by UHD.\n"
"The master_clock_rate has been forced to %f MHz.\n"
- ) % (rate/1e6) % (clipped_rate/1e6) << std::endl;
+ ) % (rate/1e6) % (clipped_rate/1e6) ;
}
double return_rate = _device.set_clock_rate(clipped_rate);
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_client.h b/host/lib/usrp/common/ad9361_driver/ad9361_client.h
index 921045fbd..4fea53521 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_client.h
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_client.h
@@ -34,10 +34,10 @@ typedef enum {
/*!
* Clocking mode
*/
-typedef enum {
+enum class clocking_mode_t {
AD9361_XTAL_P_CLK_PATH,
AD9361_XTAL_N_CLK_PATH
-} clocking_mode_t;
+};
/*!
* Digital interface specific
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
index e2ed2c77d..bed13fd05 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
@@ -24,7 +24,7 @@
#include <cmath>
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <stdint.h>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
@@ -321,7 +321,7 @@ double ad9361_device_t::_calibrate_baseband_rx_analog_filter(double req_rfbw)
double bbbw = req_rfbw / 2.0;
if(bbbw > _baseband_bw / 2.0)
{
- UHD_LOG << "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
+ UHD_LOGGER_DEBUG("AD936X")<< "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
bbbw = _baseband_bw / 2.0;
}
@@ -388,7 +388,7 @@ double ad9361_device_t::_calibrate_baseband_tx_analog_filter(double req_rfbw)
if(bbbw > _baseband_bw / 2.0)
{
- UHD_LOG << "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
+ UHD_LOGGER_DEBUG("AD936X")<< "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
bbbw = _baseband_bw / 2.0;
}
@@ -443,7 +443,7 @@ double ad9361_device_t::_calibrate_secondary_tx_filter(double req_rfbw)
if(bbbw > _baseband_bw / 2.0)
{
- UHD_LOG << "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
+ UHD_LOGGER_DEBUG("AD936X")<< "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
bbbw = _baseband_bw / 2.0;
}
@@ -539,7 +539,7 @@ double ad9361_device_t::_calibrate_rx_TIAs(double req_rfbw)
if(bbbw > _baseband_bw / 2.0)
{
- UHD_LOG << "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
+ UHD_LOGGER_DEBUG("AD936X")<< "baseband bandwidth too large for current sample rate. Setting bandwidth to: "<<_baseband_bw;
bbbw = _baseband_bw / 2.0;
}
@@ -1169,7 +1169,7 @@ void ad9361_device_t::_setup_synth(direction_t direction, double vcorate)
* fed to the public set_clock_rate function. */
double ad9361_device_t::_tune_bbvco(const double rate)
{
- UHD_LOG << boost::format("[ad9361_device_t::_tune_bbvco] rate=%.10f\n") % rate;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_tune_bbvco] rate=%.10f\n") % rate;
/* Let's not re-tune to the same frequency over and over... */
if (freq_is_nearly_equal(rate, _req_coreclk)) {
@@ -1197,13 +1197,13 @@ double ad9361_device_t::_tune_bbvco(const double rate)
if (i == 7)
throw uhd::runtime_error("[ad9361_device_t] _tune_bbvco: wrong vcorate");
- UHD_LOG << boost::format("[ad9361_device_t::_tune_bbvco] vcodiv=%d vcorate=%.10f\n") % vcodiv % vcorate;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_tune_bbvco] vcodiv=%d vcorate=%.10f\n") % vcodiv % vcorate;
/* Fo = Fref * (Nint + Nfrac / mod) */
int nint = static_cast<int>(vcorate / fref);
- UHD_LOG << boost::format("[ad9361_device_t::_tune_bbvco] (nint)=%.10f\n") % (vcorate / fref);
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_tune_bbvco] (nint)=%.10f\n") % (vcorate / fref);
int nfrac = static_cast<int>(boost::math::round(((vcorate / fref) - (double) nint) * (double) modulus));
- UHD_LOG << boost::format("[ad9361_device_t::_tune_bbvco] (nfrac)=%.10f\n") % (((vcorate / fref) - (double) nint) * (double) modulus);
- UHD_LOG << boost::format("[ad9361_device_t::_tune_bbvco] nint=%d nfrac=%d\n") % nint % nfrac;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_tune_bbvco] (nfrac)=%.10f\n") % (((vcorate / fref) - (double) nint) * (double) modulus);
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_tune_bbvco] nint=%d nfrac=%d\n") % nint % nfrac;
double actual_vcorate = fref
* ((double) nint + ((double) nfrac / (double) modulus));
@@ -1381,7 +1381,7 @@ double ad9361_device_t::_setup_rates(const double rate)
/* If we make it into this function, then we are tuning to a new rate.
* Store the new rate. */
_req_clock_rate = rate;
- UHD_LOG << boost::format("[ad9361_device_t::_setup_rates] rate=%.6d\n") % rate;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_setup_rates] rate=%.6d\n") % rate;
/* Set the decimation and interpolation values in the RX and TX chains.
* This also switches filters in / out. Note that all transmitters and
@@ -1454,7 +1454,8 @@ double ad9361_device_t::_setup_rates(const double rate)
_rfir_factor = 2;
} else if ((rate > 58e6) && (rate <= 61.44e6)) {
// RX1 + RX2 enabled, 2, 1, 2, 2
- _regs.rxfilt = B8(11010110);
+ _regs.rxfilt = B8(11001110);
+
// TX1 + TX2 enabled, 2, 1, 1, 2
_regs.txfilt = B8(11010010);
@@ -1467,7 +1468,7 @@ double ad9361_device_t::_setup_rates(const double rate)
throw uhd::runtime_error("[ad9361_device_t] [_setup_rates] INVALID_CODE_PATH");
}
- UHD_LOG << boost::format("[ad9361_device_t::_setup_rates] divfactor=%d\n") % divfactor;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_setup_rates] divfactor=%d\n") % divfactor;
/* Tune the BBPLL to get the ADC and DAC clocks. */
const double adcclk = _tune_bbvco(rate * divfactor);
@@ -1489,7 +1490,7 @@ double ad9361_device_t::_setup_rates(const double rate)
_io_iface->poke8(0x004, _regs.inputsel);
_io_iface->poke8(0x00A, _regs.bbpll);
- UHD_LOG << boost::format("[ad9361_device_t::_setup_rates] adcclk=%f\n") % adcclk;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::_setup_rates] adcclk=%f\n") % adcclk;
_baseband_bw = (adcclk / divfactor);
/*
@@ -1583,11 +1584,11 @@ void ad9361_device_t::initialize()
/* Enable clocks. */
switch (_client_params->get_clocking_mode()) {
- case AD9361_XTAL_N_CLK_PATH: {
+ case clocking_mode_t::AD9361_XTAL_N_CLK_PATH: {
_io_iface->poke8(0x009, 0x17);
} break;
- case AD9361_XTAL_P_CLK_PATH: {
+ case clocking_mode_t::AD9361_XTAL_P_CLK_PATH: {
_io_iface->poke8(0x009, 0x07);
_io_iface->poke8(0x292, 0x08);
_io_iface->poke8(0x293, 0x80);
@@ -1798,7 +1799,7 @@ double ad9361_device_t::set_clock_rate(const double req_rate)
throw uhd::runtime_error("[ad9361_device_t] Requested master clock rate outside range");
}
- UHD_LOG << boost::format("[ad9361_device_t::set_clock_rate] req_rate=%.10f\n") % req_rate;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::set_clock_rate] req_rate=%.10f\n") % req_rate;
/* UHD has a habit of requesting the same rate like four times when it
* starts up. This prevents that, and any bugs in user code that request
@@ -1840,7 +1841,7 @@ double ad9361_device_t::set_clock_rate(const double req_rate)
* all the hard work gets done. */
double rate = _setup_rates(req_rate);
- UHD_LOG << boost::format("[ad9361_device_t::set_clock_rate] rate=%.10f\n") % rate;
+ UHD_LOGGER_TRACE("AD936X")<< boost::format("[ad9361_device_t::set_clock_rate] rate=%.10f\n") % rate;
/* Transition to the ALERT state and calibrate everything. */
_io_iface->poke8(0x015, 0x04); //dual synth mode, synth en ctrl en
diff --git a/host/lib/usrp/common/ad936x_manager.cpp b/host/lib/usrp/common/ad936x_manager.cpp
index 2b6d69c15..503678554 100644
--- a/host/lib/usrp/common/ad936x_manager.cpp
+++ b/host/lib/usrp/common/ad936x_manager.cpp
@@ -16,8 +16,7 @@
//
#include "ad936x_manager.hpp"
-#include <uhd/utils/msg.hpp>
-#include <boost/foreach.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/functional/hash.hpp>
#include <boost/thread/thread.hpp>
@@ -66,7 +65,7 @@ class ad936x_manager_impl : public ad936x_manager
***********************************************************************/
void init_codec()
{
- BOOST_FOREACH(const std::string &rx_fe, _rx_frontends) {
+ for(const std::string &rx_fe: _rx_frontends) {
_codec_ctrl->set_gain(rx_fe, DEFAULT_GAIN);
_codec_ctrl->set_bw_filter(rx_fe, DEFAULT_BANDWIDTH);
_codec_ctrl->tune(rx_fe, DEFAULT_FREQ);
@@ -74,7 +73,7 @@ class ad936x_manager_impl : public ad936x_manager
_codec_ctrl->set_iq_balance_auto(rx_fe, DEFAULT_AUTO_IQ_BALANCE);
_codec_ctrl->set_agc(rx_fe, DEFAULT_AGC_ENABLE);
}
- BOOST_FOREACH(const std::string &tx_fe, _tx_frontends) {
+ for(const std::string &tx_fe: _tx_frontends) {
_codec_ctrl->set_gain(tx_fe, DEFAULT_GAIN);
_codec_ctrl->set_bw_filter(tx_fe, DEFAULT_BANDWIDTH);
_codec_ctrl->tune(tx_fe, DEFAULT_FREQ);
@@ -98,7 +97,7 @@ class ad936x_manager_impl : public ad936x_manager
) {
// Put AD936x in loopback mode
_codec_ctrl->data_port_loopback(true);
- UHD_MSG(status) << "Performing CODEC loopback test... " << std::flush;
+ UHD_LOGGER_INFO("AD936X") << "Performing CODEC loopback test... ";
size_t hash = size_t(time(NULL));
// Allow some time for AD936x to enter loopback mode.
@@ -127,11 +126,11 @@ class ad936x_manager_impl : public ad936x_manager
bool test_fail = word32 != rb_tx or word32 != rb_rx;
if(test_fail)
{
- UHD_MSG(status) << "fail" << std::endl;
+ UHD_LOGGER_INFO("AD936X") << "CODEC loopback test failed";
throw uhd::runtime_error("CODEC loopback test failed.");
}
}
- UHD_MSG(status) << "pass" << std::endl;
+ UHD_LOGGER_INFO("AD936X") << "CODEC loopback test passed";
// Zero out the idle data.
poker_functor(0);
@@ -194,10 +193,10 @@ class ad936x_manager_impl : public ad936x_manager
bool check_bandwidth(double rate, const std::string dir)
{
if (rate > _codec_ctrl->get_bw_filter_range(dir).stop()) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("AD936X")
<< "Selected " << dir << " bandwidth (" << (rate/1e6) << " MHz) exceeds\n"
<< "analog frontend filter bandwidth (" << (_codec_ctrl->get_bw_filter_range(dir).stop()/1e6) << " MHz)."
- << std::endl;
+ ;
return false;
}
return true;
@@ -218,7 +217,7 @@ class ad936x_manager_impl : public ad936x_manager
}
// Gains
- BOOST_FOREACH(const std::string &name, ad9361_ctrl::get_gain_names(key))
+ for(const std::string &name: ad9361_ctrl::get_gain_names(key))
{
subtree->create<meta_range_t>(uhd::fs_path("gains") / name / "range")
.set(ad9361_ctrl::get_gain_range(key));
@@ -278,7 +277,7 @@ class ad936x_manager_impl : public ad936x_manager
}
// Frontend filters
- BOOST_FOREACH(const std::string &filter_name, _codec_ctrl->get_filter_names(key)) {
+ for(const std::string &filter_name: _codec_ctrl->get_filter_names(key)) {
subtree->create<filter_info_base::sptr>(uhd::fs_path("filters") / filter_name / "value" )
.set_publisher(boost::bind(&ad9361_ctrl::get_filter, _codec_ctrl, key, filter_name))
.add_coerced_subscriber(boost::bind(&ad9361_ctrl::set_filter, _codec_ctrl, key, filter_name, _1));
diff --git a/host/lib/usrp/common/ad936x_manager.hpp b/host/lib/usrp/common/ad936x_manager.hpp
index c456715e3..99464d0af 100644
--- a/host/lib/usrp/common/ad936x_manager.hpp
+++ b/host/lib/usrp/common/ad936x_manager.hpp
@@ -22,6 +22,7 @@
#include <uhd/utils/math.hpp>
#include <uhd/property_tree.hpp>
#include <uhd/types/direction.hpp>
+#include <boost/format.hpp>
#include <boost/shared_ptr.hpp>
#include "ad9361_ctrl.hpp"
#include <stdint.h>
diff --git a/host/lib/usrp/common/adf4001_ctrl.cpp b/host/lib/usrp/common/adf4001_ctrl.cpp
index 01a35dbec..b824824a4 100644
--- a/host/lib/usrp/common/adf4001_ctrl.cpp
+++ b/host/lib/usrp/common/adf4001_ctrl.cpp
@@ -22,7 +22,7 @@
#include "adf4001_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <iostream>
#include <iomanip>
diff --git a/host/lib/usrp/common/adf435x.hpp b/host/lib/usrp/common/adf435x.hpp
index ff7b1a2f4..18d5b70ba 100644
--- a/host/lib/usrp/common/adf435x.hpp
+++ b/host/lib/usrp/common/adf435x.hpp
@@ -268,14 +268,15 @@ public:
adf435x_regs_t::LDF_FRAC_N;
std::string tuning_str = (int_n_mode) ? "Integer-N" : "Fractional";
- UHD_LOGV(often)
- << boost::format("ADF 435X Frequencies (MHz): REQUESTED=%0.9f, ACTUAL=%0.9f"
- ) % (target_freq/1e6) % (actual_freq/1e6) << std::endl
- << boost::format("ADF 435X Intermediates (MHz): Feedback=%0.2f, VCO=%0.2f, PFD=%0.2f, BAND=%0.2f, REF=%0.2f"
- ) % (feedback_freq/1e6) % (vco_freq/1e6) % (pfd_freq/1e6) % (pfd_freq/BS/1e6) % (_reference_freq/1e6) << std::endl
- << boost::format("ADF 435X Tuning: %s") % tuning_str.c_str() << std::endl
- << boost::format("ADF 435X Settings: R=%d, BS=%d, N=%d, FRAC=%d, MOD=%d, T=%d, D=%d, RFdiv=%d"
- ) % R % BS % N % FRAC % MOD % T % D % RFdiv << std::endl;
+ UHD_LOGGER_TRACE("ADF435X")
+ << boost::format("ADF 435X Frequencies (MHz): REQUESTED=%0.9f, ACTUAL=%0.9f")
+ % (target_freq/1e6) % (actual_freq/1e6)
+ << boost::format("ADF 435X Intermediates (MHz): Feedback=%0.2f, VCO=%0.2f, PFD=%0.2f, BAND=%0.2f, REF=%0.2f")
+ % (feedback_freq/1e6) % (vco_freq/1e6) % (pfd_freq/1e6) % (pfd_freq/BS/1e6) % (_reference_freq/1e6)
+ << boost::format("ADF 435X Tuning: %s") % tuning_str.c_str()
+ << boost::format("ADF 435X Settings: R=%d, BS=%d, N=%d, FRAC=%d, MOD=%d, T=%d, D=%d, RFdiv=%d")
+ % R % BS % N % FRAC % MOD % T % D % RFdiv
+ ;
UHD_ASSERT_THROW((_regs.frac_12_bit & ((uint16_t)~0xFFF)) == 0);
UHD_ASSERT_THROW((_regs.mod_12_bit & ((uint16_t)~0xFFF)) == 0);
diff --git a/host/lib/usrp/common/apply_corrections.cpp b/host/lib/usrp/common/apply_corrections.cpp
index 272e0e093..32c7e3c45 100644
--- a/host/lib/usrp/common/apply_corrections.cpp
+++ b/host/lib/usrp/common/apply_corrections.cpp
@@ -18,11 +18,10 @@
#include "apply_corrections.hpp"
#include <uhd/usrp/dboard_eeprom.hpp>
#include <uhd/utils/paths.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/csv.hpp>
#include <uhd/types/dict.hpp>
#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
#include <boost/thread/mutex.hpp>
#include <cstdio>
#include <complex>
@@ -114,7 +113,7 @@ static void apply_fe_corrections(
bool read_data = false, skip_next = false;;
std::vector<fe_cal_t> datas;
- BOOST_FOREACH(const uhd::csv::row_type &row, rows){
+ for(const uhd::csv::row_type &row: rows){
if (not read_data and not row.empty() and row[0] == "DATA STARTS HERE"){
read_data = true;
skip_next = true;
@@ -133,7 +132,7 @@ static void apply_fe_corrections(
}
std::sort(datas.begin(), datas.end(), fe_cal_comp);
fe_cal_cache[cal_data_path.string()] = datas;
- UHD_MSG(status) << "Loaded " << cal_data_path.string() << std::endl;
+ UHD_LOGGER_INFO("CAL") << "Calibration data loaded: " << cal_data_path.string();
}
@@ -168,7 +167,7 @@ void uhd::usrp::apply_tx_fe_corrections( //overloading to work according to rfno
);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Failure in apply_tx_fe_corrections: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("CAL") << "Failure in apply_tx_fe_corrections: " << e.what();
}
}
@@ -195,7 +194,7 @@ void uhd::usrp::apply_tx_fe_corrections(
);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Failure in apply_tx_fe_corrections: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("CAL") << "Failure in apply_tx_fe_corrections: " << e.what();
}
}
@@ -216,7 +215,7 @@ void uhd::usrp::apply_rx_fe_corrections( //overloading to work according to rfno
);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Failure in apply_tx_fe_corrections: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("CAL") << "Failure in apply_tx_fe_corrections: " << e.what();
}
}
@@ -236,6 +235,6 @@ void uhd::usrp::apply_rx_fe_corrections(
);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Failure in apply_rx_fe_corrections: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("CAL") << "Failure in apply_rx_fe_corrections: " << e.what();
}
}
diff --git a/host/lib/usrp/common/async_packet_handler.hpp b/host/lib/usrp/common/async_packet_handler.hpp
index 4b162677b..01594be0b 100644
--- a/host/lib/usrp/common/async_packet_handler.hpp
+++ b/host/lib/usrp/common/async_packet_handler.hpp
@@ -22,7 +22,7 @@
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/types/metadata.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
namespace uhd{ namespace usrp{
@@ -59,14 +59,23 @@ namespace uhd{ namespace usrp{
if (metadata.event_code &
( async_metadata_t::EVENT_CODE_UNDERFLOW
| async_metadata_t::EVENT_CODE_UNDERFLOW_IN_PACKET)
- ) UHD_MSG(fastpath) << "U";
+ )
+ {
+ UHD_LOG_FASTPATH("U")
+ }
else if (metadata.event_code &
( async_metadata_t::EVENT_CODE_SEQ_ERROR
| async_metadata_t::EVENT_CODE_SEQ_ERROR_IN_BURST)
- ) UHD_MSG(fastpath) << "S";
+ )
+ {
+ UHD_LOG_FASTPATH("S")
+ }
else if (metadata.event_code &
async_metadata_t::EVENT_CODE_TIME_ERROR
- ) UHD_MSG(fastpath) << "L";
+ )
+ {
+ UHD_LOG_FASTPATH("L")
+ }
}
diff --git a/host/lib/usrp/common/constrained_device_args.hpp b/host/lib/usrp/common/constrained_device_args.hpp
index 1bfd1df00..42632d0dd 100644
--- a/host/lib/usrp/common/constrained_device_args.hpp
+++ b/host/lib/usrp/common/constrained_device_args.hpp
@@ -20,7 +20,6 @@
#include <uhd/types/device_addr.hpp>
#include <uhd/exception.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/assign/list_of.hpp>
@@ -116,7 +115,7 @@ namespace usrp {
}
}
inline virtual std::string to_string() const {
- return key() + "=" + boost::lexical_cast<std::string>(get());
+ return key() + "=" + std::to_string(get());
}
private:
data_t _value;
@@ -192,7 +191,7 @@ namespace usrp {
}
inline void parse(const std::string& str_rep) {
try {
- _value = (boost::lexical_cast<int>(str_rep) != 0);
+ _value = (std::stoi(str_rep) != 0);
} catch (std::exception& ex) {
if (str_rep.empty()) {
//If str_rep is empty then the device_addr was set
@@ -250,7 +249,7 @@ namespace usrp {
throw uhd::value_error(str(boost::format(
"Invalid device arg value: %s (Minimum: %s, Maximum: %s)") %
arg.to_string() %
- boost::lexical_cast<std::string>(min) % boost::lexical_cast<std::string>(max)));
+ std::to_string(min) % std::to_string(max)));
}
}
@@ -260,7 +259,7 @@ namespace usrp {
template<typename arg_t, typename data_t>
static inline void _enforce_discrete(const arg_t& arg, const std::vector<data_t>& valid_values) {
bool match = false;
- BOOST_FOREACH(const data_t& val, valid_values) {
+ for(const data_t& val: valid_values) {
if (val == arg.get()) {
match = true;
break;
@@ -269,7 +268,7 @@ namespace usrp {
if (!match) {
std::string valid_values_str;
for (size_t i = 0; i < valid_values.size(); i++) {
- valid_values_str += ((i==0)?"":", ") + boost::lexical_cast<std::string>(valid_values[i]);
+ valid_values_str += ((i==0)?"":", ") + std::to_string(valid_values[i]);
throw uhd::value_error(str(boost::format(
"Invalid device arg value: %s (Valid: {%s})") %
arg.to_string() % valid_values_str
diff --git a/host/lib/usrp/common/fifo_ctrl_excelsior.cpp b/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
index a9995a161..0a93f44e8 100644
--- a/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
+++ b/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
@@ -18,11 +18,11 @@
#include "fifo_ctrl_excelsior.hpp"
#include "async_packet_handler.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/safe_call.hpp>
-#include <uhd/utils/thread_priority.hpp>
+#include <uhd/utils/thread.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/transport/bounded_buffer.hpp>
#include <boost/thread/mutex.hpp>
@@ -97,7 +97,7 @@ public:
vrt::if_hdr_unpack_le(pkt, packet_info);
}
catch(const std::exception &ex){
- UHD_MSG(error) << "FIFO ctrl bad VITA packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("UHD") << "FIFO ctrl bad VITA packet: " << ex.what();
}
if (packet_info.has_sid and packet_info.sid == _config.ctrl_sid_base){
ctrl_result_t res = ctrl_result_t();
@@ -112,7 +112,7 @@ public:
standard_async_msg_prints(metadata);
}
else{
- UHD_MSG(error) << "FIFO ctrl got unknown SID: " << packet_info.sid << std::endl;
+ UHD_LOGGER_ERROR("UHD") << "FIFO ctrl got unknown SID: " << packet_info.sid ;
}
}
diff --git a/host/lib/usrp/common/fx2_ctrl.cpp b/host/lib/usrp/common/fx2_ctrl.cpp
index c69223747..9fa774851 100644
--- a/host/lib/usrp/common/fx2_ctrl.cpp
+++ b/host/lib/usrp/common/fx2_ctrl.cpp
@@ -16,7 +16,7 @@
//
#include "fx2_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/transport/usb_control.hpp>
#include <boost/functional/hash.hpp>
@@ -177,7 +177,7 @@ public:
unsigned char reset_n = 0;
//hit the reset line
- if (load_img_msg) UHD_MSG(status) << "Loading firmware image: " << filestring << "..." << std::flush;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "Loading firmware image: " << filestring << "...";
usrp_control_write(FX2_FIRMWARE_LOAD, 0xe600, 0, &reset_y, 1);
while (!file.eof()) {
@@ -205,7 +205,7 @@ public:
//wait for things to settle
boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
- if (load_img_msg) UHD_MSG(status) << " done" << std::endl;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "Firmware loaded";
return;
}
//type anything else is unhandled
@@ -242,7 +242,7 @@ public:
const int ep0_size = 64;
unsigned char buf[ep0_size];
- if (load_img_msg) UHD_MSG(status) << "Loading FPGA image: " << filestring << "..." << std::flush;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "Loading FPGA image: " << filestring << "...";
std::ifstream file;
file.open(filename, std::ios::in | std::ios::binary);
if (not file.good()) {
@@ -274,12 +274,12 @@ public:
usrp_fpga_reset(false); //done loading, take fpga out of reset
file.close();
- if (load_img_msg) UHD_MSG(status) << " done" << std::endl;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "FPGA image loaded";
}
void usrp_load_eeprom(std::string filestring)
{
- if (load_img_msg) UHD_MSG(status) << "Loading EEPROM image: " << filestring << "..." << std::flush;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "Loading EEPROM image: " << filestring << "...";
const char *filename = filestring.c_str();
const uint16_t i2c_addr = 0x50;
@@ -315,7 +315,7 @@ public:
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
}
file.close();
- if (load_img_msg) UHD_MSG(status) << " done" << std::endl;
+ if (load_img_msg) UHD_LOGGER_INFO("FX2") << "EEPROM image loaded";
}
diff --git a/host/lib/usrp/common/fx2_ctrl.hpp b/host/lib/usrp/common/fx2_ctrl.hpp
index 40f91b9b6..48cbe4124 100644
--- a/host/lib/usrp/common/fx2_ctrl.hpp
+++ b/host/lib/usrp/common/fx2_ctrl.hpp
@@ -60,7 +60,7 @@ public:
virtual void usrp_fx2_reset(void) = 0;
/*!
- * Load firmware in Intel HEX Format onto device
+ * Load firmware in Intel HEX Format onto device
* \param filename name of firmware file
* \param force reload firmware if already loaded
*/
@@ -68,24 +68,25 @@ public:
bool force = false) = 0;
/*!
- * Load fpga file onto usrp
- * \param filename name of fpga image
+ * Load fpga file onto usrp
+ * \param filename name of fpga image
*/
virtual void usrp_load_fpga(std::string filename) = 0;
/*!
* Load USB descriptor file in Intel HEX format into EEPROM
- * \param filename name of EEPROM image
+ * \param filestring name of EEPROM image
*/
virtual void usrp_load_eeprom(std::string filestring) = 0;
-
+
/*!
- * Submit an IN transfer
- * \param request device specific request
+ * Submit an IN transfer
+ * \param request device specific request
* \param value device specific field
* \param index device specific field
* \param buff buffer to place data
- * \return number of bytes read or error
+ * \param length length of buffer
+ * \return number of bytes read or error
*/
virtual int usrp_control_read(uint8_t request,
uint16_t value,
@@ -94,12 +95,13 @@ public:
uint16_t length) = 0;
/*!
- * Submit an OUT transfer
- * \param request device specific request
+ * Submit an OUT transfer
+ * \param request device specific request
* \param value device specific field
* \param index device specific field
- * \param buff buffer of data to be sent
- * \return number of bytes written or error
+ * \param buff buffer of data to be sent
+ * \param length length of buffer
+ * \return number of bytes written or error
*/
virtual int usrp_control_write(uint8_t request,
uint16_t value,
@@ -110,25 +112,25 @@ public:
/*!
* Perform an I2C write
* \param i2c_addr I2C device address
- * \param buf data to be written
+ * \param buf data to be written
* \param len length of data in bytes
- * \return number of bytes written or error
+ * \return number of bytes written or error
*/
virtual int usrp_i2c_write(uint16_t i2c_addr,
- unsigned char *buf,
+ unsigned char *buf,
uint16_t len) = 0;
/*!
* Perform an I2C read
* \param i2c_addr I2C device address
- * \param buf data to be read
+ * \param buf data to be read
* \param len length of data in bytes
- * \return number of bytes read or error
+ * \return number of bytes read or error
*/
virtual int usrp_i2c_read(uint16_t i2c_addr,
- unsigned char *buf,
+ unsigned char *buf,
uint16_t len) = 0;
//! enable/disable the rx path
diff --git a/host/lib/usrp/common/max287x.hpp b/host/lib/usrp/common/max287x.hpp
index 839ed77bc..c3c4bf18c 100644
--- a/host/lib/usrp/common/max287x.hpp
+++ b/host/lib/usrp/common/max287x.hpp
@@ -403,7 +403,7 @@ public:
while (vco_freq < MIN_VCO_FREQ)
vco_freq *=2;
uint8_t vco_index = 0xFF;
- BOOST_FOREACH(const vco_map_t::value_type &vco, max2871_vco_map)
+ for(const vco_map_t::value_type &vco: max2871_vco_map)
{
if (uhd::math::fp_compare::fp_compare_epsilon<double>(vco_freq) < vco.second.stop())
{
@@ -638,13 +638,14 @@ double max287x<max287x_regs_t>::set_frequency(
//actual frequency calculation
double actual_freq = double((N + (double(FRAC)/double(MOD)))*ref_freq*(1+int(D))/(R*(1+int(T)))) * fb_divisor / RFdiv;
- UHD_LOGV(rarely)
- << boost::format("MAX287x: Intermediates: ref=%0.2f, outdiv=%f, fbdiv=%f"
- ) % ref_freq % double(RFdiv*2) % double(N + double(FRAC)/double(MOD)) << std::endl
- << boost::format("MAX287x: tune: R=%d, BS=%d, N=%d, FRAC=%d, MOD=%d, T=%d, D=%d, RFdiv=%d, type=%s"
- ) % R % BS % N % FRAC % MOD % T % D % RFdiv % ((is_int_n) ? "Integer-N" : "Fractional") << std::endl
- << boost::format("MAX287x: Frequencies (MHz): REQ=%0.2f, ACT=%0.2f, VCO=%0.2f, PFD=%0.2f, BAND=%0.2f"
- ) % (target_freq/1e6) % (actual_freq/1e6) % (vco_freq/1e6) % (pfd_freq/1e6) % (pfd_freq/BS/1e6) << std::endl;
+ UHD_LOGGER_TRACE("MAX287X")
+ << boost::format("MAX287x: Intermediates: ref=%0.2f, outdiv=%f, fbdiv=%f")
+ % ref_freq % double(RFdiv*2) % double(N + double(FRAC)/double(MOD))
+ << boost::format("MAX287x: tune: R=%d, BS=%d, N=%d, FRAC=%d, MOD=%d, T=%d, D=%d, RFdiv=%d, type=%s")
+ % R % BS % N % FRAC % MOD % T % D % RFdiv % ((is_int_n) ? "Integer-N" : "Fractional")
+ << boost::format("MAX287x: Frequencies (MHz): REQ=%0.2f, ACT=%0.2f, VCO=%0.2f, PFD=%0.2f, BAND=%0.2f")
+ % (target_freq/1e6) % (actual_freq/1e6) % (vco_freq/1e6) % (pfd_freq/1e6) % (pfd_freq/BS/1e6)
+ ;
//load the register values
_regs.rf_output_enable = max287x_regs_t::RF_OUTPUT_ENABLE_ENABLED;
diff --git a/host/lib/usrp/common/recv_packet_demuxer.cpp b/host/lib/usrp/common/recv_packet_demuxer.cpp
index 8d9dcee9e..2a4c4d705 100644
--- a/host/lib/usrp/common/recv_packet_demuxer.cpp
+++ b/host/lib/usrp/common/recv_packet_demuxer.cpp
@@ -16,7 +16,7 @@
//
#include "recv_packet_demuxer.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/byteswap.hpp>
#include <boost/thread/mutex.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
@@ -87,7 +87,7 @@ public:
if (rx_index < _queues.size()) _queues[rx_index].wrapper.push(buff);
else
{
- UHD_MSG(error) << "Got a data packet with unknown SID " << extract_sid(buff) << std::endl;
+ UHD_LOGGER_ERROR("STREAMER") << "Got a data packet with unknown SID " << extract_sid(buff) ;
recv_pkt_demux_mrb *mrb = new recv_pkt_demux_mrb();
vrt::if_packet_info_t info;
info.packet_type = vrt::if_packet_info_t::PACKET_TYPE_DATA;
diff --git a/host/lib/usrp/common/recv_packet_demuxer_3000.hpp b/host/lib/usrp/common/recv_packet_demuxer_3000.hpp
index 3ad76f1a0..5305c8ddd 100644
--- a/host/lib/usrp/common/recv_packet_demuxer_3000.hpp
+++ b/host/lib/usrp/common/recv_packet_demuxer_3000.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2013 Ettus Research LLC
+// Copyright 2013,2017 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
@@ -20,15 +20,14 @@
#include <uhd/config.hpp>
#include <uhd/transport/zero_copy.hpp>
-#include <stdint.h>
-#include <boost/thread.hpp>
-#include <uhd/utils/msg.hpp>
-#include <uhd/utils/atomic.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/time_spec.hpp>
#include <uhd/utils/byteswap.hpp>
+#include <boost/thread.hpp>
+#include <boost/enable_shared_from_this.hpp>
#include <queue>
#include <map>
-#include <boost/enable_shared_from_this.hpp>
+#include <stdint.h>
namespace uhd{ namespace usrp{
@@ -77,24 +76,6 @@ namespace uhd{ namespace usrp{
return buff;
}
}
- // Following is disabled by default as super_recv_packet_handler (caller) is not thread safe
- // Only underlying transport (libusb1_zero_copy) is thread safe
- // The onus is on the caller to super_recv_packet_handler (and therefore this) to serialise access
-#ifdef RECV_PACKET_DEMUXER_3000_THREAD_SAFE
- //----------------------------------------------------------
- //-- Try to claim the transport or wait patiently
- //----------------------------------------------------------
- if (_claimed.cas(1, 0))
- {
- boost::mutex::scoped_lock l(mutex);
- cond.timed_wait(l, boost::posix_time::microseconds(long(timeout*1e6)));
- }
-
- //----------------------------------------------------------
- //-- Wait on the transport for input buffers
- //----------------------------------------------------------
- else
-#endif // RECV_PACKET_DEMUXER_3000_THREAD_SAFE
{
buff = _xport->get_recv_buff(timeout);
if (buff)
@@ -103,17 +84,13 @@ namespace uhd{ namespace usrp{
if (new_sid != sid)
{
boost::mutex::scoped_lock l(mutex);
- if (_queues.count(new_sid) == 0) UHD_MSG(error)
+ if (_queues.count(new_sid) == 0) UHD_LOGGER_ERROR("STREAMER")
<< "recv packet demuxer unexpected sid 0x" << std::hex << new_sid << std::dec
- << std::endl;
+ ;
else _queues[new_sid].push(buff);
buff.reset();
}
}
-#ifdef RECV_PACKET_DEMUXER_3000_THREAD_SAFE
- _claimed.write(0);
- cond.notify_all();
-#endif // RECV_PACKET_DEMUXER_3000_THREAD_SAFE
}
return buff;
}
@@ -132,10 +109,6 @@ namespace uhd{ namespace usrp{
typedef std::queue<transport::managed_recv_buffer::sptr> queue_type_t;
std::map<uint32_t, queue_type_t> _queues;
transport::zero_copy_if::sptr _xport;
-#ifdef RECV_PACKET_DEMUXER_3000_THREAD_SAFE
- uhd::atomic_uint32_t _claimed;
- boost::condition_variable cond;
-#endif // RECV_PACKET_DEMUXER_3000_THREAD_SAFE
boost::mutex mutex;
};
diff --git a/host/lib/usrp/common/validate_subdev_spec.cpp b/host/lib/usrp/common/validate_subdev_spec.cpp
index fab40b204..76e61221e 100644
--- a/host/lib/usrp/common/validate_subdev_spec.cpp
+++ b/host/lib/usrp/common/validate_subdev_spec.cpp
@@ -18,7 +18,6 @@
#include "validate_subdev_spec.hpp"
#include <uhd/exception.hpp>
#include <uhd/utils/assert_has.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
using namespace uhd;
@@ -52,19 +51,19 @@ void uhd::usrp::validate_subdev_spec(
//make a list of all possible specs
subdev_spec_t all_specs;
- BOOST_FOREACH(const std::string &db, tree->list(str(boost::format("/mboards/%s/dboards") % mb))){
- BOOST_FOREACH(const std::string &sd, tree->list(str(boost::format("/mboards/%s/dboards/%s/%s_frontends") % mb % db % type))){
+ for(const std::string &db: tree->list(str(boost::format("/mboards/%s/dboards") % mb))){
+ for(const std::string &sd: tree->list(str(boost::format("/mboards/%s/dboards/%s/%s_frontends") % mb % db % type))){
all_specs.push_back(subdev_spec_pair_t(db, sd));
}
}
//validate that the spec is possible
- BOOST_FOREACH(const subdev_spec_pair_t &pair, spec){
+ for(const subdev_spec_pair_t &pair: spec){
uhd::assert_has(all_specs, pair, str(boost::format("%s subdevice specification on mboard %s") % type % mb));
}
//enable selected frontends, disable others
- BOOST_FOREACH(const subdev_spec_pair_t &pair, all_specs){
+ for(const subdev_spec_pair_t &pair: all_specs){
const bool enb = uhd::has(spec, pair);
tree->access<bool>(str(boost::format(
"/mboards/%s/dboards/%s/%s_frontends/%s/enabled"
diff --git a/host/lib/usrp/cores/dma_fifo_core_3000.cpp b/host/lib/usrp/cores/dma_fifo_core_3000.cpp
index e1a841b96..18c79f4c5 100644
--- a/host/lib/usrp/cores/dma_fifo_core_3000.cpp
+++ b/host/lib/usrp/cores/dma_fifo_core_3000.cpp
@@ -19,7 +19,7 @@
#include <uhd/exception.hpp>
#include <boost/thread/thread.hpp> //sleep
#include <uhd/utils/soft_register.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
using namespace uhd;
diff --git a/host/lib/usrp/cores/gpio_atr_3000.hpp b/host/lib/usrp/cores/gpio_atr_3000.hpp
index 1e7c304fa..dfeff112b 100644
--- a/host/lib/usrp/cores/gpio_atr_3000.hpp
+++ b/host/lib/usrp/cores/gpio_atr_3000.hpp
@@ -39,7 +39,7 @@ public:
*
* \param iface register iface to GPIO ATR registers
* \param base base settings offset for GPIO ATR registers
- * \param base readback offset for GPIO ATR registers
+ * \param rb_addr readback offset for GPIO ATR registers
*/
static sptr make(
uhd::wb_iface::sptr iface,
@@ -119,7 +119,7 @@ public:
*
* \param iface register iface to GPIO ATR registers
* \param base base settings offset for GPIO ATR registers
- * \param base readback offset for GPIO ATR registers
+ * \param rb_addr readback offset for GPIO ATR registers
*/
static sptr make(
uhd::wb_iface::sptr iface,
@@ -131,6 +131,7 @@ public:
*
* \param unit the side of the daughterboard interface to configure (TX or RX)
* \param value if value[i] is 1, the i'th bit is in ATR mode otherwise it is in GPIO mode
+ * \param mask mask
*/
virtual void set_pin_ctrl(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0;
@@ -141,6 +142,7 @@ public:
*
* \param unit the side of the daughterboard interface to configure (TX or RX)
* \param value if value[i] is 1, the i'th bit is an output otherwise it is an input
+ * \param mask mask
*/
virtual void set_gpio_ddr(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0;
@@ -149,9 +151,10 @@ public:
/*!
* Write the specified value to the ATR register (all bits)
*
- * \param atr the type of ATR register to write to {IDLE, RX, TX, FDX}
* \param unit the side of the daughterboard interface to configure (TX or RX)
+ * \param atr the type of ATR register to write to {IDLE, RX, TX, FDX}
* \param value the value to write
+ * \param mask mask
*/
virtual void set_atr_reg(const db_unit_t unit, const gpio_atr_reg_t atr, const uint32_t value, const uint32_t mask) = 0;
@@ -160,8 +163,9 @@ public:
/*!
* Write the specified value to the GPIO register (all bits)
*
- * \param atr the type of ATR register to write to {IDLE, RX, TX, FDX}
+ * \param unit the side of the daughterboard interface to configure (TX or RX)
* \param value the value to write
+ * \param mask mask
*/
virtual void set_gpio_out(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0;
diff --git a/host/lib/usrp/cores/i2c_core_100.cpp b/host/lib/usrp/cores/i2c_core_100.cpp
index 029b6eaa7..e68dc2ea6 100644
--- a/host/lib/usrp/cores/i2c_core_100.cpp
+++ b/host/lib/usrp/cores/i2c_core_100.cpp
@@ -17,7 +17,7 @@
#include "i2c_core_100.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp> //sleep
#define REG_I2C_PRESCALER_LO _base + 0
@@ -127,7 +127,7 @@ private:
if ((_iface->peek16(REG_I2C_CMD_STATUS) & I2C_ST_TIP) == 0) return;
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
}
- UHD_MSG(error) << "i2c_core_100: i2c_wait timeout" << std::endl;
+ UHD_LOGGER_ERROR("CORES") << "i2c_core_100: i2c_wait timeout" ;
}
bool wait_chk_ack(void){
diff --git a/host/lib/usrp/cores/i2c_core_100_wb32.cpp b/host/lib/usrp/cores/i2c_core_100_wb32.cpp
index 099b80447..8e03a8c3c 100644
--- a/host/lib/usrp/cores/i2c_core_100_wb32.cpp
+++ b/host/lib/usrp/cores/i2c_core_100_wb32.cpp
@@ -17,7 +17,7 @@
#include "i2c_core_100_wb32.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp> //sleep
#define REG_I2C_PRESCALER_LO _base + 0
@@ -138,7 +138,7 @@ private:
if ((_iface->peek32(REG_I2C_CMD_STATUS) & I2C_ST_TIP) == 0) return;
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
}
- UHD_MSG(error) << "i2c_core_100_wb32: i2c_wait timeout" << std::endl;
+ UHD_LOGGER_ERROR("CORES") << "i2c_core_100_wb32: i2c_wait timeout" ;
}
bool wait_chk_ack(void){
diff --git a/host/lib/usrp/cores/i2c_core_200.cpp b/host/lib/usrp/cores/i2c_core_200.cpp
index eae91253c..7b28573e9 100644
--- a/host/lib/usrp/cores/i2c_core_200.cpp
+++ b/host/lib/usrp/cores/i2c_core_200.cpp
@@ -17,7 +17,7 @@
#include "i2c_core_200.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp> //sleep
#include <boost/thread/mutex.hpp>
@@ -130,7 +130,7 @@ private:
if ((this->peek(REG_I2C_RD_ST) & I2C_ST_TIP) == 0) return;
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
}
- UHD_MSG(error) << "i2c_core_200: i2c_wait timeout" << std::endl;
+ UHD_LOGGER_ERROR("CORES") << "i2c_core_200: i2c_wait timeout" ;
}
bool wait_chk_ack(void){
diff --git a/host/lib/usrp/cores/radio_ctrl_core_3000.cpp b/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
index 2e405d735..512a860e0 100644
--- a/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
+++ b/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
@@ -18,7 +18,7 @@
#include "radio_ctrl_core_3000.hpp"
#include "async_packet_handler.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/transport/bounded_buffer.hpp>
@@ -165,7 +165,7 @@ private:
//load payload
pkt[packet_info.num_header_words32+0] = (_bige)? uhd::htonx(addr) : uhd::htowx(addr);
pkt[packet_info.num_header_words32+1] = (_bige)? uhd::htonx(data) : uhd::htowx(data);
- //UHD_MSG(status) << boost::format("0x%08x, 0x%08x\n") % addr % data;
+ //UHD_LOGGER_INFO("radio_ctrl") << boost::format("0x%08x, 0x%08x\n") % addr % data;
//send the buffer over the interface
_outstanding_seqs.push(_seq_out);
buff->commit(sizeof(uint32_t)*(packet_info.num_packet_words32));
@@ -243,17 +243,17 @@ private:
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "Radio ctrl bad VITA packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("radio_ctrl") << "Radio ctrl bad VITA packet: " << ex.what() ;
if (buff){
UHD_VAR(buff->size());
}
else{
- UHD_MSG(status) << "buff is NULL" << std::endl;
+ UHD_LOGGER_INFO("radio_ctrl") << "buff is NULL" ;
}
- UHD_MSG(status) << std::hex << pkt[0] << std::dec << std::endl;
- UHD_MSG(status) << std::hex << pkt[1] << std::dec << std::endl;
- UHD_MSG(status) << std::hex << pkt[2] << std::dec << std::endl;
- UHD_MSG(status) << std::hex << pkt[3] << std::dec << std::endl;
+ UHD_LOGGER_INFO("radio_ctrl") << std::hex << pkt[0] << std::dec ;
+ UHD_LOGGER_INFO("radio_ctrl") << std::hex << pkt[1] << std::dec ;
+ UHD_LOGGER_INFO("radio_ctrl") << std::hex << pkt[2] << std::dec ;
+ UHD_LOGGER_INFO("radio_ctrl") << std::hex << pkt[3] << std::dec ;
}
//check the buffer
diff --git a/host/lib/usrp/cores/rx_dsp_core_200.cpp b/host/lib/usrp/cores/rx_dsp_core_200.cpp
index e781cfc6d..465a3b913 100644
--- a/host/lib/usrp/cores/rx_dsp_core_200.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_200.cpp
@@ -20,7 +20,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/math.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/thread/thread.hpp> //thread sleep
@@ -195,7 +195,7 @@ public:
if (decim > 1 and hb0 == 0 and hb1 == 0)
{
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("CORES") << boost::format(
"The requested decimation is odd; the user should expect CIC rolloff.\n"
"Select an even decimation to ensure that a halfband filter is enabled.\n"
"decimation = dsp_rate/samp_rate -> %d = (%f MHz)/(%f MHz)\n"
diff --git a/host/lib/usrp/cores/rx_dsp_core_3000.cpp b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
index fdd73a7ac..45e4c6f49 100644
--- a/host/lib/usrp/cores/rx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
@@ -20,7 +20,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/math.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/thread/thread.hpp> //thread sleep
@@ -169,7 +169,7 @@ public:
_iface->poke32(REG_DSP_RX_DECIM, (hb0 << 9) /*small HB */ | (hb1 << 8) /*large HB*/ | (decim & 0xff));
if (decim > 1 and hb0 == 0 and hb1 == 0) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("CORES") << boost::format(
"The requested decimation is odd; the user should expect CIC rolloff.\n"
"Select an even decimation to ensure that a halfband filter is enabled.\n"
"decimation = dsp_rate/samp_rate -> %d = (%f MHz)/(%f MHz)\n"
@@ -189,7 +189,7 @@ public:
_iface->poke32(REG_DSP_RX_DECIM, (hb_enable << 8) | (decim & 0xff));
if (decim > 1 and hb0 == 0 and hb1 == 0 and hb2 == 0) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("CORES") << boost::format(
"The requested decimation is odd; the user should expect passband CIC rolloff.\n"
"Select an even decimation to ensure that a halfband filter is enabled.\n"
"Decimations factorable by 4 will enable 2 halfbands, those factorable by 8 will enable 3 halfbands.\n"
diff --git a/host/lib/usrp/cores/rx_vita_core_3000.cpp b/host/lib/usrp/cores/rx_vita_core_3000.cpp
index 57868ff54..e10913a22 100644
--- a/host/lib/usrp/cores/rx_vita_core_3000.cpp
+++ b/host/lib/usrp/cores/rx_vita_core_3000.cpp
@@ -16,7 +16,7 @@
//
#include "rx_vita_core_3000.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/tuple/tuple.hpp>
@@ -96,7 +96,7 @@ struct rx_vita_core_3000_impl : rx_vita_core_3000
{
if (not _is_setup)
{
- //UHD_MSG(warning) << "rx vita core 3000 issue stream command - not setup yet!";
+ //UHD_LOGGER_WARNING("CORES") << "rx vita core 3000 issue stream command - not setup yet!";
return;
}
UHD_ASSERT_THROW(stream_cmd.num_samps <= 0x0fffffff);
diff --git a/host/lib/usrp/cores/spi_core_100.cpp b/host/lib/usrp/cores/spi_core_100.cpp
index 22b163b14..4d61821b4 100644
--- a/host/lib/usrp/cores/spi_core_100.cpp
+++ b/host/lib/usrp/cores/spi_core_100.cpp
@@ -17,7 +17,7 @@
#include "spi_core_100.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp> //sleep
#define REG_SPI_TXRX0 _base + 0
@@ -80,7 +80,7 @@ private:
if ((_iface->peek16(REG_SPI_CTRL) & SPI_CTRL_GO_BSY) == 0) return;
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
}
- UHD_MSG(error) << "spi_core_100: spi_wait timeout" << std::endl;
+ UHD_LOGGER_ERROR("CORES") << "spi_core_100: spi_wait timeout" ;
}
wb_iface::sptr _iface;
diff --git a/host/lib/usrp/cores/spi_core_3000.cpp b/host/lib/usrp/cores/spi_core_3000.cpp
index 78b0af1a3..2abbac317 100644
--- a/host/lib/usrp/cores/spi_core_3000.cpp
+++ b/host/lib/usrp/cores/spi_core_3000.cpp
@@ -17,7 +17,7 @@
#include "spi_core_3000.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp> //sleep
#define SPI_DIV _base + 0
diff --git a/host/lib/usrp/cores/time_core_3000.cpp b/host/lib/usrp/cores/time_core_3000.cpp
index 25142b9fe..296923756 100644
--- a/host/lib/usrp/cores/time_core_3000.cpp
+++ b/host/lib/usrp/cores/time_core_3000.cpp
@@ -17,7 +17,7 @@
#include "time_core_3000.hpp"
#include <uhd/utils/safe_call.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/thread/thread.hpp>
#define REG_TIME_HI _base + 0
@@ -63,21 +63,21 @@ struct time_core_3000_impl : time_core_3000
void self_test(void)
{
const size_t sleep_millis = 100;
- UHD_MSG(status) << "Performing timer loopback test... " << std::flush;
+ UHD_LOGGER_INFO("CORES") << "Performing timer loopback test... ";
const time_spec_t time0 = this->get_time_now();
boost::this_thread::sleep(boost::posix_time::milliseconds(sleep_millis));
const time_spec_t time1 = this->get_time_now();
const double approx_secs = (time1 - time0).get_real_secs();
const bool test_fail = (approx_secs > 0.15) or (approx_secs < 0.05);
- UHD_MSG(status) << ((test_fail)? " fail" : "pass") << std::endl;
+ UHD_LOGGER_INFO("CORES") << "Timer loopback test " << ((test_fail)? "failed" : "passed");
//useful warning for debugging actual rate
const size_t ticks_elapsed = size_t(_tick_rate*approx_secs);
const size_t approx_rate = size_t(ticks_elapsed/(sleep_millis/1e3));
- if (test_fail) UHD_MSG(warning)
+ if (test_fail) UHD_LOGGER_WARNING("CORES")
<< "Expecting clock rate: " << (_tick_rate/1e6) << " MHz\n"
<< "Approximate clock rate: " << (approx_rate/1e6) << " MHz\n"
- << std::endl;
+ ;
}
uhd::time_spec_t get_time_now(void)
diff --git a/host/lib/usrp/cores/tx_dsp_core_200.cpp b/host/lib/usrp/cores/tx_dsp_core_200.cpp
index 4e1743ee1..f1bf560dc 100644
--- a/host/lib/usrp/cores/tx_dsp_core_200.cpp
+++ b/host/lib/usrp/cores/tx_dsp_core_200.cpp
@@ -20,7 +20,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/math.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/math/special_functions/round.hpp>
#include <boost/thread/thread.hpp> //sleep
@@ -135,7 +135,7 @@ public:
if (interp > 1 and hb0 == 0 and hb1 == 0)
{
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("CORES") << boost::format(
"The requested interpolation is odd; the user should expect CIC rolloff.\n"
"Select an even interpolation to ensure that a halfband filter is enabled.\n"
"interpolation = dsp_rate/samp_rate -> %d = (%f MHz)/(%f MHz)\n"
diff --git a/host/lib/usrp/cores/tx_dsp_core_3000.cpp b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
index 67ff418b3..c30e8dfc1 100644
--- a/host/lib/usrp/cores/tx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
@@ -20,7 +20,7 @@
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/math.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/math/special_functions/round.hpp>
#include <boost/thread/thread.hpp> //sleep
@@ -103,7 +103,7 @@ public:
if (interp > 1 and hb0 == 0 and hb1 == 0)
{
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("CORES") << boost::format(
"The requested interpolation is odd; the user should expect CIC rolloff.\n"
"Select an even interpolation to ensure that a halfband filter is enabled.\n"
"interpolation = dsp_rate/samp_rate -> %d = (%f MHz)/(%f MHz)\n"
diff --git a/host/lib/usrp/dboard/db_basic_and_lf.cpp b/host/lib/usrp/dboard/db_basic_and_lf.cpp
index 941a80ea4..a3d9fb316 100644
--- a/host/lib/usrp/dboard/db_basic_and_lf.cpp
+++ b/host/lib/usrp/dboard/db_basic_and_lf.cpp
@@ -19,7 +19,7 @@
#include <uhd/types/ranges.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/static.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/usrp/dboard_base.hpp>
#include <uhd/usrp/dboard_manager.hpp>
#include <boost/assign/list_of.hpp>
diff --git a/host/lib/usrp/dboard/db_cbx.cpp b/host/lib/usrp/dboard/db_cbx.cpp
index c27cbf58a..cc98205e9 100644
--- a/host/lib/usrp/dboard/db_cbx.cpp
+++ b/host/lib/usrp/dboard/db_cbx.cpp
@@ -40,7 +40,7 @@ sbx_xcvr::cbx::~cbx(void){
void sbx_xcvr::cbx::write_lo_regs(dboard_iface::unit_t unit, const std::vector<uint32_t> &regs)
{
- BOOST_FOREACH(uint32_t reg, regs)
+ for(uint32_t reg: regs)
{
self_base->get_iface()->write_spi(unit, spi_config_t::EDGE_RISE, reg, 32);
}
@@ -51,9 +51,9 @@ void sbx_xcvr::cbx::write_lo_regs(dboard_iface::unit_t unit, const std::vector<u
* Tuning
**********************************************************************/
double sbx_xcvr::cbx::set_lo_freq(dboard_iface::unit_t unit, double target_freq) {
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("CBX") << boost::format(
"CBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
//clip the input
target_freq = cbx_freq_range.clip(target_freq);
diff --git a/host/lib/usrp/dboard/db_dbsrx.cpp b/host/lib/usrp/dboard/db_dbsrx.cpp
index f296820c5..ecfeb5308 100644
--- a/host/lib/usrp/dboard/db_dbsrx.cpp
+++ b/host/lib/usrp/dboard/db_dbsrx.cpp
@@ -24,7 +24,7 @@
#include <uhd/utils/static.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/types/ranges.hpp>
#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
@@ -98,9 +98,9 @@ private:
//get the register data
for(int i=0; i<num_bytes; i++){
regs_vector[1+i] = _max2118_write_regs.get_reg(start_addr+i);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: send reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes << std::endl;
+ ) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes ;
}
//send the data
@@ -130,9 +130,9 @@ private:
if (i + start_addr >= status_addr){
_max2118_read_regs.set_reg(i + start_addr, regs_vector[i]);
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: read reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes << std::endl;
+ ) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes ;
}
}
}
@@ -147,9 +147,9 @@ private:
//mask and return lock detect
bool locked = 5 >= _max2118_read_regs.adc and _max2118_read_regs.adc >= 2;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: locked %d"
- ) % locked << std::endl;
+ ) % locked ;
return sensor_value_t("LO", locked, "locked", "unlocked");
}
@@ -175,7 +175,7 @@ UHD_STATIC_BLOCK(reg_dbsrx_dboard){
dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){
//warn user about incorrect DBID on USRP1, requires R193 populated
if (this->get_iface()->get_special_props().soft_clock_divider and this->get_rx_id() == 0x000D)
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("DBSRX") << boost::format(
"DBSRX: incorrect dbid\n"
"Expected dbid 0x0002 and R193\n"
"found dbid == %d\n"
@@ -184,7 +184,7 @@ dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){
//warn user about incorrect DBID on non-USRP1, requires R194 populated
if (not this->get_iface()->get_special_props().soft_clock_divider and this->get_rx_id() == 0x0002)
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("DBSRX") << boost::format(
"DBSRX: incorrect dbid\n"
"Expected dbid 0x000D and R194\n"
"found dbid == %d\n"
@@ -205,7 +205,7 @@ dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){
.set("DBSRX");
this->get_rx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&dbsrx::get_locked, this));
- BOOST_FOREACH(const std::string &name, dbsrx_gain_ranges.keys()){
+ for(const std::string &name: dbsrx_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&dbsrx::set_gain, this, _1, name))
.set(dbsrx_gain_ranges[name].start());
@@ -266,7 +266,7 @@ double dbsrx::set_lo_freq(double target_freq){
//choose refclock
std::vector<double> clock_rates = this->get_iface()->get_clock_rates(dboard_iface::UNIT_RX);
const double max_clock_rate = uhd::sorted(clock_rates).back();
- BOOST_FOREACH(ref_clock, uhd::reversed(uhd::sorted(clock_rates))){
+ for(auto ref_clock: uhd::reversed(uhd::sorted(clock_rates))){
//USRP1 feeds the DBSRX clock from a FPGA GPIO line.
//make sure that this clock does not exceed rate limit.
if (this->get_iface()->get_special_props().soft_clock_divider){
@@ -279,17 +279,17 @@ double dbsrx::set_lo_freq(double target_freq){
m = 31;
while ((ref_clock/m < 1e6 or ref_clock/m > 2.5e6) and m > 0){ m--; }
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: trying ref_clock %f and m_divider %d"
- ) % (ref_clock) % m << std::endl;
+ ) % (ref_clock) % m ;
if (m >= 32) continue;
//choose R
- for(r = 0; r <= 6; r += 1) {
+ for(auto r = 0; r <= 6; r += 1) {
//compute divider from setting
R = 1 << (r+1);
- UHD_LOGV(often) << boost::format("DBSRX R:%d\n") % R << std::endl;
+ UHD_LOGGER_TRACE("DBSRX") << boost::format("DBSRX R:%d\n") % R ;
//compute PFD compare frequency = ref_clock/R
pfd_freq = ref_clock / R;
@@ -315,9 +315,9 @@ double dbsrx::set_lo_freq(double target_freq){
UHD_ASSERT_THROW((pfd_freq >= dbsrx_pfd_freq_range.start()) and (pfd_freq <= dbsrx_pfd_freq_range.stop()));
UHD_ASSERT_THROW((N >= 256) and (N <= 32768));
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: choose ref_clock (current: %f, new: %f) and m_divider %d"
- ) % (this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX)) % ref_clock % m << std::endl;
+ ) % (this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX)) % ref_clock % m ;
//if ref_clock or m divider changed, we need to update the filter settings
if (ref_clock != this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX) or m != _max2118_write_regs.m_divider) update_filter_settings = true;
@@ -337,9 +337,9 @@ double dbsrx::set_lo_freq(double target_freq){
int scaler = actual_freq > 1125e6 ? 2 : 4;
_max2118_write_regs.div2 = scaler == 4 ? max2118_write_regs_t::DIV2_DIV4 : max2118_write_regs_t::DIV2_DIV2;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: scaler %d, actual_freq %f MHz, register bit: %d"
- ) % scaler % (actual_freq/1e6) % int(_max2118_write_regs.div2) << std::endl;
+ ) % scaler % (actual_freq/1e6) % int(_max2118_write_regs.div2) ;
//compute vco frequency and select vco
double vco_freq = actual_freq * scaler;
@@ -366,9 +366,9 @@ double dbsrx::set_lo_freq(double target_freq){
//check vtune for lock condition
read_reg(0x0, 0x0);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: initial guess for vco %d, vtune adc %d"
- ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) << std::endl;
+ ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) ;
//if we are out of lock for chosen vco, change vco
while ((_max2118_read_regs.adc == 0) or (_max2118_read_regs.adc == 7)){
@@ -376,7 +376,7 @@ double dbsrx::set_lo_freq(double target_freq){
//vtune is too low, try lower frequency vco
if (_max2118_read_regs.adc == 0){
if (_max2118_write_regs.osc_band == 0){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("DBSRX") << boost::format(
"DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"
) % int(_max2118_write_regs.osc_band);
UHD_ASSERT_THROW(_max2118_read_regs.adc != 0); //just to cause a throw
@@ -388,7 +388,7 @@ double dbsrx::set_lo_freq(double target_freq){
//vtune is too high, try higher frequency vco
if (_max2118_read_regs.adc == 7){
if (_max2118_write_regs.osc_band == 7){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("DBSRX") << boost::format(
"DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"
) % int(_max2118_write_regs.osc_band);
UHD_ASSERT_THROW(_max2118_read_regs.adc != 7); //just to cause a throw
@@ -397,9 +397,9 @@ double dbsrx::set_lo_freq(double target_freq){
_max2118_write_regs.osc_band += 1;
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: trying vco %d, vtune adc %d"
- ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) << std::endl;
+ ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) ;
//update vco selection and check vtune
send_reg(0x2, 0x2);
@@ -409,9 +409,9 @@ double dbsrx::set_lo_freq(double target_freq){
boost::this_thread::sleep(boost::posix_time::milliseconds(10));
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX: final vco %d, vtune adc %d"
- ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) << std::endl;
+ ) % int(_max2118_write_regs.osc_band) % int(_max2118_read_regs.adc) ;
//select charge pump bias current
if (_max2118_read_regs.adc <= 2) _max2118_write_regs.cp_current = max2118_write_regs_t::CP_CURRENT_I_CP_100UA;
@@ -425,7 +425,7 @@ double dbsrx::set_lo_freq(double target_freq){
_lo_freq = this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX) / std::pow(2.0,(1 + _max2118_write_regs.r_divider)) * _max2118_write_regs.get_n_divider();
//debug output of calculated variables
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("DBSRX")
<< boost::format("DBSRX tune:\n")
<< boost::format(" VCO=%d, CP=%d, PFD Freq=%fMHz\n") % int(_max2118_write_regs.osc_band) % _max2118_write_regs.cp_current % (pfd_freq/1e6)
<< boost::format(" R=%d, N=%f, scaler=%d, div2=%d\n") % R % N % scaler % int(_max2118_write_regs.div2)
@@ -433,7 +433,7 @@ double dbsrx::set_lo_freq(double target_freq){
<< boost::format(" Target Freq=%fMHz\n") % (target_freq/1e6)
<< boost::format(" Actual Freq=%fMHz\n") % (_lo_freq/1e6)
<< boost::format(" VCO Freq=%fMHz\n") % (vco_freq/1e6)
- << std::endl;
+ ;
if (update_filter_settings) set_bandwidth(_bandwidth);
get_locked();
@@ -463,9 +463,9 @@ static int gain_to_gc2_vga_reg(double &gain){
gain = double(boost::math::iround(gain));
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX GC2 Gain: %f dB, reg: %d"
- ) % gain % reg << std::endl;
+ ) % gain % reg ;
return reg;
}
@@ -487,9 +487,9 @@ static double gain_to_gc1_rfvga_dac(double &gain){
//calculate the voltage for the aux dac
double dac_volts = gain*slope + min_volts;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX GC1 Gain: %f dB, dac_volts: %f V"
- ) % gain % dac_volts << std::endl;
+ ) % gain % dac_volts ;
//the actual gain setting
gain = (dac_volts - min_volts)/slope;
@@ -533,9 +533,9 @@ double dbsrx::set_bandwidth(double bandwidth){
//determine actual bandwidth
_bandwidth = double((ref_clock/(_max2118_write_regs.m_divider))*(4+0.145*_max2118_write_regs.f_dac));
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX Filter Bandwidth: %f MHz, m: %d, f_dac: %d\n"
- ) % (_bandwidth/1e6) % int(_max2118_write_regs.m_divider) % int(_max2118_write_regs.f_dac) << std::endl;
+ ) % (_bandwidth/1e6) % int(_max2118_write_regs.m_divider) % int(_max2118_write_regs.f_dac) ;
this->send_reg(0x3, 0x4);
diff --git a/host/lib/usrp/dboard/db_dbsrx2.cpp b/host/lib/usrp/dboard/db_dbsrx2.cpp
index 21b0fd02d..8cc209218 100644
--- a/host/lib/usrp/dboard/db_dbsrx2.cpp
+++ b/host/lib/usrp/dboard/db_dbsrx2.cpp
@@ -92,9 +92,9 @@ private:
//get the register data
for(int i=0; i<num_bytes; i++){
regs_vector[1+i] = _max2112_write_regs.get_reg(start_addr+i);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX2: send reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes << std::endl;
+ ) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes ;
}
//send the data
@@ -132,15 +132,10 @@ private:
for(uint8_t i=0; i < num_bytes; i++){
if (i + start_addr >= status_addr){
_max2112_read_regs.set_reg(i + start_addr, regs_vector[i]);
- /*
- UHD_LOGV(always) << boost::format(
- "DBSRX2: set reg 0x%02x, value 0x%04x"
- ) % int(i + start_addr) % int(_max2112_read_regs.get_reg(i + start_addr)) << std::endl;
- */
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX2: read reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes << std::endl;
+ ) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes ;
}
}
}
@@ -155,9 +150,9 @@ private:
//mask and return lock detect
bool locked = (_max2112_read_regs.ld & _max2112_read_regs.vasa & _max2112_read_regs.vase) != 0;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("DBSRX") << boost::format(
"DBSRX2 locked: %d"
- ) % locked << std::endl;
+ ) % locked ;
return sensor_value_t("LO", locked, "locked", "unlocked");
}
@@ -189,10 +184,10 @@ dbsrx2::dbsrx2(ctor_args_t args) : rx_dboard_base(args){
// Register properties
////////////////////////////////////////////////////////////////////
this->get_rx_subtree()->create<std::string>("name")
- .set("DBSRX2");
+ .set("DBSRX");
this->get_rx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&dbsrx2::get_locked, this));
- BOOST_FOREACH(const std::string &name, dbsrx2_gain_ranges.keys()){
+ for(const std::string &name: dbsrx2_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&dbsrx2::set_gain, this, _1, name))
.set(dbsrx2_gain_ranges[name].start());
@@ -270,14 +265,14 @@ double dbsrx2::set_lo_freq(double target_freq){
_max2112_write_regs.d24 = scaler == 4 ? max2112_write_regs_t::D24_DIV4 : max2112_write_regs_t::D24_DIV2;
//debug output of calculated variables
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("DBSRX")
<< boost::format("DBSRX2 tune:\n")
<< boost::format(" R=%d, N=%f, scaler=%d, ext_div=%d\n") % R % N % scaler % ext_div
<< boost::format(" int=%d, frac=%d, d24=%d\n") % intdiv % fracdiv % int(_max2112_write_regs.d24)
<< boost::format(" Ref Freq=%fMHz\n") % (ref_freq/1e6)
<< boost::format(" Target Freq=%fMHz\n") % (target_freq/1e6)
<< boost::format(" Actual Freq=%fMHz\n") % (_lo_freq/1e6)
- << std::endl;
+ ;
//send the registers 0x0 through 0x7
//writing register 0x4 (F divider LSB) starts the VCO auto seletion so it must be written last
@@ -304,10 +299,10 @@ static int gain_to_bbg_vga_reg(double &gain){
gain = double(reg);
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("DBSRX")
<< boost::format("DBSRX2 BBG Gain:\n")
<< boost::format(" %f dB, bbg: %d") % gain % reg
- << std::endl;
+ ;
return reg;
}
@@ -329,10 +324,10 @@ static double gain_to_gc1_rfvga_dac(double &gain){
//calculate the voltage for the aux dac
double dac_volts = gain*slope + min_volts;
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("DBSRX")
<< boost::format("DBSRX2 GC1 Gain:\n")
<< boost::format(" %f dB, dac_volts: %f V") % gain % dac_volts
- << std::endl;
+ ;
//the actual gain setting
gain = (dac_volts - min_volts)/slope;
@@ -369,10 +364,10 @@ double dbsrx2::set_bandwidth(double bandwidth){
_max2112_write_regs.lp = int((bandwidth/1e6 - 4)/0.29 + 12);
_bandwidth = double(4 + (_max2112_write_regs.lp - 12) * 0.29)*1e6;
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("DBSRX")
<< boost::format("DBSRX2 Bandwidth:\n")
<< boost::format(" %f MHz, lp: %f V") % (_bandwidth/1e6) % int(_max2112_write_regs.lp)
- << std::endl;
+ ;
this->send_reg(0x8, 0x8);
diff --git a/host/lib/usrp/dboard/db_rfx.cpp b/host/lib/usrp/dboard/db_rfx.cpp
index 9bbd73425..e8ceb7d49 100644
--- a/host/lib/usrp/dboard/db_rfx.cpp
+++ b/host/lib/usrp/dboard/db_rfx.cpp
@@ -40,7 +40,7 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/usrp/dboard_id.hpp>
#include <uhd/usrp/dboard_base.hpp>
#include <uhd/usrp/dboard_manager.hpp>
@@ -184,7 +184,7 @@ rfx_xcvr::rfx_xcvr(
this->get_rx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&rfx_xcvr::get_locked, this, dboard_iface::UNIT_RX));
- BOOST_FOREACH(const std::string &name, _rx_gain_ranges.keys()){
+ for(const std::string &name: _rx_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&rfx_xcvr::set_rx_gain, this, _1, name))
.set(_rx_gain_ranges[name].start());
@@ -339,9 +339,9 @@ double rfx_xcvr::set_lo_freq(
dboard_iface::unit_t unit,
double target_freq
){
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("RFX") << boost::format(
"RFX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
//clip the input
target_freq = _freq_range.clip(target_freq);
@@ -379,9 +379,9 @@ double rfx_xcvr::set_lo_freq(
* fvco*R/fref = P*B + A = N
*/
for(R = 2; R <= 32; R+=2){
- BOOST_FOREACH(BS, bandsel_to_enum.keys()){
+ for(auto BS: bandsel_to_enum.keys()){
if (ref_freq/R/BS > 1e6) continue; //constraint on band select clock
- BOOST_FOREACH(P, prescaler_to_enum.keys()){
+ for(auto P: prescaler_to_enum.keys()){
//calculate B and A from N
double N = target_freq*R/ref_freq;
B = int(std::floor(N/P));
@@ -396,9 +396,9 @@ double rfx_xcvr::set_lo_freq(
}
} done_loop:
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("RFX") << boost::format(
"RFX tune: R=%d, BS=%d, P=%d, B=%d, A=%d, DIV2=%d"
- ) % R % BS % P % B % A % int(_div2[unit] && (!is_rx_rfx400)) << std::endl;
+ ) % R % BS % P % B % A % int(_div2[unit] && (!is_rx_rfx400)) ;
//load the register values
adf4360_regs_t regs;
@@ -433,7 +433,7 @@ double rfx_xcvr::set_lo_freq(
(adf4360_regs_t::ADDR_CONTROL)
(adf4360_regs_t::ADDR_NCOUNTER)
;
- BOOST_FOREACH(adf4360_regs_t::addr_t addr, addrs){
+ for(adf4360_regs_t::addr_t addr: addrs){
this->get_iface()->write_spi(
unit, spi_config_t::EDGE_RISE,
regs.get_reg(addr), 24
@@ -442,8 +442,8 @@ double rfx_xcvr::set_lo_freq(
//return the actual frequency
if (_div2[unit]) actual_freq /= 2;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("RFX") << boost::format(
"RFX tune: actual frequency %f MHz"
- ) % (actual_freq/1e6) << std::endl;
+ ) % (actual_freq/1e6) ;
return actual_freq;
}
diff --git a/host/lib/usrp/dboard/db_sbx_common.cpp b/host/lib/usrp/dboard/db_sbx_common.cpp
index 6b8fd8579..42c080155 100644
--- a/host/lib/usrp/dboard/db_sbx_common.cpp
+++ b/host/lib/usrp/dboard/db_sbx_common.cpp
@@ -53,9 +53,9 @@ static int rx_pga0_gain_to_iobits(double &gain){
int attn_code = int(floor(attn*2));
int iobits = ((~attn_code) << RX_ATTN_SHIFT) & RX_ATTN_MASK;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("SBX") << boost::format(
"SBX RX Attenuation: %f dB, Code: %d, IO Bits %x, Mask: %x"
- ) % attn % attn_code % (iobits & RX_ATTN_MASK) % RX_ATTN_MASK << std::endl;
+ ) % attn % attn_code % (iobits & RX_ATTN_MASK) % RX_ATTN_MASK ;
//the actual gain setting
gain = sbx_rx_gain_ranges["PGA0"].stop() - double(attn_code)/2;
@@ -74,9 +74,9 @@ static int tx_pga0_gain_to_iobits(double &gain){
int attn_code = int(floor(attn*2));
int iobits = ((~attn_code) << TX_ATTN_SHIFT) & TX_ATTN_MASK;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("SBX") << boost::format(
"SBX TX Attenuation: %f dB, Code: %d, IO Bits %x, Mask: %x"
- ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK << std::endl;
+ ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK ;
//the actual gain setting
gain = sbx_tx_gain_ranges["PGA0"].stop() - double(attn_code)/2;
@@ -157,7 +157,7 @@ sbx_xcvr::sbx_xcvr(ctor_args_t args) : xcvr_dboard_base(args){
this->get_rx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&sbx_xcvr::get_locked, this, dboard_iface::UNIT_RX));
- BOOST_FOREACH(const std::string &name, sbx_rx_gain_ranges.keys()){
+ for(const std::string &name: sbx_rx_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&sbx_xcvr::set_rx_gain, this, _1, name))
.set(sbx_rx_gain_ranges[name].start());
@@ -198,7 +198,7 @@ sbx_xcvr::sbx_xcvr(ctor_args_t args) : xcvr_dboard_base(args){
this->get_tx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&sbx_xcvr::get_locked, this, dboard_iface::UNIT_TX));
- BOOST_FOREACH(const std::string &name, sbx_tx_gain_ranges.keys()){
+ for(const std::string &name: sbx_tx_gain_ranges.keys()){
this->get_tx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&sbx_xcvr::set_tx_gain, this, _1, name))
.set(sbx_tx_gain_ranges[name].start());
@@ -237,9 +237,9 @@ sbx_xcvr::sbx_xcvr(ctor_args_t args) : xcvr_dboard_base(args){
//Initialize ATR registers after direction and pin ctrl configuration
update_atr();
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("SBX") << boost::format(
"SBX GPIO Direction: RX: 0x%08x, TX: 0x%08x"
- ) % RXIO_MASK % TXIO_MASK << std::endl;
+ ) % RXIO_MASK % TXIO_MASK ;
}
sbx_xcvr::~sbx_xcvr(void){
diff --git a/host/lib/usrp/dboard/db_sbx_common.hpp b/host/lib/usrp/dboard/db_sbx_common.hpp
index 0c0ad3ca7..8f305a7c4 100644
--- a/host/lib/usrp/dboard/db_sbx_common.hpp
+++ b/host/lib/usrp/dboard/db_sbx_common.hpp
@@ -84,7 +84,7 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/usrp/dboard_base.hpp>
#include <uhd/usrp/dboard_manager.hpp>
#include <boost/assign/list_of.hpp>
diff --git a/host/lib/usrp/dboard/db_sbx_version3.cpp b/host/lib/usrp/dboard/db_sbx_version3.cpp
index bb2ba6bd6..f35c09946 100644
--- a/host/lib/usrp/dboard/db_sbx_version3.cpp
+++ b/host/lib/usrp/dboard/db_sbx_version3.cpp
@@ -40,7 +40,7 @@ sbx_xcvr::sbx_version3::~sbx_version3(void){
void sbx_xcvr::sbx_version3::write_lo_regs(dboard_iface::unit_t unit, const std::vector<uint32_t> &regs)
{
- BOOST_FOREACH(uint32_t reg, regs)
+ for(uint32_t reg: regs)
{
self_base->get_iface()->write_spi(unit, spi_config_t::EDGE_RISE, reg, 32);
}
@@ -50,9 +50,9 @@ void sbx_xcvr::sbx_version3::write_lo_regs(dboard_iface::unit_t unit, const std:
* Tuning
**********************************************************************/
double sbx_xcvr::sbx_version3::set_lo_freq(dboard_iface::unit_t unit, double target_freq) {
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("SBX") << boost::format(
"SBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
/*
* If the user sets 'mode_n=integer' in the tuning args, the user wishes to
diff --git a/host/lib/usrp/dboard/db_sbx_version4.cpp b/host/lib/usrp/dboard/db_sbx_version4.cpp
index e5b6e081c..746de780b 100644
--- a/host/lib/usrp/dboard/db_sbx_version4.cpp
+++ b/host/lib/usrp/dboard/db_sbx_version4.cpp
@@ -41,7 +41,7 @@ sbx_xcvr::sbx_version4::~sbx_version4(void){
void sbx_xcvr::sbx_version4::write_lo_regs(dboard_iface::unit_t unit, const std::vector<uint32_t> &regs)
{
- BOOST_FOREACH(uint32_t reg, regs)
+ for(uint32_t reg: regs)
{
self_base->get_iface()->write_spi(unit, spi_config_t::EDGE_RISE, reg, 32);
}
@@ -52,9 +52,9 @@ void sbx_xcvr::sbx_version4::write_lo_regs(dboard_iface::unit_t unit, const std:
* Tuning
**********************************************************************/
double sbx_xcvr::sbx_version4::set_lo_freq(dboard_iface::unit_t unit, double target_freq) {
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("SBX") << boost::format(
"SBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
/*
* If the user sets 'mode_n=integer' in the tuning args, the user wishes to
diff --git a/host/lib/usrp/dboard/db_tvrx.cpp b/host/lib/usrp/dboard/db_tvrx.cpp
index 5c0600c61..bae047bbd 100644
--- a/host/lib/usrp/dboard/db_tvrx.cpp
+++ b/host/lib/usrp/dboard/db_tvrx.cpp
@@ -31,7 +31,7 @@
#include <uhd/utils/static.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/types/ranges.hpp>
#include <uhd/types/sensors.hpp>
#include <uhd/types/dict.hpp>
@@ -107,7 +107,7 @@ static const boost::array<double, 17> tvrx_gains_volts =
static uhd::dict<std::string, gain_range_t> get_tvrx_gain_ranges(void) {
double rfmax = 0.0, rfmin = FLT_MAX;
- BOOST_FOREACH(const std::string range, tvrx_rf_gains_db.keys()) {
+ for(const std::string range: tvrx_rf_gains_db.keys()) {
double my_max = tvrx_rf_gains_db[range].back(); //we're assuming it's monotonic
double my_min = tvrx_rf_gains_db[range].front(); //if it's not this is wrong wrong wrong
if(my_max > rfmax) rfmax = my_max;
@@ -153,9 +153,9 @@ private:
//get the register data
for(int i=0; i<4; i++){
regs_vector[i] = _tuner_4937di5_regs.get_reg(i);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"tvrx: send reg 0x%02x, value 0x%04x"
- ) % int(i) % int(regs_vector[i]) << std::endl;
+ ) % int(i) % int(regs_vector[i]) ;
}
//send the data
@@ -188,7 +188,7 @@ tvrx::tvrx(ctor_args_t args) : rx_dboard_base(args){
this->get_rx_subtree()->create<std::string>("name")
.set("TVRX");
this->get_rx_subtree()->create<int>("sensors"); //phony property so this dir exists
- BOOST_FOREACH(const std::string &name, get_tvrx_gain_ranges().keys()){
+ for(const std::string &name: get_tvrx_gain_ranges().keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&tvrx::set_gain, this, _1, name));
this->get_rx_subtree()->create<meta_range_t>("gains/"+name+"/range")
@@ -232,7 +232,7 @@ tvrx::tvrx(ctor_args_t args) : rx_dboard_base(args){
this->get_rx_subtree()->access<double>("freq/value").set(tvrx_freq_range.start());
//set default gains
- BOOST_FOREACH(const std::string &name, get_tvrx_gain_ranges().keys()){
+ for(const std::string &name: get_tvrx_gain_ranges().keys()){
this->get_rx_subtree()->access<double>("gains/"+name+"/value")
.set(get_tvrx_gain_ranges()[name].start());
}
@@ -247,9 +247,9 @@ tvrx::~tvrx(void){
*/
static std::string get_band(double freq) {
- BOOST_FOREACH(const std::string &band, tvrx_freq_ranges.keys()) {
+ for(const std::string &band: tvrx_freq_ranges.keys()) {
if(freq >= tvrx_freq_ranges[band].start() && freq <= tvrx_freq_ranges[band].stop()){
- UHD_LOGV(often) << "Band: " << band << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << "Band: " << band ;
return band;
}
}
@@ -291,7 +291,7 @@ static double gain_interp(double gain, const boost::array<double, 17>& db_vector
//use the volts per dB slope to find the final interpolated voltage
volts = volts_vector[gain_step] + (slope * (gain - db_vector[gain_step]));
- UHD_LOGV(often) << "Gain interp: gain: " << gain << ", gain_step: " << int(gain_step) << ", slope: " << slope << ", volts: " << volts << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << "Gain interp: gain: " << gain << ", gain_step: " << int(gain_step) << ", slope: " << slope << ", volts: " << volts ;
return volts;
}
@@ -317,9 +317,9 @@ static double rf_gain_to_voltage(double gain, double lo_freq){
dac_volts = uhd::clip<double>(dac_volts, 0.0, 3.3);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"tvrx RF AGC gain: %f dB, dac_volts: %f V"
- ) % gain % dac_volts << std::endl;
+ ) % gain % dac_volts ;
return dac_volts;
}
@@ -340,9 +340,9 @@ static double if_gain_to_voltage(double gain){
dac_volts = uhd::clip<double>(dac_volts, 0.0, 3.3);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"tvrx IF AGC gain: %f dB, dac_volts: %f V"
- ) % gain % dac_volts << std::endl;
+ ) % gain % dac_volts ;
return dac_volts;
}
@@ -396,7 +396,7 @@ double tvrx::set_freq(double freq) {
//not FAR off, but we do this to be consistent
if(prev_band != new_band) set_gain(_gains["RF"], "RF");
- UHD_LOGV(often) << boost::format("set_freq: target LO: %f f_ref: %f divisor: %i actual LO: %f") % target_lo_freq % f_ref % divisor % actual_lo_freq << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format("set_freq: target LO: %f f_ref: %f divisor: %i actual LO: %f") % target_lo_freq % f_ref % divisor % actual_lo_freq ;
_lo_freq = actual_lo_freq; //for rx props
diff --git a/host/lib/usrp/dboard/db_tvrx2.cpp b/host/lib/usrp/dboard/db_tvrx2.cpp
index 1bac81153..2b5524069 100644
--- a/host/lib/usrp/dboard/db_tvrx2.cpp
+++ b/host/lib/usrp/dboard/db_tvrx2.cpp
@@ -52,7 +52,7 @@
#include "tda18272hnm_regs.hpp"
#include <uhd/utils/static.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/safe_call.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
@@ -803,9 +803,9 @@ private:
//return irq status
bool irq = _tda18272hnm_regs.irq_status == tda18272hnm_regs_t::IRQ_STATUS_SET;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): IRQ %d"
- ) % (get_subdev_name()) % irq << std::endl;
+ ) % (get_subdev_name()) % irq ;
return irq;
}
@@ -821,9 +821,9 @@ private:
//return POR state
bool por = _tda18272hnm_regs.por == tda18272hnm_regs_t::POR_RESET;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): POR %d"
- ) % (get_subdev_name()) % int(_tda18272hnm_regs.por) << std::endl;
+ ) % (get_subdev_name()) % int(_tda18272hnm_regs.por) ;
return por;
}
@@ -838,9 +838,9 @@ private:
//return lock detect
bool locked = _tda18272hnm_regs.lo_lock == tda18272hnm_regs_t::LO_LOCK_LOCKED;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): locked %d"
- ) % (get_subdev_name()) % locked << std::endl;
+ ) % (get_subdev_name()) % locked ;
return sensor_value_t("LO", locked, "locked", "unlocked");
}
@@ -881,9 +881,9 @@ private:
//read temp in degC
read_reg(0x3, 0x3);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Temperature %f C"
- ) % (get_subdev_name()) % (double(_tda18272hnm_regs.tm_d)) << std::endl;
+ ) % (get_subdev_name()) % (double(_tda18272hnm_regs.tm_d)) ;
//Disable Temperature reading
_tda18272hnm_regs.tm_on = tda18272hnm_regs_t::TM_ON_SENSOR_OFF;
@@ -962,7 +962,7 @@ tvrx2::tvrx2(ctor_args_t args) : rx_dboard_base(args){
.set_publisher(boost::bind(&tvrx2::get_rssi, this));
this->get_rx_subtree()->create<sensor_value_t>("sensors/temperature")
.set_publisher(boost::bind(&tvrx2::get_temp, this));
- BOOST_FOREACH(const std::string &name, tvrx2_gain_ranges.keys()){
+ for(const std::string &name: tvrx2_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&tvrx2::set_gain, this, _1, name));
this->get_rx_subtree()->create<meta_range_t>("gains/"+name+"/range")
@@ -999,42 +999,42 @@ tvrx2::tvrx2(ctor_args_t args) : rx_dboard_base(args){
if (ref_clock == 64.0e6) {
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, REFCLOCK_DIV4);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Dividing Refclock by 4"
- ) % (get_subdev_name()) << std::endl;
+ ) % (get_subdev_name()) ;
_freq_scalar = (4*16.0e6)/(this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX));
} else if (ref_clock == 100e6) {
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, REFCLOCK_DIV6);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Dividing Refclock by 6"
- ) % (get_subdev_name()) << std::endl;
+ ) % (get_subdev_name()) ;
_freq_scalar = (6*16.0e6)/this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX);
} else if (ref_clock == 200e6) {
- UHD_MSG(warning) << boost::format("ref_clock was 200e6, setting ref_clock divider for 100e6.") << std::endl;
+ UHD_LOGGER_WARNING("TVRX") << boost::format("ref_clock was 200e6, setting ref_clock divider for 100e6.") ;
this->get_iface()->set_clock_rate(dboard_iface::UNIT_RX, 100e6);
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, REFCLOCK_DIV6);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Dividing Refclock by 6"
- ) % (get_subdev_name()) << std::endl;
+ ) % (get_subdev_name()) ;
_freq_scalar = (6*16.0e6)/this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX);
} else {
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, REFCLOCK_DIV6);
- UHD_MSG(warning) << boost::format("Unsupported ref_clock %0.2f, valid options 64e6, 100e6, 200e6") % ref_clock << std::endl;
+ UHD_LOGGER_WARNING("TVRX") << boost::format("Unsupported ref_clock %0.2f, valid options 64e6, 100e6, 200e6") % ref_clock ;
_freq_scalar = 1.0;
}
//enable only the clocks we need
this->get_iface()->set_clock_enabled(dboard_iface::UNIT_RX, true);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Refclock %f Hz, scalar = %f"
- ) % (get_subdev_name()) % (this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX)) % _freq_scalar << std::endl;
+ ) % (get_subdev_name()) % (this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX)) % _freq_scalar ;
_tda18272hnm_regs.irq_polarity = tda18272hnm_regs_t::IRQ_POLARITY_RAISED_VCC;
_tda18272hnm_regs.irq_clear = tda18272hnm_regs_t::IRQ_CLEAR_TRUE;
@@ -1066,7 +1066,7 @@ bool tvrx2::set_enabled(bool enable){
test_rf_filter_robustness();
- BOOST_FOREACH(const std::string &name, tvrx2_gain_ranges.keys()){
+ for(const std::string &name: tvrx2_gain_ranges.keys()){
this->get_rx_subtree()->access<double>("gains/"+name+"/value")
.set(tvrx2_gain_ranges[name].start());
}
@@ -1092,9 +1092,9 @@ bool tvrx2::set_enabled(bool enable){
}
tvrx2::~tvrx2(void){
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s): Called Destructor"
- ) % (get_subdev_name()) << std::endl;
+ ) % (get_subdev_name()) ;
UHD_SAFE_CALL(if (_enabled) set_enabled(false);)
}
@@ -1134,9 +1134,9 @@ void tvrx2::send_reg(uint8_t start_reg, uint8_t stop_reg){
//get the register data
for(int i=0; i<num_bytes; i++){
regs_vector[1+i] = _tda18272hnm_regs.get_reg(start_addr+i);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s, 0x%02x): send reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % (get_subdev_name()) % int(tvrx2_sd_name_to_i2c_addr[get_subdev_name()]) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes << std::endl;
+ ) % (get_subdev_name()) % int(tvrx2_sd_name_to_i2c_addr[get_subdev_name()]) % int(start_addr+i) % int(regs_vector[1+i]) % int(start_addr) % num_bytes ;
}
//send the data
@@ -1177,9 +1177,9 @@ void tvrx2::read_reg(uint8_t start_reg, uint8_t stop_reg){
if (i + start_addr >= status_addr){
_tda18272hnm_regs.set_reg(i + start_addr, regs_vector[i]);
}
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s, 0x%02x): read reg 0x%02x, value 0x%04x, start_addr = 0x%04x, num_bytes %d"
- ) % (get_subdev_name()) % int(tvrx2_sd_name_to_i2c_addr[get_subdev_name()]) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes << std::endl;
+ ) % (get_subdev_name()) % int(tvrx2_sd_name_to_i2c_addr[get_subdev_name()]) % int(start_addr+i) % int(regs_vector[i]) % int(start_addr) % num_bytes ;
}
}
}
@@ -1271,14 +1271,14 @@ void tvrx2::tvrx2_tda18272_init_rfcal(void)
// Loop through rfcal_log_* registers, initialize _rfcal_results
- BOOST_FOREACH(const uint32_t &result, result_to_cal_regs.keys())
+ for(const uint32_t &result: result_to_cal_regs.keys())
_rfcal_results[result].delta_c = result_to_cal_regs[result] > 63 ? result_to_cal_regs[result] - 128 : result_to_cal_regs[result];
/* read byte 0x26-0x2B */
read_reg(0x26, 0x2B);
// Loop through rfcal_byte_* registers, initialize _rfcal_coeffs
- BOOST_FOREACH(const uint32_t &subband, _rfcal_coeffs.keys())
+ for(const uint32_t &subband: _rfcal_coeffs.keys())
{
freq_range_t subband_freqs;
@@ -1374,7 +1374,7 @@ void tvrx2::tvrx2_tda18272_tune_rf_filter(uint32_t uRF)
_tda18272hnm_regs.gain_taper = gain_taper;
_tda18272hnm_regs.rf_filter_band = RFBand;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"\nTVRX2 (%s): Software Calibration:\n"
"\tRF Filter Bypass = %d\n"
"\tRF Filter Cap = %d\n"
@@ -1385,14 +1385,14 @@ void tvrx2::tvrx2_tda18272_tune_rf_filter(uint32_t uRF)
% int(_tda18272hnm_regs.rf_filter_cap)
% int(_tda18272hnm_regs.rf_filter_band)
% int(_tda18272hnm_regs.gain_taper)
- << std::endl;
+ ;
send_reg(0x2c, 0x2f);
}
void tvrx2::soft_calibration(void){
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Software Calibration: Initialize Tuner, Calibrate and Standby\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Software Calibration: Initialize Tuner, Calibrate and Standby\n") % (get_subdev_name()) ;
_tda18272hnm_regs.sm = tda18272hnm_regs_t::SM_NORMAL;
_tda18272hnm_regs.sm_lna = tda18272hnm_regs_t::SM_LNA_ON;
@@ -1473,7 +1473,7 @@ void tvrx2::test_rf_filter_robustness(void){
("UHFHigh_1", 0x43)
;
- BOOST_FOREACH(const std::string &name, filter_cal_regs.keys()){
+ for(const std::string &name: filter_cal_regs.keys()){
uint8_t cal_result = _tda18272hnm_regs.get_reg(filter_cal_regs[name]);
if (cal_result & 0x80) {
_filter_ratings.set(name, "E");
@@ -1515,12 +1515,12 @@ void tvrx2::test_rf_filter_robustness(void){
}
std::stringstream robustness_message;
- robustness_message << boost::format("TVRX2 (%s): RF Filter Robustness Results:") % (get_subdev_name()) << std::endl;
- BOOST_FOREACH(const std::string &name, uhd::sorted(_filter_ratings.keys())){
- robustness_message << boost::format("\t%s:\tMargin = %0.2f,\tRobustness = %c") % name % (_filter_margins[name]) % (_filter_ratings[name]) << std::endl;
+ robustness_message << boost::format("TVRX2 (%s): RF Filter Robustness Results:") % (get_subdev_name());
+ for(const std::string &name: uhd::sorted(_filter_ratings.keys())){
+ robustness_message << boost::format("\t%s:\tMargin = %0.2f,\tRobustness = %c") % name % (_filter_margins[name]) % (_filter_ratings[name]);
}
- UHD_LOGV(often) << robustness_message.str();
+ UHD_LOGGER_DEBUG("TVRX") << robustness_message.str();
}
/***********************************************************************
@@ -1528,8 +1528,8 @@ void tvrx2::test_rf_filter_robustness(void){
**********************************************************************/
void tvrx2::transition_0(void){
//Transition 0: Initialize Tuner and place in standby
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Transition 0: Initialize Tuner, Calibrate and Standby\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Transition 0: Initialize Tuner, Calibrate and Standby\n") % (get_subdev_name()) ;
//Check for Power-On Reset, if reset, initialze tuner
if (get_power_reset()) {
@@ -1582,8 +1582,8 @@ void tvrx2::transition_0(void){
void tvrx2::transition_1(void){
//Transition 1: Select TV Standard
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Transition 1: Select TV Standard\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Transition 1: Select TV Standard\n") % (get_subdev_name()) ;
//send magic xtal_cal_dac setting
send_reg(0x65, 0x65);
@@ -1613,8 +1613,8 @@ void tvrx2::transition_1(void){
void tvrx2::transition_2(int rf_freq){
//Transition 2: Select RF Frequency after changing TV Standard
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Transition 2: Select RF Frequency after changing TV Standard\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Transition 2: Select RF Frequency after changing TV Standard\n") % (get_subdev_name()) ;
//send magic xtal_cal_dac setting
send_reg(0x65, 0x65);
@@ -1651,8 +1651,8 @@ void tvrx2::transition_2(int rf_freq){
void tvrx2::transition_3(void){
//Transition 3: Standby Mode
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Transition 3: Standby Mode\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Transition 3: Standby Mode\n") % (get_subdev_name()) ;
//send magic xtal_cal_dac setting
send_reg(0x65, 0x65);
@@ -1670,8 +1670,8 @@ void tvrx2::transition_3(void){
void tvrx2::transition_4(int rf_freq){
//Transition 4: Change RF Frequency without changing TV Standard
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Transition 4: Change RF Frequency without changing TV Standard\n") % (get_subdev_name()) << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Transition 4: Change RF Frequency without changing TV Standard\n") % (get_subdev_name()) ;
//send magic xtal_cal_dac setting
send_reg(0x65, 0x65);
@@ -1699,8 +1699,8 @@ void tvrx2::wait_irq(void){
int timeout = 20; //irq waiting timeout in milliseconds
//int irq = (this->get_iface()->read_gpio(dboard_iface::UNIT_RX) & int(tvrx2_sd_name_to_irq_io[get_subdev_name()]));
bool irq = get_irq();
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Waiting on IRQ, subdev = %d, mask = 0x%x, Status: 0x%x\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Waiting on IRQ, subdev = %d, mask = 0x%x, Status: 0x%x\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq ;
while (not irq and timeout > 0) {
//irq = (this->get_iface()->read_gpio(dboard_iface::UNIT_RX) & tvrx2_sd_name_to_irq_io[get_subdev_name()]);
@@ -1709,13 +1709,13 @@ void tvrx2::wait_irq(void){
timeout -= 1;
}
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): IRQ Raised, subdev = %d, mask = 0x%x, Status: 0x%x, Timeout: %d\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq % timeout << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): IRQ Raised, subdev = %d, mask = 0x%x, Status: 0x%x, Timeout: %d\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq % timeout ;
read_reg(0xA, 0xB);
//UHD_ASSERT_THROW(timeout > 0);
- if(timeout <= 0) UHD_MSG(warning) << boost::format(
- "\nTVRX2 (%s): Timeout waiting on IRQ\n") % (get_subdev_name()) << std::endl;
+ if(timeout <= 0) UHD_LOGGER_WARNING("TVRX") << boost::format(
+ "\nTVRX2 (%s): Timeout waiting on IRQ\n") % (get_subdev_name()) ;
_tda18272hnm_regs.irq_clear = tda18272hnm_regs_t::IRQ_CLEAR_TRUE;
send_reg(0xA, 0xA);
@@ -1723,8 +1723,8 @@ void tvrx2::wait_irq(void){
irq = (this->get_iface()->read_gpio(dboard_iface::UNIT_RX) & tvrx2_sd_name_to_irq_io[get_subdev_name()]) > 0;
- UHD_LOGV(often) << boost::format(
- "\nTVRX2 (%s): Cleared IRQ, subdev = %d, mask = 0x%x, Status: 0x%x\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq << std::endl;
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
+ "\nTVRX2 (%s): Cleared IRQ, subdev = %d, mask = 0x%x, Status: 0x%x\n") % (get_subdev_name()) % get_subdev_name() % (int(tvrx2_sd_name_to_irq_io[get_subdev_name()])) % irq ;
}
@@ -1748,20 +1748,20 @@ double tvrx2::set_lo_freq(double target_freq){
_lo_freq = get_scaled_rf_freq() + get_scaled_if_freq(); // - _bandwidth/2;
//debug output of calculated variables
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"\nTVRX2 (%s): LO Frequency\n"
"\tRequested: \t%f\n"
"\tComputed: \t%f\n"
"\tReadback: \t%f\n"
- "\tIF Frequency: \t%f\n") % (get_subdev_name()) % target_freq % double(int(target_freq/1e3)*1e3) % get_scaled_rf_freq() % get_scaled_if_freq() << std::endl;
+ "\tIF Frequency: \t%f\n") % (get_subdev_name()) % target_freq % double(int(target_freq/1e3)*1e3) % get_scaled_rf_freq() % get_scaled_if_freq() ;
get_locked();
test_rf_filter_robustness();
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"\nTVRX2 (%s): RSSI = %f dBm\n"
- ) % (get_subdev_name()) % (get_rssi().to_real()) << std::endl;
+ ) % (get_subdev_name()) % (get_rssi().to_real()) ;
return _lo_freq;
}
@@ -1783,9 +1783,9 @@ static double gain_to_if_gain_dac(double &gain){
//calculate the voltage for the aux dac
double dac_volts = gain*slope + min_volts;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 IF Gain: %f dB, dac_volts: %f V"
- ) % gain % dac_volts << std::endl;
+ ) % gain % dac_volts ;
//the actual gain setting
gain = (dac_volts - min_volts)/slope;
@@ -1847,9 +1847,9 @@ double tvrx2::set_bandwidth(double bandwidth){
//update register
send_reg(0x13, 0x13);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("TVRX") << boost::format(
"TVRX2 (%s) Bandwidth (lp_fc): %f Hz, reg: %d"
- ) % (get_subdev_name()) % _bandwidth % (int(_tda18272hnm_regs.lp_fc)) << std::endl;
+ ) % (get_subdev_name()) % _bandwidth % (int(_tda18272hnm_regs.lp_fc)) ;
return _bandwidth;
}
diff --git a/host/lib/usrp/dboard/db_twinrx.cpp b/host/lib/usrp/dboard/db_twinrx.cpp
index 20adbf849..cedc26c36 100644
--- a/host/lib/usrp/dboard/db_twinrx.cpp
+++ b/host/lib/usrp/dboard/db_twinrx.cpp
@@ -265,7 +265,7 @@ public:
// Add workers to expert
//---------------------------------------------------------
//Channel (front-end) specific
- BOOST_FOREACH(const std::string& fe, _fe_names) {
+ for(const std::string& fe: _fe_names) {
expert_factory::add_worker_node<twinrx_freq_path_expert>(_expert, _expert->node_retriever(), fe);
expert_factory::add_worker_node<twinrx_freq_coercion_expert>(_expert, _expert->node_retriever(), fe);
expert_factory::add_worker_node<twinrx_chan_gain_expert>(_expert, _expert->node_retriever(), fe);
diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp
index d9abef599..21308b08c 100644
--- a/host/lib/usrp/dboard/db_ubx.cpp
+++ b/host/lib/usrp/dboard/db_ubx.cpp
@@ -27,7 +27,7 @@
#include <uhd/usrp/dboard_manager.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/static.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/assign/list_of.hpp>
@@ -301,7 +301,7 @@ public:
{
std::vector<double> rates = _iface->get_clock_rates(dboard_iface::UNIT_RX);
double highest_rate = 0.0;
- BOOST_FOREACH(double rate, rates)
+ for(double rate: rates)
{
if (rate <= pfd_freq_max and rate > highest_rate)
highest_rate = rate;
@@ -318,7 +318,7 @@ public:
{
std::vector<double> rates = _iface->get_clock_rates(dboard_iface::UNIT_TX);
double highest_rate = 0.0;
- BOOST_FOREACH(double rate, rates)
+ for(double rate: rates)
{
if (rate <= pfd_freq_max and rate > highest_rate)
highest_rate = rate;
@@ -380,7 +380,7 @@ public:
_rxlo1 = max287x_iface::make<max2870>(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO1, _1));
_rxlo2 = max287x_iface::make<max2870>(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO2, _1));
std::vector<max287x_iface::sptr> los = boost::assign::list_of(_txlo1)(_txlo2)(_rxlo1)(_rxlo2);
- BOOST_FOREACH(max287x_iface::sptr lo, los)
+ for(max287x_iface::sptr lo: los)
{
lo->set_auto_retune(false);
lo->set_muxout_mode(max287x_iface::MUXOUT_DLD);
@@ -394,7 +394,7 @@ public:
_rxlo1 = max287x_iface::make<max2871>(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO1, _1));
_rxlo2 = max287x_iface::make<max2871>(boost::bind(&ubx_xcvr::write_spi_regs, this, RXLO2, _1));
std::vector<max287x_iface::sptr> los = boost::assign::list_of(_txlo1)(_txlo2)(_rxlo1)(_rxlo2);
- BOOST_FOREACH(max287x_iface::sptr lo, los)
+ for(max287x_iface::sptr lo: los)
{
lo->set_auto_retune(false);
//lo->set_cycle_slip_mode(true); // tried it - caused longer lock times
@@ -557,7 +557,7 @@ private:
{
boost::mutex::scoped_lock lock(_spi_mutex);
ROUTE_SPI(_iface, dest);
- BOOST_FOREACH(uint32_t value, values)
+ for(uint32_t value: values)
WRITE_SPI(_iface, value);
}
@@ -759,7 +759,7 @@ private:
_ubx_tx_atten_val = ((attn_code & 0x3F) << 10);
set_gpio_field(TX_GAIN, attn_code);
write_gpio();
- UHD_LOGV(rarely) << boost::format("UBX TX Gain: %f dB, Code: %d, IO Bits 0x%04x") % gain % attn_code % _ubx_tx_atten_val << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX TX Gain: %f dB, Code: %d, IO Bits 0x%04x") % gain % attn_code % _ubx_tx_atten_val ;
_tx_gain = gain;
return gain;
}
@@ -772,7 +772,7 @@ private:
_ubx_rx_atten_val = ((attn_code & 0x3F) << 10);
set_gpio_field(RX_GAIN, attn_code);
write_gpio();
- UHD_LOGV(rarely) << boost::format("UBX RX Gain: %f dB, Code: %d, IO Bits 0x%04x") % gain % attn_code % _ubx_rx_atten_val << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX RX Gain: %f dB, Code: %d, IO Bits 0x%04x") % gain % attn_code % _ubx_rx_atten_val ;
_rx_gain = gain;
return gain;
}
@@ -796,18 +796,18 @@ private:
property_tree::sptr subtree = this->get_tx_subtree();
device_addr_t tune_args = subtree->access<device_addr_t>("tune_args").get();
is_int_n = boost::iequals(tune_args.get("mode_n",""), "integer");
- UHD_LOGV(rarely) << boost::format("UBX TX: the requested frequency is %f MHz") % (freq/1e6) << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX TX: the requested frequency is %f MHz") % (freq/1e6) ;
double target_pfd_freq = _tx_target_pfd_freq;
if (is_int_n and tune_args.has_key("int_n_step"))
{
target_pfd_freq = tune_args.cast<double>("int_n_step", _tx_target_pfd_freq);
if (target_pfd_freq > _tx_target_pfd_freq)
{
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("UBX")
<< boost::format("Requested int_n_step of %f MHz too large, clipping to %f MHz")
% (target_pfd_freq/1e6)
% (_tx_target_pfd_freq/1e6)
- << std::endl;
+ ;
target_pfd_freq = _tx_target_pfd_freq;
}
}
@@ -935,7 +935,7 @@ private:
_txlo1_freq = freq_lo1;
_txlo2_freq = freq_lo2;
- UHD_LOGV(rarely) << boost::format("UBX TX: the actual frequency is %f MHz") % (_tx_freq/1e6) << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX TX: the actual frequency is %f MHz") % (_tx_freq/1e6) ;
return _tx_freq;
}
@@ -948,7 +948,7 @@ private:
double ref_freq = _iface->get_clock_rate(dboard_iface::UNIT_RX);
bool is_int_n = false;
- UHD_LOGV(rarely) << boost::format("UBX RX: the requested frequency is %f MHz") % (freq/1e6) << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX RX: the requested frequency is %f MHz") % (freq/1e6) ;
property_tree::sptr subtree = this->get_rx_subtree();
device_addr_t tune_args = subtree->access<device_addr_t>("tune_args").get();
@@ -959,11 +959,11 @@ private:
target_pfd_freq = tune_args.cast<double>("int_n_step", _rx_target_pfd_freq);
if (target_pfd_freq > _rx_target_pfd_freq)
{
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("UBX")
<< boost::format("Requested int_n_step of %f Mhz too large, clipping to %f MHz")
% (target_pfd_freq/1e6)
% (_rx_target_pfd_freq/1e6)
- << std::endl;
+ ;
target_pfd_freq = _rx_target_pfd_freq;
}
}
@@ -1131,7 +1131,7 @@ private:
_rxlo1_freq = freq_lo1;
_rxlo2_freq = freq_lo2;
- UHD_LOGV(rarely) << boost::format("UBX RX: the actual frequency is %f MHz") % (_rx_freq/1e6) << std::endl;
+ UHD_LOGGER_TRACE("UBX") << boost::format("UBX RX: the actual frequency is %f MHz") % (_rx_freq/1e6) ;
return _rx_freq;
}
diff --git a/host/lib/usrp/dboard/db_unknown.cpp b/host/lib/usrp/dboard/db_unknown.cpp
index 2ed50cd91..1a63c9233 100644
--- a/host/lib/usrp/dboard/db_unknown.cpp
+++ b/host/lib/usrp/dboard/db_unknown.cpp
@@ -18,12 +18,11 @@
#include <uhd/types/ranges.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/static.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/usrp/dboard_base.hpp>
#include <uhd/usrp/dboard_manager.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/tuple/tuple.hpp>
#include <vector>
@@ -43,13 +42,13 @@ static void warn_if_old_rfx(const dboard_id_t &dboard_id, const std::string &xx)
(old_ids_t("Flex 1800 Classic", 0x0030, 0x0031))
(old_ids_t("Flex 2400 Classic", 0x0007, 0x000b))
;
- BOOST_FOREACH(const old_ids_t &old_id, old_rfx_ids){
+ for(const old_ids_t &old_id: old_rfx_ids){
std::string name; dboard_id_t rx_id, tx_id;
boost::tie(name, rx_id, tx_id) = old_id;
if (
(xx == "RX" and rx_id == dboard_id) or
(xx == "TX" and tx_id == dboard_id)
- ) UHD_MSG(warning) << boost::format(
+ ) UHD_LOGGER_WARNING("unknown_db") << boost::format(
"Detected %s daughterboard %s\n"
"This board requires modification to use.\n"
"See the daughterboard application notes.\n"
diff --git a/host/lib/usrp/dboard/db_wbx_common.cpp b/host/lib/usrp/dboard/db_wbx_common.cpp
index 5afbb1f88..1f665b7e4 100644
--- a/host/lib/usrp/dboard/db_wbx_common.cpp
+++ b/host/lib/usrp/dboard/db_wbx_common.cpp
@@ -21,7 +21,7 @@
#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
using namespace uhd;
using namespace uhd::usrp;
@@ -42,9 +42,9 @@ static int rx_pga0_gain_to_iobits(double &gain){
int attn_code = boost::math::iround(attn*2);
int iobits = ((~attn_code) << RX_ATTN_SHIFT) & RX_ATTN_MASK;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX RX Attenuation: %f dB, Code: %d, IO Bits %x, Mask: %x"
- ) % attn % attn_code % (iobits & RX_ATTN_MASK) % RX_ATTN_MASK << std::endl;
+ ) % attn % attn_code % (iobits & RX_ATTN_MASK) % RX_ATTN_MASK ;
//the actual gain setting
gain = wbx_rx_gain_ranges["PGA0"].stop() - double(attn_code)/2;
@@ -70,7 +70,7 @@ wbx_base::wbx_base(ctor_args_t args) : xcvr_dboard_base(args){
this->get_rx_subtree()->create<device_addr_t>("tune_args").set(device_addr_t());
this->get_rx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&wbx_base::get_locked, this, dboard_iface::UNIT_RX));
- BOOST_FOREACH(const std::string &name, wbx_rx_gain_ranges.keys()){
+ for(const std::string &name: wbx_rx_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&wbx_base::set_rx_gain, this, _1, name))
.set(wbx_rx_gain_ranges[name].start());
@@ -158,7 +158,7 @@ sensor_value_t wbx_base::get_locked(dboard_iface::unit_t unit){
}
void wbx_base::wbx_versionx::write_lo_regs(dboard_iface::unit_t unit, const std::vector<uint32_t> &regs) {
- BOOST_FOREACH(uint32_t reg, regs) {
+ for(uint32_t reg: regs) {
self_base->get_iface()->write_spi(unit, spi_config_t::EDGE_RISE, reg, 32);
}
}
diff --git a/host/lib/usrp/dboard/db_wbx_version2.cpp b/host/lib/usrp/dboard/db_wbx_version2.cpp
index 489291881..d50ae481b 100644
--- a/host/lib/usrp/dboard/db_wbx_version2.cpp
+++ b/host/lib/usrp/dboard/db_wbx_version2.cpp
@@ -23,7 +23,7 @@
#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/usrp/dboard_base.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
@@ -58,9 +58,9 @@ static double tx_pga0_gain_to_dac_volts(double &gain){
//calculate the voltage for the aux dac
double dac_volts = gain*slope + min_volts;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX TX Gain: %f dB, dac_volts: %f V"
- ) % gain % dac_volts << std::endl;
+ ) % gain % dac_volts ;
//the actual gain setting
gain = (dac_volts - min_volts)/slope;
@@ -91,7 +91,7 @@ wbx_base::wbx_version2::wbx_version2(wbx_base *_self_wbx_base) {
// Register TX properties
////////////////////////////////////////////////////////////////////
this->get_tx_subtree()->create<std::string>("name").set("WBXv2 TX");
- BOOST_FOREACH(const std::string &name, wbx_v2_tx_gain_ranges.keys()){
+ for(const std::string &name: wbx_v2_tx_gain_ranges.keys()){
self_base->get_tx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&wbx_base::wbx_version2::set_tx_gain, this, _1, name))
.set(wbx_v2_tx_gain_ranges[name].start());
@@ -165,9 +165,9 @@ double wbx_base::wbx_version2::set_lo_freq(dboard_iface::unit_t unit, double tar
//clip to tuning range
target_freq = wbx_v2_freq_range.clip(target_freq);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
/*
* If the user sets 'mode_n=integer' in the tuning args, the user wishes to
diff --git a/host/lib/usrp/dboard/db_wbx_version3.cpp b/host/lib/usrp/dboard/db_wbx_version3.cpp
index 1bd326e6f..1863dcb44 100644
--- a/host/lib/usrp/dboard/db_wbx_version3.cpp
+++ b/host/lib/usrp/dboard/db_wbx_version3.cpp
@@ -22,7 +22,7 @@
#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/usrp/dboard_base.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
@@ -63,9 +63,9 @@ static int tx_pga0_gain_to_iobits(double &gain){
(attn_code & 1 ? 0 : TX_ATTN_1)
) & TX_ATTN_MASK;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX TX Attenuation: %f dB, Code: %d, IO Bits %x, Mask: %x"
- ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK << std::endl;
+ ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK ;
//the actual gain setting
gain = wbx_v3_tx_gain_ranges["PGA0"].stop() - double(attn_code);
@@ -96,7 +96,7 @@ wbx_base::wbx_version3::wbx_version3(wbx_base *_self_wbx_base) {
// Register TX properties
////////////////////////////////////////////////////////////////////
this->get_tx_subtree()->create<std::string>("name").set("WBXv3 TX");
- BOOST_FOREACH(const std::string &name, wbx_v3_tx_gain_ranges.keys()){
+ for(const std::string &name: wbx_v3_tx_gain_ranges.keys()){
self_base->get_tx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&wbx_base::wbx_version3::set_tx_gain, this, _1, name))
.set(wbx_v3_tx_gain_ranges[name].start());
@@ -196,9 +196,9 @@ double wbx_base::wbx_version3::set_lo_freq(dboard_iface::unit_t unit, double tar
//clip to tuning range
target_freq = wbx_v3_freq_range.clip(target_freq);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
/*
* If the user sets 'mode_n=integer' in the tuning args, the user wishes to
diff --git a/host/lib/usrp/dboard/db_wbx_version4.cpp b/host/lib/usrp/dboard/db_wbx_version4.cpp
index 3cc0f1887..9b31baf89 100644
--- a/host/lib/usrp/dboard/db_wbx_version4.cpp
+++ b/host/lib/usrp/dboard/db_wbx_version4.cpp
@@ -22,7 +22,7 @@
#include <uhd/types/sensors.hpp>
#include <uhd/utils/assert_has.hpp>
#include <uhd/utils/algorithm.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/usrp/dboard_base.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
@@ -64,9 +64,9 @@ static int tx_pga0_gain_to_iobits(double &gain){
(attn_code & 1 ? 0 : TX_ATTN_1)
) & TX_ATTN_MASK;
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX TX Attenuation: %f dB, Code: %d, IO Bits %x, Mask: %x"
- ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK << std::endl;
+ ) % attn % attn_code % (iobits & TX_ATTN_MASK) % TX_ATTN_MASK ;
//the actual gain setting
gain = wbx_v4_tx_gain_ranges["PGA0"].stop() - double(attn_code);
@@ -103,7 +103,7 @@ wbx_base::wbx_version4::wbx_version4(wbx_base *_self_wbx_base) {
//get_tx_id() will always return GDB ID, so use RX ID to determine WBXv4 vs. WBX-120
if(rx_id == 0x0063) this->get_tx_subtree()->create<std::string>("name").set("WBXv4 TX");
else if(rx_id == 0x0081) this->get_tx_subtree()->create<std::string>("name").set("WBX-120 TX");
- BOOST_FOREACH(const std::string &name, wbx_v4_tx_gain_ranges.keys()){
+ for(const std::string &name: wbx_v4_tx_gain_ranges.keys()){
self_base->get_tx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&wbx_base::wbx_version4::set_tx_gain, this, _1, name))
.set(wbx_v4_tx_gain_ranges[name].start());
@@ -204,9 +204,9 @@ double wbx_base::wbx_version4::set_lo_freq(dboard_iface::unit_t unit, double tar
//clip to tuning range
target_freq = wbx_v4_freq_range.clip(target_freq);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("WBX") << boost::format(
"WBX tune: target frequency %f MHz"
- ) % (target_freq/1e6) << std::endl;
+ ) % (target_freq/1e6) ;
/*
* If the user sets 'mode_n=integer' in the tuning args, the user wishes to
diff --git a/host/lib/usrp/dboard/db_xcvr2450.cpp b/host/lib/usrp/dboard/db_xcvr2450.cpp
index ee69dbdad..fe6eca07b 100644
--- a/host/lib/usrp/dboard/db_xcvr2450.cpp
+++ b/host/lib/usrp/dboard/db_xcvr2450.cpp
@@ -135,9 +135,9 @@ private:
void spi_reset(void);
void send_reg(uint8_t addr){
uint32_t value = _max2829_regs.get_reg(addr);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("XCVR2450") << boost::format(
"XCVR2450: send reg 0x%02x, value 0x%05x"
- ) % int(addr) % value << std::endl;
+ ) % int(addr) % value ;
this->get_iface()->write_spi(
dboard_iface::UNIT_RX,
spi_config_t::EDGE_RISE,
@@ -234,7 +234,7 @@ xcvr2450::xcvr2450(ctor_args_t args) : xcvr_dboard_base(args){
.set_publisher(boost::bind(&xcvr2450::get_locked, this));
this->get_rx_subtree()->create<sensor_value_t>("sensors/rssi")
.set_publisher(boost::bind(&xcvr2450::get_rssi, this));
- BOOST_FOREACH(const std::string &name, xcvr_rx_gain_ranges.keys()){
+ for(const std::string &name: xcvr_rx_gain_ranges.keys()){
this->get_rx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&xcvr2450::set_rx_gain, this, _1, name))
.set(xcvr_rx_gain_ranges[name].start());
@@ -270,7 +270,7 @@ xcvr2450::xcvr2450(ctor_args_t args) : xcvr_dboard_base(args){
.set("XCVR2450 TX");
this->get_tx_subtree()->create<sensor_value_t>("sensors/lo_locked")
.set_publisher(boost::bind(&xcvr2450::get_locked, this));
- BOOST_FOREACH(const std::string &name, xcvr_tx_gain_ranges.keys()){
+ for(const std::string &name: xcvr_tx_gain_ranges.keys()){
this->get_tx_subtree()->create<double>("gains/"+name+"/value")
.set_coercer(boost::bind(&xcvr2450::set_tx_gain, this, _1, name))
.set(xcvr_tx_gain_ranges[name].start());
@@ -391,20 +391,20 @@ double xcvr2450::set_lo_freq_core(double target_freq){
double N = double(intdiv) + double(fracdiv)/double(1 << 16);
_lo_freq = (N*ref_freq)/(scaler*R*_ad9515div);
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("XCVR2450")
<< boost::format("XCVR2450 tune:\n")
<< boost::format(" R=%d, N=%f, ad9515=%d, scaler=%f\n") % R % N % _ad9515div % scaler
<< boost::format(" Ref Freq=%fMHz\n") % (ref_freq/1e6)
<< boost::format(" Target Freq=%fMHz\n") % (target_freq/1e6)
<< boost::format(" Actual Freq=%fMHz\n") % (_lo_freq/1e6)
- << std::endl;
+ ;
//high-high band or low-high band?
if(_lo_freq > (5.35e9 + 5.47e9)/2.0){
- UHD_LOGV(often) << "XCVR2450 tune: Using high-high band" << std::endl;
+ UHD_LOGGER_TRACE("XCVR2450") << "XCVR2450 tune: Using high-high band" ;
_max2829_regs.band_select_802_11a = max2829_regs_t::BAND_SELECT_802_11A_5_47GHZ_TO_5_875GHZ;
}else{
- UHD_LOGV(often) << "XCVR2450 tune: Using low-high band" << std::endl;
+ UHD_LOGGER_TRACE("XCVR2450") << "XCVR2450 tune: Using low-high band" ;
_max2829_regs.band_select_802_11a = max2829_regs_t::BAND_SELECT_802_11A_4_9GHZ_TO_5_35GHZ;
}
@@ -655,9 +655,9 @@ double xcvr2450::set_rx_bandwidth(double bandwidth){
//update register
send_reg(0x7);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("XCVR2450") << boost::format(
"XCVR2450 RX Bandwidth (lp_fc): %f Hz, coarse reg: %d, fine reg: %d"
- ) % _rx_bandwidth % (int(_max2829_regs.rx_lpf_coarse_adj)) % (int(_max2829_regs.rx_lpf_fine_adj)) << std::endl;
+ ) % _rx_bandwidth % (int(_max2829_regs.rx_lpf_coarse_adj)) % (int(_max2829_regs.rx_lpf_fine_adj)) ;
return 2.0*_rx_bandwidth;
}
@@ -675,9 +675,9 @@ double xcvr2450::set_tx_bandwidth(double bandwidth){
//update register
send_reg(0x7);
- UHD_LOGV(often) << boost::format(
+ UHD_LOGGER_TRACE("XCVR2450") << boost::format(
"XCVR2450 TX Bandwidth (lp_fc): %f Hz, coarse reg: %d"
- ) % _tx_bandwidth % (int(_max2829_regs.tx_lpf_coarse_adj)) << std::endl;
+ ) % _tx_bandwidth % (int(_max2829_regs.tx_lpf_coarse_adj)) ;
//convert lowpass back to complex bandpass bandwidth
return 2.0*_tx_bandwidth;
diff --git a/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp b/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp
index 3bb5931bc..00be82e1a 100644
--- a/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp
+++ b/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp
@@ -87,10 +87,10 @@ public:
//Initialize clocks and LO
bool found_rate = false;
- BOOST_FOREACH(double rate, _db_iface->get_clock_rates(dboard_iface::UNIT_TX)) {
+ for(double rate: _db_iface->get_clock_rates(dboard_iface::UNIT_TX)) {
found_rate |= uhd::math::frequencies_are_equal(rate, TWINRX_DESIRED_REFERENCE_FREQ);
}
- BOOST_FOREACH(double rate, _db_iface->get_clock_rates(dboard_iface::UNIT_RX)) {
+ for(double rate: _db_iface->get_clock_rates(dboard_iface::UNIT_RX)) {
found_rate |= uhd::math::frequencies_are_equal(rate, TWINRX_DESIRED_REFERENCE_FREQ);
}
if (not found_rate) {
@@ -506,7 +506,7 @@ private: //Functions
void _write_lo_spi(dboard_iface::unit_t unit, const std::vector<uint32_t> &regs)
{
- BOOST_FOREACH(uint32_t reg, regs) {
+ for(uint32_t reg: regs) {
spi_config_t spi_config = spi_config_t(spi_config_t::EDGE_RISE);
spi_config.use_custom_divider = true;
spi_config.divider = 67;
diff --git a/host/lib/usrp/dboard/twinrx/twinrx_experts.cpp b/host/lib/usrp/dboard/twinrx/twinrx_experts.cpp
index f4a1b8ac4..c6a2d42c0 100644
--- a/host/lib/usrp/dboard/twinrx/twinrx_experts.cpp
+++ b/host/lib/usrp/dboard/twinrx/twinrx_experts.cpp
@@ -18,6 +18,7 @@
#include "twinrx_experts.hpp"
#include "twinrx_gain_tables.hpp"
#include <uhd/utils/math.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/types/ranges.hpp>
@@ -486,7 +487,7 @@ void twinrx_ant_gain_expert::resolve()
(_ch0_preamp2 != _ch1_preamp2) or
(_ch0_lb_preamp_presel != _ch1_lb_preamp_presel))
{
- UHD_MSG(warning) << "incompatible gain settings for antenna sharing. temporarily using Ch0 settings for Ch1.";
+ UHD_LOGGER_WARNING("TWINRX") << "incompatible gain settings for antenna sharing. temporarily using Ch0 settings for Ch1.";
}
_ant0_input_atten = _ch0_input_atten;
_ant0_preamp1 = _ch0_preamp1;
@@ -504,7 +505,7 @@ void twinrx_ant_gain_expert::resolve()
(_ch0_preamp2 != _ch1_preamp2) or
(_ch0_lb_preamp_presel != _ch1_lb_preamp_presel))
{
- UHD_MSG(warning) << "incompatible gain settings for antenna sharing. temporarily using Ch0 settings for Ch1.";
+ UHD_LOGGER_WARNING("TWINRX") << "incompatible gain settings for antenna sharing. temporarily using Ch0 settings for Ch1.";
}
_ant1_input_atten = _ch0_input_atten;
_ant1_preamp1 = _ch0_preamp1;
diff --git a/host/lib/usrp/dboard_eeprom.cpp b/host/lib/usrp/dboard_eeprom.cpp
index 9c748f556..bff9f7a15 100644
--- a/host/lib/usrp/dboard_eeprom.cpp
+++ b/host/lib/usrp/dboard_eeprom.cpp
@@ -19,7 +19,6 @@
#include <uhd/usrp/dboard_eeprom.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
#include <algorithm>
@@ -68,7 +67,7 @@ static uint8_t checksum(const byte_vector_t &bytes){
for (size_t i = 0; i < std::min(bytes.size(), size_t(DB_EEPROM_CHKSUM)); i++){
sum -= int(bytes.at(i));
}
- UHD_LOGV(often) << boost::format("sum: 0x%02x") % sum << std::endl;
+ UHD_LOG_DEBUG("DB_EEPROM", boost::format("byte sum: 0x%02x") % sum)
return uint8_t(sum);
}
@@ -82,11 +81,8 @@ void dboard_eeprom_t::load(i2c_iface &iface, uint8_t addr){
std::ostringstream ss;
for (size_t i = 0; i < bytes.size(); i++){
- ss << boost::format(
- "eeprom byte[0x%02x] = 0x%02x") % i % int(bytes.at(i)
- ) << std::endl;
+ UHD_LOG_TRACE("DB_EEPROM",boost::format("eeprom byte[0x%02x] = 0x%02x") % i % int(bytes.at(i)))
}
- UHD_LOGV(often) << ss.str() << std::endl;
try{
UHD_ASSERT_THROW(bytes.size() >= DB_EEPROM_CLEN);
@@ -111,7 +107,7 @@ void dboard_eeprom_t::load(i2c_iface &iface, uint8_t addr){
| (uint16_t(bytes[DB_EEPROM_REV_MSB]) << 8)
;
if (rev_num != 0 and rev_num != 0xffff){
- revision = boost::lexical_cast<std::string>(rev_num);
+ revision = std::to_string(rev_num);
}
}catch(const uhd::assertion_error &){
diff --git a/host/lib/usrp/dboard_eeprom_c.cpp b/host/lib/usrp/dboard_eeprom_c.cpp
index e3ef4933f..5d617f941 100644
--- a/host/lib/usrp/dboard_eeprom_c.cpp
+++ b/host/lib/usrp/dboard_eeprom_c.cpp
@@ -18,8 +18,6 @@
#include <uhd/usrp/dboard_eeprom.h>
#include <uhd/error.h>
-#include <boost/lexical_cast.hpp>
-
#include <string.h>
uhd_error uhd_dboard_eeprom_make(
@@ -84,7 +82,7 @@ uhd_error uhd_dboard_eeprom_get_revision(
int* revision_out
){
UHD_SAFE_C_SAVE_ERROR(h,
- *revision_out = boost::lexical_cast<int>(h->dboard_eeprom_cpp.revision);
+ *revision_out = std::stoi(h->dboard_eeprom_cpp.revision);
)
}
@@ -93,7 +91,7 @@ uhd_error uhd_dboard_eeprom_set_revision(
int revision
){
UHD_SAFE_C_SAVE_ERROR(h,
- h->dboard_eeprom_cpp.revision = boost::lexical_cast<std::string>(revision);
+ h->dboard_eeprom_cpp.revision = std::to_string(revision);
)
}
diff --git a/host/lib/usrp/dboard_manager.cpp b/host/lib/usrp/dboard_manager.cpp
index 56cd08fd7..87b0c9f9c 100644
--- a/host/lib/usrp/dboard_manager.cpp
+++ b/host/lib/usrp/dboard_manager.cpp
@@ -17,7 +17,7 @@
#include "dboard_ctor_args.hpp"
#include <uhd/usrp/dboard_manager.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/utils/static.hpp>
@@ -26,7 +26,6 @@
#include <boost/tuple/tuple.hpp>
#include <boost/format.hpp>
#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>
using namespace uhd;
@@ -97,7 +96,7 @@ static void register_dboard_key(
const std::vector<std::string> &subdev_names,
dboard_manager::dboard_ctor_t db_container_ctor
){
- UHD_LOGV(always) << "registering: " << name << std::endl;
+ // UHD_LOGGER_TRACE("DBMGR") << "registering: " << name;
if (get_id_to_args_map().has_key(dboard_key)){
if (dboard_key.is_xcvr()) throw uhd::key_error(str(boost::format(
@@ -156,7 +155,7 @@ void dboard_manager::register_dboard_restricted(
std::string dboard_id_t::to_cname(void) const{
std::string cname;
- BOOST_FOREACH(const dboard_key_t &key, get_id_to_args_map().keys()){
+ for(const dboard_key_t &key: get_id_to_args_map().keys()){
if (
(not key.is_xcvr() and *this == key.xx_id()) or
(key.is_xcvr() and (*this == key.rx_id() or *this == key.tx_id()))
@@ -248,11 +247,11 @@ dboard_manager_impl::dboard_manager_impl(
this->init(rx_dboard_id, tx_dboard_id, subtree, defer_db_init);
}
catch(const std::exception &e){
- UHD_MSG(error) << boost::format(
+ UHD_LOGGER_ERROR("DBMGR") << boost::format(
"The daughterboard manager encountered a recoverable error in init.\n"
"Loading the \"unknown\" daughterboard implementations to continue.\n"
"The daughterboard cannot operate until this error is resolved.\n"
- ) << e.what() << std::endl;
+ ) << e.what() ;
//clean up the stuff added by the call above
if (subtree->exists("rx_frontends")) subtree->remove("rx_frontends");
if (subtree->exists("tx_frontends")) subtree->remove("tx_frontends");
@@ -266,7 +265,7 @@ void dboard_manager_impl::init(
){
//find the dboard key matches for the dboard ids
dboard_key_t rx_dboard_key, tx_dboard_key, xcvr_dboard_key;
- BOOST_FOREACH(const dboard_key_t &key, get_id_to_args_map().keys()){
+ for(const dboard_key_t &key: get_id_to_args_map().keys()){
if (key.is_xcvr()){
if (rx_dboard_id == key.rx_id() and tx_dboard_id == key.tx_id()) xcvr_dboard_key = key;
if (rx_dboard_id == key.rx_id()) rx_dboard_key = key; //kept to handle warning
@@ -280,7 +279,7 @@ void dboard_manager_impl::init(
//warn for invalid dboard id xcvr combinations
if (not xcvr_dboard_key.is_xcvr() and (rx_dboard_key.is_xcvr() or tx_dboard_key.is_xcvr())){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("DBMGR") << boost::format(
"Unknown transceiver board ID combination.\n"
"Is your daughter-board mounted properly?\n"
"RX dboard ID: %s\n"
@@ -322,7 +321,7 @@ void dboard_manager_impl::init(
db_ctor_args.tx_container = db_ctor_args.rx_container; //Same TX and RX container
//create the xcvr object for each subdevice
- BOOST_FOREACH(const std::string &subdev, subdevs){
+ for(const std::string &subdev: subdevs){
db_ctor_args.sd_name = subdev;
db_ctor_args.rx_subtree = subtree->subtree("rx_frontends/" + db_ctor_args.sd_name);
db_ctor_args.tx_subtree = subtree->subtree("tx_frontends/" + db_ctor_args.sd_name);
@@ -373,7 +372,7 @@ void dboard_manager_impl::init(
}
//make the rx subdevs
- BOOST_FOREACH(const std::string &subdev, rx_subdevs){
+ for(const std::string &subdev: rx_subdevs){
db_ctor_args.sd_name = subdev;
db_ctor_args.rx_subtree = subtree->subtree("rx_frontends/" + db_ctor_args.sd_name);
_rx_dboards[subdev] = rx_dboard_ctor(&db_ctor_args);
@@ -412,7 +411,7 @@ void dboard_manager_impl::init(
}
//make the tx subdevs
- BOOST_FOREACH(const std::string &subdev, tx_subdevs){
+ for(const std::string &subdev: tx_subdevs){
db_ctor_args.sd_name = subdev;
db_ctor_args.tx_subtree = subtree->subtree("tx_frontends/" + db_ctor_args.sd_name);
_tx_dboards[subdev] = tx_dboard_ctor(&db_ctor_args);
@@ -436,11 +435,11 @@ void dboard_manager_impl::init(
}
void dboard_manager_impl::initialize_dboards(void) {
- BOOST_FOREACH(dboard_base::sptr& _rx_container, _rx_containers) {
+ for(dboard_base::sptr& _rx_container: _rx_containers) {
_rx_container->initialize();
}
- BOOST_FOREACH(dboard_base::sptr& _tx_container, _tx_containers) {
+ for(dboard_base::sptr& _tx_container: _tx_containers) {
_tx_container->initialize();
}
}
@@ -457,7 +456,7 @@ void dboard_manager_impl::set_nice_dboard_if(void){
;
//set nice settings on each unit
- BOOST_FOREACH(dboard_iface::unit_t unit, units){
+ for(dboard_iface::unit_t unit: units){
_iface->set_gpio_ddr(unit, 0x0000); //all inputs
_iface->set_gpio_out(unit, 0x0000); //all low
_iface->set_pin_ctrl(unit, 0x0000); //all gpio
diff --git a/host/lib/usrp/device3/device3_impl.cpp b/host/lib/usrp/device3/device3_impl.cpp
index 50598a519..35faf601f 100644
--- a/host/lib/usrp/device3/device3_impl.cpp
+++ b/host/lib/usrp/device3/device3_impl.cpp
@@ -18,17 +18,16 @@
#include "device3_impl.hpp"
#include "graph_impl.hpp"
#include "ctrl_iface.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/rfnoc/block_ctrl_base.hpp>
#include <boost/make_shared.hpp>
#include <algorithm>
-#define UHD_DEVICE3_LOG() UHD_LOGV(never)
+#define UHD_DEVICE3_LOG() UHD_LOGGER_TRACE("DEVICE3")
using namespace uhd::usrp;
device3_impl::device3_impl()
- : _sid_framer(0)
{
_type = uhd::device::USRP;
_async_md.reset(new async_md_type(1000/*messages deep*/));
@@ -70,7 +69,7 @@ void device3_impl::merge_channel_defs(
// - All block indices that are in chan_ids may be overwritten in the channel definition
// - If the channels in chan_ids are not yet in the property tree channel list,
// they are appended.
- BOOST_FOREACH(const std::string &chan_idx, curr_channels) {
+ for(const std::string &chan_idx: curr_channels) {
if (_tree->exists(chans_root / chan_idx)) {
rfnoc::block_id_t chan_block_id = _tree->access<rfnoc::block_id_t>(chans_root / chan_idx).get();
if (std::find(chan_ids.begin(), chan_ids.end(), chan_block_id) != chan_ids.end()) {
@@ -105,8 +104,7 @@ void device3_impl::enumerate_rfnoc_blocks(
size_t n_blocks,
size_t base_port,
const uhd::sid_t &base_sid,
- uhd::device_addr_t transport_args,
- uhd::endianness_t endianness
+ uhd::device_addr_t transport_args
) {
// entries that are already connected to this block
uhd::sid_t ctrl_sid = base_sid;
@@ -120,7 +118,7 @@ void device3_impl::enumerate_rfnoc_blocks(
// TODO: Clear out all the old block control classes
// 3) Create new block controllers
for (size_t i = 0; i < n_blocks; i++) {
- UHD_DEVICE3_LOG() << "[RFNOC] ------- Block Setup -----------" << std::endl;
+ UHD_DEVICE3_LOG() << "[RFNOC] ------- Block Setup -----------" ;
// First, make a transport for port number zero, because we always need that:
ctrl_sid.set_dst_xbarport(base_port + i);
ctrl_sid.set_dst_blockport(0);
@@ -131,24 +129,24 @@ void device3_impl::enumerate_rfnoc_blocks(
);
UHD_DEVICE3_LOG() << str(boost::format("Setting up NoC-Shell Control for port #0 (SID: %s)...") % xport.send_sid.to_pp_string_hex());
uhd::rfnoc::ctrl_iface::sptr ctrl = uhd::rfnoc::ctrl_iface::make(
- endianness == ENDIANNESS_BIG,
+ xport.endianness == uhd::ENDIANNESS_BIG,
xport.send,
xport.recv,
xport.send_sid,
str(boost::format("CE_%02d_Port_%02X") % i % ctrl_sid.get_dst_endpoint())
);
- UHD_DEVICE3_LOG() << "OK" << std::endl;
+ UHD_DEVICE3_LOG() << "OK" ;
uint64_t noc_id = ctrl->peek64(uhd::rfnoc::SR_READBACK_REG_ID);
- UHD_DEVICE3_LOG() << str(boost::format("Port %d: Found NoC-Block with ID %016X.") % int(ctrl_sid.get_dst_endpoint()) % noc_id) << std::endl;
+ UHD_DEVICE3_LOG() << str(boost::format("Port %d: Found NoC-Block with ID %016X.") % int(ctrl_sid.get_dst_endpoint()) % noc_id) ;
uhd::rfnoc::make_args_t make_args;
uhd::rfnoc::blockdef::sptr block_def = uhd::rfnoc::blockdef::make_from_noc_id(noc_id);
if (not block_def) {
- UHD_DEVICE3_LOG() << "Using default block configuration." << std::endl;
+ UHD_DEVICE3_LOG() << "Using default block configuration." ;
block_def = uhd::rfnoc::blockdef::make_from_noc_id(uhd::rfnoc::DEFAULT_NOC_ID);
}
UHD_ASSERT_THROW(block_def);
make_args.ctrl_ifaces[0] = ctrl;
- BOOST_FOREACH(const size_t port_number, block_def->get_all_port_numbers()) {
+ for(const size_t port_number: block_def->get_all_port_numbers()) {
if (port_number == 0) { // We've already set this up
continue;
}
@@ -160,21 +158,23 @@ void device3_impl::enumerate_rfnoc_blocks(
);
UHD_DEVICE3_LOG() << str(boost::format("Setting up NoC-Shell Control for port #%d (SID: %s)...") % port_number % xport1.send_sid.to_pp_string_hex());
uhd::rfnoc::ctrl_iface::sptr ctrl1 = uhd::rfnoc::ctrl_iface::make(
- endianness == ENDIANNESS_BIG,
+ xport1.endianness == uhd::ENDIANNESS_BIG,
xport1.send,
xport1.recv,
xport1.send_sid,
str(boost::format("CE_%02d_Port_%02d") % i % ctrl_sid.get_dst_endpoint())
);
- UHD_DEVICE3_LOG() << "OK" << std::endl;
+ UHD_DEVICE3_LOG() << "OK" ;
make_args.ctrl_ifaces[port_number] = ctrl1;
}
make_args.base_address = xport.send_sid.get_dst();
make_args.device_index = device_index;
make_args.tree = subtree;
- make_args.is_big_endian = (endianness == ENDIANNESS_BIG);
- _rfnoc_block_ctrl.push_back(uhd::rfnoc::block_ctrl_base::make(make_args, noc_id));
+ { //Critical section for block_ctrl vector access
+ boost::lock_guard<boost::mutex> lock(_block_ctrl_mutex);
+ _rfnoc_block_ctrl.push_back(uhd::rfnoc::block_ctrl_base::make(make_args, noc_id));
+ }
}
}
diff --git a/host/lib/usrp/device3/device3_impl.hpp b/host/lib/usrp/device3/device3_impl.hpp
index 043379108..196d1fd4e 100644
--- a/host/lib/usrp/device3/device3_impl.hpp
+++ b/host/lib/usrp/device3/device3_impl.hpp
@@ -135,7 +135,6 @@ protected:
virtual uhd::device_addr_t get_tx_hints(size_t) { return uhd::device_addr_t(); };
virtual uhd::device_addr_t get_rx_hints(size_t) { return uhd::device_addr_t(); };
- virtual uhd::endianness_t get_transport_endianness(size_t mb_index) = 0;
//! Is called after a streamer is generated
virtual void post_streamer_hooks(uhd::direction_t) {};
@@ -168,16 +167,12 @@ protected:
size_t n_blocks,
size_t base_port,
const uhd::sid_t &base_sid,
- uhd::device_addr_t transport_args,
- uhd::endianness_t endianness
+ uhd::device_addr_t transport_args
);
/***********************************************************************
* Members
**********************************************************************/
- //! A counter, designed to create unique SIDs
- size_t _sid_framer;
-
// TODO: Maybe move these to private
uhd::dict<std::string, boost::weak_ptr<uhd::rx_streamer> > _rx_streamers;
uhd::dict<std::string, boost::weak_ptr<uhd::tx_streamer> > _tx_streamers;
diff --git a/host/lib/usrp/device3/device3_io_impl.cpp b/host/lib/usrp/device3/device3_io_impl.cpp
index 198ee4022..9795afae5 100644
--- a/host/lib/usrp/device3/device3_io_impl.cpp
+++ b/host/lib/usrp/device3/device3_io_impl.cpp
@@ -23,7 +23,7 @@
#include <uhd/rfnoc/sink_block_ctrl_base.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include "../common/async_packet_handler.hpp"
#include "../../transport/super_recv_packet_handler.hpp"
#include "../../transport/super_send_packet_handler.hpp"
@@ -34,7 +34,8 @@
#include <uhd/transport/zero_copy_flow_ctrl.hpp>
#include <boost/atomic.hpp>
-#define UHD_STREAMER_LOG() UHD_LOGV(never)
+#define UHD_TX_STREAMER_LOG() UHD_LOGGER_TRACE("STREAMER")
+#define UHD_RX_STREAMER_LOG() UHD_LOGGER_TRACE("STREAMER")
using namespace uhd;
using namespace uhd::usrp;
@@ -140,7 +141,7 @@ void generate_channel_list(
}
// Add all remaining args to all channel args
- BOOST_FOREACH(device_addr_t &chan_arg, chan_args_) {
+ for(device_addr_t &chan_arg: chan_args_) {
chan_arg = chan_arg.to_string() + "," + args.args.to_string();
}
@@ -251,7 +252,7 @@ static void handle_rx_flowctrl(
// Super-verbose mode:
//static size_t fc_pkt_count = 0;
- //UHD_MSG(status) << "sending flow ctrl packet " << fc_pkt_count++ << ", acking " << str(boost::format("%04d\tseq_sw==0x%08x") % last_seq % seq32) << std::endl;
+ //UHD_LOGGER_INFO("STREAMER") << "sending flow ctrl packet " << fc_pkt_count++ << ", acking " << str(boost::format("%04d\tseq_sw==0x%08x") % last_seq % seq32) ;
//load packet info
vrt::if_packet_info_t packet_info;
@@ -336,7 +337,7 @@ static size_t get_tx_flow_control_window(
static bool tx_flow_ctrl(
boost::shared_ptr<tx_fc_cache_t> fc_cache,
- zero_copy_if::sptr async_xport,
+ zero_copy_if::sptr async_xport,
uint32_t (*endian_conv)(uint32_t),
void (*unpack)(const uint32_t *packet_buff, vrt::if_packet_info_t &),
managed_buffer::sptr
@@ -351,35 +352,38 @@ static bool tx_flow_ctrl(
return true;
}
- // Look for a flow control message to update the space available in the buffer.
+ // Look for a flow control message to update the space available in the buffer.
// A minimal timeout is used because larger timeouts can cause the thread to be
// scheduled out for too long at high data rates and result in underruns.
- managed_recv_buffer::sptr buff = async_xport->get_recv_buff(0.000001);
- if (buff)
- {
- vrt::if_packet_info_t if_packet_info;
- if_packet_info.num_packet_words32 = buff->size()/sizeof(uint32_t);
- const uint32_t *packet_buff = buff->cast<const uint32_t *>();
- try {
- unpack(packet_buff, if_packet_info);
- }
- catch(const std::exception &ex)
- {
- UHD_MSG(error) << "Error unpacking async flow control packet: " << ex.what() << std::endl;
- continue;
- }
-
- if (if_packet_info.packet_type != vrt::if_packet_info_t::PACKET_TYPE_FC)
- {
- UHD_MSG(error) << "Unexpected packet type received by flow control handler: " << if_packet_info.packet_type << std::endl;
- continue;
- }
-
- // update the amount of space
- size_t seq_ack = endian_conv(packet_buff[if_packet_info.num_header_words32+1]);
- fc_cache->space += (seq_ack - fc_cache->last_seq_ack) & HW_SEQ_NUM_MASK;
- fc_cache->last_seq_ack = seq_ack;
- }
+ managed_recv_buffer::sptr buff = async_xport->get_recv_buff(0.000001);
+ if (buff)
+ {
+ vrt::if_packet_info_t if_packet_info;
+ if_packet_info.num_packet_words32 = buff->size()/sizeof(uint32_t);
+ const uint32_t *packet_buff = buff->cast<const uint32_t *>();
+ try {
+ unpack(packet_buff, if_packet_info);
+ }
+ catch(const std::exception &ex)
+ {
+ UHD_LOG_ERROR("TX FLOW CTRL", "Error unpacking async flow control packet: " << ex.what());
+ continue;
+ }
+
+ if (if_packet_info.packet_type != vrt::if_packet_info_t::PACKET_TYPE_FC)
+ {
+ UHD_LOG_ERROR(
+ "TX FLOW CTRL",
+ "Unexpected packet type received by flow control handler: " << if_packet_info.packet_type
+ );
+ continue;
+ }
+
+ // update the amount of space
+ size_t seq_ack = endian_conv(packet_buff[if_packet_info.num_header_words32+1]);
+ fc_cache->space += (seq_ack - fc_cache->last_seq_ack) & HW_SEQ_NUM_MASK;
+ fc_cache->last_seq_ack = seq_ack;
+ }
}
return false;
}
@@ -434,7 +438,7 @@ static void handle_tx_async_msgs(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "Error parsing async message packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("STREAMER") << "Error parsing async message packet: " << ex.what() ;
return;
}
@@ -454,10 +458,13 @@ static void handle_tx_async_msgs(
async_info->stream_channel
);
- // Filter out any flow control messages and cache the rest
+ // Filter out any flow control messages and cache the rest
if (metadata.event_code == DEVICE3_ASYNC_EVENT_CODE_FLOW_CTRL)
{
- UHD_MSG(error) << "Unexpected flow control message found in async message handling" << std::endl;
+ UHD_LOG_ERROR(
+ "TX ASYNC",
+ "Unexpected flow control message found in async message handling"
+ );
} else {
async_info->async_queue->push_with_pop_on_full(metadata);
metadata.channel = async_info->device_channel;
@@ -478,8 +485,8 @@ bool device3_impl::recv_async_msg(
**********************************************************************/
void device3_impl::update_rx_streamers(double /* rate */)
{
- BOOST_FOREACH(const std::string &block_id, _rx_streamers.keys()) {
- UHD_STREAMER_LOG() << "[Device3] updating RX streamer to " << block_id << std::endl;
+ for(const std::string &block_id: _rx_streamers.keys()) {
+ UHD_RX_STREAMER_LOG() << "updating RX streamer to " << block_id;
boost::shared_ptr<sph::recv_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::recv_packet_streamer>(_rx_streamers[block_id].lock());
if (my_streamer) {
@@ -496,7 +503,7 @@ void device3_impl::update_rx_streamers(double /* rate */)
if (scaling == rfnoc::scalar_node_ctrl::SCALE_UNDEFINED) {
scaling = 1/32767.;
}
- UHD_STREAMER_LOG() << " New tick_rate == " << tick_rate << " New samp_rate == " << samp_rate << " New scaling == " << scaling << std::endl;
+ UHD_RX_STREAMER_LOG() << " New tick_rate == " << tick_rate << " New samp_rate == " << samp_rate << " New scaling == " << scaling ;
my_streamer->set_tick_rate(tick_rate);
my_streamer->set_samp_rate(samp_rate);
@@ -525,7 +532,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
for (size_t stream_i = 0; stream_i < chan_list.size(); stream_i++) {
// Get block ID and mb index
uhd::rfnoc::block_id_t block_id = chan_list[stream_i];
- UHD_STREAMER_LOG() << "[RX Streamer] chan " << stream_i << " connecting to " << block_id << std::endl;
+ UHD_RX_STREAMER_LOG() << "chan " << stream_i << " connecting to " << block_id ;
// Update args so args.args is always valid for this particular channel:
args.args = chan_args[stream_i];
size_t mb_index = block_id.get_device_no();
@@ -553,20 +560,20 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
//allocate sid and create transport
uhd::sid_t stream_address = blk_ctrl->get_address(block_port);
- UHD_STREAMER_LOG() << "[RX Streamer] creating rx stream " << rx_hints.to_string() << std::endl;
+ UHD_RX_STREAMER_LOG() << "creating rx stream " << rx_hints.to_string() ;
both_xports_t xport = make_transport(stream_address, RX_DATA, rx_hints);
- UHD_STREAMER_LOG() << std::hex << "[RX Streamer] data_sid = " << xport.send_sid << std::dec << " actual recv_buff_size = " << xport.recv_buff_size << std::endl;
+ UHD_RX_STREAMER_LOG() << std::hex << "data_sid = " << xport.send_sid << std::dec << " actual recv_buff_size = " << xport.recv_buff_size ;
// Configure the block
blk_ctrl->set_destination(xport.send_sid.get_src(), block_port);
blk_ctrl->sr_write(uhd::rfnoc::SR_RESP_OUT_DST_SID, xport.send_sid.get_src(), block_port);
- UHD_STREAMER_LOG() << "[RX Streamer] resp_out_dst_sid == " << xport.send_sid.get_src() << std::endl;
+ UHD_RX_STREAMER_LOG() << "resp_out_dst_sid == " << xport.send_sid.get_src() ;
// Find all upstream radio nodes and set their response in SID to the host
std::vector<boost::shared_ptr<uhd::rfnoc::radio_ctrl> > upstream_radio_nodes = blk_ctrl->find_upstream_node<uhd::rfnoc::radio_ctrl>();
- UHD_STREAMER_LOG() << "[RX Streamer] Number of upstream radio nodes: " << upstream_radio_nodes.size() << std::endl;
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node, upstream_radio_nodes) {
+ UHD_RX_STREAMER_LOG() << "Number of upstream radio nodes: " << upstream_radio_nodes.size();
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node: upstream_radio_nodes) {
node->sr_write(uhd::rfnoc::SR_RESP_OUT_DST_SID, xport.send_sid.get_src(), block_port);
}
@@ -575,7 +582,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
const size_t bpp = xport.recv->get_recv_frame_size() - stream_options.rx_max_len_hdr; // bytes per packet
const size_t bpi = convert::get_bytes_per_item(args.otw_format); // bytes per item
const size_t spp = std::min(args.args.cast<size_t>("spp", bpp/bpi), bpp/bpi); // samples per packet
- UHD_STREAMER_LOG() << "[RX Streamer] spp == " << spp << std::endl;
+ UHD_RX_STREAMER_LOG() << "spp == " << spp ;
//make the new streamer given the samples per packet
if (not my_streamer)
@@ -584,7 +591,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
//init some streamer stuff
std::string conv_endianness;
- if (get_transport_endianness(mb_index) == ENDIANNESS_BIG) {
+ if (xport.endianness == ENDIANNESS_BIG) {
my_streamer->set_vrt_unpacker(&vrt::chdr::if_hdr_unpack_be);
conv_endianness = "be";
} else {
@@ -604,7 +611,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
const size_t pkt_size = spp * bpi + stream_options.rx_max_len_hdr;
const size_t fc_window = get_rx_flow_control_window(pkt_size, xport.recv_buff_size, rx_hints);
const size_t fc_handle_window = std::max<size_t>(1, fc_window / stream_options.rx_fc_request_freq);
- UHD_STREAMER_LOG()<< "[RX Streamer] Flow Control Window (minus one) = " << fc_window-1 << ", Flow Control Handler Window = " << fc_handle_window << std::endl;
+ UHD_RX_STREAMER_LOG()<< "Flow Control Window (minus one) = " << fc_window-1 << ", Flow Control Handler Window = " << fc_handle_window ;
blk_ctrl->configure_flow_control_out(
fc_window-1, // Leave one space for overrun packets TODO make this obsolete
block_port
@@ -637,7 +644,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
&handle_rx_flowctrl,
xport.send_sid,
xport.send,
- get_transport_endianness(mb_index),
+ xport.endianness,
fc_cache,
_1
),
@@ -680,8 +687,8 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
**********************************************************************/
void device3_impl::update_tx_streamers(double /* rate */)
{
- BOOST_FOREACH(const std::string &block_id, _tx_streamers.keys()) {
- UHD_STREAMER_LOG() << "[Device3] updating TX streamer: " << block_id << std::endl;
+ for(const std::string &block_id: _tx_streamers.keys()) {
+ UHD_TX_STREAMER_LOG() << "updating TX streamer: " << block_id;
boost::shared_ptr<sph::send_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::send_packet_streamer>(_tx_streamers[block_id].lock());
if (my_streamer) {
@@ -697,7 +704,7 @@ void device3_impl::update_tx_streamers(double /* rate */)
if (scaling == rfnoc::scalar_node_ctrl::SCALE_UNDEFINED) {
scaling = 32767.;
}
- UHD_STREAMER_LOG() << " New tick_rate == " << tick_rate << " New samp_rate == " << samp_rate << " New scaling == " << scaling << std::endl;
+ UHD_TX_STREAMER_LOG() << "New tick_rate == " << tick_rate << " New samp_rate == " << samp_rate << " New scaling == " << scaling ;
my_streamer->set_tick_rate(tick_rate);
my_streamer->set_samp_rate(samp_rate);
my_streamer->set_scale_factor(scaling);
@@ -746,7 +753,6 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
args.args = chan_args[stream_i];
size_t mb_index = block_id.get_device_no();
size_t suggested_block_port = args.args.cast<size_t>("block_port", rfnoc::ANY_PORT);
- uhd::endianness_t endianness = get_transport_endianness(mb_index);
// Access to this channel's block control
uhd::rfnoc::sink_block_ctrl_base::sptr blk_ctrl =
@@ -771,17 +777,17 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
//allocate sid and create transport
uhd::sid_t stream_address = blk_ctrl->get_address(block_port);
- UHD_STREAMER_LOG() << "[TX Streamer] creating tx stream " << tx_hints.to_string() << std::endl;
+ UHD_TX_STREAMER_LOG() << "creating tx stream " << tx_hints.to_string() ;
both_xports_t xport = make_transport(stream_address, TX_DATA, tx_hints);
- both_xports_t async_xport = make_transport(stream_address, ASYNC_MSG, device_addr_t(""));
- UHD_STREAMER_LOG() << std::hex << "[TX Streamer] data_sid = " << xport.send_sid << std::dec << std::endl;
+ both_xports_t async_xport = make_transport(stream_address, ASYNC_MSG, device_addr_t(""));
+ UHD_TX_STREAMER_LOG() << std::hex << "[TX Streamer] data_sid = " << xport.send_sid << std::dec << std::endl;
// To calculate the max number of samples per packet, we assume the maximum header length
// to avoid fragmentation should the entire header be used.
const size_t bpp = tx_hints.cast<size_t>("bpp", xport.send->get_send_frame_size()) - stream_options.tx_max_len_hdr;
const size_t bpi = convert::get_bytes_per_item(args.otw_format); // bytes per item
const size_t spp = std::min(args.args.cast<size_t>("spp", bpp/bpi), bpp/bpi); // samples per packet
- UHD_STREAMER_LOG() << "[TX Streamer] spp == " << spp << std::endl;
+ UHD_TX_STREAMER_LOG() << "spp == " << spp ;
//make the new streamer given the samples per packet
if (not my_streamer)
@@ -792,7 +798,7 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
//init some streamer stuff
std::string conv_endianness;
- if (get_transport_endianness(mb_index) == ENDIANNESS_BIG) {
+ if (xport.endianness == ENDIANNESS_BIG) {
my_streamer->set_vrt_packer(&vrt::chdr::if_hdr_pack_be);
conv_endianness = "be";
} else {
@@ -817,7 +823,7 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
tx_hints // This can override the value reported by the block!
);
const size_t fc_handle_window = std::max<size_t>(1, fc_window / stream_options.tx_fc_response_freq);
- UHD_STREAMER_LOG() << "[TX Streamer] Flow Control Window = " << fc_window << ", Flow Control Handler Window = " << fc_handle_window << std::endl;
+ UHD_TX_STREAMER_LOG() << "Flow Control Window = " << fc_window << ", Flow Control Handler Window = " << fc_handle_window ;
blk_ctrl->configure_flow_control_in(
stream_options.tx_fc_response_cycles,
fc_handle_window, /*pkts*/
@@ -841,14 +847,15 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
&handle_tx_async_msgs,
async_tx_info,
my_streamer->_async_xport.recv,
- endianness,
+ xport.endianness,
tick_rate_retriever
- )
+ ),
+ "tx_async_msgs_task"
);
blk_ctrl->sr_write(uhd::rfnoc::SR_CLEAR_RX_FC, 0xc1ea12, block_port);
blk_ctrl->sr_write(uhd::rfnoc::SR_RESP_IN_DST_SID, my_streamer->_async_xport.recv_sid.get_dst(), block_port);
- UHD_STREAMER_LOG() << "[TX Streamer] resp_in_dst_sid == " << boost::format("0x%04X") % xport.recv_sid.get_dst() << std::endl;
+ UHD_TX_STREAMER_LOG() << "resp_in_dst_sid == " << boost::format("0x%04X") % xport.recv_sid.get_dst() ;
// FIXME: Once there is a better way to map the radio block and port
// to the channel or another way to receive asynchronous messages that
@@ -859,8 +866,8 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
uhd::rfnoc::block_id_t radio_id(args.args["radio_id"]);
size_t radio_port = args.args.cast<size_t>("radio_port", 0);
std::vector<boost::shared_ptr<uhd::rfnoc::radio_ctrl> > downstream_radio_nodes = blk_ctrl->find_downstream_node<uhd::rfnoc::radio_ctrl>();
- UHD_STREAMER_LOG() << "[TX Streamer] Number of downstream radio nodes: " << downstream_radio_nodes.size() << std::endl;
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node, downstream_radio_nodes) {
+ UHD_TX_STREAMER_LOG() << "Number of downstream radio nodes: " << downstream_radio_nodes.size();
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node: downstream_radio_nodes) {
if (node->get_block_id() == radio_id) {
node->sr_write(uhd::rfnoc::SR_RESP_IN_DST_SID, my_streamer->_async_xport.recv_sid.get_dst(), radio_port);
}
@@ -873,8 +880,8 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
// soon as possible.
// Find all downstream radio nodes and set their response SID to the host
std::vector<boost::shared_ptr<uhd::rfnoc::radio_ctrl> > downstream_radio_nodes = blk_ctrl->find_downstream_node<uhd::rfnoc::radio_ctrl>();
- UHD_STREAMER_LOG() << "[TX Streamer] Number of downstream radio nodes: " << downstream_radio_nodes.size() << std::endl;
- BOOST_FOREACH(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node, downstream_radio_nodes) {
+ UHD_TX_STREAMER_LOG() << "Number of downstream radio nodes: " << downstream_radio_nodes.size();
+ for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node: downstream_radio_nodes) {
node->sr_write(uhd::rfnoc::SR_RESP_IN_DST_SID, my_streamer->_async_xport.recv_sid.get_dst(), block_port);
}
}
@@ -884,12 +891,12 @@ tx_streamer::sptr device3_impl::get_tx_stream(const uhd::stream_args_t &args_)
my_streamer->_xport.send = zero_copy_flow_ctrl::make(
my_streamer->_xport.send,
boost::bind(
- &tx_flow_ctrl,
- fc_cache,
- my_streamer->_xport.recv,
- (endianness == ENDIANNESS_BIG ? uhd::ntohx<uint32_t> : uhd::wtohx<uint32_t>),
- (endianness == ENDIANNESS_BIG ? vrt::chdr::if_hdr_unpack_be : vrt::chdr::if_hdr_unpack_le),
- _1),
+ &tx_flow_ctrl,
+ fc_cache,
+ my_streamer->_xport.recv,
+ (xport.endianness == ENDIANNESS_BIG ? uhd::ntohx<uint32_t> : uhd::wtohx<uint32_t>),
+ (xport.endianness == ENDIANNESS_BIG ? vrt::chdr::if_hdr_unpack_be : vrt::chdr::if_hdr_unpack_le),
+ _1),
NULL);
//Give the streamer a functor to get the send buffer
diff --git a/host/lib/usrp/e100/clock_ctrl.cpp b/host/lib/usrp/e100/clock_ctrl.cpp
index 0dbd6a5d3..a3f630462 100644
--- a/host/lib/usrp/e100/clock_ctrl.cpp
+++ b/host/lib/usrp/e100/clock_ctrl.cpp
@@ -17,13 +17,12 @@
#include "clock_ctrl.hpp"
#include "ad9522_regs.hpp"
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/assert_has.hpp>
#include <stdint.h>
#include "e100_regs.hpp" //spi slave constants
#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/thread/thread.hpp>
#include <boost/math/common_factor_rt.hpp> //gcd
@@ -137,11 +136,11 @@ static clock_settings_type get_clock_settings(double rate){
cs.chan_divider /= cs.vco_divider;
}
- UHD_LOGV(always)
- << "gcd " << gcd << std::endl
- << "X " << X << std::endl
- << "Y " << Y << std::endl
- << cs.to_pp_string() << std::endl
+ UHD_LOGGER_DEBUG("E100")
+ << "gcd: " << gcd
+ << " X: " << X
+ << " Y: " << Y
+ << cs.to_pp_string()
;
//filter limits on the counters
@@ -155,7 +154,7 @@ static clock_settings_type get_clock_settings(double rate){
if (cs.get_vco_rate() < 1400e6 + vco_bound_pad) continue;
if (cs.get_out_rate() != rate) continue;
- UHD_MSG(status) << "USRP-E100 clock control: " << i << std::endl << cs.to_pp_string() << std::endl;
+ UHD_LOGGER_INFO("E100") << "USRP-E100 clock control: " << i << cs.to_pp_string() ;
return cs;
}
}
@@ -195,7 +194,7 @@ public:
this->use_internal_ref();
//initialize the FPGA clock rate
- UHD_MSG(status) << boost::format("Initializing FPGA clock to %fMHz...") % (master_clock_rate/1e6) << std::endl;
+ UHD_LOGGER_INFO("E100") << boost::format("Initializing FPGA clock to %fMHz...") % (master_clock_rate/1e6) ;
this->set_fpga_clock_rate(master_clock_rate);
this->enable_test_clock(ENABLE_THE_TEST_OUT);
@@ -460,7 +459,7 @@ private:
void send_reg(uint16_t addr){
uint32_t reg = _ad9522_regs.get_write_reg(addr);
- UHD_LOGV(often) << "clock control write reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("E100") << "clock control write reg: " << std::hex << reg ;
_iface->write_spi(
UE_SPI_SS_AD9522,
spi_config_t::EDGE_RISE,
@@ -487,7 +486,7 @@ private:
_ad9522_regs.set_reg(addr, reg);
if (_ad9522_regs.vco_calibration_finished) goto wait_for_ld;
}
- UHD_MSG(error) << "USRP-E100 clock control: VCO calibration timeout" << std::endl;
+ UHD_LOGGER_ERROR("E100") << "USRP-E100 clock control: VCO calibration timeout" ;
wait_for_ld:
//wait for digital lock detect:
for (size_t ms10 = 0; ms10 < 100; ms10++){
@@ -499,7 +498,7 @@ private:
_ad9522_regs.set_reg(addr, reg);
if (_ad9522_regs.digital_lock_detect) return;
}
- UHD_MSG(error) << "USRP-E100 clock control: lock detection timeout" << std::endl;
+ UHD_LOGGER_ERROR("E100") << "USRP-E100 clock control: lock detection timeout" ;
}
void soft_sync(void){
@@ -521,7 +520,7 @@ private:
;
//write initial register values and latch/update
- BOOST_FOREACH(const range_t &range, ranges){
+ for(const range_t &range: ranges){
for(uint16_t addr = range.first; addr <= range.second; addr++){
this->send_reg(addr);
}
diff --git a/host/lib/usrp/e100/codec_ctrl.cpp b/host/lib/usrp/e100/codec_ctrl.cpp
index 7dce01e46..5bd394fb1 100644
--- a/host/lib/usrp/e100/codec_ctrl.cpp
+++ b/host/lib/usrp/e100/codec_ctrl.cpp
@@ -260,7 +260,7 @@ void e100_codec_ctrl_impl::write_aux_dac(aux_dac_t which, double volts){
**********************************************************************/
void e100_codec_ctrl_impl::send_reg(uint8_t addr){
uint32_t reg = _ad9862_regs.get_write_reg(addr);
- UHD_LOGV(often) << "codec control write reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("E100") << "codec control write reg: " << std::hex << reg ;
_iface->write_spi(
UE_SPI_SS_AD9862,
spi_config_t::EDGE_RISE,
@@ -270,13 +270,13 @@ void e100_codec_ctrl_impl::send_reg(uint8_t addr){
void e100_codec_ctrl_impl::recv_reg(uint8_t addr){
uint32_t reg = _ad9862_regs.get_read_reg(addr);
- UHD_LOGV(often) << "codec control read reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("E100") << "codec control read reg: " << std::hex << reg ;
uint32_t ret = _iface->read_spi(
UE_SPI_SS_AD9862,
spi_config_t::EDGE_RISE,
reg, 16
);
- UHD_LOGV(often) << "codec control read ret: " << std::hex << ret << std::endl;
+ UHD_LOGGER_TRACE("E100") << "codec control read ret: " << std::hex << ret ;
_ad9862_regs.set_reg(addr, uint16_t(ret));
}
diff --git a/host/lib/usrp/e100/e100_ctrl.cpp b/host/lib/usrp/e100/e100_ctrl.cpp
index 4217286f8..41525300c 100644
--- a/host/lib/usrp/e100/e100_ctrl.cpp
+++ b/host/lib/usrp/e100/e100_ctrl.cpp
@@ -19,7 +19,7 @@
#include "e100_regs.hpp"
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <sys/ioctl.h> //ioctl
#include <fcntl.h> //open, close
#include <linux/usrp_e.h> //ioctl structures and constants
@@ -27,7 +27,6 @@
#include <boost/thread/thread.hpp> //sleep
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <fstream>
@@ -219,7 +218,7 @@ public:
void write_uart(const std::string &buf){
const ssize_t ret = ::write(_node_fd, buf.c_str(), buf.size());
- if (size_t(ret) != buf.size()) UHD_LOG << ret;
+ if (size_t(ret) != buf.size()) UHD_LOGGER_DEBUG("E100")<< ret;
}
std::string read_uart(double timeout){
@@ -330,7 +329,7 @@ public:
* Structors
******************************************************************/
e100_ctrl_impl(const std::string &node){
- UHD_MSG(status) << "Opening device node " << node << "..." << std::endl;
+ UHD_LOGGER_INFO("E100") << "Opening device node " << node << "..." ;
//open the device node and check file descriptor
if ((_node_fd = ::open(node.c_str(), O_RDWR)) < 0){
@@ -350,7 +349,7 @@ public:
edge_file << "rising" << std::endl << std::flush;
edge_file.close();
_irq_fd = ::open("/sys/class/gpio/gpio147/value", O_RDONLY);
- if (_irq_fd < 0) UHD_MSG(error) << "Unable to open GPIO for IRQ\n";
+ if (_irq_fd < 0) UHD_LOGGER_ERROR("E100") << "Unable to open GPIO for IRQ\n";
}
~e100_ctrl_impl(void){
diff --git a/host/lib/usrp/e100/e100_impl.cpp b/host/lib/usrp/e100/e100_impl.cpp
index 25c967cfa..ddb21fc35 100644
--- a/host/lib/usrp/e100/e100_impl.cpp
+++ b/host/lib/usrp/e100/e100_impl.cpp
@@ -18,7 +18,7 @@
#include "apply_corrections.hpp"
#include "e100_impl.hpp"
#include "e100_regs.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/paths.hpp>
@@ -140,7 +140,7 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
e100_fpga_image = find_image_path(device_addr.get("fpga", default_fpga_file_name));
}
catch(...){
- UHD_MSG(error) << boost::format("Could not find FPGA image. %s\n") % print_utility_error("uhd_images_downloader.py");
+ UHD_LOGGER_ERROR("E100") << boost::format("Could not find FPGA image. %s") % print_utility_error("uhd_images_downloader.py");
throw;
}
e100_load_fpga(e100_fpga_image);
@@ -151,10 +151,10 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
bool dboard_clocks_diff = true;
if (mb_eeprom.get("revision", "0") == "3") dboard_clocks_diff = false;
else if (mb_eeprom.get("revision", "0") == "4") dboard_clocks_diff = true;
- else UHD_MSG(warning)
+ else UHD_LOGGER_WARNING("E100")
<< "Unknown E1XX revision number!\n"
<< "defaulting to differential dboard clocks to be safe.\n"
- << std::endl;
+ ;
const double master_clock_rate = device_addr.cast<double>("master_clock_rate", E100_DEFAULT_CLOCK_RATE);
_aux_spi_iface = e100_ctrl::make_aux_spi_iface();
_clock_ctrl = e100_clock_ctrl::make(_aux_spi_iface, master_clock_rate, dboard_clocks_diff);
@@ -179,7 +179,7 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
//Perform wishbone readback tests, these tests also write the hash
bool test_fail = false;
- UHD_MSG(status) << "Performing control readback test... " << std::flush;
+ UHD_LOGGER_INFO("E100") << "Performing control readback test... ";
size_t hash = time(NULL);
for (size_t i = 0; i < 100; i++){
boost::hash_combine(hash, i);
@@ -187,12 +187,12 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
test_fail = _fifo_ctrl->peek32(REG_RB_CONFIG0) != uint32_t(hash);
if (test_fail) break; //exit loop on any failure
}
- UHD_MSG(status) << ((test_fail)? " fail" : "pass") << std::endl;
+ UHD_LOGGER_INFO("E100") << "Control readback test " << ((test_fail)? "failed" : "passed");
- if (test_fail) UHD_MSG(error) << boost::format(
- "The FPGA is either clocked improperly\n"
- "or the FPGA build is not compatible.\n"
- "Subsequent errors may follow...\n"
+ if (test_fail) UHD_LOGGER_ERROR("E100") << boost::format(
+ "The FPGA is either clocked improperly "
+ "or the FPGA build is not compatible. "
+ "Subsequent errors may follow..."
);
//check that the compatibility is correct
@@ -260,16 +260,16 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
static const fs::path GPSDO_VOLATILE_PATH("/media/ram/e100_internal_gpsdo.cache");
if (not fs::exists(GPSDO_VOLATILE_PATH))
{
- UHD_MSG(status) << "Detecting internal GPSDO.... " << std::flush;
+ UHD_LOGGER_INFO("E100") << "Detecting internal GPSDO.... ";
try{
_gps = gps_ctrl::make(e100_ctrl::make_gps_uart_iface(E100_UART_DEV_NODE));
}
catch(std::exception &e){
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("E100") << "An error occurred making GPSDO control: " << e.what();
}
if (_gps and _gps->gps_detected())
{
- BOOST_FOREACH(const std::string &name, _gps->get_sensors())
+ for(const std::string &name: _gps->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, _gps, name));
@@ -434,12 +434,12 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
//bind frontend corrections to the dboard freq props
const fs_path db_tx_fe_path = mb_path / "dboards" / "A" / "tx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_tx_fe_path)){
+ for(const std::string &name: _tree->list(db_tx_fe_path)){
_tree->access<double>(db_tx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&e100_impl::set_tx_fe_corrections, this, _1));
}
const fs_path db_rx_fe_path = mb_path / "dboards" / "A" / "rx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_rx_fe_path)){
+ for(const std::string &name: _tree->list(db_rx_fe_path)){
_tree->access<double>(db_rx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&e100_impl::set_rx_fe_corrections, this, _1));
}
@@ -460,10 +460,10 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
.add_coerced_subscriber(boost::bind(&e100_clock_ctrl::set_fpga_clock_rate, _clock_ctrl, _1));
//reset cordic rates and their properties to zero
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "freq" / "value").set(0.0);
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "tx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "tx_dsps")){
_tree->access<double>(mb_path / "tx_dsps" / name / "freq" / "value").set(0.0);
}
@@ -475,10 +475,10 @@ e100_impl::e100_impl(const uhd::device_addr_t &device_addr){
//GPS installed: use external ref, time, and init time spec
if (_gps and _gps->gps_detected()){
_time64->enable_gpsdo();
- UHD_MSG(status) << "Setting references to the internal GPSDO" << std::endl;
+ UHD_LOGGER_INFO("E100") << "Setting references to the internal GPSDO";
_tree->access<std::string>(mb_path / "time_source/value").set("gpsdo");
_tree->access<std::string>(mb_path / "clock_source/value").set("gpsdo");
- UHD_MSG(status) << "Initializing time to the internal GPSDO" << std::endl;
+ UHD_LOGGER_INFO("E100") << "Initializing time to the internal GPSDO";
_time64->set_time_next_pps(time_spec_t(time_t(_gps->get_sensor("gps_time").to_int()+1)));
}
diff --git a/host/lib/usrp/e100/e100_mmap_zero_copy.cpp b/host/lib/usrp/e100/e100_mmap_zero_copy.cpp
index 57e4e32d9..37a87a669 100644
--- a/host/lib/usrp/e100/e100_mmap_zero_copy.cpp
+++ b/host/lib/usrp/e100/e100_mmap_zero_copy.cpp
@@ -42,14 +42,14 @@ public:
_mem(mem), _info(info) { /* NOP */ }
void release(void){
- if (fp_verbose) UHD_LOGV(always) << "recv buff: release" << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << "recv buff: release" ;
_info->flags = RB_KERNEL; //release the frame
}
UHD_INLINE bool ready(void){return _info->flags & RB_USER;}
UHD_INLINE sptr get_new(void){
- if (fp_verbose) UHD_LOGV(always) << " make_recv_buff: " << _info->len << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << " make_recv_buff: " << _info->len ;
_info->flags = RB_USER_PROCESS; //claim the frame
return make(this, _mem, _info->len);
}
@@ -69,18 +69,18 @@ public:
_mem(mem), _info(info), _len(len), _fd(fd) { /* NOP */ }
void release(void){
- if (fp_verbose) UHD_LOGV(always) << "send buff: commit " << size() << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << "send buff: commit " << size() ;
_info->len = _len;//size();
_info->flags = RB_USER; //release the frame
if (::write(_fd, NULL, 0) < 0){ //notifies the kernel
- UHD_LOGV(rarely) << UHD_THROW_SITE_INFO("write error") << std::endl;
+ UHD_LOGGER_ERROR("E100") << UHD_THROW_SITE_INFO("write error") ;
}
}
UHD_INLINE bool ready(void){return _info->flags & RB_KERNEL;}
UHD_INLINE sptr get_new(void){
- if (fp_verbose) UHD_LOGV(always) << " make_send_buff: " << _len << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << " make_send_buff: " << _len ;
_info->flags = RB_USER_PROCESS; //claim the frame
return make(this, _mem, _len);
}
@@ -111,15 +111,13 @@ public:
(_rb_size.num_rx_frames + _rb_size.num_tx_frames) * _frame_size;
//print sizes summary
- UHD_LOG
- << "page_size: " << page_size << std::endl
- << "frame_size: " << _frame_size << std::endl
- << "num_pages_rx_flags: " << _rb_size.num_pages_rx_flags << std::endl
- << "num_rx_frames: " << _rb_size.num_rx_frames << std::endl
- << "num_pages_tx_flags: " << _rb_size.num_pages_tx_flags << std::endl
- << "num_tx_frames: " << _rb_size.num_tx_frames << std::endl
- << "map_size: " << _map_size << std::endl
- ;
+ UHD_LOGGER_DEBUG("E100") << "page_size: " << page_size;
+ UHD_LOGGER_DEBUG("E100") << "frame_size: " << _frame_size;
+ UHD_LOGGER_DEBUG("E100") << "num_pages_rx_flags: " << _rb_size.num_pages_rx_flags;
+ UHD_LOGGER_DEBUG("E100") << "num_rx_frames: " << _rb_size.num_rx_frames;
+ UHD_LOGGER_DEBUG("E100") << "num_pages_tx_flags: " << _rb_size.num_pages_tx_flags;
+ UHD_LOGGER_DEBUG("E100") << "num_tx_frames: " << _rb_size.num_tx_frames;
+ UHD_LOGGER_DEBUG("E100") << "map_size: " << _map_size;
//call mmap to get the memory
_mapped_mem = ::mmap(
@@ -134,12 +132,10 @@ public:
size_t send_buff_off = send_info_off + (_rb_size.num_pages_tx_flags * page_size);
//print offset summary
- UHD_LOG
- << "recv_info_off: " << recv_info_off << std::endl
- << "recv_buff_off: " << recv_buff_off << std::endl
- << "send_info_off: " << send_info_off << std::endl
- << "send_buff_off: " << send_buff_off << std::endl
- ;
+ UHD_LOGGER_DEBUG("E100") << "recv_info_off: " << recv_info_off;
+ UHD_LOGGER_DEBUG("E100") << "recv_buff_off: " << recv_buff_off;
+ UHD_LOGGER_DEBUG("E100") << "send_info_off: " << send_info_off;
+ UHD_LOGGER_DEBUG("E100") << "send_buff_off: " << send_buff_off;
//pointers to sections in the mapped memory
ring_buffer_info (*recv_info)[], (*send_info)[];
@@ -170,12 +166,12 @@ public:
}
~e100_mmap_zero_copy_impl(void){
- UHD_LOG << "cleanup: munmap" << std::endl;
+ UHD_LOGGER_DEBUG("E100")<< "cleanup: munmap" ;
::munmap(_mapped_mem, _map_size);
}
managed_recv_buffer::sptr get_recv_buff(double timeout){
- if (fp_verbose) UHD_LOGV(always) << "get_recv_buff: " << _recv_index << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << "get_recv_buff: " << _recv_index ;
e100_mmap_zero_copy_mrb &mrb = *_mrb_pool[_recv_index];
//poll/wait for a ready frame
@@ -185,7 +181,7 @@ public:
pfd.fd = _fd;
pfd.events = POLLIN;
ssize_t poll_ret = ::poll(&pfd, 1, size_t(timeout*1e3/poll_breakout));
- if (fp_verbose) UHD_LOGV(always) << " POLLIN: " << poll_ret << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << " POLLIN: " << poll_ret ;
if (poll_ret > 0) goto found_user_frame; //good poll, continue on
}
return managed_recv_buffer::sptr(); //timed-out for real
@@ -207,7 +203,7 @@ public:
}
managed_send_buffer::sptr get_send_buff(double timeout){
- if (fp_verbose) UHD_LOGV(always) << "get_send_buff: " << _send_index << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << "get_send_buff: " << _send_index ;
e100_mmap_zero_copy_msb &msb = *_msb_pool[_send_index];
//poll/wait for a ready frame
@@ -216,7 +212,7 @@ public:
pfd.fd = _fd;
pfd.events = POLLOUT;
ssize_t poll_ret = ::poll(&pfd, 1, size_t(timeout*1e3));
- if (fp_verbose) UHD_LOGV(always) << " POLLOUT: " << poll_ret << std::endl;
+ if (fp_verbose) UHD_LOGGER_DEBUG("E100") << " POLLOUT: " << poll_ret ;
if (poll_ret <= 0) return managed_send_buffer::sptr();
}
diff --git a/host/lib/usrp/e100/fpga_downloader.cpp b/host/lib/usrp/e100/fpga_downloader.cpp
index 9abde32f7..bfb207f39 100644
--- a/host/lib/usrp/e100/fpga_downloader.cpp
+++ b/host/lib/usrp/e100/fpga_downloader.cpp
@@ -23,18 +23,13 @@
#include <uhd/device.hpp>
#include <uhd/image_loader.hpp>
#include <uhd/types/device_addr.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/static.hpp>
#include "e100_impl.hpp"
#else //special case when this file is externally included
#include <stdexcept>
#include <iostream>
-#define UHD_MSG(type) std::cout
-namespace uhd{
- typedef std::runtime_error os_error;
- typedef std::runtime_error io_error;
-}
#endif
#include <sstream>
@@ -246,7 +241,7 @@ static void send_file_to_fpga(const std::string &file_name, gpio &error, gpio &d
throw uhd::os_error("INIT_B went high, error occured.");
if (!done.get_value())
- UHD_MSG(status) << "Configuration complete." << std::endl;
+ UHD_LOGGER_INFO("E100") << "Configuration complete.";
} while (bitstream.gcount() == BUF_SIZE);
}
@@ -260,20 +255,20 @@ void e100_load_fpga(const std::string &bin_file){
gpio gpio_init_b(INIT_B, IN);
gpio gpio_done (DONE, IN);
- UHD_MSG(status) << "Loading FPGA image: " << bin_file << "... " << std::flush;
+ UHD_LOGGER_INFO("E100") << "Loading FPGA image: " << bin_file << "... ";
// if(std::system("/sbin/rmmod usrp_e") != 0){
-// UHD_MSG(warning) << "USRP-E100 FPGA downloader: could not unload usrp_e module" << std::endl;
+// UHD_LOGGER_WARNING("E100") << "USRP-E100 FPGA downloader: could not unload usrp_e module" ;
// }
prepare_fpga_for_configuration(gpio_prog_b, gpio_init_b);
- UHD_MSG(status) << "done = " << gpio_done.get_value() << std::endl;
+ UHD_LOGGER_INFO("E100") << "done = " << gpio_done.get_value();
send_file_to_fpga(bin_file, gpio_init_b, gpio_done);
// if(std::system("/sbin/modprobe usrp_e") != 0){
-// UHD_MSG(warning) << "USRP-E100 FPGA downloader: could not load usrp_e module" << std::endl;
+// UHD_LOGGER_WARNING("E100") << "USRP-E100 FPGA downloader: could not load usrp_e module" ;
// }
}
diff --git a/host/lib/usrp/e100/io_impl.cpp b/host/lib/usrp/e100/io_impl.cpp
index ebed3614c..acd14f17b 100644
--- a/host/lib/usrp/e100/io_impl.cpp
+++ b/host/lib/usrp/e100/io_impl.cpp
@@ -20,7 +20,7 @@
#include "../../transport/super_recv_packet_handler.hpp"
#include "../../transport/super_send_packet_handler.hpp"
#include "e100_impl.hpp"
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <boost/bind.hpp>
@@ -75,10 +75,10 @@ void e100_impl::update_rates(void){
_tree->access<double>(mb_path / "tick_rate").update();
//and now that the tick rate is set, init the host rates to something
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "rate" / "value").update();
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "tx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "tx_dsps")){
_tree->access<double>(mb_path / "tx_dsps" / name / "rate" / "value").update();
}
}
diff --git a/host/lib/usrp/e300/e300_common.cpp b/host/lib/usrp/e300/e300_common.cpp
index 216713bc6..61da3a2a2 100644
--- a/host/lib/usrp/e300/e300_common.cpp
+++ b/host/lib/usrp/e300/e300_common.cpp
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#include <uhd/image_loader.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/static.hpp>
@@ -26,6 +26,7 @@
#include "e300_common.hpp"
#include <boost/filesystem.hpp>
+#include <boost/noncopyable.hpp>
#include <fstream>
#include <string>
@@ -39,7 +40,7 @@ void load_fpga_image(const std::string &path)
if (not boost::filesystem::exists("/dev/xdevcfg"))
::system("mknod /dev/xdevcfg c 259 0");
- UHD_MSG(status) << "Loading FPGA image: " << path << "..." << std::flush;
+ UHD_LOGGER_INFO("E300") << "Loading FPGA image: " << path << "...";
std::ifstream fpga_file(path.c_str(), std::ios_base::binary);
UHD_ASSERT_THROW(fpga_file.good());
@@ -57,7 +58,7 @@ void load_fpga_image(const std::string &path)
fpga_file.close();
std::fclose(wfile);
- UHD_MSG(status) << " done" << std::endl;
+ UHD_LOGGER_INFO("E300") << "FPGA image loaded";
}
static bool e300_image_loader(const image_loader::image_loader_args_t &image_loader_args) {
diff --git a/host/lib/usrp/e300/e300_common.hpp b/host/lib/usrp/e300/e300_common.hpp
index d9a0afd9e..c0cb9e2fd 100644
--- a/host/lib/usrp/e300/e300_common.hpp
+++ b/host/lib/usrp/e300/e300_common.hpp
@@ -18,6 +18,8 @@
#ifndef INCLUDED_E300_COMMON_HPP
#define INCLUDED_E300_COMMON_HPP
+#include <string>
+
namespace uhd { namespace usrp { namespace e300 {
namespace common {
diff --git a/host/lib/usrp/e300/e300_defaults.hpp b/host/lib/usrp/e300/e300_defaults.hpp
index 267897e03..cc810c0df 100644
--- a/host/lib/usrp/e300/e300_defaults.hpp
+++ b/host/lib/usrp/e300/e300_defaults.hpp
@@ -60,7 +60,7 @@ public:
}
}
clocking_mode_t get_clocking_mode() {
- return AD9361_XTAL_N_CLK_PATH;
+ return clocking_mode_t::AD9361_XTAL_N_CLK_PATH;
}
digital_interface_mode_t get_digital_interface_mode() {
return AD9361_DDR_FDD_LVCMOS;
diff --git a/host/lib/usrp/e300/e300_eeprom_manager.cpp b/host/lib/usrp/e300/e300_eeprom_manager.cpp
index d43ca3d4c..9db9a2ba5 100644
--- a/host/lib/usrp/e300/e300_eeprom_manager.cpp
+++ b/host/lib/usrp/e300/e300_eeprom_manager.cpp
@@ -67,9 +67,9 @@ const mboard_eeprom_t& e300_eeprom_manager::read_mb_eeprom(void)
mb_eeprom_map_t &map = *map_ptr;
- _mb_eeprom["product"] = boost::lexical_cast<std::string>(
+ _mb_eeprom["product"] = std::to_string(
uhd::ntohx<uint16_t>(map.hw_product));
- _mb_eeprom["revision"] = boost::lexical_cast<std::string>(
+ _mb_eeprom["revision"] = std::to_string(
uhd::ntohx<uint16_t>(map.hw_revision));
_mb_eeprom["serial"] = _bytes_to_string(
map.serial, MB_SERIAL_LEN);
@@ -101,7 +101,7 @@ const dboard_eeprom_t& e300_eeprom_manager::read_db_eeprom(void)
_db_eeprom.id = uhd::usrp::dboard_id_t::from_uint16(
uhd::ntohx<uint16_t>(map.hw_product));
- _db_eeprom.revision = boost::lexical_cast<std::string>(
+ _db_eeprom.revision = std::to_string(
uhd::ntohx<uint16_t>(map.hw_revision));
_db_eeprom.serial = _bytes_to_string(
map.serial, DB_SERIAL_LEN);
@@ -232,8 +232,10 @@ std::string e300_eeprom_manager::get_mb_type_string(void) const
return "E3XX";
case E310_SG1_MB_PID:
+ return "E3XX SG1";
+
case E310_SG3_MB_PID:
- return "E3XX";
+ return "E3XX SG3";
default:
return "UNKNOWN";
diff --git a/host/lib/usrp/e300/e300_fifo_config.cpp b/host/lib/usrp/e300/e300_fifo_config.cpp
index 43d14aa65..89162a048 100644
--- a/host/lib/usrp/e300/e300_fifo_config.cpp
+++ b/host/lib/usrp/e300/e300_fifo_config.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2013-2014 Ettus Research LLC
+// Copyright 2013-2017 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
@@ -17,8 +17,9 @@
#ifdef E300_NATIVE
-#include <stdint.h>
#include <uhd/config.hpp>
+#include <stdint.h>
+#include <atomic>
// constants coded into the fpga parameters
static const size_t ZF_CONFIG_BASE = 0x40000000;
@@ -81,7 +82,7 @@ static UHD_INLINE size_t ZF_STREAM_OFF(const size_t which)
#include <fcntl.h> //open, close
#include <poll.h> //poll
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <boost/format.hpp>
#include <boost/thread/thread.hpp> //sleep
#include <uhd/types/time_spec.hpp> //timeout
@@ -101,6 +102,10 @@ struct e300_fifo_poll_waiter
//NOP
}
+ /*!
+ * Waits until the file descriptor fd has data to read.
+ * Access to the file descriptor is thread safe.
+ */
void wait(const double timeout)
{
if (timeout == 0) {
@@ -210,9 +215,9 @@ public:
_index(0),
_waiter(waiter)
{
- //UHD_MSG(status) << boost::format("phys 0x%x") % addrs.phys << std::endl;
- //UHD_MSG(status) << boost::format("data 0x%x") % addrs.data << std::endl;
- //UHD_MSG(status) << boost::format("ctrl 0x%x") % addrs.ctrl << std::endl;
+ //UHD_LOGGER_INFO("E300") << boost::format("phys 0x%x") % addrs.phys ;
+ //UHD_LOGGER_INFO("E300") << boost::format("data 0x%x") % addrs.data ;
+ //UHD_LOGGER_INFO("E300") << boost::format("ctrl 0x%x") % addrs.ctrl ;
const uint32_t sig = zf_peek32(_addrs.ctrl + ARBITER_RD_SIG);
UHD_ASSERT_THROW((sig >> 16) == 0xACE0);
@@ -351,7 +356,7 @@ public:
virtual ~e300_fifo_interface_impl(void)
{
delete _waiter;
- UHD_LOG << "cleanup: munmap" << std::endl;
+ UHD_LOGGER_TRACE("E300")<< "cleanup: munmap" ;
::munmap(_buff, _config.ctrl_length + _config.buff_length);
::close(_fd);
}
diff --git a/host/lib/usrp/e300/e300_impl.cpp b/host/lib/usrp/e300/e300_impl.cpp
index e8cfd7d54..7e99e2f70 100644
--- a/host/lib/usrp/e300/e300_impl.cpp
+++ b/host/lib/usrp/e300/e300_impl.cpp
@@ -25,7 +25,7 @@
#include "e300_common.hpp"
#include "e300_remote_codec_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/paths.hpp>
@@ -75,11 +75,11 @@ static std::vector<std::string> discover_ip_addrs(
try {
udp_bcast_xport = uhd::transport::udp_simple::make_broadcast(addr_hint, port);
} catch(const std::exception &e) {
- UHD_MSG(error) << boost::format("Cannot open UDP transport on %s for discovery\n%s")
- % addr_hint % e.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << boost::format("Cannot open UDP transport on %s for discovery%s")
+ % addr_hint % e.what() ;
return addrs;
} catch(...) {
- UHD_MSG(error) << "E300 Network discovery unknown error" << std::endl;
+ UHD_LOGGER_ERROR("E300") << "E300 Network discovery unknown error";
return addrs;
}
@@ -95,10 +95,10 @@ static std::vector<std::string> discover_ip_addrs(
try {
udp_bcast_xport->send(boost::asio::buffer(&req, sizeof(req)));
} catch (const std::exception &ex) {
- UHD_MSG(error) << "E300 Network discovery error " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "E300 Network discovery error " << ex.what();
return addrs;
} catch(...) {
- UHD_MSG(error) << "E300 Network discovery unknown error" << std::endl;
+ UHD_LOGGER_ERROR("E300") << "E300 Network discovery unknown error";
return addrs;
}
@@ -130,7 +130,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
if (hints.size() > 1) {
device_addrs_t found_devices;
std::string err_msg;
- BOOST_FOREACH(const device_addr_t &hint_i, hints)
+ for(const device_addr_t &hint_i: hints)
{
device_addrs_t found_devices_i = e300_find(hint_i);
if(found_devices_i.size() != 1)
@@ -165,7 +165,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
if (not loopback_only) {
// if no address or node has been specified, send a broadcast
if ((not hint.has_key("addr")) and (not hint.has_key("node"))) {
- BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs())
+ for(const if_addrs_t &if_addrs: get_if_addrs())
{
// avoid the loopback device
if (is_loopback(if_addrs))
@@ -187,7 +187,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
std::vector<std::string> ip_addrs = discover_ip_addrs(
hint["addr"], E300_SERVER_I2C_PORT);
- BOOST_FOREACH(const std::string &ip_addr, ip_addrs)
+ for(const std::string &ip_addr: ip_addrs)
{
device_addr_t new_addr;
new_addr["type"] = "e3x0";
@@ -200,7 +200,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
const mboard_eeprom_t eeprom = eeprom_manager.get_mb_eeprom();
new_addr["name"] = eeprom["name"];
new_addr["serial"] = eeprom["serial"];
- new_addr["product"] = eeprom["product"];
+ new_addr["product"] = eeprom_manager.get_mb_type_string();
} catch (...) {
// set these values as empty string, so the device may still be found
// and the filters below can still operate on the discovered device
@@ -236,7 +236,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
const mboard_eeprom_t eeprom = eeprom_manager.get_mb_eeprom();
new_addr["name"] = eeprom["name"];
new_addr["serial"] = eeprom["serial"];
- new_addr["product"] = eeprom["product"];
+ new_addr["product"] = eeprom_manager.get_mb_type_string();
} catch (...) {
// set these values as empty string, so the device may still be found
// and the filters below can still operate on the discovered device
@@ -260,7 +260,7 @@ device_addrs_t e300_find(const device_addr_t &multi_dev_hint)
**********************************************************************/
static device::sptr e300_make(const device_addr_t &device_addr)
{
- UHD_LOG << "e300_make with args " << device_addr.to_pp_string() << std::endl;
+ UHD_LOGGER_DEBUG("E300")<< "e300_make with args " << device_addr.to_pp_string() ;
if(device_addr.has_key("server"))
throw uhd::runtime_error(
str(boost::format("Please run the server executable \"%s\"")
@@ -295,8 +295,8 @@ void get_e3x0_fpga_images(const uhd::device_addr_t &device_addr,
break;
case e300_eeprom_manager::UNKNOWN:
default:
- UHD_MSG(warning) << "Unknown motherboard type, loading e300 image."
- << std::endl;
+ UHD_LOGGER_WARNING("E300") << "Unknown motherboard type, loading e300 image."
+ ;
fpga_image = device_addr.cast<std::string>("fpga",
find_image_path(E300_FPGA_FILE_NAME));
idle_image = find_image_path(E3XX_SG1_FPGA_IDLE_FILE_NAME);
@@ -323,7 +323,14 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
_do_not_reload = device_addr.has_key("no_reload_fpga");
if (not _do_not_reload) {
std::string fpga_image;
- get_e3x0_fpga_images(device_addr,
+
+ // need to re-read product ID code because of conversion into string in find function
+ e300_eeprom_manager eeprom_manager(i2c::make_i2cdev(E300_I2CDEV_DEVICE));
+ const mboard_eeprom_t eeprom = eeprom_manager.get_mb_eeprom();
+ device_addr_t device_addr_cp;
+ device_addr_cp["product"] = eeprom["product"];
+
+ get_e3x0_fpga_images(device_addr_cp,
fpga_image,
_idle_image);
common::load_fpga_image(fpga_image);
@@ -405,14 +412,14 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
_codec_mgr = ad936x_manager::make(_codec_ctrl, fpga::NUM_RADIOS);
#ifdef E300_GPSD
- UHD_MSG(status) << "Detecting internal GPS " << std::flush;
+ UHD_LOGGER_INFO("E300") << "Detecting internal GPS ";
try {
if (_xport_path == AXI)
_gps = gpsd_iface::make("localhost", 2947);
else
_gps = gpsd_iface::make(device_addr["addr"], 2947);
} catch (std::exception &e) {
- UHD_MSG(error) << "An error occured making GPSDd interface: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "An error occured making GPSDd interface: " << e.what();
}
if (_gps) {
@@ -426,12 +433,12 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
break;
}
}
- UHD_MSG(status) << (_gps->gps_detected() ? "found" : "not found") << std::endl;
+ UHD_LOGGER_INFO("E300") << "GPSDO " << (_gps->gps_detected() ? "found" : "not found");
}
#endif
// Verify we can talk to the e300 core control registers ...
- UHD_MSG(status) << "Initializing core control..." << std::endl;
+ UHD_LOGGER_INFO("E300") << "Initializing core control...";
this->_register_loopback_self_test(_global_regs);
// Verify fpga compatibility version matches at least for the major
@@ -468,14 +475,14 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
// and do the misc mboard sensors
////////////////////////////////////////////////////////////////////
_tree->create<int>(mb_path / "sensors");
- BOOST_FOREACH(const std::string &name, _sensor_manager->get_sensors())
+ for(const std::string &name: _sensor_manager->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&e300_sensor_manager::get_sensor, _sensor_manager, name));
}
#ifdef E300_GPSD
if (_gps) {
- BOOST_FOREACH(const std::string &name, _gps->get_sensors())
+ for(const std::string &name: _gps->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gpsd_iface::get_sensor, _gps, name));
@@ -511,7 +518,7 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
this->_setup_radio(instance);
//now test each radio module's connection to the codec interface
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
_codec_mgr->loopback_self_test(
boost::bind(
@@ -524,7 +531,7 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
// internal gpios
////////////////////////////////////////////////////////////////////
gpio_atr_3000::sptr fp_gpio = gpio_atr_3000::make(_radio_perifs[0].ctrl, radio::sr_addr(radio::FP_GPIO), radio::RB32_FP_GPIO);
- BOOST_FOREACH(const gpio_attr_map_t::value_type attr, gpio_attr_map)
+ for(const gpio_attr_map_t::value_type attr: gpio_attr_map)
{
_tree->create<uint32_t>(mb_path / "gpio" / "INT0" / attr.second)
.add_coerced_subscriber(boost::bind(&gpio_atr_3000::set_gpio_attr, fp_gpio, attr.first, _1))
@@ -625,11 +632,11 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
// subdev spec contains full width of selections
subdev_spec_t rx_spec, tx_spec;
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
{
rx_spec.push_back(subdev_spec_pair_t("A", fe));
}
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
{
tx_spec.push_back(subdev_spec_pair_t("A", fe));
}
@@ -692,11 +699,11 @@ void e300_impl::_enforce_tick_rate_limits(
double e300_impl::_set_tick_rate(const double rate)
{
- UHD_MSG(status) << "Asking for clock rate " << rate/1e6 << " MHz\n";
+ UHD_LOGGER_INFO("E300") << "Asking for clock rate " << rate/1e6 << " MHz\n";
_tick_rate = _codec_ctrl->set_clock_rate(rate);
- UHD_MSG(status) << "Actually got clock rate " << _tick_rate/1e6 << " MHz\n";
+ UHD_LOGGER_INFO("E300") << "Actually got clock rate " << _tick_rate/1e6 << " MHz\n";
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
perif.time64->set_tick_rate(_tick_rate);
perif.time64->self_test();
@@ -707,7 +714,7 @@ double e300_impl::_set_tick_rate(const double rate)
void e300_impl::_register_loopback_self_test(wb_iface::sptr iface)
{
bool test_fail = false;
- UHD_MSG(status) << "Performing register loopback test... " << std::flush;
+ UHD_LOGGER_INFO("E300") << "Performing register loopback test... ";
size_t hash = size_t(time(NULL));
for (size_t i = 0; i < 100; i++)
{
@@ -716,7 +723,7 @@ void e300_impl::_register_loopback_self_test(wb_iface::sptr iface)
test_fail = iface->peek32(radio::RB32_TEST) != uint32_t(hash);
if (test_fail) break; //exit loop on any failure
}
- UHD_MSG(status) << ((test_fail)? " fail" : "pass") << std::endl;
+ UHD_LOGGER_INFO("E300") << "Register loopback test " << ((test_fail)? " failed" : "passed");
}
uint32_t e300_impl::_get_version(compat_t which)
@@ -747,19 +754,20 @@ uint32_t e300_impl::_allocate_sid(const sid_config_t &config)
{
const uint32_t stream = (config.dst_prefix | (config.router_dst_there << 2)) & 0xff;
+ const size_t sid_framer = _sid_framer++; //increment for next setup
const uint32_t sid = 0
| (E300_DEVICE_HERE << 24)
- | (_sid_framer << 16)
+ | (sid_framer << 16)
| (config.router_addr_there << 8)
| (stream << 0)
;
- UHD_LOG << std::hex
+ UHD_LOGGER_DEBUG("E300")<< std::hex
<< " sid 0x" << sid
- << " framer 0x" << _sid_framer
+ << " framer 0x" << sid_framer
<< " stream 0x" << stream
<< " router_dst_there 0x" << int(config.router_dst_there)
<< " router_addr_there 0x" << int(config.router_addr_there)
- << std::dec << std::endl;
+ << std::dec ;
// Program the E300 to recognize it's own local address.
_global_regs->poke32(global_regs::SR_CORE_XB_LOCAL, config.router_addr_there);
@@ -775,26 +783,23 @@ uint32_t e300_impl::_allocate_sid(const sid_config_t &config)
_global_regs->poke32(XB_ADDR(E300_DEVICE_HERE),
config.router_dst_here);
- UHD_LOG << std::hex
+ UHD_LOGGER_TRACE("E300") << std::hex
<< "done router config for sid 0x" << sid
- << std::dec << std::endl;
-
- //increment for next setup
- _sid_framer++;
+ << std::dec ;
return sid;
}
void e300_impl::_setup_dest_mapping(const uint32_t sid, const size_t which_stream)
{
- UHD_LOG << boost::format("Setting up dest map for 0x%lx to be stream %d")
- % (sid & 0xff) % which_stream << std::endl;
+ UHD_LOGGER_DEBUG("E300") << boost::format("Setting up dest map for 0x%lx to be stream %d")
+ % (sid & 0xff) % which_stream ;
_global_regs->poke32(DST_ADDR(sid & 0xff), which_stream);
}
void e300_impl::_update_time_source(const std::string &source)
{
- UHD_MSG(status) << boost::format("Setting time source to %s") % source << std::endl;
+ UHD_LOGGER_INFO("E300") << boost::format("Setting time source to %s") % source;
if (source == "none" or source == "internal") {
_misc.pps_sel = global_regs::PPS_INT;
#ifdef E300_GPSD
@@ -811,7 +816,7 @@ void e300_impl::_update_time_source(const std::string &source)
void e300_impl::_set_time(const uhd::time_spec_t& t)
{
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
perif.time64->set_time_sync(t);
_misc.time_sync = 1;
_update_gpio_state();
@@ -1037,7 +1042,7 @@ void e300_impl::_setup_radio(const size_t dspno)
// create RF frontend interfacing
////////////////////////////////////////////////////////////////////
static const std::vector<direction_t> dirs = boost::assign::list_of(RX_DIRECTION)(TX_DIRECTION);
- BOOST_FOREACH(direction_t dir, dirs) {
+ for(direction_t dir: dirs) {
const std::string x = (dir == RX_DIRECTION) ? "rx" : "tx";
const std::string key = boost::to_upper_copy(x) + std::string(((dspno == FE0)? "1" : "2"));
const fs_path rf_fe_path
diff --git a/host/lib/usrp/e300/e300_impl.hpp b/host/lib/usrp/e300/e300_impl.hpp
index 50d78fdd4..cc2e39e23 100644
--- a/host/lib/usrp/e300/e300_impl.hpp
+++ b/host/lib/usrp/e300/e300_impl.hpp
@@ -47,6 +47,7 @@
#include "e300_i2c.hpp"
#include "e300_eeprom_manager.hpp"
#include "e300_sensor_manager.hpp"
+#include <atomic>
/* if we don't compile with gpsd support, don't bother */
#ifdef E300_GPSD
@@ -288,7 +289,7 @@ private: // members
uhd::device_addr_t _device_addr;
xport_t _xport_path;
e300_fifo_interface::sptr _fifo_iface;
- size_t _sid_framer;
+ std::atomic<size_t> _sid_framer;
radio_perifs_t _radio_perifs[2];
double _tick_rate;
ad9361_ctrl::sptr _codec_ctrl;
diff --git a/host/lib/usrp/e300/e300_io_impl.cpp b/host/lib/usrp/e300/e300_io_impl.cpp
index 2514b7f40..4490afa21 100644
--- a/host/lib/usrp/e300/e300_io_impl.cpp
+++ b/host/lib/usrp/e300/e300_io_impl.cpp
@@ -26,7 +26,6 @@
#include <boost/bind.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/log.hpp>
-#include <boost/foreach.hpp>
#include <boost/make_shared.hpp>
using namespace uhd;
@@ -43,7 +42,7 @@ static const uint32_t HW_SEQ_NUM_MASK = 0xfff;
void e300_impl::_check_tick_rate_with_current_streamers(const double rate)
{
size_t max_tx_chan_count = 0, max_rx_chan_count = 0;
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
{
boost::shared_ptr<sph::recv_packet_streamer> rx_streamer =
@@ -73,7 +72,7 @@ void e300_impl::_update_tick_rate(const double rate)
{
_check_tick_rate_with_current_streamers(rate);
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
boost::shared_ptr<sph::recv_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::recv_packet_streamer>(perif.rx_streamer.lock());
@@ -81,7 +80,7 @@ void e300_impl::_update_tick_rate(const double rate)
my_streamer->set_tick_rate(rate);
perif.framer->set_tick_rate(_tick_rate);
}
- BOOST_FOREACH(radio_perifs_t &perif, _radio_perifs)
+ for(radio_perifs_t &perif: _radio_perifs)
{
boost::shared_ptr<sph::send_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::send_packet_streamer>(perif.tx_streamer.lock());
@@ -336,7 +335,7 @@ static void handle_tx_async_msgs(boost::shared_ptr<e300_tx_fc_cache_t> fc_cache,
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "Error parsing async message packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "Error parsing async message packet: " << ex.what() ;
return;
}
@@ -483,9 +482,9 @@ rx_streamer::sptr e300_impl::get_rx_stream(const uhd::stream_args_t &args_)
E300_RX_SW_BUFF_FULLNESS);
const size_t fc_handle_window = std::max<size_t>(1, fc_window / E300_RX_FC_REQUEST_FREQ);
- UHD_LOG << "RX Flow Control Window = " << fc_window
+ UHD_LOGGER_DEBUG("E300") << "RX Flow Control Window = " << fc_window
<< ", RX Flow Control Handler Window = "
- << fc_handle_window << std::endl;
+ << fc_handle_window ;
perif.framer->configure_flow_control(fc_window);
boost::shared_ptr<e300_rx_fc_cache_t> fc_cache(new e300_rx_fc_cache_t());
@@ -591,9 +590,9 @@ tx_streamer::sptr e300_impl::get_tx_stream(const uhd::stream_args_t &args_)
const size_t fc_window = data_xports.send->get_num_send_frames();
const size_t fc_handle_window = std::max<size_t>(1, fc_window/E300_TX_FC_RESPONSE_FREQ);
- UHD_LOG << "TX Flow Control Window = " << fc_window
+ UHD_LOGGER_DEBUG("E300") << "TX Flow Control Window = " << fc_window
<< ", TX Flow Control Handler Window = "
- << fc_handle_window << std::endl;
+ << fc_handle_window ;
perif.deframer->configure_flow_control(0/*cycs off*/, fc_handle_window/*pkts*/);
boost::shared_ptr<e300_tx_fc_cache_t> fc_cache(new e300_tx_fc_cache_t());
diff --git a/host/lib/usrp/e300/e300_network.cpp b/host/lib/usrp/e300/e300_network.cpp
index e68f2a54d..f3045eb2d 100644
--- a/host/lib/usrp/e300/e300_network.cpp
+++ b/host/lib/usrp/e300/e300_network.cpp
@@ -31,7 +31,7 @@
#include "e300_common.hpp"
#include "e300_remote_codec_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/paths.hpp>
@@ -88,7 +88,7 @@ static void e300_recv_tunnel(
//step 1 - get the buffer
managed_recv_buffer::sptr buff = recver->get_recv_buff();
if (not buff) continue;
- if (E300_NETWORK_DEBUG) UHD_MSG(status) << name << " got " << buff->size() << std::endl;
+ if (E300_NETWORK_DEBUG) UHD_LOGGER_INFO("E300") << name << " got " << buff->size();
//step 1.5 -- update endpoint
{
@@ -102,13 +102,13 @@ static void e300_recv_tunnel(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_recv_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_recv_tunnel exit " << name << " " << ex.what();
}
catch(...)
{
- UHD_MSG(error) << "e300_recv_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_recv_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_recv_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_recv_tunnel exit " << name;
*running = false;
}
@@ -136,7 +136,7 @@ static void e300_send_tunnel(
while (not wait_for_recv_ready(recver->native(), 100) and *running){}
if (not *running) break;
const size_t num_bytes = recver->receive_from(asio::buffer(buff->cast<void *>(), buff->size()), _rx_endpoint);
- if (E300_NETWORK_DEBUG) UHD_MSG(status) << name << " got " << num_bytes << std::endl;
+ if (E300_NETWORK_DEBUG) UHD_LOGGER_INFO("E300") << name << " got " << num_bytes;
//step 2.5 -- update endpoint
{
@@ -150,13 +150,13 @@ static void e300_send_tunnel(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_send_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_send_tunnel exit " << name << " " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "e300_send_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_send_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_send_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_send_tunnel exit " << name;
*running = false;
}
@@ -252,7 +252,7 @@ static void e300_codec_ctrl_tunnel(
out->bw = _codec_ctrl->set_bw_filter(which_str, in->bw);
break;
default:
- UHD_MSG(status) << "Got unknown request?!" << std::endl;
+ UHD_LOGGER_INFO("E300") << "Got unknown request?!";
//Zero out actions to fail this request on client
out->action = uhd::htonx<uint32_t>(0);
}
@@ -262,13 +262,13 @@ static void e300_codec_ctrl_tunnel(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_ctrl_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_ctrl_tunnel exit " << name << " " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "e300_ctrl_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_ctrl_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_ctrl_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_ctrl_tunnel exit " << name;
*running = false;
}
@@ -309,13 +309,13 @@ static void e300_global_regs_tunnel(
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_gregs_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_gregs_tunnel exit " << name << " " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "e300_gregs_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_gregs_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_gregs_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_gregs_tunnel exit " << name;
*running = false;
}
@@ -353,20 +353,20 @@ static void e300_sensor_tunnel(
in->value = uhd::htonx<uint32_t>(
sensor_manager->get_ref_lock().to_bool() ? 1 : 0);
} else
- UHD_MSG(status) << "Got unknown request?!" << std::endl;
+ UHD_LOGGER_INFO("E300") << "Got unknown request?!";
socket->send_to(asio::buffer(in_buff, sizeof(sensor_transaction_t)), *endpoint);
}
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_sensor_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_sensor_tunnel exit " << name << " " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "e300_sensor_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_sensor_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_sensor_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_sensor_tunnel exit " << name;
*running = false;
}
@@ -419,19 +419,19 @@ static void e300_i2c_tunnel(
}
} else {
- UHD_MSG(error) << "e300_i2c_tunnel could not handle message." << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_i2c_tunnel could not handle message." ;
}
}
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "e300_i2c_tunnel exit " << name << " " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_i2c_tunnel exit " << name << " " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "e300_i2c_tunnel exit " << name << std::endl;
+ UHD_LOGGER_ERROR("E300") << "e300_i2c_tunnel exit " << name ;
}
- UHD_MSG(status) << "e300_i2c_tunnel exit " << name << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300_i2c_tunnel exit " << name;
*running = false;
}
@@ -491,7 +491,7 @@ void network_server_impl::_run_server(
//boost::shared_ptr<asio::ip::udp::acceptor> acceptor(new asio::ip::udp::acceptor(io_service, endpoint));
while (not boost::this_thread::interruption_requested())
{
- UHD_MSG(status) << "e300 run server on port " << port << " for " << what << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300 run server on port " << port << " for " << what;
try
{
//while (not wait_for_recv_ready(acceptor->native(), 100))
@@ -501,7 +501,7 @@ void network_server_impl::_run_server(
boost::shared_ptr<asio::ip::udp::socket> socket;
socket.reset(new asio::ip::udp::socket(io_service, endpoint));
//acceptor->accept(*socket);
- UHD_MSG(status) << "e300 socket accept on port " << port << " for " << what << std::endl;
+ UHD_LOGGER_INFO("E300") << "e300 socket accept on port " << port << " for " << what;
//asio::ip::udp::no_delay option(true);
//socket->set_option(option);
boost::thread_group tg;
@@ -586,8 +586,8 @@ network_server_impl::network_server_impl(const uhd::device_addr_t &device_addr)
break;
case e300_eeprom_manager::UNKNOWN:
default:
- UHD_MSG(warning) << "Unknown motherboard type, loading e300 image."
- << std::endl;
+ UHD_LOGGER_WARNING("E300") << "Unknown motherboard type, loading e300 image."
+ ;
fpga_image = find_image_path(E300_FPGA_FILE_NAME);
break;
}
diff --git a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
index b7c46c17d..d970d7221 100644
--- a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
+++ b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
@@ -242,7 +242,7 @@ public:
//! Write back a filter
void set_filter(const std::string &, const std::string &, const filter_info_base::sptr)
{
- UHD_MSG(warning) << "Attempting to set filter on E300 in network mode." << std::endl;
+ UHD_LOGGER_WARNING("E300") << "Attempting to set filter on E300 in network mode." ;
}
void output_digital_test_tone(UHD_UNUSED(bool enb))
diff --git a/host/lib/usrp/e300/e300_sensor_manager.cpp b/host/lib/usrp/e300/e300_sensor_manager.cpp
index b96656e5e..52f888799 100644
--- a/host/lib/usrp/e300/e300_sensor_manager.cpp
+++ b/host/lib/usrp/e300/e300_sensor_manager.cpp
@@ -171,11 +171,11 @@ public:
uhd::sensor_value_t get_mb_temp(void)
{
- double scale = boost::lexical_cast<double>(
+ double scale = std::stod(
e300_get_sysfs_attr(E300_TEMP_SYSFS, "in_temp0_scale"));
- unsigned long raw = boost::lexical_cast<unsigned long>(
+ unsigned long raw = std::stoul(
e300_get_sysfs_attr(E300_TEMP_SYSFS, "in_temp0_raw"));
- unsigned long offset = boost::lexical_cast<unsigned long>(
+ unsigned long offset = std::stoul(
e300_get_sysfs_attr(E300_TEMP_SYSFS, "in_temp0_offset"));
return sensor_value_t("temp", (raw + offset) * scale / 1000, "C");
}
diff --git a/host/lib/usrp/e300/e300_sysfs_hooks.cpp b/host/lib/usrp/e300/e300_sysfs_hooks.cpp
index 7bd1d6d7e..08562f7d7 100644
--- a/host/lib/usrp/e300/e300_sysfs_hooks.cpp
+++ b/host/lib/usrp/e300/e300_sysfs_hooks.cpp
@@ -32,7 +32,7 @@
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
static const std::string E300_AXI_FPGA_SYSFS = "40000000.axi-fpga";
@@ -96,11 +96,11 @@ e300_fifo_config_t e300_read_sysfs(void)
e300_fifo_config_t config;
- config.buff_length = boost::lexical_cast<unsigned long>(
+ config.buff_length = std::stoul(
e300_get_sysfs_attr(E300_AXI_FPGA_SYSFS, "buffer_length"));
- config.ctrl_length = boost::lexical_cast<unsigned long>(
+ config.ctrl_length = std::stoul(
e300_get_sysfs_attr(E300_AXI_FPGA_SYSFS, "control_length"));
- config.phys_addr = boost::lexical_cast<unsigned long>(
+ config.phys_addr = std::stoul(
e300_get_sysfs_attr(E300_AXI_FPGA_SYSFS, "phys_addr"));
return config;
diff --git a/host/lib/usrp/gps_ctrl.cpp b/host/lib/usrp/gps_ctrl.cpp
index 447a13c33..a5d1748fe 100644
--- a/host/lib/usrp/gps_ctrl.cpp
+++ b/host/lib/usrp/gps_ctrl.cpp
@@ -16,25 +16,25 @@
//
#include <uhd/usrp/gps_ctrl.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/types/sensors.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/assign/list_of.hpp>
#include <stdint.h>
-#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
#include <boost/tokenizer.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <boost/thread/mutex.hpp>
+#include <ctime>
+#include <string>
+#include <boost/date_time.hpp>
#include "boost/tuple/tuple.hpp"
-#include "boost/foreach.hpp"
using namespace uhd;
-using namespace boost::gregorian;
using namespace boost::posix_time;
using namespace boost::algorithm;
using namespace boost::this_thread;
@@ -92,7 +92,7 @@ private:
sentences[which].get<2>() = true;
}
} catch(std::exception &e) {
- UHD_LOGV(often) << "get_sentence: " << e.what();
+ UHD_LOGGER_DEBUG("GPS") << "get_sentence: " << e.what();
}
if (not sentence.empty() or now > exit_time)
@@ -159,7 +159,7 @@ private:
if (msg.length() < 6)
{
- UHD_LOGV(regularly) << __FUNCTION__ << ": Short GPSDO string: " << msg << std::endl;
+ UHD_LOGGER_WARNING("GPS") << __FUNCTION__ << ": Short GPSDO string: " << msg ;
continue;
}
@@ -174,14 +174,14 @@ private:
}
else
{
- UHD_LOGV(regularly) << __FUNCTION__ << ": Malformed GPSDO string: " << msg << std::endl;
+ UHD_LOGGER_WARNING("GPS") << __FUNCTION__ << ": Malformed GPSDO string: " << msg ;
}
}
boost::system_time time = boost::get_system_time();
// Update sentences with newly read data
- BOOST_FOREACH(std::string key, keys)
+ for(std::string key: keys)
{
if (not msgs[key].empty())
{
@@ -234,7 +234,7 @@ public:
if(i_heard_some_nmea) {
_gps_type = GPS_TYPE_GENERIC_NMEA;
} else if(i_heard_something_weird) {
- UHD_MSG(error) << "GPS invalid reply \"" << reply << "\", assuming none available" << std::endl;
+ UHD_LOGGER_ERROR("GPS") << "GPS invalid reply \"" << reply << "\", assuming none available";
}
}
@@ -242,17 +242,17 @@ public:
case GPS_TYPE_INTERNAL_GPSDO:
erase_all(reply, "\r");
erase_all(reply, "\n");
- UHD_MSG(status) << "Found an internal GPSDO: " << reply << std::endl;
+ UHD_LOGGER_INFO("GPS") << "Found an internal GPSDO: " << reply;
init_gpsdo();
break;
case GPS_TYPE_GENERIC_NMEA:
- UHD_MSG(status) << "Found a generic NMEA GPS device" << std::endl;
+ UHD_LOGGER_INFO("GPS") << "Found a generic NMEA GPS device";
break;
case GPS_TYPE_NONE:
default:
- UHD_MSG(status) << "No GPSDO found" << std::endl;
+ UHD_LOGGER_INFO("GPS") << "No GPSDO found";
break;
}
@@ -349,20 +349,20 @@ private:
throw uhd::value_error(str(boost::format("Invalid response \"%s\"") % reply));
}
- //just trust me on this one
- gps_time = ptime( date(
- greg_year(boost::lexical_cast<int>(datestr.substr(4, 2)) + 2000),
- greg_month(boost::lexical_cast<int>(datestr.substr(2, 2))),
- greg_day(boost::lexical_cast<int>(datestr.substr(0, 2)))
- ),
- hours( boost::lexical_cast<int>(timestr.substr(0, 2)))
- + minutes(boost::lexical_cast<int>(timestr.substr(2, 2)))
- + seconds(boost::lexical_cast<int>(timestr.substr(4, 2)))
- );
+ struct tm raw_date;
+ raw_date.tm_year = std::stoi(datestr.substr(4, 2)) + 2000 - 1900; // years since 1900
+ raw_date.tm_mon = std::stoi(datestr.substr(2, 2)) - 1; // months since january (0-11)
+ raw_date.tm_mday = std::stoi(datestr.substr(0, 2)); // dom (1-31)
+ raw_date.tm_hour = std::stoi(timestr.substr(0, 2));
+ raw_date.tm_min = std::stoi(timestr.substr(2, 2));
+ raw_date.tm_sec = std::stoi(timestr.substr(4,2));
+ gps_time = boost::posix_time::ptime_from_tm(raw_date);
+
+ UHD_LOG_TRACE("GPS", "GPS time: " + boost::posix_time::to_simple_string(gps_time));
return gps_time;
} catch(std::exception &e) {
- UHD_LOGV(often) << "get_time: " << e.what();
+ UHD_LOGGER_DEBUG("GPS") << "get_time: " << e.what();
error_cnt++;
}
}
@@ -389,7 +389,7 @@ private:
else
return (get_token(reply, 6) != "0");
} catch(std::exception &e) {
- UHD_LOGV(often) << "locked: " << e.what();
+ UHD_LOGGER_DEBUG("GPS") << "locked: " << e.what();
error_cnt++;
}
}
diff --git a/host/lib/usrp/gpsd_iface.cpp b/host/lib/usrp/gpsd_iface.cpp
index 98b359135..1955a4121 100644
--- a/host/lib/usrp/gpsd_iface.cpp
+++ b/host/lib/usrp/gpsd_iface.cpp
@@ -24,14 +24,13 @@
#include <stdint.h>
#include "boost/date_time/gregorian/gregorian.hpp"
#include <boost/format.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
#include <uhd/exception.hpp>
#include <uhd/usrp/gps_ctrl.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/dict.hpp>
#include "gpsd_iface.hpp"
diff --git a/host/lib/usrp/mboard_eeprom.cpp b/host/lib/usrp/mboard_eeprom.cpp
index 4cf58cd05..f7222426d 100644
--- a/host/lib/usrp/mboard_eeprom.cpp
+++ b/host/lib/usrp/mboard_eeprom.cpp
@@ -22,7 +22,6 @@
#include <boost/asio/ip/address_v4.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/lexical_cast.hpp>
-#include <boost/foreach.hpp>
#include <algorithm>
#include <iostream>
#include <cstddef>
@@ -51,7 +50,7 @@ static byte_vector_t string_to_uint16_bytes(const std::string &num_str){
//! convert a byte vector read from eeprom to a string
static std::string uint16_bytes_to_string(const byte_vector_t &bytes){
const uint16_t num = (uint16_t(bytes.at(0)) << 0) | (uint16_t(bytes.at(1)) << 8);
- return (num == 0 or num == 0xffff)? "" : boost::lexical_cast<std::string>(num);
+ return (num == 0 or num == 0xffff)? "" : std::to_string(num);
}
/***********************************************************************
@@ -135,7 +134,7 @@ static void load_n100(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
if (mb_eeprom["serial"].empty()){
byte_vector_t mac_addr_bytes = mac_addr_t::from_string(mb_eeprom["mac-addr"]).to_bytes();
unsigned serial = mac_addr_bytes.at(5) | (unsigned(mac_addr_bytes.at(4) & 0x0f) << 8);
- mb_eeprom["serial"] = boost::lexical_cast<std::string>(serial);
+ mb_eeprom["serial"] = std::to_string(serial);
}
}
@@ -418,7 +417,7 @@ static void load_b000(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
);
master_clock_rate = ntohl(master_clock_rate);
if (master_clock_rate > 1e6 and master_clock_rate < 1e9){
- mb_eeprom["mcr"] = boost::lexical_cast<std::string>(master_clock_rate);
+ mb_eeprom["mcr"] = std::to_string(master_clock_rate);
}
else mb_eeprom["mcr"] = "";
}
@@ -438,7 +437,7 @@ static void store_b000(const mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
//store the master clock rate as a 32-bit uint in Hz
if (mb_eeprom.has_key("mcr")){
- uint32_t master_clock_rate = uint32_t(boost::lexical_cast<double>(mb_eeprom["mcr"]));
+ uint32_t master_clock_rate = uint32_t(std::stod(mb_eeprom["mcr"]));
master_clock_rate = htonl(master_clock_rate);
const byte_vector_t rate_bytes(
reinterpret_cast<const uint8_t *>(&master_clock_rate),
@@ -600,17 +599,17 @@ template <typename T> static const byte_vector_t to_bytes(const T &item){
}
#define sizeof_member(struct_name, member_name) \
- sizeof(reinterpret_cast<struct_name*>(NULL)->member_name)
+ sizeof(reinterpret_cast<struct_name*>(0)->member_name)
static void load_e100(mboard_eeprom_t &mb_eeprom, i2c_iface &iface){
const size_t num_bytes = offsetof(e100_eeprom_map, model);
byte_vector_t map_bytes = iface.read_eeprom(E100_EEPROM_ADDR, 0, num_bytes);
e100_eeprom_map map; std::memcpy(&map, &map_bytes[0], map_bytes.size());
- mb_eeprom["vendor"] = boost::lexical_cast<std::string>(uhd::ntohx(map.vendor));
- mb_eeprom["device"] = boost::lexical_cast<std::string>(uhd::ntohx(map.device));
- mb_eeprom["revision"] = boost::lexical_cast<std::string>(unsigned(map.revision));
- mb_eeprom["content"] = boost::lexical_cast<std::string>(unsigned(map.content));
+ mb_eeprom["vendor"] = std::to_string(uhd::ntohx(map.vendor));
+ mb_eeprom["device"] = std::to_string(uhd::ntohx(map.device));
+ mb_eeprom["revision"] = std::to_string(unsigned(map.revision));
+ mb_eeprom["content"] = std::to_string(unsigned(map.content));
#define load_e100_string_xx(key) mb_eeprom[#key] = bytes_to_string(iface.read_eeprom( \
E100_EEPROM_ADDR, offsetof(e100_eeprom_map, key), sizeof_member(e100_eeprom_map, key) \
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp
index ac0f52255..3dcfe3bd9 100644
--- a/host/lib/usrp/multi_usrp.cpp
+++ b/host/lib/usrp/multi_usrp.cpp
@@ -17,7 +17,7 @@
#include <uhd/property_tree.hpp>
#include <uhd/usrp/multi_usrp.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
#include <uhd/utils/math.hpp>
@@ -30,7 +30,6 @@
#include "legacy_compat.hpp"
#include <boost/assign/list_of.hpp>
#include <boost/thread.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
#include <algorithm>
@@ -66,7 +65,7 @@ static void do_samp_rate_warning_message(
){
static const double max_allowed_error = 1.0; //Sps
if (std::abs(target_rate - actual_rate) > max_allowed_error){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("MULTI_USRP") << boost::format(
"The hardware does not support the requested %s sample rate:\n"
"Target sample rate: %f MSps\n"
"Actual sample rate: %f MSps\n"
@@ -97,7 +96,7 @@ static void do_samp_rate_warning_message(
if(requested_freq_success and target_freq_success and rf_lo_tune_success
and dsp_tune_success) {
- UHD_MSG(status) << boost::format(
+ UHD_LOGGER_INFO("MULTI_USRP") << boost::format(
"Successfully tuned to %f MHz\n\n")
% (actual_freq / 1e6);
} else {
@@ -120,7 +119,7 @@ static void do_samp_rate_warning_message(
results_string += rf_lo_message.str();
- UHD_MSG(status) << results_string;
+ UHD_LOGGER_INFO("MULTI_USRP") << results_string;
return;
}
@@ -174,7 +173,7 @@ static void do_samp_rate_warning_message(
results_string += failure_message.str();
}
- UHD_MSG(warning) << results_string << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << results_string ;
}
}*/
@@ -190,7 +189,7 @@ static meta_range_t make_overall_tune_range(
const double bw
){
meta_range_t range;
- BOOST_FOREACH(const range_t &sub_range, fe_range){
+ for(const range_t &sub_range: fe_range){
range.push_back(range_t(
sub_range.start() + std::max(dsp_range.start(), -bw/2),
sub_range.stop() + std::min(dsp_range.stop(), bw/2),
@@ -262,7 +261,8 @@ static tune_result_t tune_xx_subdev_and_dsp(
* tune_request. This lo_offset is based on the requirements of the FE, and
* does not reflect a user-requested lo_offset, which is handled later. */
double lo_offset = 0.0;
- if (rf_fe_subtree->access<bool>("use_lo_offset").get()){
+ if (rf_fe_subtree->exists("use_lo_offset") and
+ rf_fe_subtree->access<bool>("use_lo_offset").get()){
// If the frontend has lo_offset value and range properties, trust it
// for lo_offset
if (rf_fe_subtree->exists("lo_offset/value")) {
@@ -459,7 +459,7 @@ public:
if (_tree->exists(mb_root(mboard) / "auto_tick_rate")
and _tree->access<bool>(mb_root(mboard) / "auto_tick_rate").get()) {
_tree->access<bool>(mb_root(mboard) / "auto_tick_rate").set(false);
- UHD_MSG(status) << "Setting master clock rate selection to 'manual'." << std::endl;
+ UHD_LOGGER_INFO("MULTI_USRP") << "Setting master clock rate selection to 'manual'.";
}
_tree->access<double>(mb_root(mboard) / "tick_rate").set(rate);
return;
@@ -557,7 +557,7 @@ public:
}
void set_time_unknown_pps(const time_spec_t &time_spec){
- UHD_MSG(status) << " 1) catch time transition at pps edge" << std::endl;
+ UHD_LOGGER_INFO("MULTI_USRP") << " 1) catch time transition at pps edge";
boost::system_time end_time = boost::get_system_time() + boost::posix_time::milliseconds(1100);
time_spec_t time_start_last_pps = get_time_last_pps();
while (time_start_last_pps == get_time_last_pps())
@@ -573,7 +573,7 @@ public:
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
}
- UHD_MSG(status) << " 2) set times next pps (synchronously)" << std::endl;
+ UHD_LOGGER_INFO("MULTI_USRP") << " 2) set times next pps (synchronously)";
set_time_next_pps(time_spec, ALL_MBOARDS);
boost::this_thread::sleep(boost::posix_time::seconds(1));
@@ -582,7 +582,7 @@ public:
time_spec_t time_0 = this->get_time_now(0);
time_spec_t time_i = this->get_time_now(m);
if (time_i < time_0 or (time_i - time_0) > time_spec_t(0.01)){ //10 ms: greater than RTT but not too big
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("MULTI_USRP") << boost::format(
"Detected time deviation between board %d and board 0.\n"
"Board 0 time is %f seconds.\n"
"Board %d time is %f seconds.\n"
@@ -797,7 +797,7 @@ public:
{
throw uhd::index_error(str(boost::format("multi_usrp::get_rx_subdev_spec(%u) failed to make default spec - %s") % mboard % e.what()));
}
- UHD_MSG(status) << "Selecting default RX front end spec: " << spec.to_pp_string() << std::endl;
+ UHD_LOGGER_INFO("MULTI_USRP") << "Selecting default RX front end spec: " << spec.to_pp_string();
}
return spec;
}
@@ -873,7 +873,7 @@ public:
std::vector<std::string> get_rx_lo_names(size_t chan = 0){
std::vector<std::string> lo_names;
if (_tree->exists(rx_rf_fe_root(chan) / "los")) {
- BOOST_FOREACH(const std::string &name, _tree->list(rx_rf_fe_root(chan) / "los")) {
+ for(const std::string &name: _tree->list(rx_rf_fe_root(chan) / "los")) {
lo_names.push_back(name);
}
}
@@ -887,7 +887,7 @@ public:
//Special value ALL_LOS support atomically sets the source for all LOs
_tree->access<std::string>(rx_rf_fe_root(chan) / "los" / ALL_LOS / "source" / "value").set(src);
} else {
- BOOST_FOREACH(const std::string &n, _tree->list(rx_rf_fe_root(chan) / "los")) {
+ for(const std::string &n: _tree->list(rx_rf_fe_root(chan) / "los")) {
this->set_rx_lo_source(src, n, chan);
}
}
@@ -950,7 +950,7 @@ public:
//Special value ALL_LOS support atomically sets the source for all LOs
_tree->access<bool>(rx_rf_fe_root(chan) / "los" / ALL_LOS / "export").set(enabled);
} else {
- BOOST_FOREACH(const std::string &n, _tree->list(rx_rf_fe_root(chan) / "los")) {
+ for(const std::string &n: _tree->list(rx_rf_fe_root(chan) / "los")) {
this->set_rx_lo_export_enabled(enabled, n, chan);
}
}
@@ -1041,7 +1041,7 @@ public:
if (_tree->exists(rx_rf_fe_root(chan) / "gain" / "agc")) {
bool agc = _tree->access<bool>(rx_rf_fe_root(chan) / "gain" / "agc" / "enable").get();
if(agc) {
- UHD_MSG(warning) << "AGC enabled for this channel. Setting will be ignored." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "AGC enabled for this channel. Setting will be ignored." ;
}
}
} else {
@@ -1049,7 +1049,7 @@ public:
if (_tree->exists(rx_rf_fe_root(c) / "gain" / "agc")) {
bool agc = _tree->access<bool>(rx_rf_fe_root(chan) / "gain" / "agc" / "enable").get();
if(agc) {
- UHD_MSG(warning) << "AGC enabled for this channel. Setting will be ignored." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "AGC enabled for this channel. Setting will be ignored." ;
}
}
}
@@ -1079,7 +1079,7 @@ public:
if (_tree->exists(rx_rf_fe_root(chan) / "gain" / "agc" / "enable")) {
_tree->access<bool>(rx_rf_fe_root(chan) / "gain" / "agc" / "enable").set(enable);
} else {
- UHD_MSG(warning) << "AGC is not available on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "AGC is not available on this device." ;
}
return;
}
@@ -1157,7 +1157,11 @@ public:
}
std::vector<std::string> get_rx_sensor_names(size_t chan){
- return _tree->list(rx_rf_fe_root(chan) / "sensors");
+ std::vector<std::string> sensor_names;
+ if (_tree->exists(rx_rf_fe_root(chan) / "sensors")) {
+ sensor_names = _tree->list(rx_rf_fe_root(chan) / "sensors");
+ }
+ return sensor_names;
}
void set_rx_dc_offset(const bool enb, size_t chan){
@@ -1168,7 +1172,7 @@ public:
/*For B2xx devices the dc-offset correction is implemented in the rf front-end*/
_tree->access<bool>(rx_rf_fe_root(chan) / "dc_offset" / "enable").set(enb);
} else {
- UHD_MSG(warning) << "Setting DC offset compensation is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting DC offset compensation is not possible on this device." ;
}
return;
}
@@ -1182,7 +1186,7 @@ public:
if (_tree->exists(rx_fe_root(chan) / "dc_offset" / "value")) {
_tree->access<std::complex<double> >(rx_fe_root(chan) / "dc_offset" / "value").set(offset);
} else {
- UHD_MSG(warning) << "Setting DC offset is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting DC offset is not possible on this device." ;
}
return;
}
@@ -1196,7 +1200,7 @@ public:
if (_tree->exists(rx_rf_fe_root(chan) / "iq_balance" / "enable")) {
_tree->access<bool>(rx_rf_fe_root(chan) / "iq_balance" / "enable").set(enb);
} else {
- UHD_MSG(warning) << "Setting IQ imbalance compensation is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting IQ imbalance compensation is not possible on this device." ;
}
return;
}
@@ -1210,7 +1214,7 @@ public:
if (_tree->exists(rx_fe_root(chan) / "iq_balance" / "value")) {
_tree->access<std::complex<double> >(rx_fe_root(chan) / "iq_balance" / "value").set(offset);
} else {
- UHD_MSG(warning) << "Setting IQ balance is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting IQ balance is not possible on this device." ;
}
return;
}
@@ -1337,7 +1341,7 @@ public:
{
throw uhd::index_error(str(boost::format("multi_usrp::get_tx_subdev_spec(%u) failed to make default spec - %s") % mboard % e.what()));
}
- UHD_MSG(status) << "Selecting default TX front end spec: " << spec.to_pp_string() << std::endl;
+ UHD_LOGGER_INFO("MULTI_USRP") << "Selecting default TX front end spec: " << spec.to_pp_string();
}
return spec;
}
@@ -1497,7 +1501,11 @@ public:
}
std::vector<std::string> get_tx_sensor_names(size_t chan){
- return _tree->list(tx_rf_fe_root(chan) / "sensors");
+ std::vector<std::string> sensor_names;
+ if (_tree->exists(rx_rf_fe_root(chan) / "sensors")) {
+ sensor_names = _tree->list(tx_rf_fe_root(chan) / "sensors");
+ }
+ return sensor_names;
}
void set_tx_dc_offset(const std::complex<double> &offset, size_t chan){
@@ -1505,7 +1513,7 @@ public:
if (_tree->exists(tx_fe_root(chan) / "dc_offset" / "value")) {
_tree->access<std::complex<double> >(tx_fe_root(chan) / "dc_offset" / "value").set(offset);
} else {
- UHD_MSG(warning) << "Setting DC offset is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting DC offset is not possible on this device." ;
}
return;
}
@@ -1519,7 +1527,7 @@ public:
if (_tree->exists(tx_fe_root(chan) / "iq_balance" / "value")) {
_tree->access<std::complex<double> >(tx_fe_root(chan) / "iq_balance" / "value").set(offset);
} else {
- UHD_MSG(warning) << "Setting IQ balance is not possible on this device." << std::endl;
+ UHD_LOGGER_WARNING("MULTI_USRP") << "Setting IQ balance is not possible on this device." ;
}
return;
}
@@ -1536,12 +1544,12 @@ public:
std::vector<std::string> banks;
if (_tree->exists(mb_root(mboard) / "gpio"))
{
- BOOST_FOREACH(const std::string &name, _tree->list(mb_root(mboard) / "gpio"))
+ for(const std::string &name: _tree->list(mb_root(mboard) / "gpio"))
{
banks.push_back(name);
}
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_root(mboard) / "dboards"))
+ for(const std::string &name: _tree->list(mb_root(mboard) / "dboards"))
{
banks.push_back("RX"+name);
banks.push_back("TX"+name);
@@ -1755,8 +1763,12 @@ private:
{
try
{
- const std::string name = _tree->list("/mboards").at(mboard);
- return "/mboards/" + name;
+ const std::string tree_path = "/mboards/" + std::to_string(mboard);
+ if (_tree->exists(tree_path)) {
+ return tree_path;
+ } else {
+ throw uhd::index_error(str(boost::format("multi_usrp::mb_root(%u) - path not found") % mboard));
+ }
}
catch(const std::exception &e)
{
@@ -1779,8 +1791,12 @@ private:
try
{
- const std::string name = _tree->list(mb_root(mcp.mboard) / "rx_dsps").at(mcp.chan);
- return mb_root(mcp.mboard) / "rx_dsps" / name;
+ const std::string tree_path = mb_root(mcp.mboard) / "rx_dsps" / mcp.chan;
+ if (_tree->exists(tree_path)) {
+ return tree_path;
+ } else {
+ throw uhd::index_error(str(boost::format("multi_usrp::rx_dsp_root(%u) - mcp(%u) - path not found") % chan % mcp.chan));
+ }
}
catch(const std::exception &e)
{
@@ -1802,8 +1818,12 @@ private:
}
try
{
- const std::string name = _tree->list(mb_root(mcp.mboard) / "tx_dsps").at(mcp.chan);
- return mb_root(mcp.mboard) / "tx_dsps" / name;
+ const std::string tree_path = mb_root(mcp.mboard) / "tx_dsps" / mcp.chan;
+ if (_tree->exists(tree_path)) {
+ return tree_path;
+ } else {
+ throw uhd::index_error(str(boost::format("multi_usrp::tx_dsp_root(%u) - mcp(%u) - path not found") % chan % mcp.chan));
+ }
}
catch(const std::exception &e)
{
@@ -1877,10 +1897,10 @@ private:
mboard_chan_pair mcp = rx_chan_to_mcp(chan);
const subdev_spec_pair_t spec = get_rx_subdev_spec(mcp.mboard).at(mcp.chan);
gain_group::sptr gg = gain_group::make();
- BOOST_FOREACH(const std::string &name, _tree->list(mb_root(mcp.mboard) / "rx_codecs" / spec.db_name / "gains")){
+ for(const std::string &name: _tree->list(mb_root(mcp.mboard) / "rx_codecs" / spec.db_name / "gains")){
gg->register_fcns("ADC-"+name, make_gain_fcns_from_subtree(_tree->subtree(mb_root(mcp.mboard) / "rx_codecs" / spec.db_name / "gains" / name)), 0 /* low prio */);
}
- BOOST_FOREACH(const std::string &name, _tree->list(rx_rf_fe_root(chan) / "gains")){
+ for(const std::string &name: _tree->list(rx_rf_fe_root(chan) / "gains")){
gg->register_fcns(name, make_gain_fcns_from_subtree(_tree->subtree(rx_rf_fe_root(chan) / "gains" / name)), 1 /* high prio */);
}
return gg;
@@ -1890,10 +1910,10 @@ private:
mboard_chan_pair mcp = tx_chan_to_mcp(chan);
const subdev_spec_pair_t spec = get_tx_subdev_spec(mcp.mboard).at(mcp.chan);
gain_group::sptr gg = gain_group::make();
- BOOST_FOREACH(const std::string &name, _tree->list(mb_root(mcp.mboard) / "tx_codecs" / spec.db_name / "gains")){
+ for(const std::string &name: _tree->list(mb_root(mcp.mboard) / "tx_codecs" / spec.db_name / "gains")){
gg->register_fcns("DAC-"+name, make_gain_fcns_from_subtree(_tree->subtree(mb_root(mcp.mboard) / "tx_codecs" / spec.db_name / "gains" / name)), 1 /* high prio */);
}
- BOOST_FOREACH(const std::string &name, _tree->list(tx_rf_fe_root(chan) / "gains")){
+ for(const std::string &name: _tree->list(tx_rf_fe_root(chan) / "gains")){
gg->register_fcns(name, make_gain_fcns_from_subtree(_tree->subtree(tx_rf_fe_root(chan) / "gains" / name)), 0 /* low prio */);
}
return gg;
@@ -1907,7 +1927,7 @@ private:
size_t bytes_per_sample = convert::get_bytes_per_item(args.otw_format.empty() ? "sc16" : args.otw_format);
double max_link_rate = 0;
double sum_rate = 0;
- BOOST_FOREACH(const size_t chan, args.channels) {
+ for(const size_t chan: args.channels) {
mboard_chan_pair mcp = is_tx ? tx_chan_to_mcp(chan) : rx_chan_to_mcp(chan);
if (_tree->exists(mb_root(mcp.mboard) / "link_max_rate")) {
max_link_rate = std::max(
@@ -1919,10 +1939,10 @@ private:
}
sum_rate /= get_num_mboards();
if (max_link_rate > 0 and (max_link_rate / bytes_per_sample) < sum_rate) {
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("MULTI_USRP") << boost::format(
"The total sum of rates (%f MSps on %u channels) exceeds the maximum capacity of the connection.\n"
"This can cause %s."
- ) % (sum_rate/1e6) % args.channels.size() % (is_tx ? "underruns (U)" : "overflows (O)") << std::endl;
+ ) % (sum_rate/1e6) % args.channels.size() % (is_tx ? "underruns (U)" : "overflows (O)") ;
link_rate_is_ok = false;
}
@@ -1938,6 +1958,6 @@ multi_usrp::~multi_usrp(void){
* The Make Function
**********************************************************************/
multi_usrp::sptr multi_usrp::make(const device_addr_t &dev_addr){
- UHD_LOG << "multi_usrp::make with args " << dev_addr.to_pp_string() << std::endl;
+ UHD_LOGGER_TRACE("MULTI_USRP") << "multi_usrp::make with args " << dev_addr.to_pp_string() ;
return sptr(new multi_usrp_impl(dev_addr));
}
diff --git a/host/lib/usrp/n230/CMakeLists.txt b/host/lib/usrp/n230/CMakeLists.txt
index 9eaccffba..8bed1f26d 100644
--- a/host/lib/usrp/n230/CMakeLists.txt
+++ b/host/lib/usrp/n230/CMakeLists.txt
@@ -33,5 +33,6 @@ IF(ENABLE_N230)
${CMAKE_CURRENT_SOURCE_DIR}/n230_frontend_ctrl.cpp
${CMAKE_CURRENT_SOURCE_DIR}/n230_uart.cpp
${CMAKE_CURRENT_SOURCE_DIR}/n230_image_loader.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/n230_fw_ctrl_iface.cpp
)
ENDIF(ENABLE_N230)
diff --git a/host/lib/usrp/n230/n230_clk_pps_ctrl.cpp b/host/lib/usrp/n230/n230_clk_pps_ctrl.cpp
index 2bcfb0394..372325fbe 100644
--- a/host/lib/usrp/n230/n230_clk_pps_ctrl.cpp
+++ b/host/lib/usrp/n230/n230_clk_pps_ctrl.cpp
@@ -17,11 +17,10 @@
#include "n230_clk_pps_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <stdint.h>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <stdexcept>
#include <cmath>
#include <cstdlib>
@@ -56,11 +55,11 @@ public:
double set_tick_rate(const double rate)
{
- UHD_MSG(status) << "Configuring a tick rate of " << rate/1e6 << " MHz... ";
+ UHD_LOGGER_INFO("N230") << "Configuring a tick rate of " << rate/1e6 << " MHz... ";
_tick_rate = _codec_ctrl->set_clock_rate(rate);
- UHD_MSG(status) << "got " << _tick_rate/1e6 << " MHz\n";
+ UHD_LOGGER_INFO("N230") << "got " << _tick_rate/1e6 << " MHz\n";
- BOOST_FOREACH(time_core_3000::sptr& time_core, _time_cores) {
+ for(time_core_3000::sptr& time_core: _time_cores) {
time_core->set_tick_rate(_tick_rate);
time_core->self_test();
}
diff --git a/host/lib/usrp/n230/n230_eeprom_manager.cpp b/host/lib/usrp/n230/n230_eeprom_manager.cpp
index d9d02c58c..4a996ef61 100644
--- a/host/lib/usrp/n230/n230_eeprom_manager.cpp
+++ b/host/lib/usrp/n230/n230_eeprom_manager.cpp
@@ -17,7 +17,7 @@
#include "n230_eeprom.h"
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/types/mac_addr.hpp>
#include <boost/format.hpp>
@@ -68,9 +68,9 @@ const mboard_eeprom_t& n230_eeprom_manager::read_mb_eeprom()
uint16_t ver_major = uhd::htonx<uint16_t>(map.data_version_major);
uint16_t ver_minor = uhd::htonx<uint16_t>(map.data_version_minor);
- _mb_eeprom["product"] = boost::lexical_cast<std::string>(
+ _mb_eeprom["product"] = std::to_string(
uhd::htonx<uint16_t>(map.hw_product));
- _mb_eeprom["revision"] = boost::lexical_cast<std::string>(
+ _mb_eeprom["revision"] = std::to_string(
uhd::htonx<uint16_t>(map.hw_revision));
//The revision_compat field does not exist in version 1.0
//EEPROM version 1.0 will only exist on HW revision 1 so it is safe to set
@@ -78,7 +78,7 @@ const mboard_eeprom_t& n230_eeprom_manager::read_mb_eeprom()
if (ver_major == 1 and ver_minor == 0) {
_mb_eeprom["revision_compat"] = _mb_eeprom["revision"];
} else {
- _mb_eeprom["revision_compat"] = boost::lexical_cast<std::string>(
+ _mb_eeprom["revision_compat"] = std::to_string(
uhd::htonx<uint16_t>(map.hw_revision_compat));
}
_mb_eeprom["serial"] = _bytes_to_string(
diff --git a/host/lib/usrp/n230/n230_frontend_ctrl.cpp b/host/lib/usrp/n230/n230_frontend_ctrl.cpp
index 3d81721ec..80f1232b1 100644
--- a/host/lib/usrp/n230/n230_frontend_ctrl.cpp
+++ b/host/lib/usrp/n230/n230_frontend_ctrl.cpp
@@ -17,7 +17,7 @@
#include "n230_frontend_ctrl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <uhd/types/dict.hpp>
#include <boost/format.hpp>
diff --git a/host/lib/usrp/common/fw_comm_protocol.h b/host/lib/usrp/n230/n230_fw_comm_protocol.h
index 14adb33a9..b7c85f2ba 100644
--- a/host/lib/usrp/common/fw_comm_protocol.h
+++ b/host/lib/usrp/n230/n230_fw_comm_protocol.h
@@ -15,8 +15,8 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#ifndef INCLUDED_FW_COMM_PROTOCOL
-#define INCLUDED_FW_COMM_PROTOCOL
+#ifndef INCLUDED_N230_FW_COMM_PROTOCOL
+#define INCLUDED_N230_FW_COMM_PROTOCOL
#include <stdint.h>
#ifndef __cplusplus
@@ -99,4 +99,4 @@ bool process_fw_comm_protocol_pkt(
#endif //ifdef __cplusplus
-#endif /* INCLUDED_FW_COMM_PROTOCOL */
+#endif /* INCLUDED_N230_FW_COMM_PROTOCOL */
diff --git a/host/lib/usrp/common/usrp3_fw_ctrl_iface.cpp b/host/lib/usrp/n230/n230_fw_ctrl_iface.cpp
index 16ee84140..18c2c4cf8 100644
--- a/host/lib/usrp/common/usrp3_fw_ctrl_iface.cpp
+++ b/host/lib/usrp/n230/n230_fw_ctrl_iface.cpp
@@ -15,34 +15,33 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include "usrp3_fw_ctrl_iface.hpp"
+#include "n230_fw_ctrl_iface.hpp"
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
#include <boost/asio.hpp> //used for htonl and ntohl
-#include <boost/foreach.hpp>
-#include "fw_comm_protocol.h"
+#include "n230_fw_comm_protocol.h"
-namespace uhd { namespace usrp { namespace usrp3 {
+namespace uhd { namespace usrp { namespace n230 {
//----------------------------------------------------------
// Factory method
//----------------------------------------------------------
-uhd::wb_iface::sptr usrp3_fw_ctrl_iface::make(
+uhd::wb_iface::sptr n230_fw_ctrl_iface::make(
uhd::transport::udp_simple::sptr udp_xport,
const uint16_t product_id,
const bool verbose)
{
- return wb_iface::sptr(new usrp3_fw_ctrl_iface(udp_xport, product_id, verbose));
+ return wb_iface::sptr(new n230_fw_ctrl_iface(udp_xport, product_id, verbose));
}
//----------------------------------------------------------
// udp_fw_ctrl_iface
//----------------------------------------------------------
-usrp3_fw_ctrl_iface::usrp3_fw_ctrl_iface(
+n230_fw_ctrl_iface::n230_fw_ctrl_iface(
uhd::transport::udp_simple::sptr udp_xport,
const uint16_t product_id,
const bool verbose) :
@@ -53,18 +52,18 @@ usrp3_fw_ctrl_iface::usrp3_fw_ctrl_iface(
peek32(0);
}
-usrp3_fw_ctrl_iface::~usrp3_fw_ctrl_iface()
+n230_fw_ctrl_iface::~n230_fw_ctrl_iface()
{
flush();
}
-void usrp3_fw_ctrl_iface::flush()
+void n230_fw_ctrl_iface::flush()
{
boost::mutex::scoped_lock lock(_mutex);
_flush();
}
-void usrp3_fw_ctrl_iface::poke32(const wb_addr_type addr, const uint32_t data)
+void n230_fw_ctrl_iface::poke32(const wb_addr_type addr, const uint32_t data)
{
boost::mutex::scoped_lock lock(_mutex);
@@ -75,13 +74,13 @@ void usrp3_fw_ctrl_iface::poke32(const wb_addr_type addr, const uint32_t data)
} catch(const std::exception &ex) {
const std::string error_msg = str(boost::format(
"udp fw poke32 failure #%u\n%s") % i % ex.what());
- if (_verbose) UHD_MSG(warning) << error_msg << std::endl;
+ if (_verbose) UHD_LOGGER_WARNING("N230") << error_msg ;
if (i == NUM_RETRIES) throw uhd::io_error(error_msg);
}
}
}
-uint32_t usrp3_fw_ctrl_iface::peek32(const wb_addr_type addr)
+uint32_t n230_fw_ctrl_iface::peek32(const wb_addr_type addr)
{
boost::mutex::scoped_lock lock(_mutex);
@@ -91,14 +90,14 @@ uint32_t usrp3_fw_ctrl_iface::peek32(const wb_addr_type addr)
} catch(const std::exception &ex) {
const std::string error_msg = str(boost::format(
"udp fw peek32 failure #%u\n%s") % i % ex.what());
- if (_verbose) UHD_MSG(warning) << error_msg << std::endl;
+ if (_verbose) UHD_LOGGER_WARNING("N230") << error_msg ;
if (i == NUM_RETRIES) throw uhd::io_error(error_msg);
}
}
return 0;
}
-void usrp3_fw_ctrl_iface::_poke32(const wb_addr_type addr, const uint32_t data)
+void n230_fw_ctrl_iface::_poke32(const wb_addr_type addr, const uint32_t data)
{
//Load request struct
fw_comm_pkt_t request;
@@ -129,7 +128,7 @@ void usrp3_fw_ctrl_iface::_poke32(const wb_addr_type addr, const uint32_t data)
UHD_ASSERT_THROW(reply.data[0] == request.data[0]);
}
-uint32_t usrp3_fw_ctrl_iface::_peek32(const wb_addr_type addr)
+uint32_t n230_fw_ctrl_iface::_peek32(const wb_addr_type addr)
{
//Load request struct
fw_comm_pkt_t request;
@@ -162,7 +161,7 @@ uint32_t usrp3_fw_ctrl_iface::_peek32(const wb_addr_type addr)
return uhd::ntohx<uint32_t>(reply.data[0]);
}
-void usrp3_fw_ctrl_iface::_flush(void)
+void n230_fw_ctrl_iface::_flush(void)
{
char buff[FW_COMM_PROTOCOL_MTU] = {};
while (_udp_xport->recv(boost::asio::buffer(buff), 0.0)) {
@@ -170,7 +169,7 @@ void usrp3_fw_ctrl_iface::_flush(void)
}
}
-std::vector<std::string> usrp3_fw_ctrl_iface::discover_devices(
+std::vector<std::string> n230_fw_ctrl_iface::discover_devices(
const std::string& addr_hint, const std::string& port,
uint16_t product_id)
{
@@ -183,8 +182,8 @@ std::vector<std::string> usrp3_fw_ctrl_iface::discover_devices(
try {
udp_bcast_xport = uhd::transport::udp_simple::make_broadcast(addr_hint, port);
} catch(const std::exception &e) {
- UHD_MSG(error) << boost::format("Cannot open UDP transport on %s for discovery\n%s")
- % addr_hint % e.what() << std::endl;
+ UHD_LOGGER_ERROR("N230") << boost::format("Cannot open UDP transport on %s for discovery\n%s")
+ % addr_hint % e.what() ;
return addrs;
}
@@ -213,7 +212,7 @@ std::vector<std::string> usrp3_fw_ctrl_iface::discover_devices(
return addrs;
}
-uint32_t usrp3_fw_ctrl_iface::get_iface_id(
+uint32_t n230_fw_ctrl_iface::get_iface_id(
const std::string& addr, const std::string& port,
uint16_t product_id)
{
diff --git a/host/lib/usrp/common/usrp3_fw_ctrl_iface.hpp b/host/lib/usrp/n230/n230_fw_ctrl_iface.hpp
index 9dc35ef9e..675c843b3 100644
--- a/host/lib/usrp/common/usrp3_fw_ctrl_iface.hpp
+++ b/host/lib/usrp/n230/n230_fw_ctrl_iface.hpp
@@ -15,24 +15,24 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#ifndef INCLUDED_LIBUHD_USRP_USRP3_UDP_FW_CTRL_IFACE_HPP
-#define INCLUDED_LIBUHD_USRP_USRP3_UDP_FW_CTRL_IFACE_HPP
+#ifndef INCLUDED_LIBUHD_USRP_N230_UDP_FW_CTRL_IFACE_HPP
+#define INCLUDED_LIBUHD_USRP_N230_UDP_FW_CTRL_IFACE_HPP
#include <uhd/types/wb_iface.hpp>
#include <uhd/transport/udp_simple.hpp>
#include <boost/thread/mutex.hpp>
#include <vector>
-namespace uhd { namespace usrp { namespace usrp3 {
+namespace uhd { namespace usrp { namespace n230 {
-class usrp3_fw_ctrl_iface : public uhd::wb_iface
+class n230_fw_ctrl_iface : public uhd::wb_iface
{
public:
- usrp3_fw_ctrl_iface(
+ n230_fw_ctrl_iface(
uhd::transport::udp_simple::sptr udp_xport,
const uint16_t product_id,
const bool verbose);
- virtual ~usrp3_fw_ctrl_iface();
+ virtual ~n230_fw_ctrl_iface();
// -- uhd::wb_iface --
void poke32(const wb_addr_type addr, const uint32_t data);
@@ -69,4 +69,4 @@ private:
}}} //namespace
-#endif //INCLUDED_LIBUHD_USRP_USRP3_USRP3_UDP_FW_CTRL_HPP
+#endif // INCLUDED_LIBUHD_USRP_N230_UDP_FW_CTRL_IFACE_HPP
diff --git a/host/lib/usrp/n230/n230_impl.cpp b/host/lib/usrp/n230/n230_impl.cpp
index 015140fcc..63971fb34 100644
--- a/host/lib/usrp/n230/n230_impl.cpp
+++ b/host/lib/usrp/n230/n230_impl.cpp
@@ -17,7 +17,7 @@
#include "n230_impl.hpp"
-#include "usrp3_fw_ctrl_iface.hpp"
+#include "n230_fw_ctrl_iface.hpp"
#include "validate_subdev_spec.hpp"
#include <uhd/utils/static.hpp>
#include <uhd/transport/if_addrs.hpp>
@@ -25,7 +25,7 @@
#include <uhd/usrp/subdev_spec.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/types/sensors.hpp>
#include <uhd/types/ranges.hpp>
#include <uhd/types/direction.hpp>
@@ -33,7 +33,6 @@
#include <uhd/usrp/dboard_eeprom.hpp>
#include <uhd/usrp/gps_ctrl.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/bind.hpp>
#include <boost/algorithm/string.hpp>
@@ -42,7 +41,6 @@
#include <boost/asio.hpp> //used for htonl and ntohl
#include <boost/make_shared.hpp>
-#include "../common/fw_comm_protocol.h"
#include "n230_defaults.h"
#include "n230_fpga_defs.h"
#include "n230_fw_defs.h"
@@ -71,7 +69,7 @@ uhd::device_addrs_t n230_impl::n230_find(const uhd::device_addr_t &multi_dev_hin
if (hints.size() > 1){
device_addrs_t found_devices;
std::string error_msg;
- BOOST_FOREACH(const device_addr_t &hint_i, hints){
+ for(const device_addr_t &hint_i: hints){
device_addrs_t found_devices_i = n230_find(hint_i);
if (found_devices_i.size() != 1) error_msg += str(boost::format(
"Could not resolve device hint \"%s\" to a single device."
@@ -98,7 +96,7 @@ uhd::device_addrs_t n230_impl::n230_find(const uhd::device_addr_t &multi_dev_hin
//if no address was specified, send a broadcast on each interface
if (not hint.has_key("addr")) {
- BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs()) {
+ for(const if_addrs_t &if_addrs: get_if_addrs()) {
//avoid the loopback device
if (if_addrs.inet == asio::ip::address_v4::loopback().to_string()) continue;
@@ -116,10 +114,10 @@ uhd::device_addrs_t n230_impl::n230_find(const uhd::device_addr_t &multi_dev_hin
}
std::vector<std::string> discovered_addrs =
- usrp3::usrp3_fw_ctrl_iface::discover_devices(
+ n230_fw_ctrl_iface::discover_devices(
hint["addr"], BOOST_STRINGIZE(N230_FW_COMMS_UDP_PORT), N230_FW_PRODUCT_ID);
- BOOST_FOREACH(const std::string& addr, discovered_addrs)
+ for(const std::string& addr: discovered_addrs)
{
device_addr_t new_addr;
new_addr["type"] = "n230";
@@ -136,10 +134,10 @@ uhd::device_addrs_t n230_impl::n230_find(const uhd::device_addr_t &multi_dev_hin
//connected communication can fail. Retry the following call to allow
//the stack to update
size_t first_conn_retries = 10;
- usrp3::usrp3_fw_ctrl_iface::sptr fw_ctrl;
+ n230_fw_ctrl_iface::sptr fw_ctrl;
while (first_conn_retries > 0) {
try {
- fw_ctrl = usrp3::usrp3_fw_ctrl_iface::make(ctrl_xport, N230_FW_PRODUCT_ID, false /*verbose*/);
+ fw_ctrl = n230_fw_ctrl_iface::make(ctrl_xport, N230_FW_PRODUCT_ID, false /*verbose*/);
break;
} catch (uhd::io_error& ex) {
boost::this_thread::sleep(boost::posix_time::milliseconds(500));
@@ -192,7 +190,7 @@ device::sptr n230_impl::n230_make(const device_addr_t &device_addr)
**********************************************************************/
n230_impl::n230_impl(const uhd::device_addr_t& dev_addr)
{
- UHD_MSG(status) << "N230 initialization sequence..." << std::endl;
+ UHD_LOGGER_INFO("N230") << "N230 initialization sequence...";
_dev_args.parse(dev_addr);
_tree = uhd::property_tree::make();
@@ -210,9 +208,9 @@ n230_impl::n230_impl(const uhd::device_addr_t& dev_addr)
const mboard_eeprom_t& mb_eeprom = _eeprom_mgr->get_mb_eeprom();
bool recover_mb_eeprom = dev_addr.has_key("recover_mb_eeprom");
if (recover_mb_eeprom) {
- UHD_MSG(warning) << "UHD is operating in EEPROM Recovery Mode which disables hardware version "
+ UHD_LOGGER_WARNING("N230") << "UHD is operating in EEPROM Recovery Mode which disables hardware version "
"checks.\nOperating in this mode may cause hardware damage and unstable "
- "radio performance!"<< std::endl;
+ "radio performance!";
}
uint16_t hw_rev = boost::lexical_cast<uint16_t>(mb_eeprom["revision"]);
uint16_t hw_rev_compat = boost::lexical_cast<uint16_t>(mb_eeprom["revision_compat"]);
@@ -234,11 +232,11 @@ n230_impl::n230_impl(const uhd::device_addr_t& dev_addr)
//Debug loopback mode
switch(_dev_args.get_loopback_mode()) {
case n230_device_args_t::LOOPBACK_RADIO:
- UHD_MSG(status) << "DEBUG: Running in TX->RX Radio loopback mode.\n";
+ UHD_LOGGER_INFO("N230") << "DEBUG: Running in TX->RX Radio loopback mode.";
_resource_mgr->get_frontend_ctrl().set_self_test_mode(LOOPBACK_RADIO);
break;
case n230_device_args_t::LOOPBACK_CODEC:
- UHD_MSG(status) << "DEBUG: Running in TX->RX CODEC loopback mode.\n";
+ UHD_LOGGER_INFO("N230") << "DEBUG: Running in TX->RX CODEC loopback mode.";
_resource_mgr->get_frontend_ctrl().set_self_test_mode(LOOPBACK_CODEC);
break;
default:
@@ -397,11 +395,11 @@ void n230_impl::_initialize_property_tree(const fs_path& mb_path)
// Initialize subdev specs
//------------------------------------------------------------------
subdev_spec_t rx_spec, tx_spec;
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "rx_frontends"))
{
rx_spec.push_back(subdev_spec_pair_t("A", fe));
}
- BOOST_FOREACH(const std::string &fe, _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
+ for(const std::string &fe: _tree->list(mb_path / "dboards" / "A" / "tx_frontends"))
{
tx_spec.push_back(subdev_spec_pair_t("A", fe));
}
@@ -437,7 +435,7 @@ void n230_impl::_initialize_property_tree(const fs_path& mb_path)
//------------------------------------------------------------------
if (_resource_mgr->is_gpsdo_present()) {
uhd::gps_ctrl::sptr gps_ctrl = _resource_mgr->get_gps_ctrl();
- BOOST_FOREACH(const std::string &name, gps_ctrl->get_sensors())
+ for(const std::string &name: gps_ctrl->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, gps_ctrl, name));
@@ -499,7 +497,7 @@ void n230_impl::_initialize_radio_properties(const fs_path& mb_path, size_t inst
//RF Frontend Interfacing
static const std::vector<direction_t> data_directions = boost::assign::list_of(RX_DIRECTION)(TX_DIRECTION);
- BOOST_FOREACH(direction_t direction, data_directions) {
+ for(direction_t direction: data_directions) {
const std::string dir_str = (direction == RX_DIRECTION) ? "rx" : "tx";
const std::string key = boost::to_upper_copy(dir_str) + str(boost::format("%u") % (instance + 1));
const fs_path rf_fe_path = mb_path / "dboards" / "A" / (dir_str + "_frontends") / ((instance==0)?"A":"B");
diff --git a/host/lib/usrp/n230/n230_resource_manager.cpp b/host/lib/usrp/n230/n230_resource_manager.cpp
index b96de542a..d454afd40 100644
--- a/host/lib/usrp/n230/n230_resource_manager.cpp
+++ b/host/lib/usrp/n230/n230_resource_manager.cpp
@@ -17,18 +17,16 @@
#include "n230_resource_manager.hpp"
-#include "usrp3_fw_ctrl_iface.hpp"
+#include "n230_fw_ctrl_iface.hpp"
#include <uhd/transport/if_addrs.hpp>
#include <uhd/transport/udp_zero_copy.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/platform.hpp>
#include <uhd/utils/paths.hpp>
#include <boost/format.hpp>
#include <boost/thread.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/functional/hash.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/make_shared.hpp>
#include "n230_fw_defs.h"
#include "n230_fw_host_iface.h"
@@ -58,7 +56,7 @@ public:
}
}
clocking_mode_t get_clocking_mode() {
- return AD9361_XTAL_N_CLK_PATH;
+ return clocking_mode_t::AD9361_XTAL_N_CLK_PATH;
}
digital_interface_mode_t get_digital_interface_mode() {
return AD9361_DDR_FDD_LVDS;
@@ -80,18 +78,18 @@ n230_resource_manager::n230_resource_manager(
_safe_mode(safe_mode),
_last_host_enpoint(0)
{
- if (_safe_mode) UHD_MSG(warning) << "Initializing device in safe mode\n";
- UHD_MSG(status) << "Setup basic communication...\n";
+ if (_safe_mode) UHD_LOGGER_WARNING("N230") << "Initializing device in safe mode\n";
+ UHD_LOGGER_INFO("N230") << "Setup basic communication...";
//Discover ethernet interfaces
bool dual_eth_expected = (ip_addrs.size() > 1);
- BOOST_FOREACH(const std::string& addr, ip_addrs) {
+ for(const std::string& addr: ip_addrs) {
n230_eth_conn_t conn_iface;
conn_iface.ip_addr = addr;
uint32_t iface_id = 0xFFFFFFFF;
try {
- iface_id = usrp3::usrp3_fw_ctrl_iface::get_iface_id(
+ iface_id = n230::n230_fw_ctrl_iface::get_iface_id(
conn_iface.ip_addr, BOOST_STRINGIZE(N230_FW_COMMS_UDP_PORT), N230_FW_PRODUCT_ID);
} catch (uhd::io_error&) {
throw uhd::io_error(str(boost::format(
@@ -118,7 +116,7 @@ n230_resource_manager::n230_resource_manager(
}
//Create firmware communication interface
- _fw_ctrl = usrp3::usrp3_fw_ctrl_iface::make(
+ _fw_ctrl = n230::n230_fw_ctrl_iface::make(
transport::udp_simple::make_connected(
_get_conn(PRI_ETH).ip_addr, BOOST_STRINGIZE(N230_FW_COMMS_UDP_PORT)), N230_FW_PRODUCT_ID);
if (_fw_ctrl.get() == NULL) {
@@ -145,7 +143,7 @@ n230_resource_manager::n230_resource_manager(
}
_check_fpga_compat();
- UHD_MSG(status) << boost::format("Version signatures... Firmware:%s FPGA:%s...\n")
+ UHD_LOGGER_INFO("N230") << boost::format("Version signatures... Firmware:%s FPGA:%s...")
% _fw_version.get_hash_str() % _fpga_version.get_hash_str();
_core_radio_ctrl_reg.initialize(*_core_ctrl, true /*flush*/);
@@ -160,7 +158,7 @@ n230_resource_manager::n230_resource_manager(
}
//Create AD9361 interface
- UHD_MSG(status) << "Initializing CODEC...\n";
+ UHD_LOGGER_INFO("N230") << "Initializing CODEC...";
_codec_ctrl = ad9361_ctrl::make_spi(
boost::make_shared<n230_ad9361_client_t>(), _core_spi_ctrl, fpga::AD9361_SPI_SLAVE_NUM);
if (_codec_ctrl.get() == NULL) {
@@ -210,7 +208,7 @@ n230_resource_manager::n230_resource_manager(
//Create GPSDO interface
if (_core_status_reg.read(fpga::core_status_reg_t::GPSDO_STATUS) != fpga::GPSDO_ST_ABSENT) {
- UHD_MSG(status) << "Detecting GPSDO.... " << std::flush;
+ UHD_LOGGER_INFO("N230") << "Detecting GPSDO.... ";
try {
const sid_t gps_uart_sid = _generate_sid(GPS_UART, _get_conn(PRI_ETH).type);
transport::zero_copy_if::sptr gps_uart_xport =
@@ -221,7 +219,7 @@ n230_resource_manager::n230_resource_manager(
boost::this_thread::sleep(boost::posix_time::seconds(1)); //allow for a little propagation
_gps_ctrl = gps_ctrl::make(_gps_uart);
} catch(std::exception &e) {
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("N230") << "An error occurred making GPSDO control: " << e.what() ;
}
if (not is_gpsdo_present()) {
_core_ctrl->poke32(fpga::sr_addr(fpga::SR_CORE_GPSDO_ST), fpga::GPSDO_ST_ABSENT);
@@ -276,7 +274,7 @@ transport::zero_copy_if::sptr n230_resource_manager::create_transport(
return xport;
}
-bool n230_resource_manager::is_device_claimed(uhd::usrp::usrp3::usrp3_fw_ctrl_iface::sptr fw_ctrl)
+bool n230_resource_manager::is_device_claimed(n230_fw_ctrl_iface::sptr fw_ctrl)
{
boost::mutex::scoped_lock(_claimer_mutex);
@@ -419,7 +417,7 @@ transport::zero_copy_if::sptr n230_resource_manager::_create_transport(
default_buff_args.num_send_frames = 32;
transport::zero_copy_if::sptr xport = transport::udp_zero_copy::make(
- eth_conn.ip_addr, boost::lexical_cast<std::string>(fpga::CVITA_UDP_PORT),
+ eth_conn.ip_addr, std::to_string(fpga::CVITA_UDP_PORT),
default_buff_args, buff_params_out, buff_params);
if (xport.get()) {
@@ -488,7 +486,7 @@ bool n230_resource_manager::_radio_data_loopback_self_test(wb_iface::sptr iface)
const uint32_t rb_rx = uint32_t(rb_word64 & 0xffffffff);
test_fail = word32 != rb_tx or word32 != rb_rx;
if (test_fail){
- UHD_MSG(fastpath) << boost::format("mismatch (exp:%x, got:%x and %x)... ") % word32 % rb_tx % rb_rx;
+ UHD_LOG_ERROR("N230", str(boost::format("mismatch (exp:%x, got:%x and %x)... ") % word32 % rb_tx % rb_rx));
break; //exit loop on any failure
}
}
diff --git a/host/lib/usrp/n230/n230_resource_manager.hpp b/host/lib/usrp/n230/n230_resource_manager.hpp
index 180f4f437..6da3b9035 100644
--- a/host/lib/usrp/n230/n230_resource_manager.hpp
+++ b/host/lib/usrp/n230/n230_resource_manager.hpp
@@ -37,7 +37,7 @@
#include <uhd/transport/bounded_buffer.hpp>
#include <uhd/usrp/gps_ctrl.hpp>
-#include "usrp3_fw_ctrl_iface.hpp"
+#include "n230_fw_ctrl_iface.hpp"
#include "n230_clk_pps_ctrl.hpp"
#include "n230_cores.hpp"
#include "n230_fpga_defs.h"
@@ -98,7 +98,7 @@ public: //Methods
n230_resource_manager(const std::vector<std::string> ip_addrs, const bool safe_mode);
virtual ~n230_resource_manager();
- static bool is_device_claimed(uhd::usrp::usrp3::usrp3_fw_ctrl_iface::sptr fw_ctrl);
+ static bool is_device_claimed(n230_fw_ctrl_iface::sptr fw_ctrl);
inline bool is_device_claimed() {
if (_fw_ctrl.get()) {
@@ -276,12 +276,12 @@ private:
ver_info_t _fpga_version;
//Firmware register interface
- uhd::usrp::usrp3::usrp3_fw_ctrl_iface::sptr _fw_ctrl;
+ n230_fw_ctrl_iface::sptr _fw_ctrl;
uhd::task::sptr _claimer_task;
static boost::mutex _claimer_mutex; //All claims and checks in this process are serialized
//Transport
- uint8_t _last_host_enpoint;
+ uint8_t _last_host_enpoint;
//Radio settings interface
radio_ctrl_core_3000::sptr _core_ctrl;
diff --git a/host/lib/usrp/n230/n230_stream_manager.cpp b/host/lib/usrp/n230/n230_stream_manager.cpp
index 0528212d0..0d5aa693f 100644
--- a/host/lib/usrp/n230/n230_stream_manager.cpp
+++ b/host/lib/usrp/n230/n230_stream_manager.cpp
@@ -24,7 +24,6 @@
#include <boost/bind.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/log.hpp>
-#include <boost/foreach.hpp>
#include <boost/make_shared.hpp>
static const double N230_RX_SW_BUFF_FULL_FACTOR = 0.90; //Buffer should ideally be 90% full.
@@ -81,13 +80,13 @@ rx_streamer::sptr n230_stream_manager::get_rx_stream(const uhd::stream_args_t &a
//TODO: Propagate the device_args class into streamer in the future
device_addr_t device_addr = args.args;
if (not device_addr.has_key("recv_buff_size")) {
- device_addr["recv_buff_size"] = boost::lexical_cast<std::string>(_dev_args.get_recv_buff_size());
+ device_addr["recv_buff_size"] = std::to_string(_dev_args.get_recv_buff_size());
}
if (not device_addr.has_key("recv_frame_size")) {
- device_addr["recv_frame_size"] = boost::lexical_cast<std::string>(_dev_args.get_recv_frame_size());
+ device_addr["recv_frame_size"] = std::to_string(_dev_args.get_recv_frame_size());
}
if (not device_addr.has_key("num_recv_frames")) {
- device_addr["num_recv_frames"] = boost::lexical_cast<std::string>(_dev_args.get_num_recv_frames());
+ device_addr["num_recv_frames"] = std::to_string(_dev_args.get_num_recv_frames());
}
transport::udp_zero_copy::buff_params buff_params_out;
@@ -171,7 +170,7 @@ rx_streamer::sptr n230_stream_manager::get_rx_stream(const uhd::stream_args_t &a
if (prop_tree) {
//TODO: Update this to support multiple motherboards
const fs_path mb_path = "/mboards/0";
- prop_tree->access<double>(mb_path / "rx_dsps" / boost::lexical_cast<std::string>(chan) / "rate" / "value").update();
+ prop_tree->access<double>(mb_path / "rx_dsps" / std::to_string(chan) / "rate" / "value").update();
}
}
update_stream_states();
@@ -208,13 +207,13 @@ tx_streamer::sptr n230_stream_manager::get_tx_stream(const uhd::stream_args_t &a
//TODO: Propagate the device_args class into streamer in the future
device_addr_t device_addr = args.args;
if (not device_addr.has_key("send_buff_size")) {
- device_addr["send_buff_size"] = boost::lexical_cast<std::string>(_dev_args.get_send_buff_size());
+ device_addr["send_buff_size"] = std::to_string(_dev_args.get_send_buff_size());
}
if (not device_addr.has_key("send_frame_size")) {
- device_addr["send_frame_size"] = boost::lexical_cast<std::string>(_dev_args.get_send_frame_size());
+ device_addr["send_frame_size"] = std::to_string(_dev_args.get_send_frame_size());
}
if (not device_addr.has_key("num_send_frames")) {
- device_addr["num_send_frames"] = boost::lexical_cast<std::string>(_dev_args.get_num_send_frames());
+ device_addr["num_send_frames"] = std::to_string(_dev_args.get_num_send_frames());
}
transport::udp_zero_copy::buff_params buff_params_out;
@@ -296,7 +295,7 @@ tx_streamer::sptr n230_stream_manager::get_tx_stream(const uhd::stream_args_t &a
if (prop_tree) {
//TODO: Update this to support multiple motherboards
const fs_path mb_path = "/mboards/0";
- prop_tree->access<double>(mb_path / "tx_dsps" / boost::lexical_cast<std::string>(chan) / "rate" / "value").update();
+ prop_tree->access<double>(mb_path / "tx_dsps" / std::to_string(chan) / "rate" / "value").update();
}
}
update_stream_states();
@@ -478,7 +477,7 @@ void n230_stream_manager::_handle_tx_async_msgs(
_cvita_hdr_unpack(packet_buff, if_packet_info);
endian_conv = uhd::ntohx;
} catch(const std::exception &ex) {
- UHD_MSG(error) << "Error parsing async message packet: " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("N230") << "Error parsing async message packet: " << ex.what() ;
return;
}
diff --git a/host/lib/usrp/n230/n230_uart.cpp b/host/lib/usrp/n230/n230_uart.cpp
index 7291a7276..7330dff4a 100644
--- a/host/lib/usrp/n230/n230_uart.cpp
+++ b/host/lib/usrp/n230/n230_uart.cpp
@@ -20,7 +20,7 @@
#include <uhd/transport/bounded_buffer.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/time_spec.hpp>
#include <uhd/exception.hpp>
diff --git a/host/lib/usrp/subdev_spec.cpp b/host/lib/usrp/subdev_spec.cpp
index 6912afec8..b7eb64f87 100644
--- a/host/lib/usrp/subdev_spec.cpp
+++ b/host/lib/usrp/subdev_spec.cpp
@@ -20,7 +20,6 @@
#include <boost/algorithm/string.hpp> //for split
#include <boost/tokenizer.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <sstream>
#include <vector>
@@ -44,8 +43,16 @@ bool usrp::operator==(const subdev_spec_pair_t &lhs, const subdev_spec_pair_t &r
return (lhs.db_name == rhs.db_name) and (lhs.sd_name == rhs.sd_name);
}
+bool subdev_spec_pair_t::operator==(const subdev_spec_pair_t &other){
+ return (other.db_name == db_name) and (other.sd_name == sd_name);
+}
+
+bool subdev_spec_pair_t::operator!=(const subdev_spec_pair_t &other){
+ return (other.db_name != db_name) or (other.sd_name != sd_name);
+}
+
subdev_spec_t::subdev_spec_t(const std::string &markup){
- BOOST_FOREACH(const std::string &pair, pair_tokenizer(markup)){
+ for(const std::string &pair: pair_tokenizer(markup)){
if (pair.empty()) continue;
std::vector<std::string> db_sd; boost::split(db_sd, pair, boost::is_any_of(":"));
switch(db_sd.size()){
@@ -62,7 +69,7 @@ std::string subdev_spec_t::to_pp_string(void) const{
std::stringstream ss;
size_t count = 0;
ss << "Subdevice Specification:" << std::endl;
- BOOST_FOREACH(const subdev_spec_pair_t &pair, *this){
+ for(const subdev_spec_pair_t &pair: *this){
ss << boost::format(
" Channel %d: Daughterboard %s, Subdevice %s"
) % (count++) % pair.db_name % pair.sd_name << std::endl;
@@ -73,7 +80,7 @@ std::string subdev_spec_t::to_pp_string(void) const{
std::string subdev_spec_t::to_string(void) const{
std::string markup;
size_t count = 0;
- BOOST_FOREACH(const subdev_spec_pair_t &pair, *this){
+ for(const subdev_spec_pair_t &pair: *this){
markup += ((count++)? " " : "") + pair.db_name + ":" + pair.sd_name;
}
return markup;
diff --git a/host/lib/usrp/usrp1/codec_ctrl.cpp b/host/lib/usrp/usrp1/codec_ctrl.cpp
index 4c811d5e2..bb81ec3e7 100644
--- a/host/lib/usrp/usrp1/codec_ctrl.cpp
+++ b/host/lib/usrp/usrp1/codec_ctrl.cpp
@@ -277,9 +277,9 @@ void usrp1_codec_ctrl_impl::send_reg(uint8_t addr)
{
uint32_t reg = _ad9862_regs.get_write_reg(addr);
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("USRP1")
<< "codec control write reg: 0x"
- << std::setw(8) << std::hex << reg << std::endl
+ << std::setw(8) << std::hex << reg
;
_iface->write_spi(_spi_slave,
spi_config_t::EDGE_RISE, reg, 16);
@@ -289,17 +289,17 @@ void usrp1_codec_ctrl_impl::recv_reg(uint8_t addr)
{
uint32_t reg = _ad9862_regs.get_read_reg(addr);
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("USRP1")
<< "codec control read reg: 0x"
- << std::setw(8) << std::hex << reg << std::endl
+ << std::setw(8) << std::hex << reg
;
uint32_t ret = _iface->read_spi(_spi_slave,
spi_config_t::EDGE_RISE, reg, 16);
- UHD_LOGV(often)
+ UHD_LOGGER_TRACE("USRP1")
<< "codec control read ret: 0x"
- << std::setw(8) << std::hex << ret << std::endl
+ << std::setw(8) << std::hex << ret
;
_ad9862_regs.set_reg(addr, uint16_t(ret));
@@ -389,13 +389,13 @@ void usrp1_codec_ctrl_impl::set_duc_freq(double freq, double rate)
double coarse_freq = coarse_tune(codec_rate, freq);
double fine_freq = fine_tune(codec_rate / 4, freq - coarse_freq);
- UHD_LOG
- << "ad9862 tuning result:" << std::endl
- << " requested: " << freq << std::endl
- << " actual: " << coarse_freq + fine_freq << std::endl
- << " coarse freq: " << coarse_freq << std::endl
- << " fine freq: " << fine_freq << std::endl
- << " codec rate: " << codec_rate << std::endl
+ UHD_LOGGER_DEBUG("USRP1")
+ << "ad9862 tuning result:"
+ << " requested: " << freq
+ << " actual: " << coarse_freq + fine_freq
+ << " coarse freq: " << coarse_freq
+ << " fine freq: " << fine_freq
+ << " codec rate: " << codec_rate
;
this->send_reg(20);
diff --git a/host/lib/usrp/usrp1/io_impl.cpp b/host/lib/usrp/usrp1/io_impl.cpp
index 920023dad..7cb38548f 100644
--- a/host/lib/usrp/usrp1/io_impl.cpp
+++ b/host/lib/usrp/usrp1/io_impl.cpp
@@ -22,7 +22,7 @@
#include "../../transport/super_send_packet_handler.hpp"
#include "usrp1_calc_mux.hpp"
#include "usrp1_impl.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/transport/bounded_buffer.hpp>
@@ -32,6 +32,7 @@
#include <boost/bind.hpp>
#include <boost/format.hpp>
#include <boost/make_shared.hpp>
+#include <atomic>
#define bmFR_RX_FORMAT_SHIFT_SHIFT 0
#define bmFR_RX_FORMAT_WIDTH_SHIFT 4
@@ -147,12 +148,14 @@ struct usrp1_impl::io_impl{
io_impl(zero_copy_if::sptr data_transport):
data_transport(data_transport),
curr_buff(offset_send_buffer(data_transport->get_send_buff())),
- omsb(boost::bind(&usrp1_impl::io_impl::commit_send_buff, this, _1, _2, _3))
+ omsb(boost::bind(&usrp1_impl::io_impl::commit_send_buff, this, _1, _2, _3)),
+ vandal_loop_exit(false)
{
/* NOP */
}
~io_impl(void){
+ vandal_loop_exit = true;
UHD_SAFE_CALL(flush_send_buff();)
}
@@ -175,6 +178,7 @@ struct usrp1_impl::io_impl{
return omsb.get_new(curr_buff, next_buff);
}
+ std::atomic<bool> vandal_loop_exit;
task::sptr vandal_task;
boost::system_time last_send_time;
};
@@ -247,7 +251,7 @@ void usrp1_impl::io_init(void){
//create a new vandal thread to poll xerflow conditions
_io_impl->vandal_task = task::make(boost::bind(
- &usrp1_impl::vandal_conquest_loop, this
+ &usrp1_impl::vandal_conquest_loop, this, std::ref(_io_impl->vandal_loop_exit)
));
}
@@ -271,7 +275,7 @@ void usrp1_impl::tx_stream_on_off(bool enb){
* On an overflow, interleave an inline message into recv and print.
* This procedure creates "soft" inline and async user messages.
*/
-void usrp1_impl::vandal_conquest_loop(void){
+void usrp1_impl::vandal_conquest_loop(std::atomic<bool> &exit_loop){
//initialize the async metadata
async_metadata_t async_metadata;
@@ -285,7 +289,7 @@ void usrp1_impl::vandal_conquest_loop(void){
inline_metadata.error_code = rx_metadata_t::ERROR_CODE_OVERFLOW;
//start the polling loop...
- try{ while (not boost::this_thread::interruption_requested()){
+ try{ while (not exit_loop){
uint8_t underflow = 0, overflow = 0;
//shutoff transmit if it has been too long since send() was called
@@ -305,19 +309,18 @@ void usrp1_impl::vandal_conquest_loop(void){
if (_tx_enabled and underflow){
async_metadata.time_spec = _soft_time_ctrl->get_time();
_soft_time_ctrl->get_async_queue().push_with_pop_on_full(async_metadata);
- UHD_MSG(fastpath) << "U";
+ UHD_LOG_FASTPATH("U")
}
if (_rx_enabled and overflow){
inline_metadata.time_spec = _soft_time_ctrl->get_time();
_soft_time_ctrl->get_inline_queue().push_with_pop_on_full(inline_metadata);
- UHD_MSG(fastpath) << "O";
+ UHD_LOG_FASTPATH("O")
}
boost::this_thread::sleep(boost::posix_time::milliseconds(50));
}}
- catch(const boost::thread_interrupted &){} //normal exit condition
catch(const std::exception &e){
- UHD_MSG(error) << "The vandal caught an unexpected exception " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP1") << "The vandal caught an unexpected exception " << e.what() ;
}
}
@@ -439,7 +442,7 @@ void usrp1_impl::update_rx_subdev_spec(const uhd::usrp::subdev_spec_t &spec){
//set the mux and set the number of rx channels
std::vector<mapping_pair_t> mapping;
- BOOST_FOREACH(const subdev_spec_pair_t &pair, spec){
+ for(const subdev_spec_pair_t &pair: spec){
const std::string conn = _tree->access<std::string>(str(boost::format(
"/mboards/0/dboards/%s/rx_frontends/%s/connection"
) % pair.db_name % pair.sd_name)).get();
@@ -459,7 +462,7 @@ void usrp1_impl::update_tx_subdev_spec(const uhd::usrp::subdev_spec_t &spec){
//set the mux and set the number of tx channels
std::vector<mapping_pair_t> mapping;
- BOOST_FOREACH(const subdev_spec_pair_t &pair, spec){
+ for(const subdev_spec_pair_t &pair: spec){
const std::string conn = _tree->access<std::string>(str(boost::format(
"/mboards/0/dboards/%s/tx_frontends/%s/connection"
) % pair.db_name % pair.sd_name)).get();
@@ -500,11 +503,11 @@ double usrp1_impl::update_rx_samp_rate(size_t dspno, const double samp_rate){
const size_t div = this->has_rx_halfband()? 2 : 1;
const size_t rate = boost::math::iround(_master_clock_rate/this->get_rx_dsp_host_rates().clip(samp_rate, true));
- if (rate < 8 and this->has_rx_halfband()) UHD_MSG(warning) <<
+ if (rate < 8 and this->has_rx_halfband()) UHD_LOGGER_WARNING("USRP1") <<
"USRP1 cannot achieve decimations below 8 when the half-band filter is present.\n"
"The usrp1_fpga_4rx.rbf file is a special FPGA image without RX half-band filters.\n"
"To load this image, set the device address key/value pair: fpga=usrp1_fpga_4rx.rbf\n"
- << std::endl;
+ ;
if (dspno == 0){ //only care if dsp0 is set since its homogeneous
bool s = this->disable_rx();
@@ -548,10 +551,10 @@ double usrp1_impl::update_tx_samp_rate(size_t dspno, const double samp_rate){
void usrp1_impl::update_rates(void){
const fs_path mb_path = "/mboards/0";
this->update_tick_rate(_master_clock_rate);
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "rate" / "value").update();
}
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "tx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "tx_dsps")){
_tree->access<double>(mb_path / "tx_dsps" / name / "rate" / "value").update();
}
}
diff --git a/host/lib/usrp/usrp1/soft_time_ctrl.cpp b/host/lib/usrp/usrp1/soft_time_ctrl.cpp
index bb8b3a704..9cef99a60 100644
--- a/host/lib/usrp/usrp1/soft_time_ctrl.cpp
+++ b/host/lib/usrp/usrp1/soft_time_ctrl.cpp
@@ -199,8 +199,9 @@ public:
void recv_cmd_task(void){ //task is looped
boost::shared_ptr<stream_cmd_t> cmd;
- _cmd_queue.pop_with_wait(cmd);
- recv_cmd_handle_cmd(*cmd);
+ if (_cmd_queue.pop_with_timed_wait(cmd, 0.25)) {
+ recv_cmd_handle_cmd(*cmd);
+ }
}
bounded_buffer<async_metadata_t> &get_async_queue(void){
diff --git a/host/lib/usrp/usrp1/usrp1_calc_mux.hpp b/host/lib/usrp/usrp1/usrp1_calc_mux.hpp
index 3577a8042..293d9c37c 100644
--- a/host/lib/usrp/usrp1/usrp1_calc_mux.hpp
+++ b/host/lib/usrp/usrp1/usrp1_calc_mux.hpp
@@ -71,7 +71,7 @@ static uint32_t calc_rx_mux(const std::vector<mapping_pair_t> &mapping){
//calculate the channel flags
int channel_flags = 0;
size_t num_reals = 0, num_quads = 0;
- BOOST_FOREACH(const mapping_pair_t &pair, uhd::reversed(mapping)){
+ for(const mapping_pair_t &pair: uhd::reversed(mapping)){
const std::string name = pair.first, conn = pair.second;
if (conn == "IQ" or conn == "QI") num_quads++;
if (conn == "I" or conn == "Q") num_reals++;
@@ -83,7 +83,7 @@ static uint32_t calc_rx_mux(const std::vector<mapping_pair_t> &mapping){
// for all quadrature sources: Z = 0
// for mixed sources: warning + Z = 0
int Z = (num_quads > 0)? 0 : 1;
- if (num_quads != 0 and num_reals != 0) UHD_MSG(warning) << boost::format(
+ if (num_quads != 0 and num_reals != 0) UHD_LOGGER_WARNING("USRP1") << boost::format(
"Mixing real and quadrature rx subdevices is not supported.\n"
"The Q input to the real source(s) will be non-zero.\n"
);
@@ -132,7 +132,7 @@ static uint32_t calc_tx_mux(const std::vector<mapping_pair_t> &mapping){
//calculate the channel flags
int channel_flags = 0, chan = 0;
uhd::dict<std::string, int> slot_to_chan_count = boost::assign::map_list_of("A", 0)("B", 0);
- BOOST_FOREACH(const mapping_pair_t &pair, mapping){
+ for(const mapping_pair_t &pair: mapping){
const std::string name = pair.first, conn = pair.second;
//combine the channel flags: shift for slot A vs B
diff --git a/host/lib/usrp/usrp1/usrp1_iface.cpp b/host/lib/usrp/usrp1/usrp1_iface.cpp
index b65f8fa2f..9390714ae 100644
--- a/host/lib/usrp/usrp1/usrp1_iface.cpp
+++ b/host/lib/usrp/usrp1/usrp1_iface.cpp
@@ -49,10 +49,10 @@ public:
{
uint32_t swapped = uhd::htonx(value);
- UHD_LOGV(always)
+ UHD_LOGGER_TRACE("USRP1")
<< "poke32("
<< std::dec << std::setw(2) << addr << ", 0x"
- << std::hex << std::setw(8) << value << ")" << std::endl
+ << std::hex << std::setw(8) << value << ")"
;
uint8_t w_index_h = SPI_ENABLE_FPGA & 0xff;
@@ -70,9 +70,9 @@ public:
uint32_t peek32(const uint32_t addr)
{
- UHD_LOGV(always)
+ UHD_LOGGER_TRACE("USRP1")
<< "peek32("
- << std::dec << std::setw(2) << addr << ")" << std::endl
+ << std::dec << std::setw(2) << addr << ")"
;
uint32_t value_out;
@@ -129,12 +129,12 @@ public:
size_t num_bits,
bool readback)
{
- UHD_LOGV(always)
- << "transact_spi: " << std::endl
- << " slave: " << which_slave << std::endl
- << " bits: " << bits << std::endl
- << " num_bits: " << num_bits << std::endl
- << " readback: " << readback << std::endl
+ UHD_LOGGER_TRACE("USRP1")
+ << "transact_spi: "
+ << " slave: " << which_slave
+ << " bits: " << bits
+ << " num_bits: " << num_bits
+ << " readback: " << readback
;
UHD_ASSERT_THROW((num_bits <= 32) && !(num_bits % 8));
size_t num_bytes = num_bits / 8;
diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp
index 09352c5e0..92b7f5331 100644
--- a/host/lib/usrp/usrp1/usrp1_impl.cpp
+++ b/host/lib/usrp/usrp1/usrp1_impl.cpp
@@ -19,7 +19,7 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/transport/usb_control.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/cast.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/static.hpp>
@@ -76,16 +76,16 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)
//find the usrps and load firmware
size_t found = 0;
- BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid)) {
+ for(usb_device_handle::sptr handle: usb_device_handle::get_device_list(vid, pid)) {
//extract the firmware path for the USRP1
std::string usrp1_fw_image;
try{
usrp1_fw_image = find_image_path(hint.get("fw", "usrp1_fw.ihx"));
}
catch(...){
- UHD_MSG(warning) << boost::format("Could not locate USRP1 firmware. %s") % print_utility_error("uhd_images_downloader.py");
+ UHD_LOGGER_WARNING("USRP1") << boost::format("Could not locate USRP1 firmware. %s") % print_utility_error("uhd_images_downloader.py");
}
- UHD_LOG << "USRP1 firmware image: " << usrp1_fw_image << std::endl;
+ UHD_LOGGER_DEBUG("USRP1") << "USRP1 firmware image: " << usrp1_fw_image ;
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -104,7 +104,7 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)
//search for the device until found or timeout
while (boost::get_system_time() < timeout_time and usrp1_addrs.empty() and found != 0)
{
- BOOST_FOREACH(usb_device_handle::sptr handle, usb_device_handle::get_device_list(vid, pid))
+ for(usb_device_handle::sptr handle: usb_device_handle::get_device_list(vid, pid))
{
usb_control::sptr control;
try{control = usb_control::make(handle, 0);}
@@ -144,14 +144,14 @@ UHD_STATIC_BLOCK(register_usrp1_device){
* Structors
**********************************************************************/
usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
- UHD_MSG(status) << "Opening a USRP1 device..." << std::endl;
+ UHD_LOGGER_INFO("USRP1") << "Opening a USRP1 device...";
_type = device::USRP;
//extract the FPGA path for the USRP1
std::string usrp1_fpga_image = find_image_path(
device_addr.get("fpga", "usrp1_fpga.rbf")
);
- UHD_LOG << "USRP1 FPGA image: " << usrp1_fpga_image << std::endl;
+ UHD_LOGGER_DEBUG("USRP1") << "USRP1 FPGA image: " << usrp1_fpga_image ;
//try to match the given device address with something on the USB bus
std::vector<usb_device_handle::sptr> device_list =
@@ -159,7 +159,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
//locate the matching handle in the device list
usb_device_handle::sptr handle;
- BOOST_FOREACH(usb_device_handle::sptr dev_handle, device_list) {
+ for(usb_device_handle::sptr dev_handle: device_list) {
if (dev_handle->get_serial() == device_addr["serial"]){
handle = dev_handle;
break;
@@ -190,12 +190,12 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
_iface->poke32(FR_MODE, 0x00000000);
_iface->poke32(FR_DEBUG_EN, 0x00000000);
- UHD_LOG
- << "USRP1 Capabilities" << std::endl
- << " number of duc's: " << get_num_ddcs() << std::endl
- << " number of ddc's: " << get_num_ducs() << std::endl
- << " rx halfband: " << has_rx_halfband() << std::endl
- << " tx halfband: " << has_tx_halfband() << std::endl
+ UHD_LOGGER_DEBUG("USRP1")
+ << "USRP1 Capabilities"
+ << " number of duc's: " << get_num_ddcs()
+ << " number of ddc's: " << get_num_ducs()
+ << " rx halfband: " << has_rx_halfband()
+ << " tx halfband: " << has_tx_halfband()
;
////////////////////////////////////////////////////////////////////
@@ -229,21 +229,21 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
_master_clock_rate = 64e6;
if (device_addr.has_key("mcr")){
try{
- _master_clock_rate = boost::lexical_cast<double>(device_addr["mcr"]);
+ _master_clock_rate = std::stod(device_addr["mcr"]);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Error parsing FPGA clock rate from device address: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP1") << "Error parsing FPGA clock rate from device address: " << e.what() ;
}
}
else if (not mb_eeprom["mcr"].empty()){
try{
- _master_clock_rate = boost::lexical_cast<double>(mb_eeprom["mcr"]);
+ _master_clock_rate = std::stod(mb_eeprom["mcr"]);
}
catch(const std::exception &e){
- UHD_MSG(error) << "Error parsing FPGA clock rate from EEPROM: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP1") << "Error parsing FPGA clock rate from EEPROM: " << e.what() ;
}
}
- UHD_MSG(status) << boost::format("Using FPGA clock rate of %fMHz...") % (_master_clock_rate/1e6) << std::endl;
+ UHD_LOGGER_INFO("USRP1") << boost::format("Using FPGA clock rate of %fMHz...") % (_master_clock_rate/1e6) ;
_tree->create<double>(mb_path / "tick_rate")
.add_coerced_subscriber(boost::bind(&usrp1_impl::update_tick_rate, this, _1))
.set(_master_clock_rate);
@@ -251,7 +251,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
////////////////////////////////////////////////////////////////////
// create codec control objects
////////////////////////////////////////////////////////////////////
- BOOST_FOREACH(const std::string &db, _dbc.keys()){
+ for(const std::string &db: _dbc.keys()){
_dbc[db].codec = usrp1_codec_ctrl::make(_iface, (db == "A")? SPI_ENABLE_CODEC_A : SPI_ENABLE_CODEC_B);
const fs_path rx_codec_path = mb_path / "rx_codecs" / db;
const fs_path tx_codec_path = mb_path / "tx_codecs" / db;
@@ -284,7 +284,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
.set(subdev_spec_t())
.add_coerced_subscriber(boost::bind(&usrp1_impl::update_tx_subdev_spec, this, _1));
- BOOST_FOREACH(const std::string &db, _dbc.keys()){
+ for(const std::string &db: _dbc.keys()){
const fs_path rx_fe_path = mb_path / "rx_frontends" / db;
_tree->create<std::complex<double> >(rx_fe_path / "dc_offset" / "value")
.set_coercer(boost::bind(&usrp1_impl::set_rx_dc_offset, this, db, _1))
@@ -349,7 +349,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
////////////////////////////////////////////////////////////////////
// create dboard control objects
////////////////////////////////////////////////////////////////////
- BOOST_FOREACH(const std::string &db, _dbc.keys()){
+ for(const std::string &db: _dbc.keys()){
//read the dboard eeprom to extract the dboard ids
dboard_eeprom_t rx_db_eeprom, tx_db_eeprom, gdb_eeprom;
@@ -400,7 +400,7 @@ usrp1_impl::usrp1_impl(const device_addr_t &device_addr){
this->update_rates();
//reset cordic rates and their properties to zero
- BOOST_FOREACH(const std::string &name, _tree->list(mb_path / "rx_dsps")){
+ for(const std::string &name: _tree->list(mb_path / "rx_dsps")){
_tree->access<double>(mb_path / "rx_dsps" / name / "freq" / "value").set(0.0);
}
diff --git a/host/lib/usrp/usrp1/usrp1_impl.hpp b/host/lib/usrp/usrp1/usrp1_impl.hpp
index 18c5c8bd3..b45d138d1 100644
--- a/host/lib/usrp/usrp1/usrp1_impl.hpp
+++ b/host/lib/usrp/usrp1/usrp1_impl.hpp
@@ -31,9 +31,9 @@
#include <uhd/usrp/dboard_eeprom.hpp>
#include <uhd/usrp/dboard_manager.hpp>
#include <uhd/transport/usb_zero_copy.hpp>
-#include <boost/foreach.hpp>
#include <boost/weak_ptr.hpp>
#include <complex>
+#include <atomic>
#ifndef INCLUDED_USRP1_IMPL_HPP
#define INCLUDED_USRP1_IMPL_HPP
@@ -145,7 +145,7 @@ private:
bool has_rx_halfband(void);
bool has_tx_halfband(void);
- void vandal_conquest_loop(void);
+ void vandal_conquest_loop(std::atomic<bool> &);
void set_reg(const std::pair<uint8_t, uint32_t> &reg);
@@ -158,7 +158,7 @@ private:
void enable_tx(bool enb){
_tx_enabled = enb;
_fx2_ctrl->usrp_tx_enable(enb);
- BOOST_FOREACH(const std::string &key, _dbc.keys())
+ for(const std::string &key: _dbc.keys())
{
_dbc[key].codec->enable_tx_digital(enb);
}
diff --git a/host/lib/usrp/usrp2/clock_ctrl.cpp b/host/lib/usrp/usrp2/clock_ctrl.cpp
index c05453c40..4a15c641a 100644
--- a/host/lib/usrp/usrp2/clock_ctrl.cpp
+++ b/host/lib/usrp/usrp2/clock_ctrl.cpp
@@ -22,7 +22,6 @@
#include <uhd/utils/safe_call.hpp>
#include <uhd/utils/assert_has.hpp>
#include <stdint.h>
-#include <boost/lexical_cast.hpp>
#include <boost/math/special_functions/round.hpp>
#include <iostream>
diff --git a/host/lib/usrp/usrp2/codec_ctrl.cpp b/host/lib/usrp/usrp2/codec_ctrl.cpp
index a0e456708..ec8bcf919 100644
--- a/host/lib/usrp/usrp2/codec_ctrl.cpp
+++ b/host/lib/usrp/usrp2/codec_ctrl.cpp
@@ -23,7 +23,6 @@
#include <uhd/utils/safe_call.hpp>
#include <uhd/exception.hpp>
#include <stdint.h>
-#include <boost/foreach.hpp>
using namespace uhd;
@@ -198,7 +197,7 @@ private:
void send_ad9777_reg(uint8_t addr){
uint16_t reg = _ad9777_regs.get_write_reg(addr);
- UHD_LOGV(always) << "send_ad9777_reg: " << std::hex << reg << std::endl;
+ UHD_LOGGER_TRACE("USRP2") << "send_ad9777_reg: " << std::hex << reg;
_spiface->write_spi(
SPI_SS_AD9777, spi_config_t::EDGE_RISE,
reg, 16
diff --git a/host/lib/usrp/usrp2/dboard_iface.cpp b/host/lib/usrp/usrp2/dboard_iface.cpp
index 1dafe5721..49ad38eaf 100644
--- a/host/lib/usrp/usrp2/dboard_iface.cpp
+++ b/host/lib/usrp/usrp2/dboard_iface.cpp
@@ -134,7 +134,7 @@ usrp2_dboard_iface::usrp2_dboard_iface(
//reset the aux dacs
_dac_regs[UNIT_RX] = ad5623_regs_t();
_dac_regs[UNIT_TX] = ad5623_regs_t();
- BOOST_FOREACH(unit_t unit, _dac_regs.keys()){
+ for(unit_t unit: _dac_regs.keys()){
_dac_regs[unit].data = 1;
_dac_regs[unit].addr = ad5623_regs_t::ADDR_ALL;
_dac_regs[unit].cmd = ad5623_regs_t::CMD_RESET;
diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp
index 224519944..967b53c88 100644
--- a/host/lib/usrp/usrp2/io_impl.cpp
+++ b/host/lib/usrp/usrp2/io_impl.cpp
@@ -23,11 +23,11 @@
#include "usrp2_regs.hpp"
#include "fw_common.h"
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/utils/tasks.hpp>
#include <uhd/exception.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/thread_priority.hpp>
+#include <uhd/utils/thread.hpp>
#include <uhd/transport/bounded_buffer.hpp>
#include <boost/thread/thread.hpp>
#include <boost/format.hpp>
@@ -165,7 +165,7 @@ struct usrp2_impl::io_impl{
std::vector<flow_control_monitor::sptr> fc_mons;
//methods and variables for the pirate crew
- void recv_pirate_loop(zero_copy_if::sptr, size_t);
+ void recv_pirate_loop(zero_copy_if::sptr, size_t, const std::atomic<bool> &);
std::list<task::sptr> pirate_tasks;
bounded_buffer<async_metadata_t> async_msg_fifo;
double tick_rate;
@@ -178,14 +178,14 @@ struct usrp2_impl::io_impl{
* - put async message packets into queue
**********************************************************************/
void usrp2_impl::io_impl::recv_pirate_loop(
- zero_copy_if::sptr err_xport, size_t index
+ zero_copy_if::sptr err_xport, size_t index, const std::atomic<bool> &exit_loop
){
set_thread_priority_safe();
//store a reference to the flow control monitor (offset by max dsps)
flow_control_monitor &fc_mon = *(this->fc_mons[index]);
- while (not boost::this_thread::interruption_requested()){
+ while (not exit_loop){
managed_recv_buffer::sptr buff = err_xport->get_recv_buff();
if (not buff.get()) continue; //ignore timeout/error buffers
@@ -209,7 +209,7 @@ void usrp2_impl::io_impl::recv_pirate_loop(
fc_mon.update_fc_condition(uhd::ntohx(fc_word32));
continue;
}
- //else UHD_MSG(often) << "metadata.event_code " << metadata.event_code << std::endl;
+ //else UHD_LOGGER_DEBUG("USRP2") << "metadata.event_code " << metadata.event_code;
async_msg_fifo.push_with_pop_on_full(metadata);
standard_async_msg_prints(metadata);
@@ -218,7 +218,7 @@ void usrp2_impl::io_impl::recv_pirate_loop(
//TODO unknown received packet, may want to print error...
}
}catch(const std::exception &e){
- UHD_MSG(error) << "Error in recv pirate loop: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP2") << "Error in recv pirate loop: " << e.what() ;
}
}
}
@@ -231,7 +231,7 @@ void usrp2_impl::io_init(void){
_io_impl = UHD_PIMPL_MAKE(io_impl, ());
//init first so we dont have an access race
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
//init the tx xport and flow control monitor
_io_impl->tx_xports.push_back(_mbc[mb].tx_dsp_xport);
_io_impl->fc_mons.push_back(flow_control_monitor::sptr(new flow_control_monitor(
@@ -241,18 +241,19 @@ void usrp2_impl::io_init(void){
}
//allocate streamer weak ptrs containers
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
_mbc[mb].rx_streamers.resize(_mbc[mb].rx_dsps.size());
_mbc[mb].tx_streamers.resize(1/*known to be 1 dsp*/);
}
//create a new pirate thread for each zc if (yarr!!)
size_t index = 0;
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
//spawn a new pirate to plunder the recv booty
_io_impl->pirate_tasks.push_back(task::make(boost::bind(
&usrp2_impl::io_impl::recv_pirate_loop, _io_impl.get(),
- _mbc[mb].tx_dsp_xport, index++
+ _mbc[mb].tx_dsp_xport, index++,
+ boost::ref(_pirate_task_exit)
)));
}
}
@@ -261,7 +262,7 @@ void usrp2_impl::update_tick_rate(const double rate){
_io_impl->tick_rate = rate; //shadow for async msg
//update the tick rate on all existing streamers -> thread safe
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
for (size_t i = 0; i < _mbc[mb].rx_streamers.size(); i++){
boost::shared_ptr<sph::recv_packet_streamer> my_streamer =
boost::dynamic_pointer_cast<sph::recv_packet_streamer>(_mbc[mb].rx_streamers[i].lock());
@@ -298,15 +299,15 @@ void usrp2_impl::update_tx_samp_rate(const std::string &mb, const size_t dsp, co
}
void usrp2_impl::update_rates(void){
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
fs_path root = "/mboards/" + mb;
_tree->access<double>(root / "tick_rate").update();
//and now that the tick rate is set, init the host rates to something
- BOOST_FOREACH(const std::string &name, _tree->list(root / "rx_dsps")){
+ for(const std::string &name: _tree->list(root / "rx_dsps")){
_tree->access<double>(root / "rx_dsps" / name / "rate" / "value").update();
}
- BOOST_FOREACH(const std::string &name, _tree->list(root / "tx_dsps")){
+ for(const std::string &name: _tree->list(root / "tx_dsps")){
_tree->access<double>(root / "tx_dsps" / name / "rate" / "value").update();
}
}
@@ -330,7 +331,7 @@ void usrp2_impl::update_rx_subdev_spec(const std::string &which_mb, const subdev
//compute the new occupancy and resize
_mbc[which_mb].rx_chan_occ = spec.size();
size_t nchan = 0;
- BOOST_FOREACH(const std::string &mb, _mbc.keys()) nchan += _mbc[mb].rx_chan_occ;
+ for(const std::string &mb: _mbc.keys()) nchan += _mbc[mb].rx_chan_occ;
}
void usrp2_impl::update_tx_subdev_spec(const std::string &which_mb, const subdev_spec_t &spec){
@@ -346,7 +347,7 @@ void usrp2_impl::update_tx_subdev_spec(const std::string &which_mb, const subdev
//compute the new occupancy and resize
_mbc[which_mb].tx_chan_occ = spec.size();
size_t nchan = 0;
- BOOST_FOREACH(const std::string &mb, _mbc.keys()) nchan += _mbc[mb].tx_chan_occ;
+ for(const std::string &mb: _mbc.keys()) nchan += _mbc[mb].tx_chan_occ;
}
/***********************************************************************
@@ -375,10 +376,10 @@ void usrp2_impl::program_stream_dest(
//user has provided an alternative address and port for destination
if (args.args.has_key("addr") and args.args.has_key("port")){
- UHD_MSG(status) << boost::format(
- "Programming streaming destination for custom address.\n"
- "IPv4 Address: %s, UDP Port: %s\n"
- ) % args.args["addr"] % args.args["port"] << std::endl;
+ UHD_LOGGER_INFO("USRP2") << boost::format(
+ "Programming streaming destination for custom address. "
+ "IPv4 Address: %s, UDP Port: %s"
+ ) % args.args["addr"] % args.args["port"];
asio::io_service io_service;
asio::ip::udp::resolver resolver(io_service);
@@ -388,7 +389,7 @@ void usrp2_impl::program_stream_dest(
stream_ctrl.udp_port = uhd::htonx(uint32_t(endpoint.port()));
for (size_t i = 0; i < 3; i++){
- UHD_MSG(status) << "ARP attempt " << i << std::endl;
+ UHD_LOGGER_INFO("USRP2") << "ARP attempt " << i;
managed_send_buffer::sptr send_buff = xport->get_send_buff();
std::memcpy(send_buff->cast<void *>(), &stream_ctrl, sizeof(stream_ctrl));
send_buff->commit(sizeof(stream_ctrl));
@@ -398,7 +399,7 @@ void usrp2_impl::program_stream_dest(
if (recv_buff and recv_buff->size() >= sizeof(uint32_t)){
const uint32_t result = uhd::ntohx(recv_buff->cast<const uint32_t *>()[0]);
if (result == 0){
- UHD_MSG(status) << "Success! " << std::endl;
+ UHD_LOGGER_INFO("USRP2") << "Success! ";
return;
}
}
@@ -454,7 +455,7 @@ rx_streamer::sptr usrp2_impl::get_rx_stream(const uhd::stream_args_t &args_){
for (size_t chan_i = 0; chan_i < args.channels.size(); chan_i++){
const size_t chan = args.channels[chan_i];
size_t num_chan_so_far = 0;
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
num_chan_so_far += _mbc[mb].rx_chan_occ;
if (chan < num_chan_so_far){
const size_t dsp = chan + _mbc[mb].rx_chan_occ - num_chan_so_far;
@@ -524,7 +525,7 @@ tx_streamer::sptr usrp2_impl::get_tx_stream(const uhd::stream_args_t &args_){
const size_t chan = args.channels[chan_i];
size_t num_chan_so_far = 0;
size_t abs = 0;
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
num_chan_so_far += _mbc[mb].tx_chan_occ;
if (chan < num_chan_so_far){
const size_t dsp = chan + _mbc[mb].tx_chan_occ - num_chan_so_far;
diff --git a/host/lib/usrp/usrp2/n200_image_loader.cpp b/host/lib/usrp/usrp2/n200_image_loader.cpp
index c68484600..01a8faa5e 100644
--- a/host/lib/usrp/usrp2/n200_image_loader.cpp
+++ b/host/lib/usrp/usrp2/n200_image_loader.cpp
@@ -225,7 +225,7 @@ static uhd::device_addr_t n200_find(const image_loader::image_loader_args_t &ima
* this query. If the user supplied specific arguments that
* led to a USRP2, throw an error.
*/
- BOOST_FOREACH(const uhd::device_addr_t &dev, found){
+ for(const uhd::device_addr_t &dev: found){
rev_xport = udp_simple::make_connected(
dev.get("addr"),
BOOST_STRINGIZE(N200_UDP_FW_UPDATE_PORT)
@@ -257,7 +257,7 @@ static uhd::device_addr_t n200_find(const image_loader::image_loader_args_t &ima
std::string err_msg = "Could not resolve given args to a single N-Series device.\n"
"Applicable devices:\n";
- BOOST_FOREACH(const uhd::device_addr_t &dev, n200_found){
+ for(const uhd::device_addr_t &dev: n200_found){
err_msg += str(boost::format("* %s (addr=%s)\n")
% dev.get("hw_rev")
% dev.get("addr"));
diff --git a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
index 9cd3afc6c..cdd26bbc4 100644
--- a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
@@ -17,7 +17,7 @@
#include "usrp2_regs.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/transport/vrt_if_packet.hpp>
#include "usrp2_fifo_ctrl.hpp"
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 021f0e3e5..ce547bad0 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -20,14 +20,13 @@
#include "fw_common.h"
#include "usrp2_iface.hpp"
#include <uhd/exception.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/types/dict.hpp>
#include <boost/thread.hpp>
-#include <boost/foreach.hpp>
#include <boost/asio.hpp> //used for htonl and ntohl
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
@@ -269,10 +268,10 @@ public:
return ctrl_send_and_recv_internal(out_data, lo, hi, CTRL_RECV_TIMEOUT/CTRL_RECV_RETRIES);
}
catch(const timeout_error &e){
- UHD_MSG(error)
+ UHD_LOGGER_ERROR("USRP2")
<< "Control packet attempt " << i
<< ", sequence number " << _ctrl_seq_num
- << ":\n" << e.what() << std::endl;
+ << ":\n" << e.what() ;
}
}
throw uhd::runtime_error("link dead: timeout waiting for control packet ACK");
diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp
index ee2434fab..573314339 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.cpp
@@ -19,7 +19,7 @@
#include "fw_common.h"
#include "apply_corrections.hpp"
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/exception.hpp>
#include <uhd/transport/if_addrs.hpp>
#include <uhd/transport/udp_zero_copy.hpp>
@@ -29,8 +29,6 @@
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/safe_call.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/bind.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/asio/ip/address_v4.hpp>
@@ -54,7 +52,7 @@ device_addrs_t usrp2_find(const device_addr_t &hint_){
if (hints.size() > 1){
device_addrs_t found_devices;
std::string error_msg;
- BOOST_FOREACH(const device_addr_t &hint_i, hints){
+ for(const device_addr_t &hint_i: hints){
device_addrs_t found_devices_i = usrp2_find(hint_i);
if (found_devices_i.size() != 1) error_msg += str(boost::format(
"Could not resolve device hint \"%s\" to a single device."
@@ -81,7 +79,7 @@ device_addrs_t usrp2_find(const device_addr_t &hint_){
//if no address was specified, send a broadcast on each interface
if (not hint.has_key("addr")){
- BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs()){
+ for(const if_addrs_t &if_addrs: get_if_addrs()){
//avoid the loopback device
if (if_addrs.inet == asio::ip::address_v4::loopback().to_string()) continue;
@@ -106,7 +104,7 @@ device_addrs_t usrp2_find(const device_addr_t &hint_){
udp_transport = udp_simple::make_broadcast(hint["addr"], BOOST_STRINGIZE(USRP2_UDP_CTRL_PORT));
}
catch(const std::exception &e){
- UHD_MSG(error) << boost::format("Cannot open UDP transport on %s\n%s") % hint["addr"] % e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP2") << boost::format("Cannot open UDP transport on %s\n%s") % hint["addr"] % e.what() ;
return usrp2_addrs; //dont throw, but return empty address so caller can insert
}
@@ -120,11 +118,11 @@ device_addrs_t usrp2_find(const device_addr_t &hint_){
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "USRP2 Network discovery error " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP2") << "USRP2 Network discovery error " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "USRP2 Network discovery unknown error " << std::endl;
+ UHD_LOGGER_ERROR("USRP2") << "USRP2 Network discovery unknown error " ;
}
//loop and recieve until the timeout
@@ -284,7 +282,7 @@ static zero_copy_if::sptr make_xport(
//only copy hints that contain the filter word
device_addr_t filtered_hints;
- BOOST_FOREACH(const std::string &key, hints.keys()){
+ for(const std::string &key: hints.keys()){
if (key.find(filter) == std::string::npos) continue;
filtered_hints[key] = hints[key];
}
@@ -317,9 +315,10 @@ static zero_copy_if::sptr make_xport(
* Structors
**********************************************************************/
usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
- device_addr(_device_addr)
+ device_addr(_device_addr),
+ _pirate_task_exit(false)
{
- UHD_MSG(status) << "Opening a USRP2/N-Series device..." << std::endl;
+ UHD_LOGGER_INFO("USRP2") << "Opening a USRP2/N-Series device...";
//setup the dsp transport hints (default to a large recv buff)
if (not device_addr.has_key("recv_buff_size")){
@@ -334,7 +333,7 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
if (not device_addr.has_key("send_buff_size")){
//The buffer should be the size of the SRAM on the device,
//because we will never commit more than the SRAM can hold.
- device_addr["send_buff_size"] = boost::lexical_cast<std::string>(USRP2_SRAM_BYTES);
+ device_addr["send_buff_size"] = std::to_string(USRP2_SRAM_BYTES);
}
device_addrs_t device_args = separate_device_addr(device_addr);
@@ -353,11 +352,11 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
mtu.send_mtu = std::min(mtu.send_mtu, mtu_i.send_mtu);
}
- device_addr["recv_frame_size"] = boost::lexical_cast<std::string>(mtu.recv_mtu);
- device_addr["send_frame_size"] = boost::lexical_cast<std::string>(mtu.send_mtu);
+ device_addr["recv_frame_size"] = std::to_string(mtu.recv_mtu);
+ device_addr["send_frame_size"] = std::to_string(mtu.send_mtu);
- UHD_MSG(status) << boost::format("Current recv frame size: %d bytes") % mtu.recv_mtu << std::endl;
- UHD_MSG(status) << boost::format("Current send frame size: %d bytes") % mtu.send_mtu << std::endl;
+ UHD_LOGGER_INFO("USRP2") << boost::format("Current recv frame size: %d bytes") % mtu.recv_mtu;
+ UHD_LOGGER_INFO("USRP2") << boost::format("Current send frame size: %d bytes") % mtu.send_mtu;
}
catch(const uhd::not_implemented_error &){
//just ignore this error, makes older fw work...
@@ -375,7 +374,7 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
for (size_t mbi = 0; mbi < device_args.size(); mbi++){
const device_addr_t device_args_i = device_args[mbi];
- const std::string mb = boost::lexical_cast<std::string>(mbi);
+ const std::string mb = std::to_string(mbi);
const std::string addr = device_args_i["addr"];
const fs_path mb_path = "/mboards/" + mb;
@@ -412,7 +411,7 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
// handle case where the MB EEPROM is not programmed
if (fpga_major == USRP2_FPGA_COMPAT_NUM or fpga_major == N200_FPGA_COMPAT_NUM)
{
- UHD_MSG(warning) << "Unable to identify device - assuming USRP2/N-Series device" << std::endl;
+ UHD_LOGGER_WARNING("USRP2") << "Unable to identify device - assuming USRP2/N-Series device" ;
expected_fpga_compat_num = fpga_major;
}
}
@@ -433,19 +432,19 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
////////////////////////////////////////////////////////////////
// construct transports for RX and TX DSPs
////////////////////////////////////////////////////////////////
- UHD_LOG << "Making transport for RX DSP0..." << std::endl;
+ UHD_LOGGER_TRACE("USRP2") << "Making transport for RX DSP0..." ;
_mbc[mb].rx_dsp_xports.push_back(make_xport(
addr, BOOST_STRINGIZE(USRP2_UDP_RX_DSP0_PORT), device_args_i, "recv"
));
- UHD_LOG << "Making transport for RX DSP1..." << std::endl;
+ UHD_LOGGER_TRACE("USRP2") << "Making transport for RX DSP1..." ;
_mbc[mb].rx_dsp_xports.push_back(make_xport(
addr, BOOST_STRINGIZE(USRP2_UDP_RX_DSP1_PORT), device_args_i, "recv"
));
- UHD_LOG << "Making transport for TX DSP0..." << std::endl;
+ UHD_LOGGER_TRACE("USRP2") << "Making transport for TX DSP0..." ;
_mbc[mb].tx_dsp_xport = make_xport(
addr, BOOST_STRINGIZE(USRP2_UDP_TX_DSP0_PORT), device_args_i, "send"
);
- UHD_LOG << "Making transport for Control..." << std::endl;
+ UHD_LOGGER_TRACE("USRP2") << "Making transport for Control..." ;
_mbc[mb].fifo_ctrl_xport = make_xport(
addr, BOOST_STRINGIZE(USRP2_UDP_FIFO_CRTL_PORT), device_addr_t(), ""
);
@@ -536,18 +535,18 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
//otherwise if not disabled, look for the internal GPSDO
if (_mbc[mb].iface->peekfw(U2_FW_REG_HAS_GPSDO) != dont_look_for_gpsdo)
{
- UHD_MSG(status) << "Detecting internal GPSDO.... " << std::flush;
+ UHD_LOGGER_INFO("USRP2") << "Detecting internal GPSDO.... ";
try{
_mbc[mb].gps = gps_ctrl::make(udp_simple::make_uart(udp_simple::make_connected(
addr, BOOST_STRINGIZE(USRP2_UDP_UART_GPS_PORT)
)));
}
catch(std::exception &e){
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("USRP2") << "An error occurred making GPSDO control: " << e.what() ;
}
if (_mbc[mb].gps and _mbc[mb].gps->gps_detected())
{
- BOOST_FOREACH(const std::string &name, _mbc[mb].gps->get_sensors())
+ for(const std::string &name: _mbc[mb].gps->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, _mbc[mb].gps, name));
@@ -743,12 +742,12 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
//bind frontend corrections to the dboard freq props
const fs_path db_tx_fe_path = mb_path / "dboards" / "A" / "tx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_tx_fe_path)){
+ for(const std::string &name: _tree->list(db_tx_fe_path)){
_tree->access<double>(db_tx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&usrp2_impl::set_tx_fe_corrections, this, mb, _1));
}
const fs_path db_rx_fe_path = mb_path / "dboards" / "A" / "rx_frontends";
- BOOST_FOREACH(const std::string &name, _tree->list(db_rx_fe_path)){
+ for(const std::string &name: _tree->list(db_rx_fe_path)){
_tree->access<double>(db_rx_fe_path / name / "freq" / "value")
.add_coerced_subscriber(boost::bind(&usrp2_impl::set_rx_fe_corrections, this, mb, _1));
}
@@ -759,14 +758,14 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
//do some post-init tasks
this->update_rates();
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ for(const std::string &mb: _mbc.keys()){
fs_path root = "/mboards/" + mb;
//reset cordic rates and their properties to zero
- BOOST_FOREACH(const std::string &name, _tree->list(root / "rx_dsps")){
+ for(const std::string &name: _tree->list(root / "rx_dsps")){
_tree->access<double>(root / "rx_dsps" / name / "freq" / "value").set(0.0);
}
- BOOST_FOREACH(const std::string &name, _tree->list(root / "tx_dsps")){
+ for(const std::string &name: _tree->list(root / "tx_dsps")){
_tree->access<double>(root / "tx_dsps" / name / "freq" / "value").set(0.0);
}
@@ -778,7 +777,7 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
//GPS installed: use external ref, time, and init time spec
if (_mbc[mb].gps and _mbc[mb].gps->gps_detected()){
_mbc[mb].time64->enable_gpsdo();
- UHD_MSG(status) << "Setting references to the internal GPSDO" << std::endl;
+ UHD_LOGGER_INFO("USRP2") << "Setting references to the internal GPSDO" ;
_tree->access<std::string>(root / "time_source/value").set("gpsdo");
_tree->access<std::string>(root / "clock_source/value").set("gpsdo");
}
@@ -787,7 +786,8 @@ usrp2_impl::usrp2_impl(const device_addr_t &_device_addr) :
}
usrp2_impl::~usrp2_impl(void){UHD_SAFE_CALL(
- BOOST_FOREACH(const std::string &mb, _mbc.keys()){
+ _pirate_task_exit = true;
+ for(const std::string &mb: _mbc.keys()){
_mbc[mb].tx_dsp->set_updates(0, 0);
}
)}
diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp
index 790daa749..087a4f8e9 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.hpp
@@ -46,6 +46,7 @@
#include <uhd/usrp/dboard_manager.hpp>
#include <uhd/usrp/subdev_spec.hpp>
#include <boost/weak_ptr.hpp>
+#include <atomic>
static const double USRP2_LINK_RATE_BPS = 1000e6/8;
static const double mimo_clock_delay_usrp2_rev4 = 4.18e-9;
@@ -120,6 +121,7 @@ private:
//io impl methods and members
uhd::device_addr_t device_addr;
UHD_PIMPL_DECL(io_impl) _io_impl;
+ std::atomic<bool> _pirate_task_exit;
void io_init(void);
void update_tick_rate(const double rate);
void update_rx_samp_rate(const std::string &, const size_t, const double rate);
diff --git a/host/lib/usrp/usrp_c.cpp b/host/lib/usrp/usrp_c.cpp
index e97be2abe..3d50bd8be 100644
--- a/host/lib/usrp/usrp_c.cpp
+++ b/host/lib/usrp/usrp_c.cpp
@@ -23,7 +23,6 @@
#include <uhd/error.h>
#include <uhd/usrp/usrp.h>
-#include <boost/foreach.hpp>
#include <boost/thread/mutex.hpp>
#include <string.h>
@@ -259,7 +258,7 @@ uhd_error uhd_usrp_find(
uhd::device_addrs_t devs = uhd::device::find(std::string(args), uhd::device::USRP);
(*strings_out)->string_vector_cpp.clear();
- BOOST_FOREACH(const uhd::device_addr_t &dev, devs){
+ for(const uhd::device_addr_t &dev: devs){
(*strings_out)->string_vector_cpp.push_back(dev.to_string());
}
)
diff --git a/host/lib/usrp/x300/x300_adc_ctrl.cpp b/host/lib/usrp/x300/x300_adc_ctrl.cpp
index fed2ffaf7..d9d0cb168 100644
--- a/host/lib/usrp/x300/x300_adc_ctrl.cpp
+++ b/host/lib/usrp/x300/x300_adc_ctrl.cpp
@@ -21,7 +21,6 @@
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/exception.hpp>
-#include <boost/foreach.hpp>
using namespace uhd;
diff --git a/host/lib/usrp/x300/x300_clock_ctrl.cpp b/host/lib/usrp/x300/x300_clock_ctrl.cpp
index b8b100ceb..7307bcc66 100644
--- a/host/lib/usrp/x300/x300_clock_ctrl.cpp
+++ b/host/lib/usrp/x300/x300_clock_ctrl.cpp
@@ -303,9 +303,8 @@ public:
//be close to what the client requested.
}
- UHD_LOGV(often)
- << boost::format("x300_clock_ctrl::set_clock_delay: Which=%d, Requested=%f, Digital Taps=%d, Half Shift=%d, Analog Delay=%d (%s), Coerced Delay=%fns"
- ) % which % delay_ns % ddly_value % (half_shift_en?"ON":"OFF") % ((int)adly_value) % (adly_en?"ON":"OFF") % coerced_delay << std::endl;
+ UHD_LOG_DEBUG("X300", boost::format("x300_clock_ctrl::set_clock_delay: Which=%d, Requested=%f, Digital Taps=%d, Half Shift=%d, Analog Delay=%d (%s), Coerced Delay=%fns"
+ ) % which % delay_ns % ddly_value % (half_shift_en?"ON":"OFF") % ((int)adly_value) % (adly_en?"ON":"OFF") % coerced_delay)
//Apply settings
switch (which)
diff --git a/host/lib/usrp/x300/x300_dac_ctrl.cpp b/host/lib/usrp/x300/x300_dac_ctrl.cpp
index 162eeb143..51b93662c 100644
--- a/host/lib/usrp/x300/x300_dac_ctrl.cpp
+++ b/host/lib/usrp/x300/x300_dac_ctrl.cpp
@@ -18,11 +18,10 @@
#include "x300_dac_ctrl.hpp"
#include "x300_regs.hpp"
#include <uhd/types/time_spec.hpp>
-#include <uhd/utils/msg.hpp>
#include <uhd/utils/log.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/exception.hpp>
-#include <boost/foreach.hpp>
+#include <boost/format.hpp>
#include <boost/thread/thread.hpp> //sleep
#define X300_DAC_FRONTEND_SYNC_FAILURE_FATAL
@@ -243,7 +242,7 @@ public:
if (failure_is_fatal) {
throw uhd::runtime_error(msg);
} else {
- UHD_MSG(warning) << msg;
+ UHD_LOGGER_WARNING("X300") << msg;
}
}
}
diff --git a/host/lib/usrp/x300/x300_dboard_iface.cpp b/host/lib/usrp/x300/x300_dboard_iface.cpp
index 092c888b0..e492fe2b3 100644
--- a/host/lib/usrp/x300/x300_dboard_iface.cpp
+++ b/host/lib/usrp/x300/x300_dboard_iface.cpp
@@ -34,7 +34,7 @@ x300_dboard_iface::x300_dboard_iface(const x300_dboard_iface_config_t &config):
//reset the aux dacs
_dac_regs[UNIT_RX] = ad5623_regs_t();
_dac_regs[UNIT_TX] = ad5623_regs_t();
- BOOST_FOREACH(unit_t unit, _dac_regs.keys())
+ for(unit_t unit: _dac_regs.keys())
{
_dac_regs[unit].data = 1;
_dac_regs[unit].addr = ad5623_regs_t::ADDR_ALL;
diff --git a/host/lib/usrp/x300/x300_fw_common.h b/host/lib/usrp/x300/x300_fw_common.h
index b83449666..1c786448c 100644
--- a/host/lib/usrp/x300/x300_fw_common.h
+++ b/host/lib/usrp/x300/x300_fw_common.h
@@ -32,7 +32,7 @@ extern "C" {
#define X300_REVISION_COMPAT 7
#define X300_REVISION_MIN 2
#define X300_FW_COMPAT_MAJOR 5
-#define X300_FW_COMPAT_MINOR 1
+#define X300_FW_COMPAT_MINOR 2
#define X300_FPGA_COMPAT_MAJOR 0x21
//shared memory sections - in between the stack and the program space
@@ -61,6 +61,7 @@ extern "C" {
#define X300_GPSDO_UDP_PORT 49156
#define X300_FPGA_PROG_UDP_PORT 49157
#define X300_MTU_DETECT_UDP_PORT 49158
+#define X300_FPGA_READ_UDP_PORT 49159
#define X300_DEFAULT_MAC_ADDR_0 {0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff}
#define X300_DEFAULT_MAC_ADDR_1 {0x00, 0x50, 0xC2, 0x85, 0x3f, 0x33}
@@ -91,6 +92,11 @@ extern "C" {
#define X300_FPGA_PROG_CONFIGURE (1 << 6)
#define X300_FPGA_PROG_CONFIG_STATUS (1 << 7)
+#define X300_FPGA_READ_FLAGS_ACK (1 << 0)
+#define X300_FPGA_READ_FLAGS_ERROR (1 << 1)
+#define X300_FPGA_READ_FLAGS_INIT (1 << 2)
+#define X300_FPGA_READ_FLAGS_CLEANUP (1 << 3)
+
#define X300_MTU_DETECT_ECHO_REQUEST (1 << 0)
#define X300_MTU_DETECT_ECHO_REPLY (1 << 1)
#define X300_MTU_DETECT_ERROR (1 << 2)
@@ -144,6 +150,16 @@ typedef struct
typedef struct
{
uint32_t flags;
+ uint32_t sector;
+ uint32_t index;
+ uint32_t size;
+} x300_fpga_read_t;
+
+typedef x300_fpga_prog_t x300_fpga_read_reply_t;
+
+typedef struct
+{
+ uint32_t flags;
uint32_t size;
} x300_mtu_t;
diff --git a/host/lib/usrp/x300/x300_fw_ctrl.cpp b/host/lib/usrp/x300/x300_fw_ctrl.cpp
index d149dadf3..b8cb2075e 100644
--- a/host/lib/usrp/x300/x300_fw_ctrl.cpp
+++ b/host/lib/usrp/x300/x300_fw_ctrl.cpp
@@ -19,7 +19,7 @@
#include "x300_fw_common.h"
#include <uhd/transport/udp_simple.hpp>
#include <uhd/utils/byteswap.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
#include <boost/thread/mutex.hpp>
@@ -60,8 +60,8 @@ public:
catch(const uhd::io_error &ex)
{
std::string error_msg = str(boost::format(
- "x300 fw communication failure #%u\n%s") % i % ex.what());
- if (errors) UHD_MSG(error) << error_msg << std::endl;
+ "%s: x300 fw communication failure #%u\n%s") % __loc_info() % i % ex.what());
+ if (errors) UHD_LOGGER_ERROR("X300") << error_msg ;
if (i == num_retries) throw uhd::io_error(error_msg);
}
}
@@ -80,8 +80,8 @@ public:
catch(const uhd::io_error &ex)
{
std::string error_msg = str(boost::format(
- "x300 fw communication failure #%u\n%s") % i % ex.what());
- if (errors) UHD_MSG(error) << error_msg << std::endl;
+ "%s: x300 fw communication failure #%u\n%s") % __loc_info() % i % ex.what());
+ if (errors) UHD_LOGGER_ERROR("X300") << error_msg ;
if (i == num_retries) throw uhd::io_error(error_msg);
}
}
@@ -94,6 +94,7 @@ protected:
virtual void __poke32(const wb_addr_type addr, const uint32_t data) = 0;
virtual uint32_t __peek32(const wb_addr_type addr) = 0;
virtual void __flush() = 0;
+ virtual std::string __loc_info() = 0;
boost::mutex reg_access;
};
@@ -182,6 +183,11 @@ protected:
while (udp->recv(boost::asio::buffer(buff), 0.0)){} //flush
}
+ virtual std::string __loc_info(void)
+ {
+ return udp->get_send_addr();
+ }
+
private:
uhd::transport::udp_simple::sptr udp;
size_t seq;
@@ -290,6 +296,11 @@ protected:
__peek32(0);
}
+ virtual std::string __loc_info(void)
+ {
+ return std::to_string(_drv_proxy->get_interface_num());
+ }
+
private:
niriok_proxy::sptr _drv_proxy;
static const uint32_t READ_TIMEOUT_IN_MS = 100;
diff --git a/host/lib/usrp/x300/x300_fw_uart.cpp b/host/lib/usrp/x300/x300_fw_uart.cpp
index a2cbcc908..83a564997 100644
--- a/host/lib/usrp/x300/x300_fw_uart.cpp
+++ b/host/lib/usrp/x300/x300_fw_uart.cpp
@@ -18,11 +18,10 @@
#include "x300_impl.hpp"
#include <uhd/types/wb_iface.hpp>
#include "x300_regs.hpp"
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/types/serial.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/thread/thread.hpp>
using namespace uhd;
@@ -65,7 +64,7 @@ struct x300_uart_iface : uart_iface
void write_uart(const std::string &buff)
{
boost::mutex::scoped_lock(_write_mutex);
- BOOST_FOREACH(const char ch, buff)
+ for(const char ch: buff)
{
this->putchar(ch);
}
diff --git a/host/lib/usrp/x300/x300_image_loader.cpp b/host/lib/usrp/x300/x300_image_loader.cpp
index f08b21f9b..f5564d2ce 100644
--- a/host/lib/usrp/x300/x300_image_loader.cpp
+++ b/host/lib/usrp/x300/x300_image_loader.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2015 Ettus Research LLC
+// Copyright 2015-2017 Ettus Research
//
// 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
@@ -58,6 +58,15 @@ using namespace uhd::transport;
#define FPGA_LOAD_TIMEOUT 15
/*
+ * Bitstream header pattern
+ */
+static const uint8_t X300_FPGA_BIT_HEADER[] =
+{
+ 0x00, 0x09, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0,
+ 0x0f, 0xf0, 0x00, 0x00, 0x01, 0x61, 0x00
+};
+
+/*
* Packet structure
*/
typedef struct {
@@ -79,17 +88,20 @@ typedef struct {
bool ethernet;
bool configure; // Reload FPGA after burning to flash (Ethernet only)
bool verify; // Device will verify the download along the way (Ethernet only)
+ bool download; // Host will read the FPGA image on the device to a file
bool lvbitx;
uhd::device_addr_t dev_addr;
std::string ip_addr;
std::string fpga_type;
std::string resource;
std::string filepath;
+ std::string outpath;
std::string rpc_port;
- uint32_t size;
- udp_simple::sptr xport;
+ udp_simple::sptr write_xport;
+ udp_simple::sptr read_xport;
+ uint32_t size;
+ uint8_t data_in[udp_simple::mtu];
std::vector<char> bitstream; // .bin image extracted from .lvbitx file
- uint8_t data_in[udp_simple::mtu];
} x300_session_t;
/*
@@ -157,7 +169,8 @@ static void x300_validate_image(x300_session_t &session){
static void x300_setup_session(x300_session_t &session,
const device_addr_t &args,
- const std::string &filepath){
+ const std::string &filepath,
+ const std::string &outpath){
device_addrs_t devs = x300_find(args);
if(devs.size() == 0){
session.found = false;
@@ -167,7 +180,7 @@ static void x300_setup_session(x300_session_t &session,
std::string err_msg = "Could not resolve given args to a single X-Series device.\n"
"Applicable devices:\n";
- BOOST_FOREACH(const uhd::device_addr_t &dev, devs){
+ for(const uhd::device_addr_t &dev: devs){
std::string identifier = dev.has_key("addr") ? "addr"
: "resource";
@@ -188,9 +201,12 @@ static void x300_setup_session(x300_session_t &session,
if(session.ethernet){
session.ip_addr = session.dev_addr["addr"];
session.configure = args.has_key("configure");
- session.xport = udp_simple::make_connected(session.ip_addr,
- BOOST_STRINGIZE(X300_FPGA_PROG_UDP_PORT));
+ session.write_xport = udp_simple::make_connected(session.ip_addr,
+ BOOST_STRINGIZE(X300_FPGA_PROG_UDP_PORT));
+ session.read_xport = udp_simple::make_connected(session.ip_addr,
+ BOOST_STRINGIZE(X300_FPGA_READ_UDP_PORT));
session.verify = args.has_key("verify");
+ session.download = args.has_key("download");
}
else{
session.resource = session.dev_addr["resource"];
@@ -213,6 +229,23 @@ static void x300_setup_session(x300_session_t &session,
}
else session.filepath = filepath;
+ /*
+ * The user can specify an output image path, or UHD will use the
+ * system temporary path by default
+ */
+ if(outpath == ""){
+ if(!session.dev_addr.has_key("product") or session.fpga_type == ""){
+ throw uhd::runtime_error("Found a device but could not auto-generate an image filename.");
+ }
+ std::string filename = str(boost::format("usrp_%s_fpga_%s")
+ % (to_lower_copy(session.dev_addr["product"]))
+ % session.fpga_type);
+
+ session.outpath = get_tmp_path() + "/" + filename;
+ } else {
+ session.outpath = outpath;
+ }
+
// Validate image
x300_validate_image(session);
}
@@ -240,7 +273,7 @@ static UHD_INLINE void x300_bitswap(uint8_t *num){
*num = ((*num & 0xF0) >> 4) | ((*num & 0x0F) << 4);
*num = ((*num & 0xCC) >> 2) | ((*num & 0x33) << 2);
*num = ((*num & 0xAA) >> 1) | ((*num & 0x55) << 1);
-}
+}
static void x300_ethernet_load(x300_session_t &session){
@@ -250,7 +283,7 @@ static void x300_ethernet_load(x300_session_t &session){
// Initialize write session
uint32_t flags = X300_FPGA_PROG_FLAGS_ACK | X300_FPGA_PROG_FLAGS_INIT;
- size_t len = x300_send_and_recv(session.xport, flags, &pkt_out, session.data_in);
+ size_t len = x300_send_and_recv(session.write_xport, flags, &pkt_out, session.data_in);
if(x300_recv_ok(pkt_in, len)){
std::cout << "-- Initializing FPGA loading..." << std::flush;
}
@@ -312,7 +345,7 @@ static void x300_ethernet_load(x300_session_t &session){
pkt_out.data16[k] = htonx<uint16_t>(pkt_out.data16[k]);
}
- len = x300_send_and_recv(session.xport, flags, &pkt_out, session.data_in);
+ len = x300_send_and_recv(session.write_xport, flags, &pkt_out, session.data_in);
if(len == 0){
if(!session.lvbitx) image.close();
throw uhd::runtime_error("Timed out waiting for reply from device.");
@@ -339,7 +372,7 @@ static void x300_ethernet_load(x300_session_t &session){
pkt_out.sector = pkt_out.index = pkt_out.size = 0;
memset(pkt_out.data8, 0, X300_PACKET_SIZE_BYTES);
std::cout << "-- Finalizing image load..." << std::flush;
- len = x300_send_and_recv(session.xport, flags, &pkt_out, session.data_in);
+ len = x300_send_and_recv(session.write_xport, flags, &pkt_out, session.data_in);
if(len == 0){
std::cout << "failed." << std::endl;
throw uhd::runtime_error("Timed out waiting for reply from device.");
@@ -353,7 +386,7 @@ static void x300_ethernet_load(x300_session_t &session){
// Save new FPGA image (if option set)
if(session.configure){
flags = (X300_FPGA_PROG_CONFIGURE | X300_FPGA_PROG_FLAGS_ACK);
- x300_send_and_recv(session.xport, flags, &pkt_out, session.data_in);
+ x300_send_and_recv(session.write_xport, flags, &pkt_out, session.data_in);
std::cout << "-- Saving image onto device..." << std::flush;
if(len == 0){
std::cout << "failed." << std::endl;
@@ -368,6 +401,164 @@ static void x300_ethernet_load(x300_session_t &session){
std::cout << str(boost::format("Power-cycle the USRP %s to use the new image.") % session.dev_addr.get("product", "")) << std::endl;
}
+static void x300_ethernet_read(x300_session_t &session){
+
+ // UDP receive buffer
+ x300_fpga_update_data_t pkt_out;
+ memset(pkt_out.data8, 0, X300_PACKET_SIZE_BYTES);
+
+ x300_fpga_update_data_t *pkt_in = reinterpret_cast<x300_fpga_update_data_t*>(session.data_in);
+
+ // Initialize read session
+ uint32_t flags = X300_FPGA_READ_FLAGS_ACK | X300_FPGA_READ_FLAGS_INIT;
+ size_t len = x300_send_and_recv(session.read_xport, flags, &pkt_out, session.data_in);
+ if(x300_recv_ok(pkt_in, len)){
+ std::cout << "-- Initializing FPGA reading..." << std::flush;
+ }
+ else if(len == 0){
+ std::cout << "failed." << std::endl;
+ throw uhd::runtime_error("Timed out waiting for reply from device.");
+ }
+ else{
+ std::cout << "failed." << std::endl;
+ throw uhd::runtime_error("Device reported an error during initialization.");
+ }
+
+ std::cout << "successful." << std::endl;
+
+ // Read the first packet
+ // Acknowledge receipt of the FPGA image data
+ flags = X300_FPGA_READ_FLAGS_ACK;
+
+ // Set the initial burn location
+ pkt_out.sector = htonx<uint32_t>(X300_FPGA_SECTOR_START);
+ pkt_out.index = 0;
+ pkt_out.size = htonx<uint32_t>(X300_PACKET_SIZE_BYTES / 2);
+
+ len = x300_send_and_recv(session.read_xport, flags, &pkt_out, session.data_in);
+ if(len == 0){
+ throw uhd::runtime_error("Timed out waiting for reply from device.");
+ }
+ else if((ntohl(pkt_in->flags) & X300_FPGA_READ_FLAGS_ERROR)){
+ throw uhd::runtime_error("Device reported an error.");
+ }
+
+ // Data must be bitswapped and byteswapped
+ for(size_t k = 0; k < X300_PACKET_SIZE_BYTES; k++){
+ x300_bitswap(&pkt_in->data8[k]);
+ }
+ for(size_t k = 0; k < (X300_PACKET_SIZE_BYTES/2); k++){
+ pkt_in->data16[k] = htonx<uint16_t>(pkt_in->data16[k]);
+ }
+
+ // Assume the largest size first
+ size_t image_size = X300_FPGA_BIT_SIZE_BYTES;
+ size_t sectors = (image_size / X300_FLASH_SECTOR_SIZE);
+ std::string extension(".bit");
+
+ // Check for the beginning header sequence to determine
+ // the total amount of data (.bit vs .bin) on the flash
+ // The .bit file format includes header information not part of a .bin
+ for (size_t i = 0; i < sizeof(X300_FPGA_BIT_HEADER); i++)
+ {
+ if (pkt_in->data8[i] != X300_FPGA_BIT_HEADER[i])
+ {
+ std::cout << "-- No *.bit header detected, FPGA image is a raw stream (*.bin)!" << std::endl;
+ image_size = X300_FPGA_BIN_SIZE_BYTES;
+ sectors = (image_size / X300_FLASH_SECTOR_SIZE);
+ extension = std::string(".bin");
+ break;
+ }
+ }
+
+ session.outpath += extension;
+ std::ofstream image(session.outpath.c_str(), std::ios::binary);
+ std::cout << boost::format("-- Output FPGA file: %s\n")
+ % session.outpath;
+
+ // Write the first packet
+ image.write((char*)pkt_in->data8, X300_PACKET_SIZE_BYTES);
+
+ // Each sector
+ size_t pkt_count = X300_PACKET_SIZE_BYTES;
+ for(size_t i = 0; i < image_size; i += X300_FLASH_SECTOR_SIZE){
+
+ // Once we determine the image size, print the progress percentage
+ std::cout << boost::format("\r-- Reading %s FPGA image: %d%% (%d/%d sectors)")
+ % session.fpga_type
+ % (int(double(i) / double(image_size) * 100.0))
+ % (i / X300_FLASH_SECTOR_SIZE)
+ % sectors
+ << std::flush;
+
+ // Each packet
+ while (pkt_count < image_size and pkt_count < (i + X300_FLASH_SECTOR_SIZE))
+ {
+ // Set burn location
+ pkt_out.sector = htonx<uint32_t>(X300_FPGA_SECTOR_START + (i/X300_FLASH_SECTOR_SIZE));
+ pkt_out.index = htonx<uint32_t>((pkt_count % X300_FLASH_SECTOR_SIZE) / 2);
+
+ len = x300_send_and_recv(session.read_xport, flags, &pkt_out, session.data_in);
+ if(len == 0){
+ image.close();
+ throw uhd::runtime_error("Timed out waiting for reply from device.");
+ }
+ else if((ntohl(pkt_in->flags) & X300_FPGA_READ_FLAGS_ERROR)){
+ image.close();
+ throw uhd::runtime_error("Device reported an error.");
+ }
+
+ // Data must be bitswapped and byteswapped
+ for(size_t k = 0; k < X300_PACKET_SIZE_BYTES; k++){
+ x300_bitswap(&pkt_in->data8[k]);
+ }
+ for(size_t k = 0; k < (X300_PACKET_SIZE_BYTES/2); k++){
+ pkt_in->data16[k] = htonx<uint16_t>(pkt_in->data16[k]);
+ }
+
+ // Calculate the number of bytes to write
+ // If this is the last packet, get rid of the extra zero padding
+ // due to packet size
+ size_t nbytes = X300_PACKET_SIZE_BYTES;
+ if (pkt_count > (image_size - X300_PACKET_SIZE_BYTES))
+ {
+ nbytes = (image_size - pkt_count);
+ }
+
+ // Write the incoming piece of the image to a file
+ image.write((char*)pkt_in->data8, nbytes);
+
+ // Increment the data count
+ pkt_count += X300_PACKET_SIZE_BYTES;
+ }
+
+ pkt_count = i + X300_FLASH_SECTOR_SIZE;
+ }
+
+ std::cout << boost::format("\r-- Reading %s FPGA image: 100%% (%d/%d sectors)")
+ % session.fpga_type
+ % sectors
+ % sectors
+ << std::endl;
+
+ // Cleanup
+ image.close();
+ flags = (X300_FPGA_READ_FLAGS_CLEANUP | X300_FPGA_READ_FLAGS_ACK);
+ pkt_out.sector = pkt_out.index = pkt_out.size = 0;
+ memset(pkt_out.data8, 0, X300_PACKET_SIZE_BYTES);
+ std::cout << "-- Finalizing image read for verification..." << std::flush;
+ len = x300_send_and_recv(session.read_xport, flags, &pkt_out, session.data_in);
+ if(len == 0){
+ std::cout << "failed." << std::endl;
+ throw uhd::runtime_error("Timed out waiting for reply from device.");
+ }
+ else if((ntohl(pkt_in->flags) & X300_FPGA_READ_FLAGS_ERROR)){
+ std::cout << "failed." << std::endl;
+ throw uhd::runtime_error("Device reported an error during cleanup.");
+ }
+ else std::cout << "successful image read." << std::endl;
+}
+
static void x300_pcie_load(x300_session_t &session){
std::cout << boost::format("\r-- Loading %s FPGA image (this will take 5-10 minutes)...")
@@ -389,13 +580,15 @@ static void x300_pcie_load(x300_session_t &session){
static bool x300_image_loader(const image_loader::image_loader_args_t &image_loader_args){
// See if any X3x0 with the given args is found
device_addrs_t devs = x300_find(image_loader_args.args);
- if(devs.size() == 0 or !image_loader_args.load_fpga) return false;
+
+ if (devs.size() == 0) return false;
x300_session_t session;
x300_setup_session(session,
image_loader_args.args,
- image_loader_args.fpga_path
- );
+ image_loader_args.fpga_path,
+ image_loader_args.out_path);
+
if(!session.found) return false;
std::cout << boost::format("Unit: USRP %s (%s, %s)\nFPGA Image: %s\n")
@@ -404,8 +597,17 @@ static bool x300_image_loader(const image_loader::image_loader_args_t &image_loa
% session.dev_addr[session.ethernet ? "addr" : "resource"]
% session.filepath;
- if(session.ethernet) x300_ethernet_load(session);
- else x300_pcie_load(session);
+ // Download the FPGA image to a file
+ if(image_loader_args.download) {
+ std::cout << "Attempting to download the FPGA image ..." << std::endl;
+ x300_ethernet_read(session);
+ }
+
+ if (not image_loader_args.load_fpga) return true;
+
+ if (session.ethernet) x300_ethernet_load(session);
+ else x300_pcie_load(session);
+
return true;
}
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp
index 84087c6f1..1e22f7fb7 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -23,12 +23,11 @@
#include <boost/algorithm/string.hpp>
#include <boost/asio.hpp>
#include <uhd/utils/static.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/safe_call.hpp>
#include <uhd/usrp/subdev_spec.hpp>
#include <uhd/transport/if_addrs.hpp>
-#include <boost/foreach.hpp>
#include <boost/bind.hpp>
#include <boost/make_shared.hpp>
#include <boost/functional/hash.hpp>
@@ -183,7 +182,7 @@ static device_addrs_t x300_find_pcie(const device_addr_t &hint, bool explicit_qu
nirio_status status = niusrprio_session::enumerate(rpc_port_name, dev_info_vtr);
if (explicit_query) nirio_status_to_exception(status, "x300_find_pcie: Error enumerating NI-RIO devices.");
- BOOST_FOREACH(niusrprio_session::device_info &dev_info, dev_info_vtr)
+ for(niusrprio_session::device_info &dev_info: dev_info_vtr)
{
device_addr_t new_addr;
new_addr["type"] = "x300";
@@ -278,7 +277,7 @@ device_addrs_t x300_find(const device_addr_t &hint_)
{
device_addrs_t found_devices;
std::string error_msg;
- BOOST_FOREACH(const device_addr_t &hint_i, hints)
+ for(const device_addr_t &hint_i: hints)
{
device_addrs_t found_devices_i = x300_find(hint_i);
if (found_devices_i.size() != 1) error_msg += str(boost::format(
@@ -310,11 +309,11 @@ device_addrs_t x300_find(const device_addr_t &hint_)
}
catch(const std::exception &ex)
{
- UHD_MSG(error) << "X300 Network discovery error " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("X300") << "X300 Network discovery error " << ex.what() ;
}
catch(...)
{
- UHD_MSG(error) << "X300 Network discovery unknown error " << std::endl;
+ UHD_LOGGER_ERROR("X300") << "X300 Network discovery unknown error " ;
}
return reply_addrs;
}
@@ -322,7 +321,7 @@ device_addrs_t x300_find(const device_addr_t &hint_)
if (!hint.has_key("resource"))
{
//otherwise, no address was specified, send a broadcast on each interface
- BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs())
+ for(const if_addrs_t &if_addrs: get_if_addrs())
{
//avoid the loopback device
if (if_addrs.inet == asio::ip::address_v4::loopback().to_string()) continue;
@@ -372,7 +371,7 @@ UHD_STATIC_BLOCK(register_x300_device)
static void x300_load_fw(wb_iface::sptr fw_reg_ctrl, const std::string &file_name)
{
- UHD_MSG(status) << "Loading firmware " << file_name << std::flush;
+ UHD_LOGGER_INFO("X300") << "Loading firmware " << file_name;
//load file into memory
std::ifstream fw_file(file_name.c_str());
@@ -387,28 +386,52 @@ static void x300_load_fw(wb_iface::sptr fw_reg_ctrl, const std::string &file_nam
//@TODO: FIXME: Since x300_ctrl_iface acks each write and traps exceptions, the first try for the last word
// written will print an error because it triggers a FW reload and fails to reply.
fw_reg_ctrl->poke32(SR_ADDR(BOOT_LDR_BASE, BL_DATA), uhd::byteswap(fw_file_buff[i/sizeof(uint32_t)]));
- if ((i & 0x1fff) == 0) UHD_MSG(status) << "." << std::flush;
}
//Wait for fimrware to reboot. 3s is an upper bound
boost::this_thread::sleep(boost::posix_time::milliseconds(3000));
- UHD_MSG(status) << " done!" << std::endl;
+ UHD_LOGGER_INFO("X300") << "Firmware loaded!" ;
}
-x300_impl::x300_impl(const uhd::device_addr_t &dev_addr)
+x300_impl::x300_impl(const uhd::device_addr_t &dev_addr)
: device3_impl()
, _sid_framer(0)
{
- UHD_MSG(status) << "X300 initialization sequence..." << std::endl;
+ UHD_LOGGER_INFO("X300") << "X300 initialization sequence...";
_ignore_cal_file = dev_addr.has_key("ignore-cal-file");
_tree->create<std::string>("/name").set("X-Series Device");
const device_addrs_t device_args = separate_device_addr(dev_addr);
_mb.resize(device_args.size());
- for (size_t i = 0; i < device_args.size(); i++)
+
+ // Serialize the initialization process
+ if (dev_addr.has_key("serialize_init") or device_args.size() == 1) {
+ for (size_t i = 0; i < device_args.size(); i++)
+ {
+ this->setup_mb(i, device_args[i]);
+ }
+ return;
+ }
+
+
+ // Initialize groups of USRPs in parallel
+ size_t total_usrps = device_args.size();
+ size_t num_usrps = 0;
+ while (num_usrps < total_usrps)
{
- this->setup_mb(i, device_args[i]);
+ size_t init_usrps = std::min(total_usrps - num_usrps, X300_MAX_INIT_THREADS);
+ boost::thread_group setup_threads;
+ for (size_t i = 0; i < init_usrps; i++)
+ {
+ size_t index = num_usrps + i;
+ setup_threads.create_thread(
+ boost::bind(&x300_impl::setup_mb, this, index, device_args[index])
+ );
+ }
+ setup_threads.join_all();
+ num_usrps += init_usrps;
}
+
}
void x300_impl::mboard_members_t::discover_eth(
@@ -426,15 +449,15 @@ void x300_impl::mboard_members_t::discover_eth(
// Show a warning if there exists duplicate addresses in the mboard eeprom
if (std::find(mb_eeprom_addrs.begin(), mb_eeprom_addrs.end(), mb_eeprom[key]) != mb_eeprom_addrs.end()) {
- UHD_MSG(warning) << str(boost::format(
+ UHD_LOGGER_WARNING("X300") << str(boost::format(
"Duplicate IP address %s found in mboard EEPROM. "
"Device may not function properly.\nView and reprogram the values "
- "using the usrp_burn_mb_eeprom utility.\n") % mb_eeprom[key]);
+ "using the usrp_burn_mb_eeprom utility.") % mb_eeprom[key]);
}
mb_eeprom_addrs.push_back(mb_eeprom[key]);
}
- BOOST_FOREACH(const std::string& addr, ip_addrs) {
+ for(const std::string& addr: ip_addrs) {
x300_eth_conn_t conn_iface;
conn_iface.addr = addr;
conn_iface.type = X300_IFACE_NONE;
@@ -456,7 +479,7 @@ void x300_impl::mboard_members_t::discover_eth(
// Check default IP addresses if we couldn't
// determine the IP from the mboard eeprom
if (conn_iface.type == X300_IFACE_NONE) {
- UHD_MSG(warning) << str(boost::format(
+ UHD_LOGGER_WARNING("X300") << str(boost::format(
"Address %s not found in mboard EEPROM. Address may be wrong or "
"the EEPROM may be corrupt.\n Attempting to continue with default "
"IP addresses.\n") % conn_iface.addr
@@ -515,10 +538,18 @@ void x300_impl::mboard_members_t::discover_eth(
void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
{
- const fs_path mb_path = "/mboards/"+boost::lexical_cast<std::string>(mb_i);
+ const fs_path mb_path = fs_path("/mboards") / mb_i;
mboard_members_t &mb = _mb[mb_i];
mb.initialization_done = false;
+ const std::string thread_id(
+ boost::lexical_cast<std::string>(boost::this_thread::get_id())
+ );
+ const std::string thread_msg(
+ "Thread ID " + thread_id + " for motherboard "
+ + std::to_string(mb_i)
+ );
+
std::vector<std::string> eth_addrs;
// Not choosing eth0 based on resource might cause user issues
std::string eth0_addr = dev_addr.has_key("resource") ? dev_addr["resource"] : dev_addr["addr"];
@@ -552,7 +583,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
if (dev_addr.has_key("niusrpriorpc_port")) {
rpc_port_name = dev_addr["niusrpriorpc_port"];
}
- UHD_MSG(status) << boost::format("Connecting to niusrpriorpc at localhost:%s...\n") % rpc_port_name;
+ UHD_LOGGER_INFO("X300") << boost::format("Connecting to niusrpriorpc at localhost:%s...") % rpc_port_name;
//Instantiate the correct lvbitx object
nifpga_lvbitx::sptr lvbitx;
@@ -569,7 +600,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
drivers have loaded successfully.");
}
//Load the lvbitx onto the device
- UHD_MSG(status) << boost::format("Using LVBITX bitfile %s...\n") % lvbitx->get_bitfile_path();
+ UHD_LOGGER_INFO("X300") << boost::format("Using LVBITX bitfile %s...") % lvbitx->get_bitfile_path();
mb.rio_fpga_interface.reset(new niusrprio_session(dev_addr["resource"], rpc_port_name));
nirio_status_chain(mb.rio_fpga_interface->open(lvbitx, dev_addr.has_key("download-fpga")), status);
nirio_status_to_exception(status, "x300_impl: Could not initialize RIO session.");
@@ -583,7 +614,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_PCIE);
}
- BOOST_FOREACH(const std::string &key, dev_addr.keys())
+ for(const std::string &key: dev_addr.keys())
{
if (key.find("recv") != std::string::npos) mb.recv_args[key] = dev_addr[key];
if (key.find("send") != std::string::npos) mb.send_args[key] = dev_addr[key];
@@ -642,33 +673,33 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
);
}
} catch(std::exception &e) {
- UHD_MSG(error) << e.what() << std::endl;
+ UHD_LOGGER_ERROR("X300") << e.what() ;
}
if ((mb.recv_args.has_key("recv_frame_size"))
&& (req_max_frame_size.recv_frame_size > _max_frame_sizes.recv_frame_size)) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("X300")
<< boost::format("You requested a receive frame size of (%lu) but your NIC's max frame size is (%lu).")
% req_max_frame_size.recv_frame_size
% _max_frame_sizes.recv_frame_size
- << std::endl
+
<< boost::format("Please verify your NIC's MTU setting using '%s' or set the recv_frame_size argument appropriately.")
- % mtu_tool << std::endl
+ % mtu_tool
<< "UHD will use the auto-detected max frame size for this connection."
- << std::endl;
+ ;
}
if ((mb.recv_args.has_key("send_frame_size"))
&& (req_max_frame_size.send_frame_size > _max_frame_sizes.send_frame_size)) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("X300")
<< boost::format("You requested a send frame size of (%lu) but your NIC's max frame size is (%lu).")
% req_max_frame_size.send_frame_size
% _max_frame_sizes.send_frame_size
- << std::endl
+
<< boost::format("Please verify your NIC's MTU setting using '%s' or set the send_frame_size argument appropriately.")
- % mtu_tool << std::endl
+ % mtu_tool
<< "UHD will use the auto-detected max frame size for this connection."
- << std::endl;
+ ;
}
_tree->create<size_t>(mb_path / "mtu/recv").set(_max_frame_sizes.recv_frame_size);
@@ -677,7 +708,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
}
//create basic communication
- UHD_MSG(status) << "Setup basic communication..." << std::endl;
+ UHD_LOGGER_INFO("X300") << "Setup basic communication...";
if (mb.xport_path == "nirio") {
boost::mutex::scoped_lock(pcie_zpu_iface_registry_mutex);
if (get_pcie_zpu_iface_registry().has_key(mb.get_pri_eth().addr)) {
@@ -695,7 +726,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
if (not try_to_claim(mb.zpu_ctrl)) {
throw uhd::runtime_error("Failed to claim device");
}
- mb.claimer_task = uhd::task::make(boost::bind(&x300_impl::claimer_loop, this, mb.zpu_ctrl));
+ mb.claimer_task = uhd::task::make(boost::bind(&x300_impl::claimer_loop, this, mb.zpu_ctrl), "x300_claimer");
//extract the FW path for the X300
//and live load fw over ethernet link
@@ -737,11 +768,10 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
const uint32_t nbor_addr = mb.zpu_ctrl->peek32(SR_ADDR(routes_addr, i*2+1));
if (node_addr != 0 and nbor_addr != 0)
{
- UHD_MSG(status) << boost::format("%u: %s -> %s")
+ UHD_LOGGER_INFO("X300") << boost::format("%u: %s -> %s")
% i
% asio::ip::address_v4(node_addr).to_string()
- % asio::ip::address_v4(nbor_addr).to_string()
- << std::endl;
+ % asio::ip::address_v4(nbor_addr).to_string();
}
}
*/
@@ -749,11 +779,11 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
////////////////////////////////////////////////////////////////////
// setup the mboard eeprom
////////////////////////////////////////////////////////////////////
- UHD_MSG(status) << "Loading values from EEPROM..." << std::endl;
+ UHD_LOGGER_INFO("X300") << "Loading values from EEPROM...";
x300_mb_eeprom_iface::sptr eeprom16 = x300_mb_eeprom_iface::make(mb.zpu_ctrl, mb.zpu_i2c);
if (dev_addr.has_key("blank_eeprom"))
{
- UHD_MSG(warning) << "Obliterating the motherboard EEPROM..." << std::endl;
+ UHD_LOGGER_WARNING("X300") << "Obliterating the motherboard EEPROM..." ;
eeprom16->write_eeprom(0x50, 0, byte_vector_t(256, 0xff));
}
const mboard_eeprom_t mb_eeprom(*eeprom16, "X300");
@@ -763,9 +793,9 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
bool recover_mb_eeprom = dev_addr.has_key("recover_mb_eeprom");
if (recover_mb_eeprom) {
- UHD_MSG(warning) << "UHD is operating in EEPROM Recovery Mode which disables hardware version "
+ UHD_LOGGER_WARNING("X300") << "UHD is operating in EEPROM Recovery Mode which disables hardware version "
"checks.\nOperating in this mode may cause hardware damage and unstable "
- "radio performance!"<< std::endl;
+ "radio performance!";
}
////////////////////////////////////////////////////////////////////
@@ -845,7 +875,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
////////////////////////////////////////////////////////////////////
// create clock control objects
////////////////////////////////////////////////////////////////////
- UHD_MSG(status) << "Setup RF frontend clocking..." << std::endl;
+ UHD_LOGGER_INFO("X300") << "Setup RF frontend clocking...";
//Initialize clock control registers. NOTE: This does not configure the LMK yet.
mb.clock = x300_clock_ctrl::make(mb.zpu_spi,
@@ -867,8 +897,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
.set_publisher(boost::bind(&x300_clock_ctrl::get_master_clock_rate, mb.clock))
;
- UHD_MSG(status) << "Radio 1x clock:" << (mb.clock->get_master_clock_rate()/1e6)
- << std::endl;
+ UHD_LOGGER_INFO("X300") << "Radio 1x clock:" << (mb.clock->get_master_clock_rate()/1e6);
////////////////////////////////////////////////////////////////////
// Create the GPSDO control
@@ -878,18 +907,18 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
//otherwise if not disabled, look for the internal GPSDO
if (mb.zpu_ctrl->peek32(SR_ADDR(X300_FW_SHMEM_BASE, X300_FW_SHMEM_GPSDO_STATUS)) != dont_look_for_gpsdo)
{
- UHD_MSG(status) << "Detecting internal GPSDO.... " << std::flush;
+ UHD_LOGGER_INFO("X300") << "Detecting internal GPSDO.... ";
try
{
mb.gps = gps_ctrl::make(x300_make_uart_iface(mb.zpu_ctrl));
}
catch(std::exception &e)
{
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("X300") << "An error occurred making GPSDO control: " << e.what() ;
}
if (mb.gps and mb.gps->gps_detected())
{
- BOOST_FOREACH(const std::string &name, mb.gps->get_sensors())
+ for(const std::string &name: mb.gps->get_sensors())
{
_tree->create<sensor_value_t>(mb_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, mb.gps, name));
@@ -902,14 +931,6 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
}
////////////////////////////////////////////////////////////////////
- //clear router?
- ////////////////////////////////////////////////////////////////////
- for (size_t i = 0; i < 512; i++) {
- mb.zpu_ctrl->poke32(SR_ADDR(SETXB_BASE, i), 0);
- }
-
-
- ////////////////////////////////////////////////////////////////////
// setup time sources and properties
////////////////////////////////////////////////////////////////////
_tree->create<std::string>(mb_path / "time_source" / "value")
@@ -966,8 +987,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
n_rfnoc_blocks,
X300_XB_DST_PCI + 1, /* base port */
uhd::sid_t(X300_SRC_ADDR0, 0, X300_DST_ADDR + mb_i, 0),
- dev_addr,
- mb.if_pkt_is_big_endian ? ENDIANNESS_BIG : ENDIANNESS_LITTLE
+ dev_addr
);
//////////////// RFNOC /////////////////
@@ -977,11 +997,11 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
find_blocks<rfnoc::x300_radio_ctrl_impl>(radio_blockid_hint);
if (not radio_ids.empty()) {
if (radio_ids.size() > 2) {
- UHD_MSG(warning) << "Too many Radio Blocks found. Using only the first two." << std::endl;
+ UHD_LOGGER_WARNING("X300") << "Too many Radio Blocks found. Using only the first two." ;
radio_ids.resize(2);
}
- BOOST_FOREACH(const rfnoc::block_id_t &id, radio_ids) {
+ for(const rfnoc::block_id_t &id: radio_ids) {
rfnoc::x300_radio_ctrl_impl::sptr radio(get_block_ctrl<rfnoc::x300_radio_ctrl_impl>(id));
mb.radios.push_back(radio);
radio->setup_radio(
@@ -1019,7 +1039,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
}
} else {
- UHD_MSG(status) << "No Radio Block found. Assuming radio-less operation." << std::endl;
+ UHD_LOGGER_INFO("X300") << "No Radio Block found. Assuming radio-less operation.";
} /* end of radio block(s) initialization */
mb.initialization_done = true;
@@ -1029,7 +1049,7 @@ x300_impl::~x300_impl(void)
{
try
{
- BOOST_FOREACH(mboard_members_t &mb, _mb)
+ for(mboard_members_t &mb: _mb)
{
//kill the claimer task and unclaim the device
mb.claimer_task.reset();
@@ -1065,8 +1085,8 @@ uint32_t x300_impl::mboard_members_t::allocate_pcie_dma_chan(const uhd::sid_t &t
if (_dma_chan_pool.count(raw_sid) == 0) {
_dma_chan_pool[raw_sid] = _dma_chan_pool.size() + FIRST_DATA_CHANNEL;
- UHD_LOG << "[X300] Assigning PCIe DMA channel " << _dma_chan_pool[raw_sid]
- << " to SID " << tx_sid.to_pp_string_hex() << std::endl;
+ UHD_LOGGER_DEBUG("X300") << "[X300] Assigning PCIe DMA channel " << _dma_chan_pool[raw_sid]
+ << " to SID " << tx_sid.to_pp_string_hex() ;
}
if (_dma_chan_pool.size() + FIRST_DATA_CHANNEL > X300_PCIE_MAX_CHANNELS) {
@@ -1109,6 +1129,7 @@ uhd::both_xports_t x300_impl::make_transport(
zero_copy_xport_params default_buff_args;
both_xports_t xports;
+ xports.endianness = mb.if_pkt_is_big_endian ? ENDIANNESS_BIG : ENDIANNESS_LITTLE;
if (mb.xport_path == "nirio") {
xports.send_sid = this->allocate_sid(mb, address, X300_SRC_ADDR0, X300_XB_DST_PCI);
xports.recv_sid = xports.send_sid.reversed();
@@ -1197,7 +1218,7 @@ uhd::both_xports_t x300_impl::make_transport(
* connection type.*/
size_t eth_data_rec_frame_size = 0;
- fs_path mboard_path = fs_path("/mboards/"+boost::lexical_cast<std::string>(mb_index) / "link_max_rate");
+ fs_path mboard_path = fs_path("/mboards") / mb_index / "link_max_rate";
if (mb.loaded_fpga_image == "HG") {
size_t max_link_rate = 0;
@@ -1228,23 +1249,23 @@ uhd::both_xports_t x300_impl::make_transport(
/* Print a warning if the system's max available frame size is less than the most optimal
* frame size for this type of connection. */
if (_max_frame_sizes.send_frame_size < eth_data_rec_frame_size) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("X300")
<< boost::format("For this connection, UHD recommends a send frame size of at least %lu for best\nperformance, but your system's MTU will only allow %lu.")
% eth_data_rec_frame_size
% _max_frame_sizes.send_frame_size
- << std::endl
+
<< "This will negatively impact your maximum achievable sample rate."
- << std::endl;
+ ;
}
if (_max_frame_sizes.recv_frame_size < eth_data_rec_frame_size) {
- UHD_MSG(warning)
+ UHD_LOGGER_WARNING("X300")
<< boost::format("For this connection, UHD recommends a receive frame size of at least %lu for best\nperformance, but your system's MTU will only allow %lu.")
% eth_data_rec_frame_size
% _max_frame_sizes.recv_frame_size
- << std::endl
+
<< "This will negatively impact your maximum achievable sample rate."
- << std::endl;
+ ;
}
size_t system_max_send_frame_size = (size_t) _max_frame_sizes.send_frame_size;
@@ -1302,8 +1323,8 @@ uhd::both_xports_t x300_impl::make_transport(
//send a mini packet with SID into the ZPU
//ZPU will reprogram the ethernet framer
- UHD_LOG << "programming packet for new xport on "
- << interface_addr << " sid " << xports.send_sid << std::endl;
+ UHD_LOGGER_DEBUG("X300") << "programming packet for new xport on "
+ << interface_addr << " sid " << xports.send_sid ;
//YES, get a __send__ buffer from the __recv__ socket
//-- this is the only way to program the framer for recv:
managed_send_buffer::sptr buff = xports.recv->get_send_buff();
@@ -1313,7 +1334,7 @@ uhd::both_xports_t x300_impl::make_transport(
buff.reset();
//reprogram the ethernet dispatcher's udp port (should be safe to always set)
- UHD_LOG << "reprogram the ethernet dispatcher's udp port" << std::endl;
+ UHD_LOGGER_DEBUG("X300") << "reprogram the ethernet dispatcher's udp port" ;
mb.zpu_ctrl->poke32(SR_ADDR(SET0_BASE, (ZPU_SR_ETHINT0+8+3)), X300_VITA_UDP_PORT);
mb.zpu_ctrl->poke32(SR_ADDR(SET0_BASE, (ZPU_SR_ETHINT1+8+3)), X300_VITA_UDP_PORT);
@@ -1333,7 +1354,7 @@ uhd::sid_t x300_impl::allocate_sid(
) {
uhd::sid_t sid = address;
sid.set_src_addr(src_addr);
- sid.set_src_endpoint(_sid_framer);
+ sid.set_src_endpoint(_sid_framer++); //increment for next setup
// TODO Move all of this setup_mb()
// Program the X300 to recognise it's own local address.
@@ -1345,10 +1366,7 @@ uhd::sid_t x300_impl::allocate_sid(
// This type of packet does not match the XB_LOCAL address and is looked up in the lower half of the CAM
mb.zpu_ctrl->poke32(SR_ADDR(SETXB_BASE, 0 + src_addr), src_dst);
- UHD_LOG << "done router config for sid " << sid << std::endl;
-
- //increment for next setup
- _sid_framer++;
+ UHD_LOGGER_TRACE("X300") << "done router config for sid " << sid ;
return sid;
}
@@ -1402,8 +1420,8 @@ void x300_impl::update_clock_source(mboard_members_t &mb, const std::string &sou
throw uhd::runtime_error((boost::format("Reference Clock PLL failed to lock to %s source.") % source).str());
} else {
//TODO: Re-enable this warning when we figure out a reliable lock time
- //UHD_MSG(warning) << "Reference clock failed to lock to " + source + " during device initialization. " <<
- // "Check for the lock before operation or ignore this warning if using another clock source." << std::endl;
+ //UHD_LOGGER_WARNING("X300") << "Reference clock failed to lock to " + source + " during device initialization. " <<
+ // "Check for the lock before operation or ignore this warning if using another clock source." ;
}
}
}
@@ -1428,7 +1446,7 @@ void x300_impl::update_clock_source(mboard_members_t &mb, const std::string &sou
}
// Reset ADCs and DACs
- BOOST_FOREACH(rfnoc::x300_radio_ctrl_impl::sptr r, mb.radios) {
+ for(rfnoc::x300_radio_ctrl_impl::sptr r: mb.radios) {
r->reset_codec();
}
}
@@ -1460,7 +1478,7 @@ void x300_impl::update_time_source(mboard_members_t &mb, const std::string &sour
void x300_impl::sync_times(mboard_members_t &mb, const uhd::time_spec_t& t)
{
std::vector<rfnoc::block_id_t> radio_ids = find_blocks<rfnoc::x300_radio_ctrl_impl>("Radio");
- BOOST_FOREACH(const rfnoc::block_id_t &id, radio_ids) {
+ for(const rfnoc::block_id_t &id: radio_ids) {
get_block_ctrl<rfnoc::x300_radio_ctrl_impl>(id)->set_time_sync(t);
}
@@ -1621,7 +1639,7 @@ x300_impl::frame_size_t x300_impl::determine_max_frame_size(const std::string &a
size_t min_send_frame_size = sizeof(x300_mtu_t);
size_t max_send_frame_size = std::min(user_frame_size.send_frame_size, X300_10GE_DATA_FRAME_MAX_SIZE) & size_t(~3);
- UHD_MSG(status) << "Determining maximum frame size... ";
+ UHD_LOGGER_INFO("X300") << "Determining maximum frame size... ";
while (min_recv_frame_size < max_recv_frame_size)
{
size_t test_frame_size = (max_recv_frame_size/2 + min_recv_frame_size/2 + 3) & ~3;
@@ -1670,7 +1688,7 @@ x300_impl::frame_size_t x300_impl::determine_max_frame_size(const std::string &a
// of the recv and send frame sizes.
frame_size.recv_frame_size = std::min(min_recv_frame_size, min_send_frame_size);
frame_size.send_frame_size = std::min(min_recv_frame_size, min_send_frame_size);
- UHD_MSG(status) << frame_size.send_frame_size << " bytes." << std::endl;
+ UHD_LOGGER_INFO("X300") << "Maximum frame size: " << frame_size.send_frame_size << " bytes.";
return frame_size;
}
@@ -1847,7 +1865,7 @@ x300_impl::x300_mboard_t x300_impl::get_mb_type_from_eeprom(const uhd::usrp::mbo
case X310_2955R_PCIE_SSID_ADC_18:
mb_type = USRP_X310_MB; break;
default:
- UHD_MSG(warning) << "X300 unknown product code in EEPROM: " << product_num << std::endl;
+ UHD_LOGGER_WARNING("X300") << "X300 unknown product code in EEPROM: " << product_num ;
mb_type = UNKNOWN; break;
}
}
diff --git a/host/lib/usrp/x300/x300_impl.hpp b/host/lib/usrp/x300/x300_impl.hpp
index 982369396..7186e5f4f 100644
--- a/host/lib/usrp/x300/x300_impl.hpp
+++ b/host/lib/usrp/x300/x300_impl.hpp
@@ -39,6 +39,7 @@
#include <uhd/rfnoc/block_ctrl.hpp>
///////////// RFNOC /////////////////////
#include <boost/dynamic_bitset.hpp>
+#include <atomic>
static const std::string X300_FW_FILE_NAME = "usrp_x300_fw.bin";
static const std::string X300_DEFAULT_CLOCK_SOURCE = "internal";
@@ -77,6 +78,9 @@ static const size_t X300_ETH_MSG_NUM_FRAMES = 64;
static const size_t X300_ETH_DATA_NUM_FRAMES = 32;
static const double X300_DEFAULT_SYSREF_RATE = 10e6;
+// Limit the number of initialization threads
+static const size_t X300_MAX_INIT_THREADS = 10;
+
static const size_t X300_MAX_RATE_PCIE = 800000000; // bytes/s
static const size_t X300_MAX_RATE_10GIGE = (size_t)( // bytes/s
10e9 / 8 * // wire speed multiplied by percentage of packets that is sample data
@@ -220,7 +224,7 @@ private:
//task for periodically reclaiming the device from others
void claimer_loop(uhd::wb_iface::sptr);
- size_t _sid_framer;
+ std::atomic<size_t> _sid_framer;
uhd::sid_t allocate_sid(
mboard_members_t &mb,
@@ -291,9 +295,6 @@ private:
/// More IO stuff
uhd::device_addr_t get_tx_hints(size_t mb_index);
uhd::device_addr_t get_rx_hints(size_t mb_index);
- uhd::endianness_t get_transport_endianness(size_t mb_index) {
- return _mb[mb_index].if_pkt_is_big_endian ? uhd::ENDIANNESS_BIG : uhd::ENDIANNESS_LITTLE;
- };
void post_streamer_hooks(uhd::direction_t dir);
};
diff --git a/host/lib/usrp/x300/x300_io_impl.cpp b/host/lib/usrp/x300/x300_io_impl.cpp
index 1584cee24..35d6f74f3 100644
--- a/host/lib/usrp/x300/x300_io_impl.cpp
+++ b/host/lib/usrp/x300/x300_io_impl.cpp
@@ -25,8 +25,6 @@
#include <boost/bind.hpp>
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
-#include <boost/foreach.hpp>
#include <boost/make_shared.hpp>
using namespace uhd;
@@ -48,10 +46,10 @@ device_addr_t x300_impl::get_rx_hints(size_t mb_index)
//For nirio, the buffer size is not configurable by the user
#if defined(UHD_PLATFORM_MACOS) || defined(UHD_PLATFORM_BSD)
//limit buffer resize on macos or it will error
- rx_hints["recv_buff_size"] = boost::lexical_cast<std::string>(X300_RX_SW_BUFF_SIZE_ETH_MACOS);
+ rx_hints["recv_buff_size"] = std::to_string(X300_RX_SW_BUFF_SIZE_ETH_MACOS);
#elif defined(UHD_PLATFORM_LINUX) || defined(UHD_PLATFORM_WIN32)
//set to half-a-second of buffering at max rate
- rx_hints["recv_buff_size"] = boost::lexical_cast<std::string>(X300_RX_SW_BUFF_SIZE_ETH);
+ rx_hints["recv_buff_size"] = std::to_string(X300_RX_SW_BUFF_SIZE_ETH);
#endif
}
}
@@ -73,7 +71,7 @@ void x300_impl::post_streamer_hooks(direction_t dir)
// Loop through all tx streamers. Find all radios connected to one
// streamer. Sync those.
- BOOST_FOREACH(const boost::weak_ptr<uhd::tx_streamer> &streamer_w, _tx_streamers.vals()) {
+ for(const boost::weak_ptr<uhd::tx_streamer> &streamer_w: _tx_streamers.vals()) {
const boost::shared_ptr<sph::send_packet_streamer> streamer =
boost::dynamic_pointer_cast<sph::send_packet_streamer>(streamer_w.lock());
if (not streamer) {
@@ -83,7 +81,7 @@ void x300_impl::post_streamer_hooks(direction_t dir)
std::vector<rfnoc::x300_radio_ctrl_impl::sptr> radio_ctrl_blks =
streamer->get_terminator()->find_downstream_node<rfnoc::x300_radio_ctrl_impl>();
try {
- //UHD_MSG(status) << "[X300] syncing " << radio_ctrl_blks.size() << " radios " << std::endl;
+ //UHD_LOGGER_INFO("X300") << "[X300] syncing " << radio_ctrl_blks.size() << " radios " ;
rfnoc::x300_radio_ctrl_impl::synchronize_dacs(radio_ctrl_blks);
}
catch(const uhd::io_error &ex) {
diff --git a/host/lib/usrp/x300/x300_mb_eeprom.cpp b/host/lib/usrp/x300/x300_mb_eeprom.cpp
index e39b36af8..084685991 100644
--- a/host/lib/usrp/x300/x300_mb_eeprom.cpp
+++ b/host/lib/usrp/x300/x300_mb_eeprom.cpp
@@ -33,7 +33,7 @@
#include "x300_impl.hpp"
#include <uhd/exception.hpp>
#include <uhd/utils/platform.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/byteswap.hpp>
#include <boost/thread.hpp>
diff --git a/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp b/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
index a3bc2e691..1a37cbdd1 100644
--- a/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
+++ b/host/lib/usrp/x300/x300_radio_ctrl_impl.cpp
@@ -22,7 +22,7 @@
#include "gpio_atr_3000.hpp"
#include "apply_corrections.hpp"
#include <uhd/usrp/dboard_eeprom.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/usrp/dboard_iface.hpp>
#include <uhd/rfnoc/node_ctrl_base.hpp>
#include <uhd/transport/chdr.hpp>
@@ -30,6 +30,7 @@
#include <boost/algorithm/string.hpp>
#include <boost/make_shared.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
+#include <boost/assign/list_of.hpp>
using namespace uhd;
using namespace uhd::usrp;
@@ -44,7 +45,7 @@ static const size_t IO_MASTER_RADIO = 0;
UHD_RFNOC_RADIO_BLOCK_CONSTRUCTOR(x300_radio_ctrl)
, _ignore_cal_file(false)
{
- UHD_RFNOC_BLOCK_TRACE() << "x300_radio_ctrl_impl::ctor() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "x300_radio_ctrl_impl::ctor() " ;
////////////////////////////////////////////////////////////////////
// Set up basic info
@@ -82,7 +83,7 @@ UHD_RFNOC_RADIO_BLOCK_CONSTRUCTOR(x300_radio_ctrl)
if (_radio_type==PRIMARY) {
_fp_gpio = gpio_atr::gpio_atr_3000::make(ctrl, regs::sr_addr(regs::FP_GPIO), regs::RB_FP_GPIO);
- BOOST_FOREACH(const gpio_atr::gpio_attr_map_t::value_type attr, gpio_atr::gpio_attr_map) {
+ for(const gpio_atr::gpio_attr_map_t::value_type attr: gpio_atr::gpio_attr_map) {
_tree->create<uint32_t>(fs_path("gpio") / "FP0" / attr.second)
.set(0)
.add_coerced_subscriber(boost::bind(&gpio_atr::gpio_atr_3000::set_gpio_attr, _fp_gpio, attr.first, _1));
@@ -149,7 +150,7 @@ x300_radio_ctrl_impl::~x300_radio_ctrl_impl()
_tree->remove(_root_path / "rx_fe_corrections");
_tree->remove(_root_path / "tx_fe_corrections");
if (_radio_type==PRIMARY) {
- BOOST_FOREACH(const gpio_atr::gpio_attr_map_t::value_type attr, gpio_atr::gpio_attr_map) {
+ for(const gpio_atr::gpio_attr_map_t::value_type attr: gpio_atr::gpio_attr_map) {
_tree->remove(fs_path("gpio") / "FP0" / attr.second);
}
_tree->remove(fs_path("gpio") / "FP0" / "READBACK");
@@ -171,7 +172,7 @@ double x300_radio_ctrl_impl::set_rate(double rate)
{
const double actual_rate = get_rate();
if (not uhd::math::frequencies_are_equal(rate, actual_rate)) {
- UHD_MSG(warning) << "[X300 Radio] Requesting invalid sampling rate from device: " << rate/1e6 << " MHz. Actual rate is: " << actual_rate/1e6 << " MHz." << std::endl;
+ UHD_LOGGER_WARNING("X300 RADIO") << "Requesting invalid sampling rate from device: " << rate/1e6 << " MHz. Actual rate is: " << actual_rate/1e6 << " MHz." ;
}
// On X3x0, tick rate can't actually be changed at runtime
return actual_rate;
@@ -228,6 +229,20 @@ double x300_radio_ctrl_impl::get_rx_frequency(const size_t chan)
).get();
}
+double x300_radio_ctrl_impl::set_rx_bandwidth(const double bandwidth, const size_t chan)
+{
+ return _tree->access<double>(
+ fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name / "bandwidth" / "value")
+ ).set(bandwidth).get();
+}
+
+double x300_radio_ctrl_impl::get_rx_bandwidth(const size_t chan)
+{
+ return _tree->access<double>(
+ fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name / "bandwidth" / "value")
+ ).get();
+}
+
double x300_radio_ctrl_impl::set_tx_gain(const double gain, const size_t chan)
{
//TODO: This is extremely hacky!
@@ -238,7 +253,7 @@ double x300_radio_ctrl_impl::set_tx_gain(const double gain, const size_t chan)
radio_ctrl_impl::set_tx_gain(actual_gain, chan);
return gain;
} else {
- UHD_MSG(warning) << "set_tx_gain: could not apply gain for this daughterboard.";
+ UHD_LOGGER_WARNING("X300 RADIO") << "set_tx_gain: could not apply gain for this daughterboard.";
radio_ctrl_impl::set_tx_gain(0.0, chan);
return 0.0;
}
@@ -254,19 +269,209 @@ double x300_radio_ctrl_impl::set_rx_gain(const double gain, const size_t chan)
radio_ctrl_impl::set_rx_gain(actual_gain, chan);
return gain;
} else {
- UHD_MSG(warning) << "set_rx_gain: could not apply gain for this daughterboard.";
+ UHD_LOGGER_WARNING("X300 RADIO") << "set_rx_gain: could not apply gain for this daughterboard.";
radio_ctrl_impl::set_tx_gain(0.0, chan);
return 0.0;
}
}
+std::vector<std::string> x300_radio_ctrl_impl::get_rx_lo_names(const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ std::vector<std::string> lo_names;
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ for(const std::string &name: _tree->list(rx_fe_fe_root / "los")) {
+ lo_names.push_back(name);
+ }
+ }
+ return lo_names;
+}
+
+std::vector<std::string> x300_radio_ctrl_impl::get_rx_lo_sources(const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ if (_tree->exists(rx_fe_fe_root / "los" / ALL_LOS)) {
+ //Special value ALL_LOS support atomically sets the source for all LOs
+ return _tree->access< std::vector<std::string> >(rx_fe_fe_root / "los" / ALL_LOS / "source" / "options").get();
+ } else {
+ return std::vector<std::string>();
+ }
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ return _tree->access< std::vector<std::string> >(rx_fe_fe_root / "los" / name / "source" / "options").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ // If the daughterboard doesn't expose it's LO(s) then it can only be internal
+ return std::vector<std::string> (1, "internal");
+ }
+}
+
+void x300_radio_ctrl_impl::set_rx_lo_source(const std::string &src, const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ if (_tree->exists(rx_fe_fe_root / "los" / ALL_LOS)) {
+ //Special value ALL_LOS support atomically sets the source for all LOs
+ _tree->access<std::string>(rx_fe_fe_root / "los" / ALL_LOS / "source" / "value").set(src);
+ } else {
+ for(const std::string &n: _tree->list(rx_fe_fe_root / "los")) {
+ this->set_rx_lo_source(src, n, chan);
+ }
+ }
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ _tree->access<std::string>(rx_fe_fe_root / "los" / name / "source" / "value").set(src);
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ throw uhd::runtime_error("This device does not support manual configuration of LOs");
+ }
+}
+
+const std::string x300_radio_ctrl_impl::get_rx_lo_source(const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ //Special value ALL_LOS support atomically sets the source for all LOs
+ return _tree->access<std::string>(rx_fe_fe_root / "los" / ALL_LOS / "source" / "value").get();
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ return _tree->access<std::string>(rx_fe_fe_root / "los" / name / "source" / "value").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ // If the daughterboard doesn't expose it's LO(s) then it can only be internal
+ return "internal";
+ }
+}
+
+void x300_radio_ctrl_impl::set_rx_lo_export_enabled(bool enabled, const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ if (_tree->exists(rx_fe_fe_root / "los" / ALL_LOS)) {
+ //Special value ALL_LOS support atomically sets the source for all LOs
+ _tree->access<bool>(rx_fe_fe_root / "los" / ALL_LOS / "export").set(enabled);
+ } else {
+ for(const std::string &n: _tree->list(rx_fe_fe_root / "los")) {
+ this->set_rx_lo_export_enabled(enabled, n, chan);
+ }
+ }
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ _tree->access<bool>(rx_fe_fe_root / "los" / name / "export").set(enabled);
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ throw uhd::runtime_error("This device does not support manual configuration of LOs");
+ }
+}
+
+bool x300_radio_ctrl_impl::get_rx_lo_export_enabled(const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ //Special value ALL_LOS support atomically sets the source for all LOs
+ return _tree->access<bool>(rx_fe_fe_root / "los" / ALL_LOS / "export").get();
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ return _tree->access<bool>(rx_fe_fe_root / "los" / name / "export").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ // If the daughterboard doesn't expose it's LO(s), assume it cannot export
+ return false;
+ }
+}
+
+double x300_radio_ctrl_impl::set_rx_lo_freq(double freq, const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ throw uhd::runtime_error("LO frequency must be set for each stage individually");
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ _tree->access<double>(rx_fe_fe_root / "los" / name / "freq" / "value").set(freq);
+ return _tree->access<double>(rx_fe_fe_root / "los" / name / "freq" / "value").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ throw uhd::runtime_error("This device does not support manual configuration of LOs");
+ }
+}
+
+double x300_radio_ctrl_impl::get_rx_lo_freq(const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ throw uhd::runtime_error("LO frequency must be retrieved for each stage individually");
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ return _tree->access<double>(rx_fe_fe_root / "los" / name / "freq" / "value").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ // Return actual RF frequency if the daughterboard doesn't expose it's LO(s)
+ return _tree->access<double>(rx_fe_fe_root / "freq" /" value").get();
+ }
+}
+
+freq_range_t x300_radio_ctrl_impl::get_rx_lo_freq_range(const std::string &name, const size_t chan)
+{
+ fs_path rx_fe_fe_root = fs_path("dboards" / _radio_slot / "rx_frontends" / _rx_fe_map.at(chan).db_fe_name);
+
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ if (name == ALL_LOS) {
+ throw uhd::runtime_error("LO frequency range must be retrieved for each stage individually");
+ } else {
+ if (_tree->exists(rx_fe_fe_root / "los")) {
+ return _tree->access<freq_range_t>(rx_fe_fe_root / "los" / name / "freq" / "range").get();
+ } else {
+ throw uhd::runtime_error("Could not find LO stage " + name);
+ }
+ }
+ } else {
+ // Return the actual RF range if the daughterboard doesn't expose it's LO(s)
+ return _tree->access<meta_range_t>(rx_fe_fe_root / "freq" / "range").get();
+ }
+}
+
template <typename map_type>
static size_t _get_chan_from_map(std::map<size_t, map_type> map, const std::string &fe)
{
- // TODO replace with 'auto' when possible
- typedef typename std::map<size_t, map_type>::iterator chan_iterator;
- for (chan_iterator it = map.begin(); it != map.end(); ++it) {
+ for (auto it = map.begin(); it != map.end(); ++it) {
if (it->second.db_fe_name == fe) {
return it->first;
}
@@ -318,6 +523,68 @@ double x300_radio_ctrl_impl::get_output_samp_rate(size_t chan)
return _rx_fe_map.at(chan).core->get_output_rate();
}
+std::vector<std::string> x300_radio_ctrl_impl::get_gpio_banks() const
+{
+ std::vector<std::string> banks = boost::assign::list_of("RX")("TX");
+ // These pairs are the same, but RXA/TXA are from pre-rfnoc era and are kept for backward compat:
+ banks.push_back("RX"+_radio_slot);
+ banks.push_back("TX"+_radio_slot);
+ if (_fp_gpio) {
+ banks.push_back("FP0");
+ }
+ return banks;
+}
+
+void x300_radio_ctrl_impl::set_gpio_attr(
+ const std::string &bank,
+ const std::string &attr,
+ const uint32_t value,
+ const uint32_t mask
+) {
+ if (bank == "FP0" and _fp_gpio) {
+ const uint32_t current = _tree->access<uint32_t>(fs_path("gpio") / bank / attr).get();
+ const uint32_t new_value = (current & ~mask) | (value & mask);
+ _tree->access<uint32_t>(fs_path("gpio") / bank / attr).set(new_value);
+ return;
+ }
+ if (bank.size() > 2 and bank[1] == 'X')
+ {
+ const std::string name = bank.substr(2);
+ const dboard_iface::unit_t unit = (bank[0] == 'R')? dboard_iface::UNIT_RX : dboard_iface::UNIT_TX;
+ dboard_iface::sptr iface = _tree->access<dboard_iface::sptr>(fs_path("dboards") / name / "iface").get();
+ if (attr == "CTRL") iface->set_pin_ctrl(unit, uint16_t(value), uint16_t(mask));
+ if (attr == "DDR") iface->set_gpio_ddr(unit, uint16_t(value), uint16_t(mask));
+ if (attr == "OUT") iface->set_gpio_out(unit, uint16_t(value), uint16_t(mask));
+ if (attr == "ATR_0X") iface->set_atr_reg(unit, gpio_atr::ATR_REG_IDLE, uint16_t(value), uint16_t(mask));
+ if (attr == "ATR_RX") iface->set_atr_reg(unit, gpio_atr::ATR_REG_RX_ONLY, uint16_t(value), uint16_t(mask));
+ if (attr == "ATR_TX") iface->set_atr_reg(unit, gpio_atr::ATR_REG_TX_ONLY, uint16_t(value), uint16_t(mask));
+ if (attr == "ATR_XX") iface->set_atr_reg(unit, gpio_atr::ATR_REG_FULL_DUPLEX, uint16_t(value), uint16_t(mask));
+ }
+}
+
+uint32_t x300_radio_ctrl_impl::get_gpio_attr(
+ const std::string &bank,
+ const std::string &attr
+) {
+ if (bank == "FP0" and _fp_gpio) {
+ return uint32_t(_tree->access<uint64_t>(fs_path("gpio") / bank / attr).get());
+ }
+ if (bank.size() > 2 and bank[1] == 'X') {
+ const std::string name = bank.substr(2);
+ const dboard_iface::unit_t unit = (bank[0] == 'R')? dboard_iface::UNIT_RX : dboard_iface::UNIT_TX;
+ dboard_iface::sptr iface = _tree->access<dboard_iface::sptr>(fs_path("dboards") / name / "iface").get();
+ if (attr == "CTRL") return iface->get_pin_ctrl(unit);
+ if (attr == "DDR") return iface->get_gpio_ddr(unit);
+ if (attr == "OUT") return iface->get_gpio_out(unit);
+ if (attr == "ATR_0X") return iface->get_atr_reg(unit, gpio_atr::ATR_REG_IDLE);
+ if (attr == "ATR_RX") return iface->get_atr_reg(unit, gpio_atr::ATR_REG_RX_ONLY);
+ if (attr == "ATR_TX") return iface->get_atr_reg(unit, gpio_atr::ATR_REG_TX_ONLY);
+ if (attr == "ATR_XX") return iface->get_atr_reg(unit, gpio_atr::ATR_REG_FULL_DUPLEX);
+ if (attr == "READBACK") return iface->read_gpio(unit);
+ }
+ return 0;
+}
+
/****************************************************************************
* Radio control and setup
***************************************************************************/
@@ -380,7 +647,7 @@ void x300_radio_ctrl_impl::setup_radio(
);
size_t rx_chan = 0, tx_chan = 0;
- BOOST_FOREACH(const std::string& fe, _db_manager->get_rx_frontends()) {
+ for(const std::string& fe: _db_manager->get_rx_frontends()) {
if (rx_chan >= _get_num_radios()) {
break;
}
@@ -393,7 +660,7 @@ void x300_radio_ctrl_impl::setup_radio(
_rx_fe_map[rx_chan].core->set_fe_connection(usrp::fe_connection_t(conn, if_freq));
rx_chan++;
}
- BOOST_FOREACH(const std::string& fe, _db_manager->get_tx_frontends()) {
+ for(const std::string& fe: _db_manager->get_tx_frontends()) {
if (tx_chan >= _get_num_radios()) {
break;
}
@@ -555,31 +822,26 @@ void x300_radio_ctrl_impl::self_test_adc(uint32_t ramp_time_ms)
void x300_radio_ctrl_impl::extended_adc_test(const std::vector<x300_radio_ctrl_impl::sptr>& radios, double duration_s)
{
static const size_t SECS_PER_ITER = 5;
- UHD_MSG(status) << boost::format("Running Extended ADC Self-Test (Duration=%.0fs, %ds/iteration)...\n")
+ UHD_LOGGER_INFO("X300 RADIO") << boost::format("Running Extended ADC Self-Test (Duration=%.0fs, %ds/iteration)...")
% duration_s % SECS_PER_ITER;
size_t num_iters = static_cast<size_t>(ceil(duration_s/SECS_PER_ITER));
size_t num_failures = 0;
for (size_t iter = 0; iter < num_iters; iter++) {
- //Print date and time
- boost::posix_time::time_facet *facet = new boost::posix_time::time_facet("%d-%b-%Y %H:%M:%S");
- std::ostringstream time_strm;
- time_strm.imbue(std::locale(std::locale::classic(), facet));
- time_strm << boost::posix_time::second_clock::local_time();
//Run self-test
- UHD_MSG(status) << boost::format("-- [%s] Iteration %06d... ") % time_strm.str() % (iter+1);
+ UHD_LOGGER_INFO("X300 RADIO") << boost::format("Extended ADC Self-Test Iteration %06d... ") % (iter+1);
try {
for (size_t i = 0; i < radios.size(); i++) {
radios[i]->self_test_adc((SECS_PER_ITER*1000)/radios.size());
}
- UHD_MSG(status) << "passed" << std::endl;
+ UHD_LOGGER_INFO("X300 RADIO") << boost::format("Extended ADC Self-Test Iteration %06d passed ") % (iter+1);
} catch(std::exception &e) {
num_failures++;
- UHD_MSG(status) << e.what() << std::endl;
+ UHD_LOGGER_ERROR("X300 RADIO") << e.what();
}
}
if (num_failures == 0) {
- UHD_MSG(status) << "Extended ADC Self-Test PASSED\n";
+ UHD_LOGGER_INFO("X300 RADIO") << "Extended ADC Self-Test PASSED";
} else {
throw uhd::runtime_error(
(boost::format("Extended ADC Self-Test FAILED!!! (%d/%d failures)\n") % num_failures % num_iters).str());
@@ -647,7 +909,7 @@ double x300_radio_ctrl_impl::self_cal_adc_xfer_delay(
boost::function<void(double)> wait_for_clk_locked,
bool apply_delay)
{
- UHD_MSG(status) << "Running ADC transfer delay self-cal: " << std::flush;
+ UHD_LOGGER_INFO("X300 RADIO") << "Running ADC transfer delay self-cal: ";
//Effective resolution of the self-cal.
static const size_t NUM_DELAY_STEPS = 100;
@@ -657,7 +919,6 @@ double x300_radio_ctrl_impl::self_cal_adc_xfer_delay(
double delay_range = 2 * master_clk_period;
double delay_incr = delay_range / NUM_DELAY_STEPS;
- UHD_MSG(status) << "Measuring..." << std::flush;
double cached_clk_delay = clock->get_clock_delay(X300_CLOCK_WHICH_ADC0);
double fpga_clk_delay = clock->get_clock_delay(X300_CLOCK_WHICH_FPGA);
@@ -703,7 +964,7 @@ double x300_radio_ctrl_impl::self_cal_adc_xfer_delay(
err_code += 100; //Increment error code by 100 to indicate no lock
}
}
- //UHD_MSG(status) << (boost::format("XferDelay=%fns, Error=%d\n") % delay % err_code);
+ //UHD_LOGGER_INFO("X300 RADIO") << (boost::format("XferDelay=%fns, Error=%d") % delay % err_code);
results.push_back(std::pair<double,bool>(delay, err_code==0));
}
@@ -755,7 +1016,6 @@ double x300_radio_ctrl_impl::self_cal_adc_xfer_delay(
}
if (apply_delay) {
- UHD_MSG(status) << "Validating..." << std::flush;
//Apply delay
win_center = clock->set_clock_delay(X300_CLOCK_WHICH_ADC0, win_center); //Sets ADC0 and ADC1
wait_for_clk_locked(0.1);
@@ -773,7 +1033,7 @@ double x300_radio_ctrl_impl::self_cal_adc_xfer_delay(
radios[r]->_adc->set_test_word("normal", "normal");
radios[r]->_regs->misc_outs_reg.write(radio_regmap_t::misc_outs_reg_t::ADC_CHECKER_ENABLED, 0);
}
- UHD_MSG(status) << (boost::format(" done (FPGA->ADC=%.3fns%s, Window=%.3fns)\n") %
+ UHD_LOGGER_INFO("X300 RADIO") << (boost::format("ADC transfer delay self-cal done (FPGA->ADC=%.3fns%s, Window=%.3fns)") %
(win_center-fpga_clk_delay) % (cycle_slip?" +cyc":"") % win_length);
return win_center;
@@ -797,7 +1057,7 @@ void x300_radio_ctrl_impl::_update_atr_leds(const std::string &rx_ant, const siz
void x300_radio_ctrl_impl::_self_cal_adc_capture_delay(bool print_status)
{
- if (print_status) UHD_MSG(status) << "Running ADC capture delay self-cal..." << std::flush;
+ if (print_status) UHD_LOGGER_INFO("X300 RADIO") << "Running ADC capture delay self-cal...";
static const uint32_t NUM_DELAY_STEPS = 32; //The IDELAYE2 element has 32 steps
static const uint32_t NUM_RETRIES = 2; //Retry self-cal if it fails in warmup situations
@@ -821,8 +1081,8 @@ void x300_radio_ctrl_impl::_self_cal_adc_capture_delay(bool print_status)
//and count deviations from the expected value
_regs->misc_outs_reg.write(radio_regmap_t::misc_outs_reg_t::ADC_CHECKER_ENABLED, 0);
_regs->misc_outs_reg.write(radio_regmap_t::misc_outs_reg_t::ADC_CHECKER_ENABLED, 1);
- //10ms @ 200MHz = 2 million samples
- boost::this_thread::sleep(boost::posix_time::milliseconds(10));
+ //5ms @ 200MHz = 1 million samples
+ boost::this_thread::sleep(boost::posix_time::milliseconds(5));
if (_regs->misc_ins_reg.read(radio_regmap_t::misc_ins_reg_t::ADC_CHECKER0_I_LOCKED)) {
err_code += _regs->misc_ins_reg.get(radio_regmap_t::misc_ins_reg_t::ADC_CHECKER0_I_ERROR);
} else {
@@ -836,8 +1096,8 @@ void x300_radio_ctrl_impl::_self_cal_adc_capture_delay(bool print_status)
//and count deviations from the expected value
_regs->misc_outs_reg.write(radio_regmap_t::misc_outs_reg_t::ADC_CHECKER_ENABLED, 0);
_regs->misc_outs_reg.write(radio_regmap_t::misc_outs_reg_t::ADC_CHECKER_ENABLED, 1);
- //10ms @ 200MHz = 2 million samples
- boost::this_thread::sleep(boost::posix_time::milliseconds(10));
+ //5ms @ 200MHz = 1 million samples
+ boost::this_thread::sleep(boost::posix_time::milliseconds(5));
if (_regs->misc_ins_reg.read(radio_regmap_t::misc_ins_reg_t::ADC_CHECKER0_Q_LOCKED)) {
err_code += _regs->misc_ins_reg.get(radio_regmap_t::misc_ins_reg_t::ADC_CHECKER0_Q_ERROR);
} else {
@@ -860,7 +1120,7 @@ void x300_radio_ctrl_impl::_self_cal_adc_capture_delay(bool print_status)
}
}
}
- //UHD_MSG(status) << (boost::format("CapTap=%d, Error=%d\n") % dly_tap % err_code);
+ //UHD_LOGGER_INFO("X300 RADIO") << (boost::format("CapTap=%d, Error=%d") % dly_tap % err_code);
}
//Retry the self-cal if it fails
@@ -890,7 +1150,7 @@ void x300_radio_ctrl_impl::_self_cal_adc_capture_delay(bool print_status)
if (print_status) {
double tap_delay = (1.0e12 / _radio_clk_rate) / (2*32); //in ps
- UHD_MSG(status) << boost::format(" done (Tap=%d, Window=%d, TapDelay=%.3fps, Iter=%d)\n") % ideal_tap % (win_stop-win_start) % tap_delay % iter;
+ UHD_LOGGER_INFO("X300 RADIO") << boost::format("ADC capture delay self-cal done (Tap=%d, Window=%d, TapDelay=%.3fps, Iter=%d)") % ideal_tap % (win_stop-win_start) % tap_delay % iter;
}
}
@@ -924,7 +1184,7 @@ void x300_radio_ctrl_impl::_set_command_time(const time_spec_t &spec, const size
***************************************************************************/
bool x300_radio_ctrl_impl::check_radio_config()
{
- UHD_RFNOC_BLOCK_TRACE() << "x300_radio_ctrl_impl::check_radio_config() " << std::endl;
+ UHD_RFNOC_BLOCK_TRACE() << "x300_radio_ctrl_impl::check_radio_config() " ;
const fs_path rx_fe_path = fs_path("dboards" / _radio_slot / "rx_frontends");
for (size_t chan = 0; chan < _get_num_radios(); chan++) {
if (_tree->exists(rx_fe_path / _rx_fe_map.at(chan).db_fe_name / "enabled")) {
diff --git a/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp b/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
index 417c88f9e..50c3059d3 100644
--- a/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
+++ b/host/lib/usrp/x300/x300_radio_ctrl_impl.hpp
@@ -56,15 +56,34 @@ public:
double set_tx_frequency(const double freq, const size_t chan);
double set_rx_frequency(const double freq, const size_t chan);
+ double set_rx_bandwidth(const double bandwidth, const size_t chan);
double get_tx_frequency(const size_t chan);
double get_rx_frequency(const size_t chan);
+ double get_rx_bandwidth(const size_t chan);
double set_tx_gain(const double gain, const size_t chan);
double set_rx_gain(const double gain, const size_t chan);
+ std::vector<std::string> get_rx_lo_names(const size_t chan);
+ std::vector<std::string> get_rx_lo_sources(const std::string &name, const size_t chan);
+ freq_range_t get_rx_lo_freq_range(const std::string &name, const size_t chan);
+
+ void set_rx_lo_source(const std::string &src, const std::string &name, const size_t chan);
+ const std::string get_rx_lo_source(const std::string &name, const size_t chan);
+
+ void set_rx_lo_export_enabled(bool enabled, const std::string &name, const size_t chan);
+ bool get_rx_lo_export_enabled(const std::string &name, const size_t chan);
+
+ double set_rx_lo_freq(double freq, const std::string &name, const size_t chan);
+ double get_rx_lo_freq(const std::string &name, const size_t chan);
+
size_t get_chan_from_dboard_fe(const std::string &fe, const direction_t dir);
std::string get_dboard_fe_from_chan(const size_t chan, const direction_t dir);
+ std::vector<std::string> get_gpio_banks() const;
+ void set_gpio_attr(const std::string &bank, const std::string &attr, const uint32_t value, const uint32_t mask);
+ uint32_t get_gpio_attr(const std::string &bank, const std::string &attr);
+
double get_output_samp_rate(size_t port);
/************************************************************************
@@ -139,7 +158,7 @@ private:
misc_ins_reg_t(): uhd::soft_reg64_ro_t(regs::RB_MISC_IO) { }
} misc_ins_reg;
- radio_regmap_t(int radio_num) : soft_regmap_t("radio" + boost::lexical_cast<std::string>(radio_num) + "_regmap") {
+ radio_regmap_t(int radio_num) : soft_regmap_t("radio" + std::to_string(radio_num) + "_regmap") {
add_to_map(misc_outs_reg, "misc_outs_reg", PRIVATE);
add_to_map(misc_ins_reg, "misc_ins_reg", PRIVATE);
}
diff --git a/host/lib/usrp_clock/multi_usrp_clock.cpp b/host/lib/usrp_clock/multi_usrp_clock.cpp
index 71521190e..bcc0b57d6 100644
--- a/host/lib/usrp_clock/multi_usrp_clock.cpp
+++ b/host/lib/usrp_clock/multi_usrp_clock.cpp
@@ -19,11 +19,10 @@
#include <uhd/usrp_clock/multi_usrp_clock.hpp>
#include <uhd/usrp_clock/octoclock_eeprom.hpp>
-#include <uhd/utils/msg.hpp>
+
#include <uhd/exception.hpp>
#include <uhd/utils/log.hpp>
#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
using namespace uhd;
@@ -92,6 +91,6 @@ multi_usrp_clock::~multi_usrp_clock(void){
* Multi USRP Clock factory function
**********************************************************************/
multi_usrp_clock::sptr multi_usrp_clock::make(const device_addr_t &dev_addr){
- UHD_LOG << "multi_usrp_clock::make with args " << dev_addr.to_pp_string() << std::endl;
+ UHD_LOGGER_TRACE("OCTOCLOCK") << "multi_usrp_clock::make with args " << dev_addr.to_pp_string() ;
return sptr(new multi_usrp_clock_impl(dev_addr));
}
diff --git a/host/lib/usrp_clock/octoclock/octoclock_eeprom.cpp b/host/lib/usrp_clock/octoclock/octoclock_eeprom.cpp
index b0d24deec..82b3463a8 100644
--- a/host/lib/usrp_clock/octoclock/octoclock_eeprom.cpp
+++ b/host/lib/usrp_clock/octoclock/octoclock_eeprom.cpp
@@ -24,8 +24,6 @@
#include <uhd/utils/byteswap.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/asio.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/foreach.hpp>
#include <iostream>
@@ -85,7 +83,7 @@ void octoclock_eeprom_t::_load(){
(*this)["name"] = bytes_to_string(name_bytes);
//Revision
- (*this)["revision"] = boost::lexical_cast<std::string>(int(eeprom_in->revision));
+ (*this)["revision"] = std::to_string(int(eeprom_in->revision));
}
else throw uhd::runtime_error("Error loading OctoClock EEPROM.");
}
diff --git a/host/lib/usrp_clock/octoclock/octoclock_image_loader.cpp b/host/lib/usrp_clock/octoclock/octoclock_image_loader.cpp
index d3502113e..0e7845be7 100644
--- a/host/lib/usrp_clock/octoclock/octoclock_image_loader.cpp
+++ b/host/lib/usrp_clock/octoclock/octoclock_image_loader.cpp
@@ -31,7 +31,6 @@
#include <stdint.h>
#include <boost/filesystem.hpp>
#include <boost/format.hpp>
-#include <boost/lexical_cast.hpp>
#include <boost/thread.hpp>
#include <algorithm>
@@ -140,7 +139,7 @@ static void octoclock_setup_session(octoclock_session_t &session,
std::string err_msg = "Could not resolve given args to a single OctoClock device.\n"
"Applicable devices:\n";
- BOOST_FOREACH(const uhd::device_addr_t &dev, devs){
+ for(const uhd::device_addr_t &dev: devs){
std::string name = (dev["type"] == "octoclock") ? str(boost::format("OctoClock r%d")
% dev.get("revision","4"))
: "OctoClock Bootloader";
diff --git a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp
index 4da9db19f..cea493fb4 100644
--- a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp
+++ b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp
@@ -21,7 +21,6 @@
#include <boost/assign.hpp>
#include <stdint.h>
#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/thread.hpp>
@@ -34,7 +33,7 @@
#include <uhd/usrp_clock/octoclock_eeprom.hpp>
#include <uhd/utils/byteswap.hpp>
#include <uhd/utils/paths.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/utils/paths.hpp>
#include <uhd/utils/static.hpp>
@@ -57,7 +56,7 @@ device_addrs_t octoclock_find(const device_addr_t &hint){
if (hints.size() > 1){
device_addrs_t found_devices;
std::string error_msg;
- BOOST_FOREACH(const device_addr_t &hint_i, hints){
+ for(const device_addr_t &hint_i: hints){
device_addrs_t found_devices_i = octoclock_find(hint_i);
if (found_devices_i.size() != 1) error_msg += str(boost::format(
"Could not resolve device hint \"%s\" to a single device."
@@ -84,7 +83,7 @@ device_addrs_t octoclock_find(const device_addr_t &hint){
//If no address was specified, send a broadcast on each interface
if (not _hint.has_key("addr")){
- BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs()){
+ for(const if_addrs_t &if_addrs: get_if_addrs()){
//avoid the loopback device
if (if_addrs.inet == asio::ip::address_v4::loopback().to_string()) continue;
@@ -118,10 +117,10 @@ device_addrs_t octoclock_find(const device_addr_t &hint){
udp_transport->send(boost::asio::buffer(&pkt_out, sizeof(pkt_out)));
}
catch(const std::exception &ex){
- UHD_MSG(error) << "OctoClock network discovery error - " << ex.what() << std::endl;
+ UHD_LOGGER_ERROR("OCTOCLOCK") << "OctoClock network discovery error - " << ex.what() ;
}
catch(...){
- UHD_MSG(error) << "OctoClock network discovery unknown error" << std::endl;
+ UHD_LOGGER_ERROR("OCTOCLOCK") << "OctoClock network discovery unknown error" ;
}
uint8_t octoclock_data[udp_simple::mtu];
@@ -187,7 +186,7 @@ UHD_STATIC_BLOCK(register_octoclock_device){
* Structors
**********************************************************************/
octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
- UHD_MSG(status) << "Opening an OctoClock device..." << std::endl;
+ UHD_LOGGER_INFO("OCTOCLOCK") << "Opening an OctoClock device...";
_type = device::CLOCK;
device_addrs_t device_args = separate_device_addr(_device_addr);
// To avoid replicating sequence numbers between sessions
@@ -212,7 +211,7 @@ octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
) % _get_images_help_message(addr)));
}
- const std::string oc = boost::lexical_cast<std::string>(oci);
+ const std::string oc = std::to_string(oci);
////////////////////////////////////////////////////////////////////
// Set up UDP transports
@@ -235,7 +234,7 @@ octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
"%s\n"
) % int(OCTOCLOCK_FW_COMPAT_NUM) % int(_proto_ver) % _get_images_help_message(addr)));
}
- _tree->create<std::string>(oc_path / "fw_version").set(boost::lexical_cast<std::string>(int(_proto_ver)));
+ _tree->create<std::string>(oc_path / "fw_version").set(std::to_string(int(_proto_ver)));
////////////////////////////////////////////////////////////////////
// Set up EEPROM
@@ -265,9 +264,9 @@ octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
std::string asterisk = (device_args.size() > 1) ? " * " : "";
if(device_args.size() > 1){
- UHD_MSG(status) << std::endl << "Checking status of " << addr << ":" << std::endl;
+ UHD_LOGGER_INFO("OCTOCLOCK") << "Checking status of " << addr;
}
- UHD_MSG(status) << boost::format("%sDetecting internal GPSDO...") % asterisk << std::flush;
+ UHD_LOGGER_INFO("OCTOCLOCK") << boost::format("%sDetecting internal GPSDO...") % asterisk;
_get_state(oc);
if(_oc_dict[oc].state.gps_detected){
@@ -275,7 +274,7 @@ octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
_oc_dict[oc].gps = gps_ctrl::make(octoclock_make_uart_iface(_oc_dict[oc].gpsdo_xport, _proto_ver));
if(_oc_dict[oc].gps and _oc_dict[oc].gps->gps_detected()){
- BOOST_FOREACH(const std::string &name, _oc_dict[oc].gps->get_sensors()){
+ for(const std::string &name: _oc_dict[oc].gps->get_sensors()){
_tree->create<sensor_value_t>(oc_path / "sensors" / name)
.set_publisher(boost::bind(&gps_ctrl::get_sensor, _oc_dict[oc].gps, name));
}
@@ -283,26 +282,23 @@ octoclock_impl::octoclock_impl(const device_addr_t &_device_addr){
else{
//If GPSDO communication failed, set gps_detected to false
_oc_dict[oc].state.gps_detected = 0;
- UHD_MSG(warning) << "Device reports that it has a GPSDO, but we cannot communicate with it." << std::endl;
- std::cout << std::endl;
+ UHD_LOGGER_WARNING("OCTOCLOCK") << "Device reports that it has a GPSDO, but we cannot communicate with it.";
}
}
catch(std::exception &e){
- UHD_MSG(error) << "An error occurred making GPSDO control: " << e.what() << std::endl;
+ UHD_LOGGER_ERROR("OCTOCLOCK") << "An error occurred making GPSDO control: " << e.what();
}
}
- else UHD_MSG(status) << "No GPSDO found" << std::endl;
- UHD_MSG(status) << boost::format("%sDetecting external reference...%s") % asterisk
- % _ext_ref_detected(oc).value
- << std::endl;
- UHD_MSG(status) << boost::format("%sDetecting switch position...%s") % asterisk
- % _switch_pos(oc).value
- << std::endl;
+ else UHD_LOGGER_INFO("OCTOCLOCK") << "No GPSDO found";
+ UHD_LOGGER_INFO("OCTOCLOCK") << boost::format("%sDetecting external reference...%s") % asterisk
+ % _ext_ref_detected(oc).value;
+ UHD_LOGGER_INFO("OCTOCLOCK") << boost::format("%sDetecting switch position...%s") % asterisk
+ % _switch_pos(oc).value;
std::string ref = _which_ref(oc).value;
- if(ref == "none") UHD_MSG(status) << boost::format("%sDevice is not using any reference") % asterisk << std::endl;
- else UHD_MSG(status) << boost::format("%sDevice is using %s reference") % asterisk
+ if(ref == "none") UHD_LOGGER_INFO("OCTOCLOCK") << boost::format("%sDevice is not using any reference") % asterisk;
+ else UHD_LOGGER_INFO("OCTOCLOCK") << boost::format("%sDevice is using %s reference") % asterisk
% _which_ref(oc).value
- << std::endl;
+ ;
}
}
@@ -324,7 +320,7 @@ void octoclock_impl::_set_eeprom(const std::string &oc, const octoclock_eeprom_t
* what it currently has in the EEPROM, so store the relevant values
* from the user's input and send that instead.
*/
- BOOST_FOREACH(const std::string &key, oc_eeprom.keys()){
+ for(const std::string &key: oc_eeprom.keys()){
if(_oc_dict[oc].eeprom.has_key(key)) _oc_dict[oc].eeprom[key] = oc_eeprom[key];
}
_oc_dict[oc].eeprom.commit();
diff --git a/host/lib/usrp_clock/usrp_clock_c.cpp b/host/lib/usrp_clock/usrp_clock_c.cpp
index 220112f37..274eba5d1 100644
--- a/host/lib/usrp_clock/usrp_clock_c.cpp
+++ b/host/lib/usrp_clock/usrp_clock_c.cpp
@@ -22,7 +22,6 @@
#include <uhd/usrp_clock/usrp_clock.h>
-#include <boost/foreach.hpp>
#include <boost/thread/mutex.hpp>
#include <string.h>
@@ -64,7 +63,7 @@ uhd_error uhd_usrp_clock_find(
uhd::device_addrs_t devs = uhd::device::find(std::string(args), uhd::device::CLOCK);
devices_out->string_vector_cpp.clear();
- BOOST_FOREACH(const uhd::device_addr_t &dev, devs){
+ for(const uhd::device_addr_t &dev: devs){
devices_out->string_vector_cpp.push_back(dev.to_string());
}
)
diff --git a/host/lib/utils/CMakeLists.txt b/host/lib/utils/CMakeLists.txt
index 128d7c00a..a053846c6 100644
--- a/host/lib/utils/CMakeLists.txt
+++ b/host/lib/utils/CMakeLists.txt
@@ -51,9 +51,11 @@ CHECK_CXX_SOURCE_COMPILES("
" HAVE_WIN_SETTHREADPRIORITY
)
+
+
IF(HAVE_PTHREAD_SETSCHEDPARAM)
MESSAGE(STATUS " Priority scheduling supported through pthread_setschedparam.")
- SET(THREAD_PRIO_DEFS HAVE_PTHREAD_SETSCHEDPARAM)
+ LIST(APPEND THREAD_PRIO_DEFS HAVE_PTHREAD_SETSCHEDPARAM)
LIBUHD_APPEND_LIBS(pthread)
ELSEIF(HAVE_WIN_SETTHREADPRIORITY)
MESSAGE(STATUS " Priority scheduling supported through windows SetThreadPriority.")
@@ -63,8 +65,36 @@ ELSE()
SET(THREAD_PRIO_DEFS HAVE_THREAD_PRIO_DUMMY)
ENDIF()
+SET(CMAKE_REQUIRED_LIBRARIES "pthread")
+
+CHECK_CXX_SOURCE_COMPILES("
+ #include <pthread.h>
+ int main(){
+ pthread_t pt;
+ const char* pt_name = \"test\";
+ pthread_setname_np(pt, pt_name);
+ return 0;
+ }
+ " HAVE_PTHREAD_SETNAME
+)
+
+IF(CYGWIN)
+ #SCHED_RR non-operational on cygwin
+ SET(HAVE_PTHREAD_SETNAME False)
+ENDIF(CYGWIN)
+
+IF(HAVE_PTHREAD_SETNAME)
+ MESSAGE(STATUS " Setting thread names is supported through pthread_setname_np.")
+ LIST(APPEND THREAD_PRIO_DEFS HAVE_PTHREAD_SETNAME)
+ LIBUHD_APPEND_LIBS(pthread)
+ELSE()
+ MESSAGE(STATUS " Setting thread names is not supported.")
+ LIST(APPEND THREAD_PRIO_DEFS HAVE_THREAD_SETNAME_DUMMY)
+ENDIF()
+
+
SET_SOURCE_FILES_PROPERTIES(
- ${CMAKE_CURRENT_SOURCE_DIR}/thread_priority.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp
PROPERTIES COMPILE_DEFINITIONS "${THREAD_PRIO_DEFS}"
)
@@ -142,12 +172,11 @@ LIBUHD_APPEND_SOURCES(
${CMAKE_CURRENT_SOURCE_DIR}/ihex.cpp
${CMAKE_CURRENT_SOURCE_DIR}/load_modules.cpp
${CMAKE_CURRENT_SOURCE_DIR}/log.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/msg.cpp
${CMAKE_CURRENT_SOURCE_DIR}/paths.cpp
${CMAKE_CURRENT_SOURCE_DIR}/platform.cpp
${CMAKE_CURRENT_SOURCE_DIR}/static.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tasks.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/thread_priority.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp
)
IF(ENABLE_C_API)
diff --git a/host/lib/utils/csv.cpp b/host/lib/utils/csv.cpp
index 2ffa70196..e0cadcb96 100644
--- a/host/lib/utils/csv.cpp
+++ b/host/lib/utils/csv.cpp
@@ -16,7 +16,6 @@
//
#include <uhd/utils/csv.hpp>
-#include <boost/foreach.hpp>
using namespace uhd;
@@ -29,7 +28,7 @@ csv::rows_type csv::to_rows(std::istream &input){
bool in_quote = false;
char last_ch, next_ch = ' ';
//for each character in the line
- BOOST_FOREACH(char ch, line){
+ for(char ch: line){
last_ch = next_ch;
next_ch = ch;
//catch a quote character and change the state
diff --git a/host/lib/utils/gain_group.cpp b/host/lib/utils/gain_group.cpp
index 71caf33be..1a6c0407f 100644
--- a/host/lib/utils/gain_group.cpp
+++ b/host/lib/utils/gain_group.cpp
@@ -20,7 +20,6 @@
#include <uhd/types/dict.hpp>
#include <uhd/utils/algorithm.hpp>
#include <uhd/exception.hpp>
-#include <boost/foreach.hpp>
#include <boost/bind.hpp>
#include <algorithm>
#include <vector>
@@ -73,7 +72,7 @@ public:
if (not name.empty()) return _name_to_fcns.get(name).get_range();
double overall_min = 0, overall_max = 0, overall_step = 0;
- BOOST_FOREACH(const gain_fcns_t &fcns, get_all_fcns()){
+ for(const gain_fcns_t &fcns: get_all_fcns()){
const gain_range_t range = fcns.get_range();
overall_min += range.start();
overall_max += range.stop();
@@ -88,7 +87,7 @@ public:
if (not name.empty()) return _name_to_fcns.get(name).get_value();
double overall_gain = 0;
- BOOST_FOREACH(const gain_fcns_t &fcns, get_all_fcns()){
+ for(const gain_fcns_t &fcns: get_all_fcns()){
overall_gain += fcns.get_value();
}
return overall_gain;
@@ -102,7 +101,7 @@ public:
//get the max step size among the gains
double max_step = 0;
- BOOST_FOREACH(const gain_fcns_t &fcns, all_fcns){
+ for(const gain_fcns_t &fcns: all_fcns){
max_step = std::max(max_step, fcns.get_range().step());
}
@@ -111,7 +110,7 @@ public:
//distribute power according to priority (round to max step)
double gain_left_to_distribute = gain;
- BOOST_FOREACH(const gain_fcns_t &fcns, all_fcns){
+ for(const gain_fcns_t &fcns: all_fcns){
const gain_range_t range = fcns.get_range();
gain_bucket.push_back(floor_step(uhd::clip(
gain_left_to_distribute, range.start(), range.stop()
@@ -135,7 +134,7 @@ public:
//distribute the remainder (less than max step)
//fill in the largest step sizes first that are less than the remainder
- BOOST_FOREACH(size_t i, indexes_step_size_dec){
+ for(size_t i: indexes_step_size_dec){
const gain_range_t range = all_fcns.at(i).get_range();
double additional_gain = floor_step(uhd::clip(
gain_bucket.at(i) + gain_left_to_distribute, range.start(), range.stop()
@@ -143,11 +142,11 @@ public:
gain_bucket.at(i) += additional_gain;
gain_left_to_distribute -= additional_gain;
}
- UHD_LOGV(often) << "gain_left_to_distribute " << gain_left_to_distribute << std::endl;
+ UHD_LOGGER_DEBUG("UHD") << "gain_left_to_distribute " << gain_left_to_distribute ;
//now write the bucket out to the individual gain values
for (size_t i = 0; i < gain_bucket.size(); i++){
- UHD_LOGV(often) << i << ": " << gain_bucket.at(i) << std::endl;
+ UHD_LOGGER_DEBUG("UHD") << i << ": " << gain_bucket.at(i) ;
all_fcns.at(i).set_value(gain_bucket.at(i));
}
}
@@ -173,7 +172,7 @@ private:
//! get the gain function sets in order (highest priority first)
std::vector<gain_fcns_t> get_all_fcns(void){
std::vector<gain_fcns_t> all_fcns;
- BOOST_FOREACH(size_t key, uhd::sorted(_registry.keys())){
+ for(size_t key: uhd::sorted(_registry.keys())){
const std::vector<gain_fcns_t> &fcns = _registry[key];
all_fcns.insert(all_fcns.begin(), fcns.begin(), fcns.end());
}
diff --git a/host/lib/utils/load_modules.cpp b/host/lib/utils/load_modules.cpp
index aba3adeed..3ef3c418c 100644
--- a/host/lib/utils/load_modules.cpp
+++ b/host/lib/utils/load_modules.cpp
@@ -19,7 +19,6 @@
#include <uhd/utils/static.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
-#include <boost/foreach.hpp>
#include <boost/filesystem.hpp>
#include <iostream>
#include <string>
@@ -102,7 +101,7 @@ static void load_module_path(const fs::path &path){
* Load all the modules given in the module paths.
*/
UHD_STATIC_BLOCK(load_modules){
- BOOST_FOREACH(const fs::path &path, uhd::get_module_paths()){
+ for(const fs::path &path: uhd::get_module_paths()){
load_module_path(path);
}
}
diff --git a/host/lib/utils/log.cpp b/host/lib/utils/log.cpp
index 4e58ce894..6a694ed8e 100644
--- a/host/lib/utils/log.cpp
+++ b/host/lib/utils/log.cpp
@@ -16,150 +16,455 @@
//
#include <uhd/utils/log.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/log_add.hpp>
#include <uhd/utils/static.hpp>
#include <uhd/utils/paths.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/format.hpp>
-#include <boost/thread/mutex.hpp>
+#include <uhd/transport/bounded_buffer.hpp>
+#include <uhd/version.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/thread/locks.hpp>
-#include <boost/interprocess/sync/file_lock.hpp>
+#include <boost/make_shared.hpp>
#include <fstream>
#include <cctype>
+#include <atomic>
+#include <mutex>
+#include <memory>
+#include <thread>
-namespace fs = boost::filesystem;
namespace pt = boost::posix_time;
-namespace ip = boost::interprocess;
+
+// Don't make these static const std::string -- we need their lifetime guaranteed!
+#define PURPLE "\033[35;1m" // purple
+#define BLUE "\033[34;1m" // blue
+#define GREEN "\033[32;1m" // green
+#define YELLOW "\033[33;1m" // yellow
+#define RED "\033[31;0m" // red
+#define BRED "\033[31;1m" // bright red
+#define RESET_COLORS "\033[39;0m" // reset colors
/***********************************************************************
- * Global resources for the logger
+ * Helpers
**********************************************************************/
-class log_resource_type{
+static std::string verbosity_color(const uhd::log::severity_level &level){
+ switch(level){
+ case (uhd::log::trace):
+ return PURPLE;
+ case(uhd::log::debug):
+ return BLUE;
+ case(uhd::log::info):
+ return GREEN;
+ case(uhd::log::warning):
+ return YELLOW;
+ case(uhd::log::error):
+ return RED;
+ case(uhd::log::fatal):
+ return BRED;
+ default:
+ return RESET_COLORS;
+ }
+}
+
+static std::string verbosity_name(const uhd::log::severity_level &level){
+ switch(level){
+ case (uhd::log::trace):
+ return "TRACE";
+ case(uhd::log::debug):
+ return "DEBUG";
+ case(uhd::log::info):
+ return "INFO";
+ case(uhd::log::warning):
+ return "WARNING";
+ case(uhd::log::error):
+ return "ERROR";
+ case(uhd::log::fatal):
+ return "FATAL";
+ default:
+ return "-";
+ }
+ return "";
+}
+
+//! get the relative file path from the host directory
+inline std::string path_to_filename(std::string path)
+{
+ return path.substr(path.find_last_of("/\\") + 1);
+}
+
+/***********************************************************************
+ * Logger backends
+ **********************************************************************/
+void console_log(
+ const uhd::log::logging_info &log_info
+) {
+
+ std::clog
+#ifdef UHD_LOG_CONSOLE_COLOR
+ << verbosity_color(log_info.verbosity)
+#endif
+#ifdef UHD_LOG_CONSOLE_TIME
+ << "[" << pt::to_simple_string(log_info.time) << "] "
+#endif
+#ifdef UHD_LOG_CONSOLE_THREAD
+ << "[0x" << log_info.thread_id << "] "
+#endif
+#ifdef UHD_LOG_CONSOLE_SRC
+ << "[" << path_to_filename(log_info.file) << ":" << log_info.line << "] "
+#endif
+ << "[" << verbosity_name(log_info.verbosity) << "] "
+ << "[" << log_info.component << "] "
+#ifdef UHD_LOG_CONSOLE_COLOR
+ << RESET_COLORS
+#endif
+ << log_info.message
+ << std::endl
+ ;
+}
+
+/*! Helper class to implement file logging
+ *
+ * The class holds references to the file stream object, and handles closing
+ * and cleanup.
+ */
+class file_logger_backend
+{
public:
- uhd::_log::verbosity_t level;
+ file_logger_backend(const std::string &file_path)
+ {
+ _file_stream.exceptions(std::ofstream::failbit | std::ofstream::badbit);
+ if (!file_path.empty()){
+ try {
+ _file_stream.open(file_path.c_str(), std::fstream::out | std::fstream::app);
+ } catch (const std::ofstream::failure& fail){
+ std::cerr << "Error opening log file: " << fail.what() << std::endl;
+ }
+ }
+ }
+
+ void log(const uhd::log::logging_info &log_info)
+ {
+ if (_file_stream.is_open()){
+ _file_stream
+ << pt::to_simple_string(log_info.time) << ","
+ << "0x" << log_info.thread_id << ","
+ << path_to_filename(log_info.file) << ":" << log_info.line << ","
+ << log_info.verbosity << ","
+ << log_info.component << ","
+ << log_info.message
+ << std::endl;
+ ;
+ }
+ }
- log_resource_type(void){
- //file lock pointer must be null
- _file_lock = NULL;
+ ~file_logger_backend()
+ {
+ if (_file_stream.is_open()){
+ _file_stream.close();
+ }
+ }
- //set the default log level
- level = uhd::_log::never;
+private:
+ std::ofstream _file_stream;
+};
- //allow override from macro definition
- #ifdef UHD_LOG_LEVEL
- _set_log_level(BOOST_STRINGIZE(UHD_LOG_LEVEL));
- #endif
+/***********************************************************************
+ * Global resources for the logger
+ **********************************************************************/
+
+#define UHD_CONSOLE_LOGGER_KEY "console"
+#define UHD_FILE_LOGGER_KEY "file"
+
+class log_resource {
+public:
+ uhd::log::severity_level global_level;
+ std::map<std::string, uhd::log::severity_level> logger_level;
- //allow override from environment variable
+ log_resource(void):
+ global_level(uhd::log::off),
+ _exit(false),
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ _fastpath_queue(10),
+#endif
+ _log_queue(10)
+ {
+ //allow override from macro definition
+#ifdef UHD_LOG_MIN_LEVEL
+ this->global_level = _get_log_level(BOOST_STRINGIZE(UHD_LOG_MIN_LEVEL), this->global_level);
+#endif
+ //allow override from environment variables
const char * log_level_env = std::getenv("UHD_LOG_LEVEL");
- if (log_level_env != NULL) _set_log_level(log_level_env);
+ if (log_level_env != NULL && log_level_env[0] != '\0') {
+ this->global_level =
+ _get_log_level(log_level_env, this->global_level);
+ }
+
+
+ /***** Console logging ***********************************************/
+#ifndef UHD_LOG_CONSOLE_DISABLE
+ uhd::log::severity_level console_level = uhd::log::trace;
+#ifdef UHD_LOG_CONSOLE_LEVEL
+ console_level = _get_log_level(BOOST_STRINGIZE(UHD_LOG_CONSOLE_LEVEL), console_level);
+#endif
+ const char * log_console_level_env = std::getenv("UHD_LOG_CONSOLE_LEVEL");
+ if (log_console_level_env != NULL && log_console_level_env[0] != '\0') {
+ console_level =
+ _get_log_level(log_console_level_env, console_level);
+ }
+ logger_level[UHD_CONSOLE_LOGGER_KEY] = console_level;
+ _loggers[UHD_CONSOLE_LOGGER_KEY] = &console_log;
+#endif
+
+ /***** File logging **************************************************/
+ uhd::log::severity_level file_level = uhd::log::trace;
+ std::string log_file_target;
+#if defined(UHD_LOG_FILE_LEVEL) && defined(UHD_LOG_FILE_PATH)
+ file_level = _get_log_level(BOOST_STRINGIZE(UHD_LOG_FILE_LEVEL), file_level);
+ log_file_target = BOOST_STRINGIZE(UHD_LOG_FILE);
+#endif
+ const char * log_file_level_env = std::getenv("UHD_LOG_FILE_LEVEL");
+ if (log_file_level_env != NULL && log_file_level_env[0] != '\0'){
+ file_level = _get_log_level(log_file_level_env, file_level);
+ }
+ const char* log_file_env = std::getenv("UHD_LOG_FILE");
+ if ((log_file_env != NULL) && (log_file_env[0] != '\0')) {
+ log_file_target = std::string(log_file_env);
+ }
+ if (!log_file_target.empty()){
+ logger_level[UHD_FILE_LOGGER_KEY] = file_level;
+ auto F = boost::make_shared<file_logger_backend>(log_file_target);
+ _loggers[UHD_FILE_LOGGER_KEY] = [F](const uhd::log::logging_info& log_info){F->log(log_info);};
+ }
+ std::ostringstream sys_info;
+ sys_info \
+ << "UHD" \
+ << BOOST_PLATFORM << "; "
+ << BOOST_COMPILER << "; "
+ << "Boost_"
+ << BOOST_VERSION << "; "
+ << "UHD_" << uhd::get_version_string();
+ _log_queue.push_with_timed_wait(
+ uhd::log::logging_info(
+ pt::microsec_clock::local_time(),
+ uhd::log::info,
+ __FILE__,
+ __LINE__,
+ sys_info.str(),
+ boost::this_thread::get_id()),
+ 0.25);
+
+ // Launch log message consumer
+ _pop_task = std::make_shared<std::thread>(std::thread([this](){this->pop_task();}));
+ _pop_fastpath_task = std::make_shared<std::thread>(std::thread([this](){this->pop_fastpath_task();}));
}
- ~log_resource_type(void){
- boost::lock_guard<boost::mutex> lock(_mutex);
- _file_stream.close();
- if (_file_lock != NULL) delete _file_lock;
+ ~log_resource(void){
+ _exit = true;
+ // We push a final message to kick the pop task out of it's wait state.
+ // This wouldn't be necessary if pop_with_wait() could fail. Should
+ // that ever get fixed, we can remove this.
+ auto final_message = uhd::log::logging_info(
+ pt::microsec_clock::local_time(),
+ uhd::log::trace,
+ __FILE__,
+ __LINE__,
+ "LOGGING",
+ boost::this_thread::get_id()
+ );
+ final_message.message = "Terminating logger.";
+ push(final_message);
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ push_fastpath("");
+#endif
+ _pop_task->join();
+ {
+ std::lock_guard<std::mutex> l(_logmap_mutex);
+ _loggers.clear();
+ }
+ _pop_task.reset();
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ _pop_fastpath_task->join();
+ _pop_fastpath_task.reset();
+#endif
}
- void log_to_file(const std::string &log_msg){
- boost::lock_guard<boost::mutex> lock(_mutex);
- if (_file_lock == NULL){
- const std::string log_path = (fs::path(uhd::get_tmp_path()) / "uhd.log").string();
- _file_stream.open(log_path.c_str(), std::fstream::out | std::fstream::app);
- _file_lock = new ip::file_lock(log_path.c_str());
+ void push(const uhd::log::logging_info& log_info)
+ {
+ static const double PUSH_TIMEOUT = 0.25; // seconds
+ _log_queue.push_with_timed_wait(log_info, PUSH_TIMEOUT);
+ }
+
+ void push_fastpath(const std::string &message)
+ {
+ // Never wait. If the buffer is full, we just don't see the message.
+ // Too bad.
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ _fastpath_queue.push_with_haste(message);
+#endif
+ }
+
+ void pop_task()
+ {
+ uhd::log::logging_info log_info;
+ log_info.message = "";
+
+ while (!_exit) {
+ _log_queue.pop_with_wait(log_info);
+ {
+ std::lock_guard<std::mutex> l(_logmap_mutex);
+ for (const auto &logger : _loggers) {
+ auto level = logger_level.find(logger.first);
+ if(level != logger_level.end() && log_info.verbosity < level->second){
+ continue;
+ }
+ logger.second(log_info);
+ }
+ }
+ }
+
+ // Exit procedure: Clear the queue
+ while (_log_queue.pop_with_haste(log_info)) {
+ std::lock_guard<std::mutex> l(_logmap_mutex);
+ for (const auto &logger : _loggers) {
+ auto level = logger_level.find(logger.first);
+ if (level != logger_level.end() && log_info.verbosity < level->second){
+ continue;
+ }
+ logger.second(log_info);
+ }
}
- _file_lock->lock();
- _file_stream << log_msg << std::flush;
- _file_lock->unlock();
+ }
+
+ void pop_fastpath_task()
+ {
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ while (!_exit) {
+ std::string msg;
+ _fastpath_queue.pop_with_wait(msg);
+ {
+ std::cerr << msg << std::flush;
+ }
+ }
+
+ // Exit procedure: Clear the queue
+ std::string msg;
+ while (_fastpath_queue.pop_with_haste(msg)) {
+ std::cerr << msg << std::flush;
+ }
+#endif
+ }
+
+
+ void add_logger(const std::string &key, uhd::log::log_fn_t logger_fn)
+ {
+ std::lock_guard<std::mutex> l(_logmap_mutex);
+ _loggers[key] = logger_fn;
}
private:
- //! set the log level from a string that is either a digit or an enum name
- void _set_log_level(const std::string &log_level_str){
- const uhd::_log::verbosity_t log_level_num = uhd::_log::verbosity_t(log_level_str[0]-'0');
- if (std::isdigit(log_level_str[0]) and log_level_num >= uhd::_log::always and log_level_num <= uhd::_log::never){
- this->level = log_level_num;
- return;
+ std::shared_ptr<std::thread> _pop_task;
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ std::shared_ptr<std::thread> _pop_fastpath_task;
+#endif
+ uhd::log::severity_level _get_log_level(const std::string &log_level_str,
+ const uhd::log::severity_level &previous_level){
+ if (std::isdigit(log_level_str[0])) {
+ const uhd::log::severity_level log_level_num =
+ uhd::log::severity_level(std::stoi(log_level_str));
+ if (log_level_num >= uhd::log::trace and
+ log_level_num <= uhd::log::fatal) {
+ return log_level_num;
+ }else{
+ UHD_LOGGER_ERROR("LOG") << "Failed to set log level to: " << log_level_str;
+ return previous_level;
+ }
}
- #define if_lls_equal(name) else if(log_level_str == #name) this->level = uhd::_log::name
- if_lls_equal(always);
- if_lls_equal(often);
- if_lls_equal(regularly);
- if_lls_equal(rarely);
- if_lls_equal(very_rarely);
- if_lls_equal(never);
+
+#define if_loglevel_equal(name) \
+ else if (log_level_str == #name) return uhd::log::name
+ if_loglevel_equal(trace);
+ if_loglevel_equal(debug);
+ if_loglevel_equal(info);
+ if_loglevel_equal(warning);
+ if_loglevel_equal(error);
+ if_loglevel_equal(fatal);
+ if_loglevel_equal(off);
+ return previous_level;
}
- //file stream and lock:
- std::ofstream _file_stream;
- ip::file_lock *_file_lock;
- boost::mutex _mutex;
+ std::mutex _logmap_mutex;
+ std::atomic<bool> _exit;
+ std::map<std::string, uhd::log::log_fn_t> _loggers;
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ uhd::transport::bounded_buffer<std::string> _fastpath_queue;
+#endif
+ uhd::transport::bounded_buffer<uhd::log::logging_info> _log_queue;
};
-UHD_SINGLETON_FCN(log_resource_type, log_rs);
+UHD_SINGLETON_FCN(log_resource, log_rs);
/***********************************************************************
* The logger object implementation
**********************************************************************/
-//! get the relative file path from the host directory
-static std::string get_rel_file_path(const fs::path &file){
- fs::path abs_path = file.parent_path();
- fs::path rel_path = file.leaf();
- while (not abs_path.empty() and abs_path.leaf() != "host"){
- rel_path = abs_path.leaf() / rel_path;
- abs_path = abs_path.parent_path();
- }
- return rel_path.string();
-}
-
-
uhd::_log::log::log(
- const verbosity_t verbosity,
+ const uhd::log::severity_level verbosity,
const std::string &file,
const unsigned int line,
- const std::string &function
- )
+ const std::string &component,
+ const boost::thread::id thread_id
+ ) :
+ _log_it(verbosity >= log_rs().global_level)
{
- _log_it = (verbosity >= log_rs().level);
- if (_log_it)
- {
- const std::string time = pt::to_simple_string(pt::microsec_clock::local_time());
- const std::string header1 = str(boost::format("-- %s - level %d") % time % int(verbosity));
- const std::string header2 = str(boost::format("-- %s") % function).substr(0, 80);
- const std::string header3 = str(boost::format("-- %s:%u") % get_rel_file_path(file) % line);
- const std::string border = std::string(std::max(std::max(header1.size(), header2.size()), header3.size()), '-');
- _ss << std::endl
- << border << std::endl
- << header1 << std::endl
- << header2 << std::endl
- << header3 << std::endl
- << border << std::endl
- ;
- }
+ if (_log_it){
+ this->_log_info = uhd::log::logging_info(
+ pt::microsec_clock::local_time(),
+ verbosity,
+ file,
+ line,
+ component,
+ thread_id);
+ }
}
uhd::_log::log::~log(void)
{
- if (not _log_it)
- return;
-
- _ss << std::endl;
- try{
- log_rs().log_to_file(_ss.str());
- }
- catch(const std::exception &e){
- /*!
- * Critical behavior below.
- * The following steps must happen in order to avoid a lock-up condition.
- * This is because the message facility will call into the logging facility.
- * Therefore we must disable the logger (level = never) before messaging.
- */
- log_rs().level = never;
- UHD_MSG(error)
- << "Logging failed: " << e.what() << std::endl
- << "Logging has been disabled for this process" << std::endl
- ;
+ if (_log_it) {
+ this->_log_info.message = _ss.str();
+ log_rs().push(this->_log_info);
}
}
+
+void uhd::_log::log_fastpath(const std::string &msg)
+{
+#ifndef UHD_LOG_FASTPATH_DISABLE
+ log_rs().push_fastpath(msg);
+#endif
+}
+
+/***********************************************************************
+ * Public API calls
+ **********************************************************************/
+void
+uhd::log::add_logger(const std::string &key, log_fn_t logger_fn)
+{
+ log_rs().add_logger(key, logger_fn);
+}
+
+void
+uhd::log::set_log_level(uhd::log::severity_level level){
+ log_rs().global_level = level;
+}
+
+void
+uhd::log::set_logger_level(const std::string &key, uhd::log::severity_level level){
+ log_rs().logger_level[key] = level;
+}
+
+void
+uhd::log::set_console_level(uhd::log::severity_level level){
+ set_logger_level(UHD_CONSOLE_LOGGER_KEY, level);
+}
+
+void
+uhd::log::set_file_level(uhd::log::severity_level level){
+ set_logger_level(UHD_FILE_LOGGER_KEY, level);
+}
+
diff --git a/host/lib/utils/msg.cpp b/host/lib/utils/msg.cpp
deleted file mode 100644
index 95879a116..000000000
--- a/host/lib/utils/msg.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-//
-// Copyright 2011 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 <uhd/utils/msg.hpp>
-#include <uhd/utils/log.hpp>
-#include <uhd/utils/static.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/foreach.hpp>
-#include <boost/tokenizer.hpp>
-#include <sstream>
-#include <iostream>
-
-/***********************************************************************
- * Helper functions
- **********************************************************************/
-#define tokenizer(inp, sep) \
- boost::tokenizer<boost::char_separator<char> > \
- (inp, boost::char_separator<char>(sep))
-
-static void msg_to_cout(const std::string &msg){
- std::stringstream ss;
-
- static bool just_had_a_newline = true;
- BOOST_FOREACH(char ch, msg){
- if (just_had_a_newline){
- just_had_a_newline = false;
- ss << "-- ";
- }
- if (ch == '\n'){
- just_had_a_newline = true;
- }
- ss << ch;
- }
-
- std::cout << ss.str() << std::flush;
-}
-
-static void msg_to_cerr(const std::string &title, const std::string &msg){
- std::stringstream ss;
-
- ss << std::endl << title << ":" << std::endl;
- BOOST_FOREACH(const std::string &line, tokenizer(msg, "\n")){
- ss << " " << line << std::endl;
- }
-
- std::cerr << ss.str() << std::flush;
-}
-
-/***********************************************************************
- * Global resources for the messenger
- **********************************************************************/
-struct msg_resource_type{
- boost::mutex mutex;
- uhd::msg::handler_t handler;
-};
-
-UHD_SINGLETON_FCN(msg_resource_type, msg_rs);
-
-/***********************************************************************
- * Setup the message handlers
- **********************************************************************/
-void uhd::msg::register_handler(const handler_t &handler){
- boost::mutex::scoped_lock lock(msg_rs().mutex);
- msg_rs().handler = handler;
-}
-
-static void default_msg_handler(uhd::msg::type_t type, const std::string &msg){
- static boost::mutex msg_mutex;
- boost::mutex::scoped_lock lock(msg_mutex);
- switch(type){
- case uhd::msg::fastpath:
- std::cerr << msg << std::flush;
- break;
-
- case uhd::msg::status:
- msg_to_cout(msg);
- UHD_LOG << "Status message" << std::endl << msg;
- break;
-
- case uhd::msg::warning:
- msg_to_cerr("UHD Warning", msg);
- UHD_LOG << "Warning message" << std::endl << msg;
- break;
-
- case uhd::msg::error:
- msg_to_cerr("UHD Error", msg);
- UHD_LOG << "Error message" << std::endl << msg;
- break;
- }
-}
-
-UHD_STATIC_BLOCK(msg_register_default_handler){
- uhd::msg::register_handler(&default_msg_handler);
-}
-
-/***********************************************************************
- * The message object implementation
- **********************************************************************/
-struct uhd::msg::_msg::impl{
- std::ostringstream ss;
- type_t type;
-};
-
-uhd::msg::_msg::_msg(const type_t type){
- _impl = UHD_PIMPL_MAKE(impl, ());
- _impl->type = type;
-}
-
-uhd::msg::_msg::~_msg(void){
- boost::mutex::scoped_lock lock(msg_rs().mutex);
- msg_rs().handler(_impl->type, _impl->ss.str());
-}
-
-std::ostream & uhd::msg::_msg::operator()(void){
- return _impl->ss;
-}
diff --git a/host/lib/utils/paths.cpp b/host/lib/utils/paths.cpp
index 38839c8d4..5d53f95bd 100644
--- a/host/lib/utils/paths.cpp
+++ b/host/lib/utils/paths.cpp
@@ -22,7 +22,6 @@
#include <boost/algorithm/string.hpp>
#include <boost/bind.hpp>
#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
#include <boost/tokenizer.hpp>
@@ -98,7 +97,7 @@ static std::vector<std::string> get_env_paths(const std::string &var_name){
//convert to full filesystem path, filter blank paths
if (var_value.empty()) return paths;
- BOOST_FOREACH(const std::string &path_string, path_tokenizer(var_value)){
+ for(const std::string &path_string: path_tokenizer(var_value)){
if (path_string.empty()) continue;
paths.push_back(fs::system_complete(path_string).string());
}
@@ -190,7 +189,7 @@ std::vector<fs::path> uhd::get_module_paths(void){
std::vector<fs::path> paths;
std::vector<std::string> env_paths = get_env_paths("UHD_MODULE_PATH");
- BOOST_FOREACH(std::string &str_path, env_paths) {
+ for(std::string &str_path: env_paths) {
paths.push_back(str_path);
}
@@ -272,7 +271,7 @@ std::string uhd::get_images_dir(const std::string &search_paths) {
/* We will start by looking for a path indicated by the `UHD_IMAGES_DIR`
* environment variable. */
std::vector<std::string> env_paths = get_env_paths("UHD_IMAGES_DIR");
- BOOST_FOREACH(possible_dir, env_paths) {
+ for(auto possible_dir: env_paths) {
if (fs::is_directory(fs::path(possible_dir))) {
return possible_dir;
}
@@ -293,7 +292,7 @@ std::string uhd::get_images_dir(const std::string &search_paths) {
std::vector<std::string> search_paths_vector;
boost::split(search_paths_vector, _search_paths, boost::is_any_of(",;"));
- BOOST_FOREACH(std::string& search_path, search_paths_vector) {
+ for(std::string& search_path: search_paths_vector) {
boost::algorithm::trim(search_path);
if (search_path.empty()) continue;
diff --git a/host/lib/utils/tasks.cpp b/host/lib/utils/tasks.cpp
index 661315ae8..fb9a3052e 100644
--- a/host/lib/utils/tasks.cpp
+++ b/host/lib/utils/tasks.cpp
@@ -17,70 +17,69 @@
#include <uhd/utils/tasks.hpp>
#include <uhd/utils/msg_task.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/thread.hpp>
+#include <uhd/utils/log.hpp>
+#include <uhd/exception.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/barrier.hpp>
#include <exception>
#include <iostream>
#include <vector>
+#include <thread>
+#include <atomic>
using namespace uhd;
class task_impl : public task{
public:
- task_impl(const task_fcn_type &task_fcn):
- _spawn_barrier(2)
+ task_impl(const task_fcn_type &task_fcn, const std::string &name):
+ _exit(false)
{
- (void)_thread_group.create_thread(boost::bind(&task_impl::task_loop, this, task_fcn));
- _spawn_barrier.wait();
+ _task = std::thread([this, task_fcn](){ this->task_loop(task_fcn); });
+ if (not name.empty()) {
+#ifdef HAVE_PTHREAD_SETNAME
+ pthread_setname_np(_task->native_handle(), name.substr(0,16).c_str());
+#endif /* HAVE_PTHREAD_SETNAME */
+ }
}
~task_impl(void){
- _running = false;
- _thread_group.interrupt_all();
- _thread_group.join_all();
+ _exit = true;
+ if (_task.joinable()) {
+ _task.join();
+ }
}
private:
-
void task_loop(const task_fcn_type &task_fcn){
- _running = true;
- _spawn_barrier.wait();
-
try{
- while (_running){
+ while (!_exit){
task_fcn();
}
}
- catch(const boost::thread_interrupted &){
- //this is an ok way to exit the task loop
- }
catch(const std::exception &e){
do_error_msg(e.what());
}
catch(...){
- //FIXME
- //Unfortunately, this is also an ok way to end a task,
- //because on some systems boost throws uncatchables.
+ UHD_THROW_INVALID_CODE_PATH();
}
}
void do_error_msg(const std::string &msg){
- UHD_MSG(error)
- << "An unexpected exception was caught in a task loop." << std::endl
- << "The task loop will now exit, things may not work." << std::endl
- << msg << std::endl
+ UHD_LOGGER_ERROR("UHD")
+ << "An unexpected exception was caught in a task loop."
+ << "The task loop will now exit, things may not work."
+ << msg
;
}
- boost::thread_group _thread_group;
- boost::barrier _spawn_barrier;
- bool _running;
+ std::atomic<bool> _exit;
+ std::thread _task;
};
-task::sptr task::make(const task_fcn_type &task_fcn){
- return task::sptr(new task_impl(task_fcn));
+task::sptr task::make(const task_fcn_type &task_fcn, const std::string &name){
+ return task::sptr(new task_impl(task_fcn, name));
}
msg_task::~msg_task(void){
@@ -162,10 +161,10 @@ private:
}
void do_error_msg(const std::string &msg){
- UHD_MSG(error)
- << "An unexpected exception was caught in a task loop." << std::endl
- << "The task loop will now exit, things may not work." << std::endl
- << msg << std::endl
+ UHD_LOGGER_ERROR("UHD")
+ << "An unexpected exception was caught in a task loop."
+ << "The task loop will now exit, things may not work."
+ << msg
;
}
diff --git a/host/lib/utils/thread_priority.cpp b/host/lib/utils/thread.cpp
index 98023c5aa..9100cfd7b 100644
--- a/host/lib/utils/thread_priority.cpp
+++ b/host/lib/utils/thread.cpp
@@ -15,8 +15,8 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include <uhd/utils/thread_priority.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/thread.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
#include <iostream>
@@ -26,10 +26,10 @@ bool uhd::set_thread_priority_safe(float priority, bool realtime){
set_thread_priority(priority, realtime);
return true;
}catch(const std::exception &e){
- UHD_MSG(warning) << boost::format(
+ UHD_LOGGER_WARNING("UHD") << boost::format(
"Unable to set the thread priority. Performance may be negatively affected.\n"
"Please see the general application notes in the manual for instructions.\n"
- "%s\n"
+ "%s"
) % e.what();
return false;
}
@@ -108,3 +108,15 @@ static void check_priority_range(float priority){
}
#endif /* HAVE_THREAD_PRIO_DUMMY */
+
+void uhd::set_thread_name(
+ boost::thread *thrd,
+ const std::string &name
+) {
+#ifdef HAVE_PTHREAD_SETNAME
+ pthread_setname_np(thrd->native_handle(), name.substr(0,16).c_str());
+#endif /* HAVE_PTHREAD_SETNAME */
+#ifdef HAVE_THREAD_SETNAME_DUMMY
+ UHD_LOG_DEBUG("UHD", "Setting thread name is not implemented; wanted to set to " << name);
+#endif /* HAVE_THREAD_SETNAME_DUMMY */
+}
diff --git a/host/lib/utils/thread_priority_c.cpp b/host/lib/utils/thread_priority_c.cpp
index fe019e51d..822126d4a 100644
--- a/host/lib/utils/thread_priority_c.cpp
+++ b/host/lib/utils/thread_priority_c.cpp
@@ -17,8 +17,8 @@
#include <uhd/error.h>
#include <uhd/utils/thread_priority.h>
-#include <uhd/utils/thread_priority.hpp>
-#include <uhd/utils/msg.hpp>
+#include <uhd/utils/thread.hpp>
+#include <uhd/utils/log.hpp>
#include <uhd/exception.hpp>
#include <boost/format.hpp>
#include <iostream>
diff --git a/host/lib/version.cpp b/host/lib/version.cpp
index 2b7125e55..2ba2dd0d6 100644
--- a/host/lib/version.cpp
+++ b/host/lib/version.cpp
@@ -17,21 +17,10 @@
#include <uhd/version.hpp>
#include <uhd/utils/static.hpp>
+#include <uhd/utils/log.hpp>
#include <boost/version.hpp>
#include <iostream>
-#ifndef UHD_DONT_PRINT_SYSTEM_INFO
-UHD_STATIC_BLOCK(print_system_info){
- std::cout
- << BOOST_PLATFORM << "; "
- << BOOST_COMPILER << "; "
- << "Boost_" << BOOST_VERSION << "; "
- << "UHD_" << uhd::get_version_string()
- << std::endl << std::endl
- ;
-}
-#endif
-
std::string uhd::get_version_string(void){
return "@UHD_VERSION@";
}