[hamradio-commits] [gnss-sdr] 33/60: New Teleorbit Flexiband adapter for Teleorbit Flexiband frontends (optional signal source). It requires a external GNU Radio driver.

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sun Mar 22 11:15:43 UTC 2015


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 474f78f5009f8795e734fe6d1144c0db9cf24bf8
Author: Javier <jarribas at cttc.es>
Date:   Tue Mar 3 18:07:26 2015 +0100

    New Teleorbit Flexiband adapter for Teleorbit Flexiband frontends
    (optional signal source). It requires a external GNU Radio driver.
---
 CMakeLists.txt                                     |  24 +-
 cmake/Modules/FindTeleorbit.cmake                  |  29 +++
 ...sdr_multichannel_GPS_L1_Flexiband_realtime.conf | 276 +++++++++++++++++++++
 .../signal_source/adapters/CMakeLists.txt          |  22 ++
 .../adapters/flexiband_signal_source.cc            | 146 +++++++++++
 .../adapters/flexiband_signal_source.h             | 106 ++++++++
 src/core/receiver/CMakeLists.txt                   |   4 +
 src/core/receiver/gnss_block_factory.cc            |  13 +
 8 files changed, 616 insertions(+), 4 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 73af2ae..506176d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,6 +37,7 @@ file(RELATIVE_PATH RELATIVE_CMAKE_CALL ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRE
 
 option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF)
 option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF)
+option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF)
 option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source (experimental)" OFF)
 option(ENABLE_OPENCL "Enable building of processing blocks implemented with OpenCL (experimental)" OFF)
 option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF)
@@ -948,9 +949,11 @@ if($ENV{RAW_ARRAY_DRIVER})
     message(STATUS "RAW_ARRAY_DRIVER environment variable found." )
     set(ENABLE_ARRAY ON)
 endif($ENV{RAW_ARRAY_DRIVER})
+
 if(RAW_ARRAY_DRIVER)
     set(ENABLE_ARRAY ON)
 endif(RAW_ARRAY_DRIVER)
+
 if(ENABLE_ARRAY)
     message(STATUS "CTTC's Antenna Array front-end driver will be compiled." )
     message(STATUS "You can disable it with 'cmake -DENABLE_ARRAY=OFF ../'" )  
@@ -961,14 +964,11 @@ else(ENABLE_ARRAY)
     message(STATUS "Enable it with 'cmake -DENABLE_ARRAY=ON ../' to add support for the CTTC experimental array front-end." )
 endif(ENABLE_ARRAY)
 
-
 if($ENV{RTLSDR_DRIVER})
     message(STATUS "RTLSDR_DRIVER environment variable found." )
     set(ENABLE_OSMOSDR ON)
 endif($ENV{RTLSDR_DRIVER})
-if(RAW_ARRAY_DRIVER)
-    set(ENABLE_OSMOSDR ON)
-endif(RAW_ARRAY_DRIVER)
+
 if(ENABLE_OSMOSDR)
     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 ../'" )  
@@ -977,6 +977,22 @@ else(ENABLE_OSMOSDR)
     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(ENABLE_OSMOSDR)
 
+if($ENV{FLEXIBAND_DRIVER})
+    message(STATUS "FLEXIBAND_DRIVER environment variable found." )
+    set(ENABLE_FLEXIBAND ON)
+endif($ENV{FLEXIBAND_DRIVER})
+
+if(FLEXIBAND_DRIVER)
+    set(ENABLE_FLEXIBAND ON)
+endif(FLEXIBAND_DRIVER)
+
+if(ENABLE_FLEXIBAND)
+    message(STATUS "CTTC's Antenna Array front-end driver will be compiled." )
+    message(STATUS "You can disable it with 'cmake -DENABLE_FLEXIBAND=OFF ../'" )  
+else(ENABLE_FLEXIBAND)
+    message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled." )
+    message(STATUS "Enable it with 'cmake -DENABLE_FLEXIBAND=ON ../' to add support for the Teleorbit Flexiband front-end." )
+endif(ENABLE_FLEXIBAND)
 
 ########################################################################
 # Set compiler flags
