From da9d0122d7762bd9e544883ac49013b2bee71b07 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 6 Dec 2021 20:56:28 +0100 Subject: [PATCH] Fix detection of gr-limesdr branch Fixes build with macOS --- CMakeLists.txt | 2 +- cmake/Modules/FindGRLIMESDR.cmake | 38 +++++++++++++------ .../signal_source/adapters/CMakeLists.txt | 6 ++- .../adapters/limesdr_signal_source.cc | 11 +++--- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b259cf175..bc2dfbc50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2986,7 +2986,7 @@ endif() # https://github.com/myriadrf/gr-limesdr ########################################## find_package(GRLIMESDR) -set_package_properties(limesdr PROPERTIES +set_package_properties(GRLIMESDR PROPERTIES PURPOSE "Used for communication with LimeSDR." TYPE OPTIONAL ) diff --git a/cmake/Modules/FindGRLIMESDR.cmake b/cmake/Modules/FindGRLIMESDR.cmake index 921e3ac6e..80595c5bc 100644 --- a/cmake/Modules/FindGRLIMESDR.cmake +++ b/cmake/Modules/FindGRLIMESDR.cmake @@ -35,7 +35,7 @@ if(NOT PKG_CONFIG_FOUND) include(FindPkgConfig) endif() -pkg_check_modules(GRLIMESDR_PKG gnuradio-limesdr) +pkg_check_modules(GRLIMESDR_PKG QUIET gnuradio-limesdr) if(NOT GRLIMESDR_ROOT) set(GRLIMESDR_ROOT_USER_DEFINED /usr) @@ -115,11 +115,11 @@ set_package_properties(GRLIMESDR PROPERTIES if(GRLIMESDR_FOUND AND GRLIMESDR_VERSION) set_package_properties(GRLIMESDR PROPERTIES - DESCRIPTION "limesdr GNU Radio blocks (found: v${GRLIMESDR_VERSION})" + DESCRIPTION "LimeSDR GNU Radio blocks (found: v${GRLIMESDR_VERSION})" ) else() set_package_properties(GRLIMESDR PROPERTIES - DESCRIPTION "limesdr GNU Radio blocks" + DESCRIPTION "LimeSDR GNU Radio blocks" ) endif() @@ -132,16 +132,30 @@ if(GRLIMESDR_FOUND AND NOT TARGET Gnuradio::limesdr) INTERFACE_LINK_LIBRARIES "${GRLIMESDR_LIBRARIES}" ) - #check for PPS custom version - file(READ ${GRLIMESDR_INCLUDE_DIR}/limesdr/source.h TMPTXT) - string(FIND "${TMPTXT}" "enable_PPS_mode" matchres) - message(STATUS ${matchres}) - if(${matchres} EQUAL -1) - message("Using standard gr-limesdr library ") - else() - set(GRLIMESDR_PPS True) - message("Using custom gr-limesdr library with PPS support ") + message(STATUS "The (optional) gr-limesdr module has been found.") + + # check for PPS custom version + file(READ ${GRLIMESDR_INCLUDE_DIR}/limesdr/source.h TMPTXT) + string(FIND "${TMPTXT}" "enable_PPS_mode" matchres) + if(${matchres} EQUAL -1) + message(STATUS " Using standard gr-limesdr library.") + else() + set(GRLIMESDR_PPS TRUE) + message(STATUS " Using custom gr-limesdr library with PPS support.") + endif() + + # check gr-limesdr branch + set(_g38_branch TRUE) + file(STRINGS ${GRLIMESDR_INCLUDE_DIR}/limesdr/source.h _limesdr_header_content) + foreach(_loop_var IN LISTS _limesdr_header_content) + string(STRIP "${_loop_var}" _file_line) + if("static sptr make(std::string serial, int channel_mode, const std::string& filename);" STREQUAL "${_file_line}") + set(_g38_branch FALSE) endif() + endforeach() + if(${_g38_branch}) + set(GR_LIMESDR_IS_G38_BRANCH TRUE) + endif() endif() mark_as_advanced(GRLIMESDR_LIBRARIES GRLIMESDR_INCLUDE_DIR) diff --git a/src/algorithms/signal_source/adapters/CMakeLists.txt b/src/algorithms/signal_source/adapters/CMakeLists.txt index 488983b88..7a4c6e065 100644 --- a/src/algorithms/signal_source/adapters/CMakeLists.txt +++ b/src/algorithms/signal_source/adapters/CMakeLists.txt @@ -269,8 +269,12 @@ if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2) endif() endif() +if(GR_LIMESDR_IS_G38_BRANCH) + target_compile_definitions(signal_source_adapters PRIVATE -DGR_LIMESDR_IS_G38_BRANCH=1) +endif() + if(GRLIMESDR_PPS) - target_compile_definitions(signal_source_adapters PUBLIC -DLimeSDR_PPS=1) + target_compile_definitions(signal_source_adapters PRIVATE -DLimeSDR_PPS=1) endif() if(ENABLE_CLANG_TIDY) diff --git a/src/algorithms/signal_source/adapters/limesdr_signal_source.cc b/src/algorithms/signal_source/adapters/limesdr_signal_source.cc index 6c688921b..eab203a33 100644 --- a/src/algorithms/signal_source/adapters/limesdr_signal_source.cc +++ b/src/algorithms/signal_source/adapters/limesdr_signal_source.cc @@ -56,7 +56,7 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura PPS_mode_ = configuration->property(role + ".PPS_mode", false); ext_clock_MHz_ = configuration->property(role + ".ext_clock_MHz", 0.0); // external clock: 0.0 MHz will enable the internal clock limechannel_mode_ = configuration->property(role + ".limechannel_mode", 0); - if (limechannel_mode_ < 0 && limechannel_mode_ > 2) + if ((limechannel_mode_ < 0) || (limechannel_mode_ > 2)) { std::cout << "ERROR: source_impl::source_impl(): ChannelMode must be A(0), B(1) or (A+B) MIMO(2)" @@ -64,7 +64,6 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura exit(0); } - if (item_type_ == "short") { item_size_ = sizeof(int16_t); @@ -87,7 +86,7 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura { if (limesdr_source_->set_ext_clk(ext_clock_MHz_)) { - std::cout << "External clock enabled with expected frequency input of " << ext_clock_MHz_ << "\n"; + std::cout << "External clock enabled with expected frequency input of " << ext_clock_MHz_ << " MHz\n"; } else { @@ -100,7 +99,7 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura } #else -#ifdef GR_GREATER_38 +#ifdef GR_LIMESDR_IS_G38_BRANCH limesdr_source_ = gr::limesdr::source::make(limesdr_serial_, limechannel_mode_, limesdr_file_, false); #else limesdr_source_ = gr::limesdr::source::make(limesdr_serial_, limechannel_mode_, limesdr_file_); @@ -124,8 +123,9 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura */ limesdr_source_->set_antenna(antenna_, channel_); - std::cout << "LimeSDR RX antenna set to " << antenna_ << " for channel " << channel_ << "\n"; + std::cout << "LimeSDR RX antenna set to " << antenna_ << " for channel " << channel_ << '\n'; LOG(INFO) << "LimeSDR RX antenna set to " << antenna_ << " for channel " << channel_; + // 2 set sampling rate double actual_sample_rate = limesdr_source_->set_sample_rate(sample_rate_); std::cout << "Actual RX Rate: " << actual_sample_rate << " [SPS]...\n"; @@ -141,7 +141,6 @@ LimesdrSignalSource::LimesdrSignalSource(const ConfigurationInterface* configura std::cout << "PLL Frequency tune error: " << actual_center_freq - freq_ << " [Hz]...\n"; LOG(INFO) << "PLL Frequency tune error: " << actual_center_freq - freq_ << " [Hz]...\n"; - // TODO: gr-limesdr does not report PLL tune frequency error... // 4. set rx gain