aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/CMakeLists.txt22
-rw-r--r--host/cmake/Modules/UHDGlobalDefs.cmake30
-rw-r--r--host/cmake/Toolchains/mingw_cross.cmake69
-rw-r--r--host/docs/build.dox10
-rw-r--r--host/examples/init_usrp/CMakeLists.txt9
-rw-r--r--host/include/CMakeLists.txt6
-rw-r--r--host/include/config.h.in24
-rw-r--r--host/include/uhd/CMakeLists.txt7
-rw-r--r--host/include/uhd/config.hpp9
-rw-r--r--host/include/uhd/transport/nirio/nirio_driver_iface.h4
-rw-r--r--host/include/uhd/version.hpp.in (renamed from host/include/uhd/version.hpp)7
-rw-r--r--host/lib/transport/nirio/nifpga_lvbitx.cpp2
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp4
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.cpp11
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.hpp6
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.cpp22
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.h3
-rw-r--r--host/lib/usrp/e300/e300_impl.cpp5
-rw-r--r--host/lib/usrp/e300/e300_network.cpp3
-rw-r--r--host/lib/usrp/e300/e300_remote_codec_ctrl.cpp14
-rw-r--r--host/lib/usrp/e300/e300_remote_codec_ctrl.hpp2
-rw-r--r--host/lib/utils/platform.cpp4
-rw-r--r--host/tests/CMakeLists.txt8
23 files changed, 262 insertions, 19 deletions
diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt
index 856f1ec70..2245cd755 100644
--- a/host/CMakeLists.txt
+++ b/host/CMakeLists.txt
@@ -62,6 +62,7 @@ SET(PKG_MAN_DIR share/man/man1)
########################################################################
# Local Include Dir
########################################################################
+INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
########################################################################
@@ -137,6 +138,22 @@ IF(MSVC)
ADD_DEFINITIONS(/MP) #multi-threaded build
ENDIF(MSVC)
+IF(MINGW)
+ #Avoid depending on MinGW runtime DLLs
+ CHECK_CXX_COMPILER_FLAG(-static-libgcc HAVE_STATIC_LIBGCC_FLAG)
+ IF(HAVE_STATIC_LIBGCC_FLAG)
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc")
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc")
+ SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -static-libgcc")
+ ENDIF()
+ CHECK_CXX_COMPILER_FLAG(-static-libstdc++ HAVE_STATIC_LIBSTDCXX_FLAG)
+ IF(HAVE_STATIC_LIBSTDCXX_FLAG)
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libstdc++")
+ SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -static-libstdc++")
+ ENDIF()
+ENDIF()
+
IF(CYGWIN)
ADD_DEFINITIONS(-D__USE_W32_SOCKETS) #boost asio says we need this
ENDIF(CYGWIN)
@@ -190,6 +207,11 @@ MESSAGE(STATUS "Boost library directories: ${Boost_LIBRARY_DIRS}")
MESSAGE(STATUS "Boost libraries: ${Boost_LIBRARIES}")
########################################################################
+# Additional settings for build environment
+########################################################################
+INCLUDE(UHDGlobalDefs)
+
+########################################################################
# Check Python Modules
########################################################################
INCLUDE(UHDPython)
diff --git a/host/cmake/Modules/UHDGlobalDefs.cmake b/host/cmake/Modules/UHDGlobalDefs.cmake
new file mode 100644
index 000000000..b4c0173ea
--- /dev/null
+++ b/host/cmake/Modules/UHDGlobalDefs.cmake
@@ -0,0 +1,30 @@
+#
+# Copyright 2015 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/>.
+#
+
+# This file sets up all the stuff for the config.h file
+
+INCLUDE(CheckCXXSymbolExists)
+
+## Check for std::log2
+CHECK_CXX_SYMBOL_EXISTS("log2" "cmath" HAVE_LOG2)
+
+## Macros for the version number
+MATH(EXPR UHD_VERSION_ADDED "10000 * ${TRIMMED_VERSION_MAJOR} + 100 * ${TRIMMED_VERSION_MINOR} + ${TRIMMED_VERSION_PATCH}")
+ADD_DEFINITIONS(-DUHD_VERSION=${UHD_VERSION_ADDED})
+
+## make sure the code knows about config.h
+ADD_DEFINITIONS(-DHAVE_CONFIG_H)
diff --git a/host/cmake/Toolchains/mingw_cross.cmake b/host/cmake/Toolchains/mingw_cross.cmake
new file mode 100644
index 000000000..7c5adb002
--- /dev/null
+++ b/host/cmake/Toolchains/mingw_cross.cmake
@@ -0,0 +1,69 @@
+# Use this command:
+#
+# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-mingw.cmake .
+#
+# or for out of source:
+#
+# cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw.cmake ..
+#
+# You will need at least CMake 2.6.0.
+#
+# Adjust the following paths to suit your environment.
+#
+# This file was based on http://www.cmake.org/Wiki/CmakeMingw
+
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Windows)
+
+# Assume the target architecture.
+# XXX for some reason the value set here gets cleared before we reach the
+# main CMakeLists.txt; see that file for a workaround.
+# set(CMAKE_SYSTEM_PROCESSOR i686)
+
+# Which compilers to use for C and C++, and location of target
+# environment.
+if(EXISTS /usr/i586-mingw32msvc)
+ # First look in standard location as used by Debian/Ubuntu/etc.
+ set(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
+ set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
+ set(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
+ set(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc)
+elseif(EXISTS /usr/i686-w64-mingw32)
+ # First look in standard location as used by Debian/Ubuntu/etc.
+ set(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
+ set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
+ set(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
+ set(CMAKE_AR:FILEPATH /usr/bin/i686-w64-mingw32-ar)
+elseif(EXISTS /opt/mingw)
+ # You can get a MinGW environment using the script at <http://mxe.cc>.
+ # It downloads and builds MinGW and most of the dependencies for you.
+ # You can use the toolchain file generated by MXE called `mxe-conf.cmake'
+ # or you can use this file by adjusting the above and following paths.
+ set(CMAKE_C_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-gcc)
+ set(CMAKE_CXX_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-g++)
+ set(CMAKE_RC_COMPILER /opt/mingw/usr/bin/i686-pc-mingw32-windres)
+ set(CMAKE_FIND_ROOT_PATH /opt/mingw/usr/i686-pc-mingw32)
+else()
+ # Else fill in local path which the user will likely adjust.
+ # This is the location assumed by <http://www.libsdl.org/extras/win32/cross/>
+ set(CMAKE_C_COMPILER /usr/local/cross-tools/bin/i386-mingw32-gcc)
+ set(CMAKE_CXX_COMPILER /usr/local/cross-tools/bin/i386-mingw32-g++)
+ set(CMAKE_RC_COMPILER /usr/local/cross-tools/bin/i386-mingw32-windres)
+ set(CMAKE_FIND_ROOT_PATH /usr/local/cross-tools)
+endif()
+
+# Adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Tell pkg-config not to look at the target environment's .pc files.
+# Setting PKG_CONFIG_LIBDIR sets the default search directory, but we have to
+# set PKG_CONFIG_PATH as well to prevent pkg-config falling back to the host's
+# path.
+set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
+set(ENV{PKG_CONFIG_PATH} ${CMAKE_FIND_ROOT_PATH}/lib/pkgconfig)
+
+set(ENV{MINGDIR} ${CMAKE_FIND_ROOT_PATH})
diff --git a/host/docs/build.dox b/host/docs/build.dox
index 0ca9933bb..1e73bbfb3 100644
--- a/host/docs/build.dox
+++ b/host/docs/build.dox
@@ -32,11 +32,13 @@ or install msysGit from http://code.google.com/p/msysgit/downloads/list.
\section cpp_compiler C++ Compiler
-The following compilers are known to work:
+The following compilers are known to work and officially supported:
-- GCC
-- Clang
-- MSVC
+- GCC >= 4.4
+- Clang >= 3.1
+- MSVC >= 2010
+
+Other compilers (or lower versions) may work, but are unsupported.
### CMake
diff --git a/host/examples/init_usrp/CMakeLists.txt b/host/examples/init_usrp/CMakeLists.txt
index afbf73027..420e79993 100644
--- a/host/examples/init_usrp/CMakeLists.txt
+++ b/host/examples/init_usrp/CMakeLists.txt
@@ -24,6 +24,14 @@ set(BOOST_REQUIRED_COMPONENTS
system
thread
)
+if(MSVC)
+ set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking")
+ if(BOOST_ALL_DYN_LINK)
+ add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc
+ else(BOOST_ALL_DYN_LINK)
+ set(BOOST_REQUIRED_COMPONENTS) #empty components list for static link
+ endif(BOOST_ALL_DYN_LINK)
+endif(MSVC)
find_package(Boost "1.46" REQUIRED ${BOOST_REQUIRED_COMPONENTS})
# To add UHD as a dependency to this project, add a line such as this:
@@ -37,6 +45,7 @@ include_directories(
${Boost_INCLUDE_DIRS}
${UHD_INCLUDE_DIRS}
)
+link_directories(${Boost_LIBRARY_DIRS})
### Make the executable #######################################################
add_executable(init_usrp init_usrp.cpp)
diff --git a/host/include/CMakeLists.txt b/host/include/CMakeLists.txt
index 3f7ca2cb7..780213918 100644
--- a/host/include/CMakeLists.txt
+++ b/host/include/CMakeLists.txt
@@ -1,5 +1,5 @@
#
-# Copyright 2010 Ettus Research LLC
+# Copyright 2010,2015 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,5 +15,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+CONFIGURE_FILE(
+ ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/config.h
+)
ADD_SUBDIRECTORY(uhd)
diff --git a/host/include/config.h.in b/host/include/config.h.in
new file mode 100644
index 000000000..bd690299e
--- /dev/null
+++ b/host/include/config.h.in
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2015 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/>.
+ */
+
+#cmakedefine HAVE_LOG2
+
+/* Version macros */
+#cmakedefine UHD_VERSION_MAJOR ${TRIMMED_VERSION_MAJOR}
+#cmakedefine UHD_VERSION_MINOR ${TRIMMED_VERSION_MINOR}
+#cmakedefine UHD_VERSION_PATCH ${TRIMMED_VERSION_PATCH}
+#cmakedefine UHD_VERSION @UHD_VERSION_ADDED@
diff --git a/host/include/uhd/CMakeLists.txt b/host/include/uhd/CMakeLists.txt
index 318577b7c..f6123aa90 100644
--- a/host/include/uhd/CMakeLists.txt
+++ b/host/include/uhd/CMakeLists.txt
@@ -21,6 +21,11 @@ ADD_SUBDIRECTORY(usrp)
ADD_SUBDIRECTORY(usrp_clock)
ADD_SUBDIRECTORY(utils)
+CONFIGURE_FILE(
+ ${CMAKE_CURRENT_SOURCE_DIR}/version.hpp.in
+ ${CMAKE_CURRENT_BINARY_DIR}/version.hpp
+)
+
UHD_INSTALL(FILES
config.hpp
convert.hpp
@@ -31,7 +36,7 @@ UHD_INSTALL(FILES
property_tree.ipp
property_tree.hpp
stream.hpp
- version.hpp
+ ${CMAKE_CURRENT_BINARY_DIR}/version.hpp
DESTINATION ${INCLUDE_DIR}/uhd
COMPONENT headers
)
diff --git a/host/include/uhd/config.hpp b/host/include/uhd/config.hpp
index 619bd0787..173845fea 100644
--- a/host/include/uhd/config.hpp
+++ b/host/include/uhd/config.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2011 Ettus Research LLC
+// Copyright 2010-2011,2014 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
@@ -56,6 +56,13 @@ typedef ptrdiff_t ssize_t;
#define UHD_DEPRECATED __declspec(deprecated)
#define UHD_ALIGNED(x) __declspec(align(x))
#define UHD_UNUSED(x) x
+#elif defined(__MINGW32__)
+ #define UHD_EXPORT __declspec(dllexport)
+ #define UHD_IMPORT __declspec(dllimport)
+ #define UHD_INLINE inline
+ #define UHD_DEPRECATED __declspec(deprecated)
+ #define UHD_ALIGNED(x) __declspec(align(x))
+ #define UHD_UNUSED(x) x
#elif defined(__GNUG__) && __GNUG__ >= 4
#define UHD_EXPORT __attribute__((visibility("default")))
#define UHD_IMPORT __attribute__((visibility("default")))
diff --git a/host/include/uhd/transport/nirio/nirio_driver_iface.h b/host/include/uhd/transport/nirio/nirio_driver_iface.h
index 83afd816a..3e0e56a7f 100644
--- a/host/include/uhd/transport/nirio/nirio_driver_iface.h
+++ b/host/include/uhd/transport/nirio/nirio_driver_iface.h
@@ -24,9 +24,9 @@
#include <uhd/transport/nirio/status.h>
#include <uhd/config.hpp>
#if defined(UHD_PLATFORM_WIN32)
- #include <Windows.h>
+ #include <windows.h>
#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union
- #include <WinIoCtl.h>
+ #include <winioctl.h>
#pragma warning(default:4201)
#elif !defined(UHD_PLATFORM_LINUX)
#include <IOKit/IOKitLib.h>
diff --git a/host/include/uhd/version.hpp b/host/include/uhd/version.hpp.in
index 998765899..725a655c4 100644
--- a/host/include/uhd/version.hpp
+++ b/host/include/uhd/version.hpp.in
@@ -29,6 +29,13 @@
*/
#define UHD_VERSION_ABI_STRING "3.8.0-0"
+/*!
+ * A macro to check UHD version at compile-time.
+ * The value of this macro is MAJOR * 10000 + MINOR * 100 + PATCH
+ * (e.g., for UHD 3.8.1 this is 30801).
+ */
+#cmakedefine UHD_VERSION @UHD_VERSION_ADDED@
+
namespace uhd{
//! Get the version string (dotted version number + build info)
diff --git a/host/lib/transport/nirio/nifpga_lvbitx.cpp b/host/lib/transport/nirio/nifpga_lvbitx.cpp
index b87d87a8d..189037163 100644
--- a/host/lib/transport/nirio/nifpga_lvbitx.cpp
+++ b/host/lib/transport/nirio/nifpga_lvbitx.cpp
@@ -115,7 +115,7 @@ std::string nifpga_lvbitx::_get_fpga_images_dir(const std::string search_paths)
// directories searched for a LVBITX image.
//
char* uhd_images_dir;
-#ifdef UHD_PLATFORM_WIN32
+#if defined(UHD_PLATFORM_WIN32) && !defined(__MINGW32__) // Some versions of MinGW don't expose _dupenv_s
size_t len;
errno_t err = _dupenv_s(&uhd_images_dir, &len, "UHD_IMAGES_DIR");
if(not err and uhd_images_dir != NULL) search_path_vtr.push_back(std::string(uhd_images_dir));
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index 9b323cb13..1523f1858 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -709,7 +709,7 @@ void b200_impl::setup_radio(const size_t dspno)
_tree->create<meta_range_t>(rf_fe_path / "freq" / "range")
.publish(boost::bind(&ad9361_ctrl::get_rf_freq_range));
- //setup antenna stuff
+ //setup RX related stuff
if (key[0] == 'R')
{
static const std::vector<std::string> ants = boost::assign::list_of("TX/RX")("RX2");
@@ -717,6 +717,8 @@ void b200_impl::setup_radio(const size_t dspno)
_tree->create<std::string>(rf_fe_path / "antenna" / "value")
.subscribe(boost::bind(&b200_impl::update_antenna_sel, this, dspno, _1))
.set("RX2");
+ _tree->create<sensor_value_t>(rf_fe_path / "sensors" / "rssi")
+ .publish(boost::bind(&ad9361_ctrl::get_rssi, _codec_ctrl, key));
}
if (key[0] == 'T')
{
diff --git a/host/lib/usrp/common/ad9361_ctrl.cpp b/host/lib/usrp/common/ad9361_ctrl.cpp
index c84fcee39..f94536ed9 100644
--- a/host/lib/usrp/common/ad9361_ctrl.cpp
+++ b/host/lib/usrp/common/ad9361_ctrl.cpp
@@ -148,7 +148,7 @@ public:
return _device.tune(direction, value);
}
- //! turn on/off Catalina's data port loopback
+ //! turn on/off data port loopback
void data_port_loopback(const bool on)
{
boost::lock_guard<boost::mutex> lock(_mutex);
@@ -156,6 +156,15 @@ public:
_device.data_port_loopback(on);
}
+ //! read internal RSSI sensor
+ sensor_value_t get_rssi(const std::string &which)
+ {
+ boost::lock_guard<boost::mutex> lock(_mutex);
+
+ ad9361_device_t::chain_t chain =_get_chain_from_antenna(which);
+ return sensor_value_t("RSSI", _device.get_rssi(chain), "dB");
+ }
+
private:
static ad9361_device_t::direction_t _get_direction_from_antenna(const std::string& antenna)
{
diff --git a/host/lib/usrp/common/ad9361_ctrl.hpp b/host/lib/usrp/common/ad9361_ctrl.hpp
index 93d697349..16e1d23eb 100644
--- a/host/lib/usrp/common/ad9361_ctrl.hpp
+++ b/host/lib/usrp/common/ad9361_ctrl.hpp
@@ -21,6 +21,7 @@
#include <uhd/transport/zero_copy.hpp>
#include <uhd/types/ranges.hpp>
#include <uhd/types/serial.hpp>
+#include <uhd/types/sensors.hpp>
#include <boost/shared_ptr.hpp>
#include <ad9361_device.h>
#include <string>
@@ -94,8 +95,11 @@ public:
//! tune the given frontend, return the exact value
virtual double tune(const std::string &which, const double value) = 0;
- //! turn on/off Catalina's data port loopback
+ //! turn on/off data port loopback
virtual void data_port_loopback(const bool on) = 0;
+
+ //! read internal RSSI sensor
+ virtual sensor_value_t get_rssi(const std::string &which) = 0;
};
}}
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
index d56cedec9..b5e116a70 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
@@ -1911,4 +1911,26 @@ void ad9361_device_t::data_port_loopback(const bool loopback_enabled)
_io_iface->poke8(0x3F5, (loopback_enabled ? 0x01 : 0x00));
}
+/* Read back the internal RSSI measurement data. The result is in dB
+ * but not in absolute units. If absolute units are required
+ * a bench calibration should be done.
+ * -0.25dB / bit 9bit resolution.*/
+double ad9361_device_t::get_rssi(chain_t chain)
+{
+ boost::uint32_t reg_rssi = 0;
+ boost::uint8_t lsb_bit_pos = 0;
+ if (chain == CHAIN_1) {
+ reg_rssi = 0x1A7;
+ lsb_bit_pos = 0;
+ }else {
+ reg_rssi = 0x1A9;
+ lsb_bit_pos = 1;
+ }
+ boost::uint8_t msbs = _io_iface->peek8(reg_rssi);
+ boost::uint8_t lsb = ((_io_iface->peek8(0x1AB)) >> lsb_bit_pos) & 0x01;
+ boost::uint16_t val = ((msbs << 1) | lsb);
+ double rssi = (-0.25f * ((double)val)); //-0.25dB/lsb (See Gain Control Users Guide p. 25)
+ return rssi;
+}
+
}}
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.h b/host/lib/usrp/common/ad9361_driver/ad9361_device.h
index 41af2eeea..8c163572c 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.h
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.h
@@ -63,6 +63,9 @@ public:
/* Turn on/off AD9361's TX port --> RX port loopback. */
void data_port_loopback(const bool loopback_enabled);
+ /* Read back the internal RSSI measurement data. */
+ double get_rssi(chain_t chain);
+
//Constants
static const double AD9361_MAX_GAIN;
static const double AD9361_MAX_CLOCK_RATE;
diff --git a/host/lib/usrp/e300/e300_impl.cpp b/host/lib/usrp/e300/e300_impl.cpp
index 8807a56e4..43a9b7b26 100644
--- a/host/lib/usrp/e300/e300_impl.cpp
+++ b/host/lib/usrp/e300/e300_impl.cpp
@@ -1097,14 +1097,15 @@ void e300_impl::_setup_radio(const size_t dspno)
_tree->create<meta_range_t>(rf_fe_path / "freq" / "range")
.publish(boost::bind(&ad9361_ctrl::get_rf_freq_range));
- //setup antenna stuff
+ //setup RX related stuff
if (key[0] == 'R') {
static const std::vector<std::string> ants = boost::assign::list_of("TX/RX")("RX2");
_tree->create<std::vector<std::string> >(rf_fe_path / "antenna" / "options").set(ants);
_tree->create<std::string>(rf_fe_path / "antenna" / "value")
.subscribe(boost::bind(&e300_impl::_update_antenna_sel, this, dspno, _1))
.set("RX2");
-
+ _tree->create<sensor_value_t>(rf_fe_path / "sensors" / "rssi")
+ .publish(boost::bind(&ad9361_ctrl::get_rssi, _codec_ctrl, key));
}
if (key[0] == 'T') {
static const std::vector<std::string> ants(1, "TX/RX");
diff --git a/host/lib/usrp/e300/e300_network.cpp b/host/lib/usrp/e300/e300_network.cpp
index 59e1eec86..189dba838 100644
--- a/host/lib/usrp/e300/e300_network.cpp
+++ b/host/lib/usrp/e300/e300_network.cpp
@@ -224,6 +224,9 @@ static void e300_codec_ctrl_tunnel(
_codec_ctrl->data_port_loopback(
uhd::ntohx<boost::uint32_t>(in->bits) & 1);
break;
+ case codec_xact_t::ACTION_GET_RSSI:
+ out->rssi = _codec_ctrl->get_rssi(which_str).to_real();
+ break;
default:
UHD_MSG(status) << "Got unknown request?!" << std::endl;
//Zero out actions to fail this request on client
diff --git a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
index bcc8ee4cf..ed8131e2f 100644
--- a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
+++ b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
@@ -106,6 +106,20 @@ public:
_transact();
}
+ sensor_value_t get_rssi(const std::string &which)
+ {
+ _clear();
+ _args.action = uhd::htonx<boost::uint32_t>(transaction_t::ACTION_GET_RSSI);
+ if (which == "RX1") _args.which = uhd::htonx<boost::uint32_t>(transaction_t::CHAIN_RX1);
+ else if (which == "RX2") _args.which = uhd::htonx<boost::uint32_t>(transaction_t::CHAIN_RX2);
+ else throw std::runtime_error("e300_remote_codec_ctrl_impl incorrect chain string.");
+ _args.bits = uhd::htonx<boost::uint32_t>(0);
+
+ _transact();
+
+ return sensor_value_t("RSSI", _retval.rssi, "dB");
+ }
+
private:
void _transact() {
{
diff --git a/host/lib/usrp/e300/e300_remote_codec_ctrl.hpp b/host/lib/usrp/e300/e300_remote_codec_ctrl.hpp
index 015ad8323..cbc4b52d2 100644
--- a/host/lib/usrp/e300/e300_remote_codec_ctrl.hpp
+++ b/host/lib/usrp/e300/e300_remote_codec_ctrl.hpp
@@ -33,6 +33,7 @@ public:
double rate;
double gain;
double freq;
+ double rssi;
boost::uint64_t bits;
};
@@ -42,6 +43,7 @@ public:
static const boost::uint32_t ACTION_SET_ACTIVE_CHANS = 12;
static const boost::uint32_t ACTION_TUNE = 13;
static const boost::uint32_t ACTION_SET_LOOPBACK = 14;
+ static const boost::uint32_t ACTION_GET_RSSI = 15;
//Values for "which"
static const boost::uint32_t CHAIN_NONE = 0;
diff --git a/host/lib/utils/platform.cpp b/host/lib/utils/platform.cpp
index e2f92039e..a9cef663b 100644
--- a/host/lib/utils/platform.cpp
+++ b/host/lib/utils/platform.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2012 Ettus Research LLC
+// Copyright 2010-2012,2014 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
@@ -19,7 +19,7 @@
#include <uhd/config.hpp>
#include <boost/functional/hash.hpp>
#ifdef UHD_PLATFORM_WIN32
-#include <Windows.h>
+#include <windows.h>
#else
#include <unistd.h>
#endif
diff --git a/host/tests/CMakeLists.txt b/host/tests/CMakeLists.txt
index 829fb8e94..596ab1017 100644
--- a/host/tests/CMakeLists.txt
+++ b/host/tests/CMakeLists.txt
@@ -48,7 +48,11 @@ SET(test_sources
)
#turn each test cpp file into an executable with an int main() function
-ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
+IF(MINGW)
+ ADD_DEFINITIONS(-DBOOST_TEST_MAIN)
+ELSE()
+ ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN)
+ENDIF()
SET(UHD_TEST_TARGET_DEPS uhd)
SET(UHD_TEST_LIBRARY_DIRS ${Boost_LIBRARY_DIRS})
@@ -57,7 +61,7 @@ SET(UHD_TEST_LIBRARY_DIRS ${Boost_LIBRARY_DIRS})
FOREACH(test_source ${test_sources})
GET_FILENAME_COMPONENT(test_name ${test_source} NAME_WE)
ADD_EXECUTABLE(${test_name} ${test_source})
- TARGET_LINK_LIBRARIES(${test_name} uhd)
+ TARGET_LINK_LIBRARIES(${test_name} uhd ${Boost_LIBRARIES})
UHD_ADD_TEST(${test_name} ${test_name})
UHD_INSTALL(TARGETS ${test_name} RUNTIME DESTINATION ${PKG_LIB_DIR}/tests COMPONENT tests)
ENDFOREACH(test_source)