diff --git a/cmake/Modules/FindTeleorbit.cmake b/cmake/Modules/FindTeleorbit.cmake
new file mode 100644
index 0000000..0d2d3c5
--- /dev/null
+++ b/cmake/Modules/FindTeleorbit.cmake
@@ -0,0 +1,29 @@
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PC_TELEORBIT teleorbit)
+
+FIND_PATH(
+    TELEORBIT_INCLUDE_DIRS
+    NAMES teleorbit/api.h
+    HINTS $ENV{TELEORBIT_DIR}/include
+        ${PC_TELEORBIT_INCLUDEDIR}
+    PATHS ${CMAKE_INSTALL_PREFIX}/include
+          /usr/local/include
+          /usr/include
+)
+
+FIND_LIBRARY(
+    TELEORBIT_LIBRARIES
+    NAMES gnuradio-teleorbit
+    HINTS $ENV{TELEORBIT_DIR}/lib
+        ${PC_TELEORBIT_LIBDIR}
+    PATHS ${CMAKE_INSTALL_PREFIX}/lib
+          ${CMAKE_INSTALL_PREFIX}/lib64
+          /usr/local/lib
+          /usr/local/lib64
+          /usr/lib
+          /usr/lib64
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TELEORBIT DEFAULT_MSG TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS)
+MARK_AS_ADVANCED(TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS)
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime.conf
new file mode 100644
index 0000000..48e72ca
--- /dev/null
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime.conf
@@ -0,0 +1,276 @@
+; Default configuration file
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
+GNSS-SDR.internal_fs_hz=4000000
+
+;######### CONTROL_THREAD CONFIG ############
+ControlThread.wait_for_flowgraph=false
+
+;######### SUPL RRLP GPS assistance configuration #####
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=true
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+SignalSource.implementation=Flexiband_Signal_Source
+
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+SignalSource.item_type=gr_complex
+
+;# FPGA firmware file
+SignalSource.firmware_file=flexiband_I-1b.bit
+
+;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
+SignalSource.RF_channels=1
+
+;#frontend channels gain. Not usable yet!
+SignalSource.gain1=0
+SignalSource.gain2=0
+SignalSource.gain3=0
+
+;#frontend channels AGC
+SignalSource.AGC=true
+
+;# USB 3.0 packet buffer size (number of SuperSpeed packets)
+SignalSource.usb_packet_buffer=128
+
+;######### SIGNAL_CONDITIONER 0 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data. 
+SignalConditioner0.implementation=Pass_Through
+
+;######### DATA_TYPE_ADAPTER 0 CONFIG ############
+DataTypeAdapter0.implementation=Pass_Through
+DataTypeAdapter0.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+InputFilter0.implementation=Pass_Through
+
+;#dump: Dump the filtered data to a file.
+InputFilter0.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter0.dump_filename=../data/input_filter.dat
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter0.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter0.output_item_type=gr_complex
+
+;######### RESAMPLER CONFIG 0 ############
+;## Resamples the input data. 
+Resampler0.implementation=Pass_Through
+
+;######### SIGNAL_CONDITIONER 1 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data. 
+SignalConditioner1.implementation=Pass_Through
+
+;######### DATA_TYPE_ADAPTER 1 CONFIG ############
+DataTypeAdapter1.implementation=Pass_Through
+DataTypeAdapter1.item_type=gr_complex
+
+;######### INPUT_FILTER 1 CONFIG ############
+InputFilter1.implementation=Pass_Through
+
+;#dump: Dump the filtered data to a file.
+InputFilter1.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter1.dump_filename=../data/input_filter.dat
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter1.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter1.output_item_type=gr_complex
+
+;######### RESAMPLER CONFIG 1 ############
+;## Resamples the input data. 
+Resampler1.implementation=Pass_Through
+
+;######### SIGNAL_CONDITIONER 2 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data. 
+SignalConditioner2.implementation=Pass_Through
+
+;######### DATA_TYPE_ADAPTER 2 CONFIG ############
+DataTypeAdapter2.implementation=Pass_Through
+DataTypeAdapter2.item_type=gr_complex
+
+;######### INPUT_FILTER 2 CONFIG ############
+InputFilter2.implementation=Pass_Through
+
+;#dump: Dump the filtered data to a file.
+InputFilter2.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter2.dump_filename=../data/input_filter.dat
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter2.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter2.output_item_type=gr_complex
+
+;######### RESAMPLER CONFIG 2 ############
+;## Resamples the input data. 
+Resampler2.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+;#count: Number of available GPS satellite channels.
+Channels_GPS.count=2
+;#count: Number of available Galileo satellite channels.
+Channels_Galileo.count=0
+;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
+Channels.in_acquisition=1
+;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
+;#if the option is disabled by default is assigned GPS
+Channel.system=GPS
+
+;# CHANNEL CONNECTION
+Channel0.RF_channel_ID=0
+Channel1.RF_channel_ID=0
+
+;#signal: 
+;#if the option is disabled by default is assigned "1C" GPS L1 C/A
+Channel.signal=1C
+
+;######### SPECIFIC CHANNELS CONFIG ######
+;#The following options are specific to each channel and overwrite the generic options 
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+Acquisition_GPS.dump=false
+;#filename: Log path and filename
+Acquisition_GPS.dump_filename=./acq_dump.dat
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+Acquisition_GPS.item_type=gr_complex
+;#if: Signal intermediate frequency in [Hz] 
+Acquisition_GPS.if=0
+;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
+Acquisition_GPS.coherent_integration_time_ms=1
+;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
+;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_GPS.threshold=0.02
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
+;Acquisition_GPS.pfa=0.0001
+;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_GPS.doppler_max=8000
+;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_GPS.doppler_step=500
+;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
+Acquisition_GPS.bit_transition_flag=false
+;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
+Acquisition_GPS.max_dwells=1
+
+
+;######### ACQUISITION CHANNELS CONFIG ######
+;#The following options are specific to each channel and overwrite the generic options
+
+
+;######### TRACKING GLOBAL CONFIG ############
+
+;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking]
+Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking
+;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
+Tracking_GPS.item_type=gr_complex
+
+;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+Tracking_GPS.if=0
+
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+Tracking_GPS.dump=false
+
+;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
+Tracking_GPS.dump_filename=./tracking_ch_
+
+;#pll_bw_hz: PLL loop filter bandwidth [Hz]
+Tracking_GPS.pll_bw_hz=50.0;
+
+;#dll_bw_hz: DLL loop filter bandwidth [Hz]
+Tracking_GPS.dll_bw_hz=2.0;
+
+;#fll_bw_hz: FLL loop filter bandwidth [Hz]
+Tracking_GPS.fll_bw_hz=10.0;
+
+;#order: PLL/DLL loop filter order [2] or [3]
+Tracking_GPS.order=3;
+
+;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
+Tracking_GPS.early_late_space_chips=0.5;
+
+;######### TELEMETRY DECODER GPS CONFIG ############
+;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
+TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder
+TelemetryDecoder_GPS.dump=false
+;#decimation factor
+TelemetryDecoder_GPS.decimation_factor=1;
+
+;######### OBSERVABLES CONFIG ############
+;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
+Observables.implementation=GPS_L1_CA_Observables
+
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+Observables.dump=false
+
+;#dump_filename: Log path and filename.
+Observables.dump_filename=./observables.dat
+
+
+;######### PVT CONFIG ############
+;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
+PVT.implementation=GPS_L1_CA_PVT
+
+;#averaging_depth: Number of PVT observations in the moving average algorithm
+PVT.averaging_depth=10
+
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+PVT.flag_averaging=true
+
+;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
+PVT.output_rate_ms=100
+
+;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
+PVT.display_rate_ms=500
+
+;# RINEX, KML, and NMEA output configuration
+
+;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+PVT.dump_filename=./PVT
+
+;#nmea_dump_filename: NMEA log path and filename
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+
+;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_nmea_tty_port=false;
+
+;#nmea_dump_devname: serial device descriptor for NMEA logging
+PVT.nmea_dump_devname=/dev/pts/4
+
+
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+PVT.dump=false
+
+;######### OUTPUT_FILTER CONFIG ############
+;# Receiver output filter: Leave this block disabled in this version
+OutputFilter.implementation=Null_Sink_Output_Filter
+OutputFilter.filename=data/gnss-sdr.dat
+OutputFilter.item_type=gr_complex
diff --git a/src/algorithms/signal_source/adapters/CMakeLists.txt b/src/algorithms/signal_source/adapters/CMakeLists.txt
index 9eb7c8f..c8c753b 100644
--- a/src/algorithms/signal_source/adapters/CMakeLists.txt
+++ b/src/algorithms/signal_source/adapters/CMakeLists.txt
@@ -51,6 +51,28 @@ if(ENABLE_GN3S)
      )     
 endif(ENABLE_GN3S)
 
