1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-09-18 02:09:48 +00:00

Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next

This commit is contained in:
Carles Fernandez 2019-06-18 12:16:22 +02:00
commit f0726ecc4c
14 changed files with 637 additions and 47 deletions

View File

@ -143,7 +143,7 @@ if(NOT ${THIS_IS_A_RELEASE})
find_package(Git) find_package(Git)
set_package_properties(Git PROPERTIES set_package_properties(Git PROPERTIES
URL "https://git-scm.com" URL "https://git-scm.com"
DESCRIPTION "A free and open source distributed version control system" DESCRIPTION "A free and open source distributed version control system (found: ${GIT_VERSION_STRING})"
PURPOSE "Manage version control, get MINOR_VERSION name for version number." PURPOSE "Manage version control, get MINOR_VERSION name for version number."
TYPE REQUIRED TYPE REQUIRED
) )
@ -610,16 +610,31 @@ set(GR_REQUIRED_COMPONENTS RUNTIME PMT BLOCKS FFT FILTER ANALOG)
find_package(UHD) find_package(UHD)
set_package_properties(UHD PROPERTIES set_package_properties(UHD PROPERTIES
URL "https://www.ettus.com/sdr-software/detail/usrp-hardware-driver" URL "https://www.ettus.com/sdr-software/detail/usrp-hardware-driver"
DESCRIPTION "USRP Hardware Driver"
PURPOSE "Used for communication with front-ends of the USRP family." PURPOSE "Used for communication with front-ends of the USRP family."
TYPE OPTIONAL TYPE OPTIONAL
) )
if(ENABLE_UHD) if(ENABLE_UHD)
if(NOT UHD_FOUND) if(NOT UHD_FOUND)
set(ENABLE_UHD OFF) set(ENABLE_UHD OFF)
set_package_properties(UHD PROPERTIES
DESCRIPTION "USRP Hardware Driver"
)
else() else()
set(GR_REQUIRED_COMPONENTS ${GR_REQUIRED_COMPONENTS} UHD) set(GR_REQUIRED_COMPONENTS ${GR_REQUIRED_COMPONENTS} UHD)
if(UHD_VERSION)
set_package_properties(UHD PROPERTIES
DESCRIPTION "USRP Hardware Driver (found: v${UHD_VERSION})"
)
else()
set_package_properties(UHD PROPERTIES
DESCRIPTION "USRP Hardware Driver"
)
endif()
endif() endif()
else()
set_package_properties(UHD PROPERTIES
DESCRIPTION "USRP Hardware Driver"
)
endif() endif()
find_package(GNURADIO) find_package(GNURADIO)
@ -809,15 +824,15 @@ endif()
# VOLK - Vector-Optimized Library of Kernels # VOLK - Vector-Optimized Library of Kernels
################################################################################ ################################################################################
find_package(VOLK) find_package(VOLK)
set_package_properties(VOLK PROPERTIES
URL "http://libvolk.org"
DESCRIPTION "Vector-Optimized Library of Kernels"
PURPOSE "Provides an abstraction of optimized math routines targeting several SIMD processors."
TYPE REQUIRED
)
if(NOT VOLK_FOUND) if(NOT VOLK_FOUND)
message(FATAL_ERROR "*** VOLK is required to build gnss-sdr") message(FATAL_ERROR "*** VOLK is required to build gnss-sdr")
endif() endif()
set_package_properties(VOLK PROPERTIES
URL "http://libvolk.org"
DESCRIPTION "Vector-Optimized Library of Kernels (found: ${VOLK_VERSION})"
PURPOSE "Provides an abstraction of optimized math routines targeting several SIMD processors."
TYPE REQUIRED
)
@ -875,26 +890,32 @@ if(NOT VOLKGNSSSDR_FOUND)
message(FATAL_ERROR "six - python 2 and 3 compatibility library required to build VOLK_GNSSSDR") message(FATAL_ERROR "six - python 2 and 3 compatibility library required to build VOLK_GNSSSDR")
endif() endif()
set_package_properties(Python3 PROPERTIES if(Python3_FOUND)
URL "https://www.python.org/" set_package_properties(Python3 PROPERTIES
DESCRIPTION "An interpreted, high-level, general-purpose programming language" URL "https://www.python.org/"
PURPOSE "Required to build volk_gnsssdr." DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: ${Python3_VERSION})"
TYPE REQUIRED PURPOSE "Required to build volk_gnsssdr."
) TYPE REQUIRED
)
endif()
set_package_properties(Python2 PROPERTIES if(Python2_FOUND)
URL "https://www.python.org/" set_package_properties(Python2 PROPERTIES
DESCRIPTION "An interpreted, high-level, general-purpose programming language" URL "https://www.python.org/"
PURPOSE "Required to build volk_gnsssdr." DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: ${Python2_VERSION})"
TYPE REQUIRED PURPOSE "Required to build volk_gnsssdr."
) TYPE REQUIRED
)
endif()
set_package_properties(PythonInterp PROPERTIES if(PYTHONINTERP_FOUND)
URL "https://www.python.org/" set_package_properties(PythonInterp PROPERTIES
DESCRIPTION "An interpreted, high-level, general-purpose programming language" URL "https://www.python.org/"
PURPOSE "Required to build volk_gnsssdr." DESCRIPTION "An interpreted, high-level, general-purpose programming language (found: ${PYTHON_VERSION_STRING})"
TYPE REQUIRED PURPOSE "Required to build volk_gnsssdr."
) TYPE REQUIRED
)
endif()
set(READ_ENVIRO "") set(READ_ENVIRO "")
if(ENABLE_PACKAGING) if(ENABLE_PACKAGING)
@ -1343,7 +1364,6 @@ endif()
find_package(Armadillo) find_package(Armadillo)
set_package_properties(Armadillo PROPERTIES set_package_properties(Armadillo PROPERTIES
URL "http://arma.sourceforge.net/" URL "http://arma.sourceforge.net/"
DESCRIPTION "C++ library for linear algebra and scientific computing"
PURPOSE "Used for matrix computations." PURPOSE "Used for matrix computations."
TYPE REQUIRED TYPE REQUIRED
) )
@ -1445,6 +1465,7 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO)
INTERFACE_LINK_LIBRARIES "${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}" INTERFACE_LINK_LIBRARIES "${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}"
) )
set_package_properties(Armadillo PROPERTIES set_package_properties(Armadillo PROPERTIES
DESCRIPTION "C++ library for linear algebra and scientific computing"
PURPOSE "Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." PURPOSE "Armadillo ${GNSSSDR_ARMADILLO_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
) )
endif() endif()
@ -1503,7 +1524,7 @@ if(NOT GNUTLS_OPENSSL_LIBRARY)
find_package(OpenSSL) find_package(OpenSSL)
set_package_properties(OpenSSL PROPERTIES set_package_properties(OpenSSL PROPERTIES
URL "https://www.openssl.org" URL "https://www.openssl.org"
DESCRIPTION "Cryptography and SSL/TLS Toolkit" DESCRIPTION "Cryptography and SSL/TLS Toolkit (found: v${OPENSSL_VERSION})"
PURPOSE "Used for the SUPL protocol implementation." PURPOSE "Used for the SUPL protocol implementation."
TYPE REQUIRED TYPE REQUIRED
) )
@ -1540,7 +1561,6 @@ endif()
find_package(MATIO) find_package(MATIO)
set_package_properties(MATIO PROPERTIES set_package_properties(MATIO PROPERTIES
URL "https://github.com/tbeu/matio" URL "https://github.com/tbeu/matio"
DESCRIPTION "MATLAB MAT File I/O Library"
PURPOSE "Used to store processing block's results in MAT files readable from MATLAB/Octave." PURPOSE "Used to store processing block's results in MAT files readable from MATLAB/Octave."
TYPE REQUIRED TYPE REQUIRED
) )
@ -1550,6 +1570,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
endif() endif()
message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded and built automatically") message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded and built automatically")
message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
set_package_properties(MATIO PROPERTIES
DESCRIPTION "MATLAB MAT File I/O Library"
)
find_package(ZLIB) find_package(ZLIB)
set_package_properties(ZLIB PROPERTIES set_package_properties(ZLIB PROPERTIES
URL "https://www.zlib.net/" URL "https://www.zlib.net/"
@ -1682,7 +1705,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS
) )
else() else()
set_package_properties(MATIO PROPERTIES set_package_properties(MATIO PROPERTIES
DESCRIPTION "MATLAB MAT File I/O Library (found: v.${MATIO_VERSION_STRING})" DESCRIPTION "MATLAB MAT File I/O Library (found: v${MATIO_VERSION_STRING})"
) )
endif() endif()
@ -1694,11 +1717,13 @@ endif()
find_package(PUGIXML) find_package(PUGIXML)
set_package_properties(PUGIXML PROPERTIES set_package_properties(PUGIXML PROPERTIES
URL "https://pugixml.org/" URL "https://pugixml.org/"
DESCRIPTION "Light-weight, simple and fast XML parser for C++"
PURPOSE "Used to handle Galileo almanac XML files published by the European GNSS Service Centre." PURPOSE "Used to handle Galileo almanac XML files published by the European GNSS Service Centre."
TYPE REQUIRED TYPE REQUIRED
) )
if(NOT PUGIXML_FOUND) if(NOT PUGIXML_FOUND)
set_package_properties(PUGIXML PROPERTIES
DESCRIPTION "Light-weight, simple and fast XML parser for C++"
)
message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") message(STATUS " PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.")
set(PUGIXML_COMPILER -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}) set(PUGIXML_COMPILER -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER})
set(TOOLCHAIN_ARG "") set(TOOLCHAIN_ARG "")
@ -1748,6 +1773,16 @@ if(NOT PUGIXML_FOUND)
set_package_properties(PUGIXML PROPERTIES set_package_properties(PUGIXML PROPERTIES
PURPOSE "PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." PURPOSE "PugiXML v${GNSSSDR_PUGIXML_LOCAL_VERSION} will be downloaded and built when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'."
) )
else()
if(PUGIXML_VERSION)
set_package_properties(PUGIXML PROPERTIES
DESCRIPTION "Light-weight, simple and fast XML parser for C++ (found: ${PUGIXML_VERSION})"
)
else()
set_package_properties(PUGIXML PROPERTIES
DESCRIPTION "Light-weight, simple and fast XML parser for C++"
)
endif()
endif() endif()
@ -1758,7 +1793,6 @@ endif()
find_package(Protobuf) find_package(Protobuf)
set_package_properties(Protobuf PROPERTIES set_package_properties(Protobuf PROPERTIES
URL "https://developers.google.com/protocol-buffers/" URL "https://developers.google.com/protocol-buffers/"
DESCRIPTION "Structured data serialization mechanism"
PURPOSE "Used to serialize output data in a way that can be read by other applications." PURPOSE "Used to serialize output data in a way that can be read by other applications."
TYPE REQUIRED TYPE REQUIRED
) )
@ -1816,6 +1850,10 @@ if(Protobuf_FOUND)
set_package_properties(Protobuf PROPERTIES set_package_properties(Protobuf PROPERTIES
DESCRIPTION "Structured data serialization mechanism (found: v${Protobuf_VERSION})" DESCRIPTION "Structured data serialization mechanism (found: v${Protobuf_VERSION})"
) )
else()
set_package_properties(Protobuf PROPERTIES
DESCRIPTION "Structured data serialization mechanism"
)
endif() endif()
if(Protobuf_FOUND AND CMAKE_CROSSCOMPILING) if(Protobuf_FOUND AND CMAKE_CROSSCOMPILING)
@ -2159,7 +2197,6 @@ endif()
find_package(GROSMOSDR) find_package(GROSMOSDR)
set_package_properties(GROSMOSDR PROPERTIES set_package_properties(GROSMOSDR PROPERTIES
URL "https://osmocom.org/projects/gr-osmosdr/wiki" URL "https://osmocom.org/projects/gr-osmosdr/wiki"
DESCRIPTION "osmocom GNU Radio blocks"
PURPOSE "Used for communication with OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.)." PURPOSE "Used for communication with OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.)."
TYPE OPTIONAL TYPE OPTIONAL
) )
@ -2167,7 +2204,19 @@ if(ENABLE_OSMOSDR)
if(GROSMOSDR_FOUND) if(GROSMOSDR_FOUND)
message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled.") message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled.")
message(STATUS " You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ..'") message(STATUS " You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ..'")
if(GROSMOSDR_VERSION)
set_package_properties(GROSMOSDR PROPERTIES
DESCRIPTION "osmocom GNU Radio blocks (found: ${GROSMOSDR_VERSION})"
)
else()
set_package_properties(GROSMOSDR PROPERTIES
DESCRIPTION "osmocom GNU Radio blocks"
)
endif()
else() else()
set_package_properties(GROSMOSDR PROPERTIES
DESCRIPTION "osmocom GNU Radio blocks"
)
if(ENABLE_PACKAGING) if(ENABLE_PACKAGING)
message(WARNING "gr-osmosdr has not been found. Source blocks depending on it will NOT be built.") message(WARNING "gr-osmosdr has not been found. Source blocks depending on it will NOT be built.")
else() else()
@ -2175,6 +2224,9 @@ if(ENABLE_OSMOSDR)
endif() endif()
endif() endif()
else() else()
set_package_properties(GROSMOSDR PROPERTIES
DESCRIPTION "osmocom GNU Radio blocks"
)
message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled.") message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled.")
message(STATUS " Enable it with 'cmake -DENABLE_OSMOSDR=ON ..' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)") message(STATUS " Enable it with 'cmake -DENABLE_OSMOSDR=ON ..' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)")
endif() endif()
@ -2188,10 +2240,19 @@ endif()
find_package(GRIIO) find_package(GRIIO)
set_package_properties(GRIIO PROPERTIES set_package_properties(GRIIO PROPERTIES
URL "https://github.com/analogdevicesinc/gr-iio" URL "https://github.com/analogdevicesinc/gr-iio"
DESCRIPTION "IIO blocks for GNU Radio"
PURPOSE "Used for communication with PlutoSDR and FMCOMMS devices." PURPOSE "Used for communication with PlutoSDR and FMCOMMS devices."
TYPE OPTIONAL TYPE OPTIONAL
) )
if(GRIIO_FOUND AND GRIIO_VERSION)
set_package_properties(GRIIO PROPERTIES
DESCRIPTION "IIO blocks for GNU Radio (found: v${GRIIO_VERSION})"
)
else()
set_package_properties(GRIIO PROPERTIES
DESCRIPTION "IIO blocks for GNU Radio"
)
endif()
##################################################################### #####################################################################
@ -2202,10 +2263,18 @@ set_package_properties(GRIIO PROPERTIES
find_package(LIBIIO) find_package(LIBIIO)
set_package_properties(LIBIIO PROPERTIES set_package_properties(LIBIIO PROPERTIES
URL "https://github.com/analogdevicesinc/libiio" URL "https://github.com/analogdevicesinc/libiio"
DESCRIPTION "A library for interfacing with Linux IIO devices"
PURPOSE "Used for communication with the AD9361 chipset." PURPOSE "Used for communication with the AD9361 chipset."
TYPE OPTIONAL TYPE OPTIONAL
) )
if(LIBIIO_FOUND AND LIBIIO_VERSION)
set_package_properties(LIBIIO PROPERTIES
DESCRIPTION "A library for interfacing with Linux IIO devices (found: v${LIBIIO_VERSION})"
)
else()
set_package_properties(LIBIIO PROPERTIES
DESCRIPTION "A library for interfacing with Linux IIO devices"
)
endif()
############################################## ##############################################

View File

@ -92,6 +92,10 @@ find_library(IIO_LIBRARIES
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GRIIO DEFAULT_MSG IIO_LIBRARIES IIO_INCLUDE_DIRS) find_package_handle_standard_args(GRIIO DEFAULT_MSG IIO_LIBRARIES IIO_INCLUDE_DIRS)
if(PC_IIO_VERSION)
set(GRIIO_VERSION ${PC_IIO_VERSION})
endif()
if(GRIIO_FOUND AND NOT TARGET Gnuradio::iio) if(GRIIO_FOUND AND NOT TARGET Gnuradio::iio)
add_library(Gnuradio::iio SHARED IMPORTED) add_library(Gnuradio::iio SHARED IMPORTED)
set_target_properties(Gnuradio::iio PROPERTIES set_target_properties(Gnuradio::iio PROPERTIES

View File

@ -95,6 +95,10 @@ find_library(GROSMOSDR_LIBRARIES
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GROSMOSDR DEFAULT_MSG GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR) find_package_handle_standard_args(GROSMOSDR DEFAULT_MSG GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR)
if(GROSMOSDR_PKG_VERSION)
set(GROSMOSDR_VERSION ${GROSMOSDR_PKG_VERSION})
endif()
if(GROSMOSDR_FOUND AND NOT TARGET Gnuradio::osmosdr) if(GROSMOSDR_FOUND AND NOT TARGET Gnuradio::osmosdr)
add_library(Gnuradio::osmosdr SHARED IMPORTED) add_library(Gnuradio::osmosdr SHARED IMPORTED)
set_target_properties(Gnuradio::osmosdr PROPERTIES set_target_properties(Gnuradio::osmosdr PROPERTIES

View File

@ -85,6 +85,10 @@ endif()
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LIBIIO DEFAULT_MSG LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS) find_package_handle_standard_args(LIBIIO DEFAULT_MSG LIBIIO_LIBRARIES LIBIIO_INCLUDE_DIRS)
if(PC_LIBIIO_VERSION)
set(LIBIIO_VERSION ${PC_LIBIIO_VERSION})
endif()
if(LIBIIO_FOUND AND NOT TARGET Iio::iio) if(LIBIIO_FOUND AND NOT TARGET Iio::iio)
add_library(Iio::iio SHARED IMPORTED) add_library(Iio::iio SHARED IMPORTED)
set_target_properties(Iio::iio PROPERTIES set_target_properties(Iio::iio PROPERTIES

View File

@ -42,6 +42,7 @@ find_path(LIBOSMOSDR_INCLUDE_DIR NAMES osmosdr.h
/usr/local/include /usr/local/include
${LIBOSMOSDR_ROOT}/include ${LIBOSMOSDR_ROOT}/include
$ENV{LIBOSMOSDR_ROOT}/include $ENV{LIBOSMOSDR_ROOT}/include
${LIBOSMOSDR_PKG_INCLUDEDIR}
) )
find_library(LIBOSMOSDR_LIBRARIES NAMES osmosdr find_library(LIBOSMOSDR_LIBRARIES NAMES osmosdr
@ -77,6 +78,7 @@ find_library(LIBOSMOSDR_LIBRARIES NAMES osmosdr
$ENV{LIBOSMOSDR_ROOT}/lib $ENV{LIBOSMOSDR_ROOT}/lib
${LIBOSMOSDR_ROOT}/lib64 ${LIBOSMOSDR_ROOT}/lib64
$ENV{LIBOSMOSDR_ROOT}/lib64 $ENV{LIBOSMOSDR_ROOT}/lib64
${LIBOSMOSDR_PKG_LIBDIR}
) )
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)

View File

@ -27,6 +27,9 @@
# Pugixml::pugixml # Pugixml::pugixml
# #
include(FindPkgConfig)
pkg_check_modules(PC_PUGIXML pugixml QUIET)
find_path(PUGIXML_INCLUDE_DIR find_path(PUGIXML_INCLUDE_DIR
NAMES pugixml.hpp NAMES pugixml.hpp
PATHS ${PUGIXML_HOME}/include PATHS ${PUGIXML_HOME}/include
@ -38,6 +41,7 @@ find_path(PUGIXML_INCLUDE_DIR
$ENV{PUGIXML_ROOT}/include $ENV{PUGIXML_ROOT}/include
${PUGIXML_ROOT}/include/pugixml-1.9 ${PUGIXML_ROOT}/include/pugixml-1.9
$ENV{PUGIXML_ROOT}/include/pugixml-1.9 $ENV{PUGIXML_ROOT}/include/pugixml-1.9
${PC_PUGIXML_INCLUDEDIR}
) )
find_library(PUGIXML_LIBRARY find_library(PUGIXML_LIBRARY
@ -67,6 +71,7 @@ find_library(PUGIXML_LIBRARY
$ENV{PUGIXML_ROOT}/lib/pugixml-1.9 $ENV{PUGIXML_ROOT}/lib/pugixml-1.9
${PUGIXML_ROOT}/lib64/pugixml-1.9 ${PUGIXML_ROOT}/lib64/pugixml-1.9
$ENV{PUGIXML_ROOT}/lib64/pugixml-1.9 $ENV{PUGIXML_ROOT}/lib64/pugixml-1.9
${PC_PUGIXML_LIBDIR}
) )
# Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found. # Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found.
@ -80,6 +85,9 @@ if(PUGIXML_FOUND)
message(STATUS "PugiXML include = ${PUGIXML_INCLUDE_DIR}") message(STATUS "PugiXML include = ${PUGIXML_INCLUDE_DIR}")
message(STATUS "PugiXML library = ${PUGIXML_LIBRARY}") message(STATUS "PugiXML library = ${PUGIXML_LIBRARY}")
endif() endif()
if(PC_PUGIXML_VERSION)
set(PUGIXML_VERSION ${PC_PUGIXML_VERSION})
endif()
else() else()
message(STATUS "PugiXML not found.") message(STATUS "PugiXML not found.")
endif() endif()

View File

@ -77,6 +77,20 @@ find_library(UHD_LIBRARIES
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) find_package_handle_standard_args(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS)
if(PC_UHD_VERSION)
set(UHD_VERSION ${PC_UHD_VERSION})
endif()
if(NOT PC_UHD_VERSION)
list(GET UHD_LIBRARIES 0 FIRST_DIR)
get_filename_component(UHD_LIBRARIES_DIR ${FIRST_DIR} DIRECTORY)
if(EXISTS ${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake)
include(${UHD_LIBRARIES_DIR}/cmake/uhd/UHDConfigVersion.cmake)
endif()
if(PACKAGE_VERSION)
set(UHD_VERSION ${PACKAGE_VERSION})
endif()
endif()
if(UHD_FOUND AND NOT TARGET Uhd::uhd) if(UHD_FOUND AND NOT TARGET Uhd::uhd)
add_library(Uhd::uhd SHARED IMPORTED) add_library(Uhd::uhd SHARED IMPORTED)
set_target_properties(Uhd::uhd PROPERTIES set_target_properties(Uhd::uhd PROPERTIES

View File

@ -25,7 +25,7 @@
######################################################################## ########################################################################
include(FindPkgConfig) include(FindPkgConfig)
pkg_check_modules(PC_VOLK volk) pkg_check_modules(PC_VOLK volk QUIET)
find_path(VOLK_INCLUDE_DIRS find_path(VOLK_INCLUDE_DIRS
NAMES volk/volk.h NAMES volk/volk.h
@ -78,6 +78,22 @@ find_library(VOLK_LIBRARIES
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) find_package_handle_standard_args(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)
if(PC_VOLK_VERSION)
set(VOLK_VERSION ${PC_VOLK_VERSION})
endif()
if(NOT VOLK_VERSION)
list(GET VOLK_LIBRARIES 0 FIRST_DIR)
get_filename_component(VOLK_LIB_DIR ${FIRST_DIR} DIRECTORY)
if(EXISTS ${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake)
include(${VOLK_LIB_DIR}/cmake/volk/VolkConfigVersion.cmake)
endif()
if(PACKAGE_VERSION)
set(VOLK_VERSION ${PACKAGE_VERSION})
endif()
endif()
mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION) mark_as_advanced(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION)
if(VOLK_FOUND AND NOT TARGET Volk::volk) if(VOLK_FOUND AND NOT TARGET Volk::volk)

View File

@ -129,6 +129,7 @@ endif()
set(SIGNAL_SOURCE_ADAPTER_SOURCES set(SIGNAL_SOURCE_ADAPTER_SOURCES
file_signal_source.cc file_signal_source.cc
multichannel_file_signal_source.cc
gen_signal_source.cc gen_signal_source.cc
nsr_file_signal_source.cc nsr_file_signal_source.cc
spir_file_signal_source.cc spir_file_signal_source.cc
@ -142,6 +143,7 @@ set(SIGNAL_SOURCE_ADAPTER_SOURCES
set(SIGNAL_SOURCE_ADAPTER_HEADERS set(SIGNAL_SOURCE_ADAPTER_HEADERS
file_signal_source.h file_signal_source.h
multichannel_file_signal_source.h
gen_signal_source.h gen_signal_source.h
nsr_file_signal_source.h nsr_file_signal_source.h
spir_file_signal_source.h spir_file_signal_source.h

View File

@ -0,0 +1,311 @@
/*!
* \file multichannel_file_signal_source.cc
* \brief Implementation of a class that reads signals samples from files at
* different frequency band and adapts it to a SignalSourceInterface
* \author Javier Arribas, 2019 jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR 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.
*
* GNSS-SDR 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 GNSS-SDR. If not, see <https://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#include "multichannel_file_signal_source.h"
#include "configuration_interface.h"
#include "gnss_sdr_flags.h"
#include "gnss_sdr_valve.h"
#include <glog/logging.h>
#include <exception>
#include <fstream>
#include <iomanip>
#include <iostream> // for std::cerr
#include <utility>
MultichannelFileSignalSource::MultichannelFileSignalSource(ConfigurationInterface* configuration,
const std::string& role, unsigned int in_streams, unsigned int out_streams,
boost::shared_ptr<gr::msg_queue> queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(std::move(queue))
{
std::string default_filename = "./example_capture.dat";
std::string default_item_type = "short";
std::string default_dump_filename = "./my_capture.dat";
double default_seconds_to_skip = 0.0;
size_t header_size = 0;
samples_ = configuration->property(role + ".samples", 0);
sampling_frequency_ = configuration->property(role + ".sampling_frequency", 0);
n_channels_ = configuration->property(role + ".total_channels", 1);
for (unsigned int n = 0; n < n_channels_; n++)
{
filename_vec_.push_back(configuration->property(role + ".filename" + std::to_string(n), default_filename));
}
item_type_ = configuration->property(role + ".item_type", default_item_type);
repeat_ = configuration->property(role + ".repeat", false);
enable_throttle_control_ = configuration->property(role + ".enable_throttle_control", false);
double seconds_to_skip = configuration->property(role + ".seconds_to_skip", default_seconds_to_skip);
header_size = configuration->property(role + ".header_size", 0);
int64_t samples_to_skip = 0;
bool is_complex = false;
if (item_type_ == "gr_complex")
{
item_size_ = sizeof(gr_complex);
}
else if (item_type_ == "float")
{
item_size_ = sizeof(float);
}
else if (item_type_ == "short")
{
item_size_ = sizeof(int16_t);
}
else if (item_type_ == "ishort")
{
item_size_ = sizeof(int16_t);
is_complex = true;
}
else if (item_type_ == "byte")
{
item_size_ = sizeof(int8_t);
}
else if (item_type_ == "ibyte")
{
item_size_ = sizeof(int8_t);
is_complex = true;
}
else
{
LOG(WARNING) << item_type_
<< " unrecognized item type. Using gr_complex.";
item_size_ = sizeof(gr_complex);
}
try
{
for (unsigned int n = 0; n < n_channels_; n++)
{
file_source_vec_.push_back(gr::blocks::file_source::make(item_size_, filename_vec_.at(n).c_str(), repeat_));
if (seconds_to_skip > 0)
{
samples_to_skip = static_cast<int64_t>(seconds_to_skip * sampling_frequency_);
if (is_complex)
{
samples_to_skip *= 2;
}
}
if (header_size > 0)
{
samples_to_skip += header_size;
}
if (samples_to_skip > 0)
{
LOG(INFO) << "Skipping " << samples_to_skip << " samples of the input file #" << n;
if (not file_source_vec_.back()->seek(samples_to_skip, SEEK_SET))
{
LOG(INFO) << "Error skipping bytes!";
}
}
}
}
catch (const std::exception& e)
{
if (filename_vec_.at(0) == default_filename)
{
std::cerr
<< "The configuration file has not been found."
<< std::endl
<< "Please create a configuration file based on the examples at the 'conf/' folder "
<< std::endl
<< "and then generate your own GNSS Software Defined Receiver by doing:"
<< std::endl
<< "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf"
<< std::endl;
}
else
{
std::cerr
<< "The receiver was configured to work with a file signal source "
<< std::endl
<< "but the specified file is unreachable by GNSS-SDR."
<< std::endl
<< "Please modify your configuration file"
<< std::endl
<< "and point SignalSource.filename to a valid raw data file. Then:"
<< std::endl
<< "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf"
<< std::endl
<< "Examples of configuration files available at:"
<< std::endl
<< GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/"
<< std::endl;
}
LOG(INFO) << "file_signal_source: Unable to open the samples file "
<< filename_vec_.at(0).c_str() << ", exiting the program.";
throw(e);
}
//todo from here.... add mux demux also
if (samples_ == 0) // read all file
{
/*!
* BUG workaround: The GNU Radio file source does not stop the receiver after reaching the End of File.
* A possible solution is to compute the file length in samples using file size, excluding the last 100 milliseconds, and enable always the
* valve block
*/
std::ifstream file(filename_vec_.at(0).c_str(), std::ios::in | std::ios::binary | std::ios::ate);
std::ifstream::pos_type size;
if (file.is_open())
{
size = file.tellg();
DLOG(INFO) << "Total samples in the file= " << floor(static_cast<double>(size) / static_cast<double>(item_size()));
}
else
{
std::cout << "file_signal_source: Unable to open the samples file " << filename_vec_.at(0).c_str() << std::endl;
LOG(ERROR) << "file_signal_source: Unable to open the samples file " << filename_vec_.at(0).c_str();
}
std::streamsize ss = std::cout.precision();
std::cout << std::setprecision(16);
std::cout << "Processing file " << filename_vec_.at(0) << ", which contains " << static_cast<double>(size) << " [bytes]" << std::endl;
std::cout.precision(ss);
if (size > 0)
{
int64_t bytes_to_skip = samples_to_skip * item_size_;
int64_t bytes_to_process = static_cast<int64_t>(size) - bytes_to_skip;
samples_ = floor(static_cast<double>(bytes_to_process) / static_cast<double>(item_size()) - ceil(0.002 * static_cast<double>(sampling_frequency_))); // process all the samples available in the file excluding at least the last 1 ms
}
}
CHECK(samples_ > 0) << "File does not contain enough samples to process.";
double signal_duration_s;
signal_duration_s = static_cast<double>(samples_) * (1 / static_cast<double>(sampling_frequency_));
if (is_complex)
{
signal_duration_s /= 2.0;
}
DLOG(INFO) << "Total number samples to be processed= " << samples_ << " GNSS signal duration= " << signal_duration_s << " [s]";
std::cout << "GNSS signal recorded time to be processed: " << signal_duration_s << " [s]" << std::endl;
valve_ = gnss_sdr_make_valve(item_size_, samples_, queue_);
DLOG(INFO) << "valve(" << valve_->unique_id() << ")";
if (enable_throttle_control_)
{
for (unsigned int n = 0; n < n_channels_; n++)
{
throttle_vec_.push_back(gr::blocks::throttle::make(item_size_, sampling_frequency_));
}
}
for (unsigned int n = 0; n < n_channels_; n++)
{
LOG(INFO) << "Multichanne File source filename #" << n << filename_vec_.at(n);
}
DLOG(INFO) << "Samples " << samples_;
DLOG(INFO) << "Sampling frequency " << sampling_frequency_;
DLOG(INFO) << "Item type " << item_type_;
DLOG(INFO) << "Item size " << item_size_;
DLOG(INFO) << "Repeat " << repeat_;
if (in_streams_ > 0)
{
LOG(ERROR) << "A signal source does not have an input stream";
}
if (out_streams_ > 1)
{
LOG(ERROR) << "This implementation only supports one output stream";
}
}
MultichannelFileSignalSource::~MultichannelFileSignalSource() = default;
void MultichannelFileSignalSource::connect(gr::top_block_sptr top_block)
{
if (enable_throttle_control_ == true)
{
for (unsigned int n = 0; n < n_channels_; n++)
{
top_block->connect(file_source_vec_.at(n), 0, throttle_vec_.at(n), 0);
DLOG(INFO) << "connected file_source #" << n << " to throttle";
top_block->connect(throttle_vec_.at(n), 0, valve_, n);
DLOG(INFO) << "connected throttle #" << n << " to valve_";
}
}
else
{
for (unsigned int n = 0; n < n_channels_; n++)
{
top_block->connect(file_source_vec_.at(n), 0, valve_, n);
DLOG(INFO) << "connected file_source #" << n << " to valve_";
}
}
}
void MultichannelFileSignalSource::disconnect(gr::top_block_sptr top_block)
{
if (enable_throttle_control_ == true)
{
for (unsigned int n = 0; n < n_channels_; n++)
{
top_block->disconnect(file_source_vec_.at(n), 0, throttle_vec_.at(n), 0);
DLOG(INFO) << "disconnected file_source #" << n << " to throttle";
top_block->disconnect(throttle_vec_.at(n), 0, valve_, n);
DLOG(INFO) << "disconnected throttle #" << n << " to valve_";
}
}
else
{
for (unsigned int n = 0; n < n_channels_; n++)
{
top_block->disconnect(file_source_vec_.at(n), 0, valve_, n);
DLOG(INFO) << "disconnected file_source #" << n << " to valve_";
}
}
}
gr::basic_block_sptr MultichannelFileSignalSource::get_left_block()
{
LOG(WARNING) << "Left block of a signal source should not be retrieved";
return gr::blocks::file_source::sptr();
}
gr::basic_block_sptr MultichannelFileSignalSource::get_right_block()
{
return valve_;
}

View File

@ -0,0 +1,131 @@
/*!
* \file multichannel_file_signal_source.h
* \brief Implementation of a class that reads signals samples from files at
* different frequency band and adapts it to a SignalSourceInterface
* \author Javier Arribas, 2019 jarribas(at)cttc.es
*
* This class represents a file signal source. Internally it uses a GNU Radio's
* gr_file_source as a connector to the data.
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR 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.
*
* GNSS-SDR 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 GNSS-SDR. If not, see <https://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#ifndef GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
#define GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_
#include "gnss_block_interface.h"
#include <gnuradio/blocks/file_sink.h>
#include <gnuradio/blocks/file_source.h>
#include <gnuradio/blocks/throttle.h>
#include <gnuradio/hier_block2.h>
#include <gnuradio/msg_queue.h>
#include <cstdint>
#include <string>
#include <vector>
class ConfigurationInterface;
/*!
* \brief Class that reads signals samples from files at different frequency bands
* and adapts it to a SignalSourceInterface
*/
class MultichannelFileSignalSource : public GNSSBlockInterface
{
public:
MultichannelFileSignalSource(ConfigurationInterface* configuration, const std::string& role,
unsigned int in_streams, unsigned int out_streams,
boost::shared_ptr<gr::msg_queue> queue);
virtual ~MultichannelFileSignalSource();
inline std::string role() override
{
return role_;
}
/*!
* \brief Returns "Multichannel_File_Signal_Source".
*/
inline std::string implementation() override
{
return "Multichannel_File_Signal_Source";
}
inline size_t item_size() override
{
return item_size_;
}
void connect(gr::top_block_sptr top_block) override;
void disconnect(gr::top_block_sptr top_block) override;
gr::basic_block_sptr get_left_block() override;
gr::basic_block_sptr get_right_block() override;
inline std::string filename() const
{
return filename_vec_.at(0);
}
inline std::string item_type() const
{
return item_type_;
}
inline bool repeat() const
{
return repeat_;
}
inline int64_t sampling_frequency() const
{
return sampling_frequency_;
}
inline uint64_t samples() const
{
return samples_;
}
private:
uint64_t samples_;
int64_t sampling_frequency_;
uint32_t n_channels_;
std::vector<std::string> filename_vec_;
std::string item_type_;
bool repeat_;
std::string role_;
uint32_t in_streams_;
uint32_t out_streams_;
std::vector<gr::blocks::file_source::sptr> file_source_vec_;
boost::shared_ptr<gr::block> valve_;
gr::blocks::file_sink::sptr sink_;
std::vector<gr::blocks::throttle::sptr> throttle_vec_;
boost::shared_ptr<gr::msg_queue> queue_;
size_t item_size_;
// Throttle control
bool enable_throttle_control_;
};
#endif /* GNSS_SDR_MULTICHANNEL_FILE_SIGNAL_SOURCE_H_ */

View File

@ -44,8 +44,8 @@ Gnss_Sdr_Valve::Gnss_Sdr_Valve(size_t sizeof_stream_item,
uint64_t nitems, uint64_t nitems,
gr::msg_queue::sptr queue, gr::msg_queue::sptr queue,
bool stop_flowgraph) : gr::sync_block("valve", bool stop_flowgraph) : gr::sync_block("valve",
gr::io_signature::make(1, 1, sizeof_stream_item), gr::io_signature::make(1, 20, sizeof_stream_item),
gr::io_signature::make(1, 1, sizeof_stream_item)), gr::io_signature::make(1, 20, sizeof_stream_item)),
d_nitems(nitems), d_nitems(nitems),
d_ncopied_items(0), d_ncopied_items(0),
d_queue(std::move(queue)), d_queue(std::move(queue)),
@ -99,11 +99,17 @@ int Gnss_Sdr_Valve::work(int noutput_items,
{ {
return 0; return 0;
} }
memcpy(output_items[0], input_items[0], n * input_signature()->sizeof_stream_item(0)); // multichannel support
for (unsigned int ch = 0; ch < output_items.size(); ch++)
{
memcpy(output_items[ch], input_items[ch], n * input_signature()->sizeof_stream_item(ch));
}
d_ncopied_items += n; d_ncopied_items += n;
return n; return n;
} }
for (unsigned int ch = 0; ch < output_items.size(); ch++)
memcpy(output_items[0], input_items[0], noutput_items * input_signature()->sizeof_stream_item(0)); {
memcpy(output_items[ch], input_items[ch], noutput_items * input_signature()->sizeof_stream_item(ch));
}
return noutput_items; return noutput_items;
} }

View File

@ -97,6 +97,7 @@
#include "ishort_to_cshort.h" #include "ishort_to_cshort.h"
#include "labsat_signal_source.h" #include "labsat_signal_source.h"
#include "mmse_resampler_conditioner.h" #include "mmse_resampler_conditioner.h"
#include "multichannel_file_signal_source.h"
#include "notch_filter.h" #include "notch_filter.h"
#include "notch_filter_lite.h" #include "notch_filter_lite.h"
#include "nsr_file_signal_source.h" #include "nsr_file_signal_source.h"
@ -1261,6 +1262,21 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
block = std::move(block_); block = std::move(block_);
} }
catch (const std::exception& e)
{
std::cout << "GNSS-SDR program ended." << std::endl;
exit(1);
}
}
else if (implementation == "Multichannel_File_Signal_Source")
{
try
{
std::unique_ptr<GNSSBlockInterface> block_(new MultichannelFileSignalSource(configuration.get(), role, in_streams,
out_streams, queue));
block = std::move(block_);
}
catch (const std::exception& e) catch (const std::exception& e)
{ {
std::cout << "GNSS-SDR program ended." << std::endl; std::cout << "GNSS-SDR program ended." << std::endl;

View File

@ -215,10 +215,10 @@ void GNSSFlowgraph::connect()
} }
DLOG(INFO) << "blocks connected internally"; DLOG(INFO) << "blocks connected internally";
// Signal Source (i) > Signal conditioner (i) > // Signal Source (i) > Signal conditioner (i) >
#ifndef ENABLE_FPGA #ifndef ENABLE_FPGA
int RF_Channels = 0; int RF_Channels = 0;
int signal_conditioner_ID = 0; unsigned int signal_conditioner_ID = 0;
for (int i = 0; i < sources_count_; i++) for (int i = 0; i < sources_count_; i++)
{ {
try try
@ -249,10 +249,13 @@ void GNSSFlowgraph::connect()
DLOG(INFO) << "sig_source_.at(i)->get_right_block()->output_signature()->max_streams()=" << sig_source_.at(i)->get_right_block()->output_signature()->max_streams(); DLOG(INFO) << "sig_source_.at(i)->get_right_block()->output_signature()->max_streams()=" << sig_source_.at(i)->get_right_block()->output_signature()->max_streams();
DLOG(INFO) << "sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()=" << sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()->max_streams(); DLOG(INFO) << "sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()=" << sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()->max_streams();
if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1) if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1 or sig_source_.at(i)->get_right_block()->output_signature()->max_streams() == -1)
{ {
LOG(INFO) << "connecting sig_source_ " << i << " stream " << j << " to conditioner " << j; if (sig_conditioner_.size() > signal_conditioner_ID)
top_block_->connect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0); {
LOG(INFO) << "connecting sig_source_ " << i << " stream " << j << " to conditioner " << j;
top_block_->connect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0);
}
} }
else else
{ {
@ -819,7 +822,7 @@ void GNSSFlowgraph::disconnect()
for (int j = 0; j < RF_Channels; j++) for (int j = 0; j < RF_Channels; j++)
{ {
if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1) if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1 or sig_source_.at(i)->get_right_block()->output_signature()->max_streams() == -1)
{ {
top_block_->disconnect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0); top_block_->disconnect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0);
} }