+if(ENABLE_FLEXIBAND)
+     ##############################################
+     # TELEORBIT FLEXIBAND FRONTEND ADAPTER
+     ##############################################
+     if(OS_IS_MACOSX)
+          set(MACOSX_ARGS "-DCMAKE_CXX_COMPILER=/usr/bin/clang++")
+     endif(OS_IS_MACOSX)
+    find_package(teleorbit REQUIRED)
+    if(NOT TELEORBIT_FOUND)
+        message(FATAL_ERROR "Teleorbit Flexiband GNURadio driver required to build gnss-sdr with the optional FLEXIBAND adapter")
+    endif(NOT TELEORBIT_FOUND) 
+     
+     # Set up variables
+    set(FLEXIBAND_DRIVER_INCLUDE_DIRS 
+        ${OPT_DRIVER_INCLUDE_DIRS} 
+        ${TELEORBIT_INCLUDE_DIR}/teleorbit
+    )
+    set(OPT_LIBRARIES ${OPT_LIBRARIES} ${TELEORBIT_LIBRARIES})
+    set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${FLEXIBAND_DRIVER_INCLUDE_DIRS}) 
+    set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} flexiband_signal_source.cc)
+endif(ENABLE_FLEXIBAND)
+
 
 if(ENABLE_ARRAY)
      ##############################################
diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.cc b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc
new file mode 100644
index 0000000..4e5b670
--- /dev/null
+++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.cc
@@ -0,0 +1,146 @@
+/*!
+ * \file raw_array_signal_source.cc
+ * \brief CTTC Experimental GNSS 8 channels array signal source
+ * \author Javier Arribas, jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (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 <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "flexiband_signal_source.h"
+#include <gnuradio/blocks/file_sink.h>
+#include <gnuradio/msg_queue.h>
+#include <glog/logging.h>
+#include <teleorbit/frontend.h>
+#include "configuration_interface.h"
+
+
+using google::LogMessage;
+
+FlexibandSignalSource::FlexibandSignalSource(ConfigurationInterface* configuration,
+        std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) :
+        role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue)
+{
+    std::string default_item_type = "byte";
+    item_type_ = configuration->property(role + ".item_type", default_item_type);
+
+    std::string default_firmware_file = "flexiband_I-1b.bit";
+    firmware_filename_ = configuration->property(role + ".firmware_file", default_firmware_file);
+
+    gain1_ = configuration->property(role + ".gain1", 0); // check gain DAC values for Flexiband frontend!
+    gain2_ = configuration->property(role + ".gain2", 0); // check gain DAC values for Flexiband frontend!
+    gain3_ = configuration->property(role + ".gain3", 0); // check gain DAC values for Flexiband frontend!
+
+    AGC_ = configuration->property(role + ".AGC", true); // enabed AGC by default
+
+    usb_packet_buffer_size_ =configuration->property(role + ".usb_packet_buffer", 128);
+
+    RF_channels_ = configuration->property(role + ".RF_channels", 1);
+
+    if (item_type_.compare("gr_complex") == 0)
+    {
+            item_size_ = sizeof(gr_complex);
+            flexiband_source_ = gr::teleorbit::frontend::make(firmware_filename_.c_str(),gain1_,gain2_,gain3_, AGC_, usb_packet_buffer_size_);
+
+            //create I, Q -> gr_complex type conversion blocks
+            for (int n=0;n<(RF_channels_*2);n++)
+            {
+                char_to_float.push_back(gr::blocks::char_to_float::make());
+                float_to_complex_.push_back(gr::blocks::float_to_complex::make());
+            }
+
+            for (int n=0;n<(RF_channels_);n++)
+            {
+                float_to_complex_.push_back(gr::blocks::float_to_complex::make());
+            }
+
+            DLOG(INFO) << "Item size " << item_size_;
+            DLOG(INFO) << "Firmware file "<<firmware_filename_;
+            DLOG(INFO) << "flexiband_source_(" << flexiband_source_->unique_id() << ")";
+
+    }else
+    {
+            LOG(WARNING) << item_type_ << " unrecognized item type for flexiband_source_";
+            item_size_ = sizeof(gr_complex);
+    }
+}
+
+
+
+FlexibandSignalSource::~FlexibandSignalSource()
+{}
+
+
+
+void FlexibandSignalSource::connect(gr::top_block_sptr top_block)
+{
+    for (int n=0;n<(RF_channels_*2);n++)
+    {
+    	  top_block->connect(flexiband_source_, n, char_to_float.at(n), 0);
+    	  DLOG(INFO) << "connected flexiband_source_ to char_to_float CH"<<n;
+    }
+    for (int n=0;n<RF_channels_;n++)
+    {
+    	  top_block->connect(char_to_float.at(n*2), 0, float_to_complex_.at(n*2), 0);
+    	  top_block->connect(char_to_float.at(n*2+1), 0, float_to_complex_.at(n*2+1), 0);
+    	  DLOG(INFO) << "connected char_to_float to float_to_complex_ CH"<<n;
+    }
+
+}
+
+
+
+void FlexibandSignalSource::disconnect(gr::top_block_sptr top_block)
+{
+    for (int n=0;n<(RF_channels_*2);n++)
+    {
+    	  top_block->disconnect(flexiband_source_, n, char_to_float.at(n), 0);
+    	  DLOG(INFO) << "disconnect flexiband_source_ to char_to_float CH"<<n;
+    }
+    for (int n=0;n<RF_channels_;n++)
+    {
+    	  top_block->disconnect(char_to_float.at(n*2), 0, float_to_complex_.at(n*2), 0);
+    	  top_block->disconnect(char_to_float.at(n*2+1), 0, float_to_complex_.at(n*2+1), 0);
+    	  DLOG(INFO) << "disconnect char_to_float to float_to_complex_ CH"<<n;
+    }
+}
+
+
+gr::basic_block_sptr FlexibandSignalSource::get_left_block()
+{
+    LOG(WARNING) << "Left block of a signal source should not be retrieved";
+    return gr::block_sptr();
+}
+
+
+gr::basic_block_sptr FlexibandSignalSource::get_right_block()
+{
+	return get_right_block(0);
+}
+
+gr::basic_block_sptr FlexibandSignalSource::get_right_block(int RF_channel)
+{
+    return float_to_complex_.at(RF_channel);
+}
+
diff --git a/src/algorithms/signal_source/adapters/flexiband_signal_source.h b/src/algorithms/signal_source/adapters/flexiband_signal_source.h
new file mode 100644
index 0000000..22fd56b
--- /dev/null
+++ b/src/algorithms/signal_source/adapters/flexiband_signal_source.h
@@ -0,0 +1,106 @@
+/*!
+ * \file raw_array_signal_source.h
+ * \brief Signal Source adapter for the Teleorbit Flexiband front-end device.
+ * This adapter requires a Flexiband GNURadio driver installed (not included with GNSS-SDR)
+ * \author Javier Arribas, jarribas(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (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 <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+
+#ifndef FLEXIBAND_SIGNAL_SOURCE_H_
+#define FLEXIBAND_SIGNAL_SOURCE_H_
+
+#include <string>
+#include <gnuradio/hier_block2.h>
+#include <gnuradio/msg_queue.h>
+#include <gnuradio/blocks/file_sink.h>
+#include <gnuradio/blocks/char_to_float.h>
+#include <gnuradio/blocks/float_to_complex.h>
+#include <vector>
+#include "gnss_block_interface.h"
+
+
+class ConfigurationInterface;
+
+/*!
+ * \brief This class configures and reads samples from Teleorbit Flexiband front-end.
+ * This software requires a Flexiband GNURadio driver installed (not included with GNSS-SDR).
+ */
+class FlexibandSignalSource: public GNSSBlockInterface
+{
+public:
+	FlexibandSignalSource(ConfigurationInterface* configuration,
+            std::string role, unsigned int in_stream,
+            unsigned int out_stream, gr::msg_queue::sptr queue);
+
+    virtual ~FlexibandSignalSource();
+    std::string role()
+    {
+        return role_;
+    }
+
+    /*!
+     * \brief Returns "FlexibandSignalSource".
+     */
+    std::string implementation()
+    {
+        return "Flexiband_Signal_Source";
+    }
+    size_t item_size()
+    {
+        return item_size_;
+    }
+    void connect(gr::top_block_sptr top_block);
+    void disconnect(gr::top_block_sptr top_block);
+    gr::basic_block_sptr get_left_block();
+    gr::basic_block_sptr get_right_block();
+    gr::basic_block_sptr get_right_block(int RF_channel);
+
+private:
+    std::string role_;
+    unsigned int in_stream_;
+    unsigned int out_stream_;
+    std::string item_type_;
+    size_t item_size_;
+
+    std::string firmware_filename_;
+    int gain1_;
+    int gain2_;
+    int gain3_;
+    int usb_packet_buffer_size_;
+    bool AGC_;
+
+    int RF_channels_;
+
+    gr::block_sptr flexiband_source_;
+
+    std::vector<boost::shared_ptr<gr::block>> char_to_float;
+    std::vector<boost::shared_ptr<gr::block>> float_to_complex_;
+
+    boost::shared_ptr<gr::msg_queue> queue_;
+};
+
+#endif /*FLEXIBAND_SIGNAL_SOURCE_H_*/
diff --git a/src/core/receiver/CMakeLists.txt b/src/core/receiver/CMakeLists.txt
index 51cd6cc..94bff94 100644
--- a/src/core/receiver/CMakeLists.txt
+++ b/src/core/receiver/CMakeLists.txt
@@ -77,6 +77,10 @@ if(ENABLE_ARRAY)
     add_definitions(-DRAW_ARRAY_DRIVER=1)
 endif(ENABLE_ARRAY)
 
+if(ENABLE_FLEXIBAND)
+    add_definitions(-DFLEXIBAND_DRIVER=1)
+endif(ENABLE_FLEXIBAND)
+
 if(ENABLE_OSMOSDR)
     add_definitions(-DOSMOSDR_DRIVER=1)
 endif(ENABLE_OSMOSDR)
diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc
index 122e435..4579585 100644
--- a/src/core/receiver/gnss_block_factory.cc
+++ b/src/core/receiver/gnss_block_factory.cc
@@ -112,6 +112,10 @@
         #include "uhd_signal_source.h"
 #endif
 
+#if FLEXIBAND_DRIVER
+        #include "flexiband_signal_source.h"
+#endif
+
 
 using google::LogMessage;
 
@@ -465,6 +469,15 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
         }
 #endif
 
+#if FLEXIBAND_DRIVER
+    else if (implementation.compare("Flexiband_Signal_Source") == 0)
+        {
+            std::unique_ptr<GNSSBlockInterface> block_(new FlexibandSignalSource(configuration.get(), role, in_streams,
+                    out_streams, queue));
+            block = std::move(block_);
+        }
+#endif
+
     // DATA TYPE ADAPTER -----------------------------------------------------------
     else if (implementation.compare("Byte_To_Short") == 0)
         {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list