1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-10-02 08:50:50 +00:00

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

This commit is contained in:
Carles Fernandez 2018-05-26 00:24:13 +02:00
commit a5f7f58156
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
18 changed files with 166 additions and 1301 deletions

112
AUTHORS
View File

@ -1,56 +1,56 @@
GNSS-SDR Authorship
------------------------------------------------------------------------------
The GNSS-SDR project is hosted and sponsored by the Centre Tecnologic de
Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located
in Castelldefels (40.396764 N, 3.713379 E), 20 km south of Barcelona, Spain.
GNSS-SDR is the by-product of GNSS research conducted at the Communications
Systems Division of CTTC, and it is the combined effort of students,
software engineers and researchers from different institutions around the World.
Contact Information
------------------------------------------------------------------------------
GNSS-SDR Homepage
----------------------------
https://gnss-sdr.org
CTTC Homepage
----------------------------
http://www.cttc.cat
Mailing Lists
----------------------------
gnss-sdr-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers
Email
----------------------------
Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat
List of authors
------------------------------------------------------------------------------
Carles Fernandez-Prades carles.fernandez@cttc.cat Project manager
Javier Arribas javier.arribas@cttc.es Developer
Luis Esteve Elfau luis@epsilon-formacion.com Developer
Antonio Ramos antonio.ramos@cttc.es Developer
Marc Majoral marc.majoral@cttc.cat Developer
Pau Closas pau.closas@northeastern.edu Consultant
Jordi Vila-Valls jordi.vila@cttc.cat Consultant
Carlos Aviles carlos.avilesr@googlemail.com Contributor
David Pubill david.pubill@cttc.cat Contributor
Mara Branzanti mara.branzanti@gmail.com Contributor
Marc Molina marc.molina.pena@gmail.com Contributor
Daniel Fehr daniel.co@bluewin.ch Contributor
Marc Sales marcsales92@gmail.com Contributor
Damian Miralles dmiralles2009@gmail.com Contributor
Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor
Leonardo Tonetto tonetto.dev@gmail.com Contributor
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
Fran Fabra fabra@ice.csic.es Contributor
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
Gabriel Araujo gabriel.araujo.5000@gmail.com Contributor
Carlos Paniego carpanie@hotmail.com Artwork
GNSS-SDR Authorship
------------------------------------------------------------------------------
The GNSS-SDR project is hosted and sponsored by the Centre Tecnològic de
Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located
in Castelldefels (40.396764 N, 3.713379 E), 20 km south of Barcelona, Spain.
GNSS-SDR is the by-product of GNSS research conducted at the Communications
Systems Division of CTTC, and it is the combined effort of students,
software engineers and researchers from different institutions around the World.
Contact Information
------------------------------------------------------------------------------
GNSS-SDR Homepage
----------------------------
https://gnss-sdr.org
CTTC Homepage
----------------------------
http://www.cttc.cat
Mailing Lists
----------------------------
gnss-sdr-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers
Email
----------------------------
Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat
List of authors
------------------------------------------------------------------------------
Carles Fernández-Prades carles.fernandez@cttc.cat Project manager
Javier Arribas javier.arribas@cttc.es Developer
Luis Esteve Elfau luis@epsilon-formacion.com Developer
Antonio Ramos antonio.ramosdet@gmail.com Developer
Marc Majoral marc.majoral@cttc.cat Developer
Jordi Vilà-Valls jordi.vila@cttc.cat Consultant
Pau Closas pau.closas@northeastern.edu Consultant
Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
Carlos Avilés carlos.avilesr@googlemail.com Contributor
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
Damian Miralles dmiralles2009@gmail.com Contributor
Daniel Fehr daniel.co@bluewin.ch Contributor
David Pubill david.pubill@cttc.cat Contributor
Fran Fabra fabra@ice.csic.es Contributor
Gabriel Araujo gabriel.araujo.5000@gmail.com Contributor
Leonardo Tonetto tonetto.dev@gmail.com Contributor
Mara Branzanti mara.branzanti@gmail.com Contributor
Marc Molina marc.molina.pena@gmail.com Contributor
Marc Sales marcsales92@gmail.com Contributor
Carlos Paniego carpanie@hotmail.com Artwork

View File

@ -5,17 +5,18 @@ tags:
- gnss
- gps
- Galileo
- Glonass
author:
- Carles Fernandez-Prades <carles.fernandez@cttc.es>
- Javier Arribas <javier.arribas@cttc.es>
- et altri (see AUTHORS file for a list of contributors)
copyright_owner:
- The Authors
dependencies: gnuradio (>= 3.7.3), armadillo, gflags, glog, gnutls
dependencies: gnuradio (>= 3.7.3), armadillo, gflags, glog, gnutls, matio
license: GPLv3+
repo: https://github.com/gnss-sdr/gnss-sdr
website: https://gnss-sdr.org
icon: https://a.fsdn.com/con/app/proj/gnss-sdr/screenshots/logo400x400.jpg
icon: https://raw.githubusercontent.com/gnss-sdr/gnss-sdr/master/docs/doxygen/images/gnss-sdr_logo.png
---
Global Navigation Satellite Systems receiver defined by software. It performs all the signal
processing from raw signal samples up to the computation of the Position-Velocity-Time solution,

View File

@ -21,7 +21,7 @@
# that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# http://www.gnu.org/software/libiconv for the list of possible encodings.
# https://www.gnu.org/software/libiconv for the list of possible encodings.
DOXYFILE_ENCODING = UTF-8
@ -551,7 +551,7 @@ LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
@ -623,7 +623,7 @@ INPUT = @top_srcdir@/src @top_srcdir@/docs/doxygen/other
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
# also the default input encoding. Doxygen uses libiconv (or the iconv built
# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
# into libc) for the transcoding. See https://www.gnu.org/software/libiconv for
# the list of possible encodings.
INPUT_ENCODING = UTF-8
@ -796,7 +796,7 @@ SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen
# built-in source browser. The htags tool is part of GNU's global source
# tagging system (see http://www.gnu.org/software/global/global.html). You
# tagging system (see https://www.gnu.org/software/global/global.html). You
# will need version 4.8.6 or higher.
USE_HTAGS = NO
@ -875,7 +875,7 @@ HTML_STYLESHEET =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the stylesheet and background images
# according to this color. Hue is specified as an angle on a colorwheel,
# see http://en.wikipedia.org/wiki/Hue for more information.
# see https://en.wikipedia.org/wiki/Hue for more information.
# For instance the value 0 represents red, 60 is yellow, 120 is green,
# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
# The allowed range is 0 to 359.
@ -925,8 +925,6 @@ HTML_DYNAMIC_SECTIONS = NO
# directory and running "make install" will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
# it at startup.
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
GENERATE_DOCSET = NO
@ -1123,7 +1121,7 @@ FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
# (see http://www.mathjax.org) which uses client side Javascript for the
# (see https://www.mathjax.org) which uses client side Javascript for the
# rendering instead of using prerendered bitmaps. Use this if you do not
# have LaTeX installed or if you want to formulas look prettier in the HTML
# output. When enabled you also need to install MathJax separately and
@ -1133,7 +1131,7 @@ USE_MATHJAX = @GNSSSDR_USE_MATHJAX@
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# https://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
@ -1149,7 +1147,7 @@ MATHJAX_FORMAT = HTML-CSS
# MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_RELPATH = https://cdnjs.com/libraries/mathjax/
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
@ -1160,7 +1158,7 @@ MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# (see: https://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
@ -1194,7 +1192,7 @@ SERVER_BASED_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
# Xapian (see: https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
@ -1207,7 +1205,7 @@ EXTERNAL_SEARCH = NO
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Xapian (see: https://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
@ -1358,7 +1356,7 @@ LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.

View File

@ -20,7 +20,7 @@
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# built into libc) for the transcoding. See https://www.gnu.org/software/libiconv
# for the list of possible encodings.
# The default value is: UTF-8.
@ -287,7 +287,7 @@ EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
@ -320,7 +320,7 @@ BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# https://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
@ -679,7 +679,7 @@ LAYOUT_FILE = @PROJECT_SOURCE_DIR@/DoxygenLayout.xml
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. Do not use file names with spaces, bibtex cannot handle them. See
@ -761,7 +761,7 @@ INPUT = @PROJECT_SOURCE_DIR@
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# documentation (see: https://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# The default value is: UTF-8.
@ -994,7 +994,7 @@ SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
@ -1137,7 +1137,7 @@ HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the stylesheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
@ -1195,13 +1195,12 @@ HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# environment (see: https://developer.apple.com/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# startup.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
@ -1240,7 +1239,7 @@ DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
@ -1453,7 +1452,7 @@ FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# https://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using prerendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
@ -1465,7 +1464,7 @@ USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# https://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
@ -1480,11 +1479,11 @@ MATHJAX_FORMAT = HTML-CSS
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# MathJax from https://www.mathjax.org before deployment.
# The default value is: https://cdnjs.com/libraries/mathjax/.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_RELPATH = https://cdnjs.com/libraries/mathjax/
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
@ -1495,7 +1494,7 @@ MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# (see: https://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
@ -1542,7 +1541,7 @@ SERVER_BASED_SEARCH = NO
#
# Doxygen ships with an example indexer ( doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
# Xapian (see: https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
@ -1555,7 +1554,7 @@ EXTERNAL_SEARCH = NO
#
# Doxygen ships with an example indexer ( doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Xapian (see: https://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
@ -1726,7 +1725,7 @@ LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.

View File

@ -76,8 +76,7 @@ This will put the code for the new kernel into
Other kernels must be added by hand. See the following webpages for
more information about creating VOLK kernels:
http://gnuradio.org/doc/doxygen/volk_gnsssdr_guide.html
http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk
https://www.gnuradio.org/doc/doxygen/volk_guide.html
======================================================================

View File

@ -22,62 +22,42 @@ list(SORT SIGNAL_SOURCE_ADAPTER_HEADERS)
# Optional drivers
if(ENABLE_RAW_UDP)
# - Try to find libpcap include dirs and libraries
#
# Usage of this module as follows:
#
# find_package(PCAP)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
# PCAP_ROOT_DIR Set this variable to the root installation of
# libpcap if the module has problems finding the
# proper installation path.
#
# Variables defined by this module:
#
# PCAP_FOUND System has libpcap, include and library dirs found
# PCAP_INCLUDE_DIR The libpcap include directories.
# PCAP_LIBRARY The libpcap library (possibly includes a thread
# library e.g. required by pf_ring's libpcap)
# HAVE_PF_RING If a found version of libpcap supports PF_RING
find_package(PCAP)
if(NOT PCAP_FOUND)
message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (ENABLE_RAW_UDP)")
endif()
get_filename_component(PCAP_LIBRARY_DIRS ${PCAP_LIBRARY} DIRECTORY CACHE)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS})
set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} custom_udp_signal_source.cc)
find_package(PCAP)
if(NOT PCAP_FOUND)
message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (ENABLE_RAW_UDP)")
endif(NOT PCAP_FOUND)
get_filename_component(PCAP_LIBRARY_DIRS ${PCAP_LIBRARY} DIRECTORY CACHE)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS})
set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} custom_udp_signal_source.cc)
endif(ENABLE_RAW_UDP)
if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
find_package(Griio REQUIRED)
if(NOT IIO_FOUND)
message(STATUS "gnuradio-iio not found, its installation is required.")
message(STATUS "Please build and install the following projects:")
message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio")
message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio")
message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio")
message(FATAL_ERROR "gnuradio-iio is required for building gnss-sdr with this option enabled.")
endif(NOT IIO_FOUND)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${IIO_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${IIO_INCLUDE_DIRS})
find_package(Griio REQUIRED)
if(NOT IIO_FOUND)
message(STATUS "gnuradio-iio not found, its installation is required.")
message(STATUS "Please build and install the following projects:")
message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio")
message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio")
message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio")
message(FATAL_ERROR "gnuradio-iio is required for building gnss-sdr with this option enabled.")
endif(NOT IIO_FOUND)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${IIO_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${IIO_INCLUDE_DIRS})
endif(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
if(ENABLE_AD9361)
find_package(libiio REQUIRED)
if(NOT LIBIIO_FOUND)
message(STATUS "libiio not found, its installation is required.")
message(STATUS "Please build and install the following projects:")
message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio")
message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio")
message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio")
message(FATAL_ERROR "libiio is required for building gnss-sdr with this option enabled.")
endif(NOT LIBIIO_FOUND)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${LIBIIO_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${LIBIIO_INCLUDE_DIRS})
find_package(libiio REQUIRED)
if(NOT LIBIIO_FOUND)
message(STATUS "libiio not found, its installation is required.")
message(STATUS "Please build and install the following projects:")
message(STATUS " * libiio from https://github.com/analogdevicesinc/libiio")
message(STATUS " * libad9361-iio from https://github.com/analogdevicesinc/libad9361-iio")
message(STATUS " * gnuradio-iio from https://github.com/analogdevicesinc/gr-iio")
message(FATAL_ERROR "libiio is required for building gnss-sdr with this option enabled.")
endif(NOT LIBIIO_FOUND)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${LIBIIO_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${LIBIIO_INCLUDE_DIRS})
endif(ENABLE_AD9361)

View File

@ -18,34 +18,14 @@
if(ENABLE_RAW_UDP)
# - Try to find libpcap include dirs and libraries
#
# Usage of this module as follows:
#
# find_package(PCAP)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
# PCAP_ROOT_DIR Set this variable to the root installation of
# libpcap if the module has problems finding the
# proper installation path.
#
# Variables defined by this module:
#
# PCAP_FOUND System has libpcap, include and library dirs found
# PCAP_INCLUDE_DIR The libpcap include directories.
# PCAP_LIBRARY The libpcap library (possibly includes a thread
# library e.g. required by pf_ring's libpcap)
# HAVE_PF_RING If a found version of libpcap supports PF_RING
find_package(PCAP)
if(NOT PCAP_FOUND)
message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (ENABLE_RAW_UDP)")
endif()
get_filename_component(PCAP_LIBRARY_DIRS ${PCAP_LIBRARY} DIRECTORY CACHE)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS})
set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gr_complex_ip_packet_source.cc)
find_package(PCAP)
if(NOT PCAP_FOUND)
message(FATAL_ERROR "PCAP required to compile custom UDP packet sample source (ENABLE_RAW_UDP)")
endif(NOT PCAP_FOUND)
get_filename_component(PCAP_LIBRARY_DIRS ${PCAP_LIBRARY} DIRECTORY CACHE)
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES})
set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS})
set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gr_complex_ip_packet_source.cc)
endif(ENABLE_RAW_UDP)
set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES

View File

@ -20,29 +20,29 @@ set(SYSTEM_PARAMETERS_SOURCES
gnss_satellite.cc
gnss_signal.cc
gps_navigation_message.cc
gps_ephemeris.cc
gps_iono.cc
gps_almanac.cc
gps_utc_model.cc
gps_acq_assist.cc
gps_ref_time.cc
gps_ref_location.cc
galileo_utc_model.cc
galileo_ephemeris.cc
galileo_almanac.cc
galileo_iono.cc
galileo_navigation_message.cc
sbas_ephemeris.cc
galileo_fnav_message.cc
gps_cnav_ephemeris.cc
gps_cnav_navigation_message.cc
gps_cnav_iono.cc
gps_cnav_utc_model.cc
rtcm.cc
glonass_gnav_ephemeris.cc
glonass_gnav_almanac.cc
glonass_gnav_utc_model.cc
glonass_gnav_navigation_message.cc
gps_ephemeris.cc
gps_iono.cc
gps_almanac.cc
gps_utc_model.cc
gps_acq_assist.cc
gps_ref_time.cc
gps_ref_location.cc
galileo_utc_model.cc
galileo_ephemeris.cc
galileo_almanac.cc
galileo_iono.cc
galileo_navigation_message.cc
sbas_ephemeris.cc
galileo_fnav_message.cc
gps_cnav_ephemeris.cc
gps_cnav_navigation_message.cc
gps_cnav_iono.cc
gps_cnav_utc_model.cc
rtcm.cc
glonass_gnav_ephemeris.cc
glonass_gnav_almanac.cc
glonass_gnav_utc_model.cc
glonass_gnav_navigation_message.cc
)

View File

@ -16,13 +16,11 @@
# along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>.
#
set(GNSS_SDR_OPTIONAL_LIBS "")
set(GNSS_SDR_OPTIONAL_HEADERS "")
if(ENABLE_GPERFTOOLS)
if(GPERFTOOLS_FOUND)
#set(GNSS_SDR_OPTIONAL_LIBS "${GNSS_SDR_OPTIONAL_LIBS};${GPERFTOOLS_LIBRARIES}")
set(GNSS_SDR_OPTIONAL_LIBS "${GNSS_SDR_OPTIONAL_LIBS};${GPERFTOOLS_PROFILER};${GPERFTOOLS_TCMALLOC}")
set(GNSS_SDR_OPTIONAL_HEADERS "${GNSS_SDR_OPTIONAL_HEADERS};${GPERFTOOLS_INCLUDE_DIR}")
endif(GPERFTOOLS_FOUND)
@ -48,7 +46,6 @@ if(ORC_FOUND)
set(GNSS_SDR_OPTIONAL_HEADERS ${GNSS_SDR_OPTIONAL_HEADERS} ${ORC_INCLUDE_DIRS})
endif(ORC_FOUND)
include_directories(
${CMAKE_SOURCE_DIR}/src/core/system_parameters
${CMAKE_SOURCE_DIR}/src/core/interfaces
@ -76,13 +73,11 @@ if(OS_IS_MACOSX)
endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif(OS_IS_MACOSX)
add_executable(gnss-sdr ${CMAKE_CURRENT_SOURCE_DIR}/main.cc)
add_custom_command(TARGET gnss-sdr POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:gnss-sdr>
${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr>
)
${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:gnss-sdr> )
target_link_libraries(gnss-sdr ${MAC_LIBRARIES}
${Boost_LIBRARIES}
@ -97,18 +92,14 @@ target_link_libraries(gnss-sdr ${MAC_LIBRARIES}
${GNSS_SDR_OPTIONAL_LIBS}
gnss_sp_libs
gnss_sdr_flags
gnss_rx
)
gnss_rx )
install(TARGETS gnss-sdr
RUNTIME DESTINATION bin
COMPONENT "gnss-sdr"
)
COMPONENT "gnss-sdr" )
install(DIRECTORY ${CMAKE_SOURCE_DIR}/conf DESTINATION share/gnss-sdr
FILES_MATCHING PATTERN "*.conf"
)
FILES_MATCHING PATTERN "*.conf" )
install(FILES ${CMAKE_SOURCE_DIR}/conf/gnss-sdr.conf DESTINATION share/gnss-sdr/conf
RENAME default.conf)
@ -118,7 +109,6 @@ if(NOT VOLK_GNSSSDR_FOUND)
install(PROGRAMS ${CMAKE_BINARY_DIR}/volk_gnsssdr_module/build/apps/volk_gnsssdr-config-info DESTINATION bin COMPONENT "volk_gnsssdr")
endif(NOT VOLK_GNSSSDR_FOUND)
find_program(GZIP
gzip
/bin
@ -127,6 +117,7 @@ find_program(GZIP
/opt/local/bin
/sbin
)
if(NOT GZIP_NOTFOUND)
execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/manpage/gnss-sdr-manpage
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/gnss-sdr.1.gz")

View File

@ -449,7 +449,14 @@ int main(int argc, char** argv)
{
std::cout << " . ";
}
channel_internal_queue.push(3);
try
{
channel_internal_queue.push(3);
}
catch (const boost::exception& e)
{
LOG(INFO) << "Exception caught while pushing to he internal queue.";
}
try
{
ch_thread.join();

View File

@ -1,49 +0,0 @@
# CMAKE for GPSTK by Javier Arribas 2012
cmake_minimum_required (VERSION 2.6)
project (gnsspvt_project)
include_directories(${gnsspvt_project_SOURCE_DIR}/src)
add_library (kml_printer_gpstk ${gnsspvt_project_SOURCE_DIR}/src/kml_printer_gpstk.cpp)
add_executable(gnsspvt ${gnsspvt_project_SOURCE_DIR}/src/gnsspvt.cpp)
target_link_libraries (gnsspvt kml_printer_gpstk)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
find_package(GPSTK REQUIRED)
if ( NOT GPSTK_FOUND )
message(FATAL_ERROR "GPSTK library not found!")
endif( NOT GPSTK_FOUND )
find_package(GLOG REQUIRED)
if ( NOT GLOG_FOUND )
message(FATAL_ERROR "GLOG library not found!")
endif( NOT GLOG_FOUND )
include_directories(${GLOG_INCLUDE_DIRS})
# IMPORTANT NOTICE: The GPSTK linking order is critical. First it is required to link agains libprocframe to avoid vtable errors
include_directories(${GPSTK_INCLUDE_DIR}/gpstk ${GEOMATICS_INCLUDE_DIR} ${PROCFRAME_INCLUDE_DIR} ${VDRAW_INCLUDE_DIR} ${VPLOT_INCLUDE_DIR} ${RXIO_INCLUDE_DIR})
# set(LIBS ${LIBS} ${GPSTK_LIBRARIES} ${GEOMATICS_LIBRARIES} ${VDRAW_LIBRARIES} ${VPLOT_LIBRARIES} ${RXIO_LIBRARIES})
set(LIBS ${LIBS} ${PROCFRAME_LIBRARIES} ${GPSTK_LIBRARIES} ${GEOMATICS_LIBRARIES} ${GLOG_LIBRARIES})
target_link_libraries(gnsspvt ${LIBS})
message(STATUS "GPSTK_INCLUDE_DIR="${GLOG_LIBRARIES})
#message(STATUS "GPSTK_LIBRARIES=${GPSTK_LIBRARIES}")
#message(STATUS "LIBS=${LIBS}")
# debug info: print all variables
#get_cmake_property(_variableNames VARIABLES)
#foreach (_variableName ${_variableNames})
# message(STATUS "${_variableName}=${${_variableName}}")
#endforeach()
#get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
#foreach(dir ${dirs})
# message(STATUS "INCLUDE_DIRECTORIES='${dir}'")
#endforeach()

View File

@ -1,103 +0,0 @@
# - Try to find the Google Glog library
#
# This module defines the following variables
#
# GLOG_FOUND - Was Glog found
# GLOG_INCLUDE_DIRS - the Glog include directories
# GLOG_LIBRARIES - Link to this
#
# This module accepts the following variables
#
# GLOG_ROOT - Can be set to Glog install path or Windows build path
#
#=============================================================================
# FindGlog.cmake, adapted from FindBullet.cmake which has the following
# copyright -
#-----------------------------------------------------------------------------
# Copyright 2009 Kitware, Inc.
# Copyright 2009 Philip Lowman <philip@yhbt.com>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
if (NOT DEFINED GLOG_ROOT)
set (GLOG_ROOT /usr /usr/local)
endif (NOT DEFINED GLOG_ROOT)
if(MSVC)
set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release)
else(MSVC)
set (LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib)
endif(MSVC)
macro(_FIND_GLOG_LIBRARIES _var)
find_library(${_var}
NAMES
${ARGN}
PATHS
${LIB_PATHS}
PATH_SUFFIXES lib
)
mark_as_advanced(${_var})
endmacro()
macro(_GLOG_APPEND_LIBRARIES _list _release)
set(_debug ${_release}_DEBUG)
if(${_debug})
set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}})
else()
set(${_list} ${${_list}} ${${_release}})
endif()
endmacro()
if(MSVC)
find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
PATHS
${GLOG_ROOT}/src/windows
${GLOG_ROOT}/src/windows/glog
)
else(MSVC)
# Linux/OS X builds
find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h
PATHS
${GLOG_ROOT}/include/glog
)
endif(MSVC)
# Find the libraries
if(MSVC)
_FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.lib)
else(MSVC)
# Linux/OS X builds
_FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.so)
endif(MSVC)
message("glog library = " ${GLOG_LIBRARIES})
# handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if
# all listed variables are TRUE
include("${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake")
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Glog DEFAULT_MSG
GLOG_LIBRARIES)
if(MSVC)
string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR})
string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT})
set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}")
string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
else(MSVC)
# Linux/OS X builds
set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES})
endif(MSVC)
if(GLOG_FOUND)
# _GLOG_APPEND_LIBRARIES(GLOG GLOG_LIBRARIES)
endif()

View File

@ -1,87 +0,0 @@
# - Find gpstk library
# Find the native gpstk includes and library
# This module defines
# GPSTK_INCLUDE_DIR, where to find tiff.h, etc.
# GPSTK_LIBRARIES, libraries to link against to use GPSTK.
# GPSTK_FOUND, If false, do not try to use GPSTK.
# also defined, but not for general use are
# GPSTK_LIBRARY, where to find the GPSTK library.
FIND_PATH(GPSTK_INCLUDE_DIR gpstk/Matrix.hpp)
FIND_PATH(GEOMATICS_INCLUDE_DIR gpstk/random.hpp)
FIND_PATH(PROCFRAME_INCLUDE_DIR gpstk/SolverWMS.hpp)
FIND_PATH(VDRAW_INCLUDE_DIR gpstk/Layout.hpp)
FIND_PATH(VPLOT_INCLUDE_DIR gpstk/ScatterPlot.hpp)
FIND_PATH(RXIO_INCLUDE_DIR gpstk/EphReader.hpp)
SET(GPSTK_NAMES ${GPSTK_NAMES} gpstk libgpstk)
FIND_LIBRARY(GPSTK_LIBRARY NAMES ${GPSTK_NAMES} )
SET(GEOMATICS_NAMES ${GEOMATICS_NAMES} geomatics libgeomatics)
FIND_LIBRARY(GEOMATICS_LIBRARY NAMES ${GEOMATICS_NAMES} )
SET(PROCFRAME_NAMES ${PROCFRAME_NAMES} procframe libprocframe)
FIND_LIBRARY(PROCFRAME_LIBRARY NAMES ${PROCFRAME_NAMES} )
SET(VDRAW_NAMES ${VDRAW_NAMES} vdraw libvdraw)
FIND_LIBRARY(VDRAW_LIBRARY NAMES ${VDRAW_NAMES} )
SET(VPLOT_NAMES ${VPLOT_NAMES} vplot libvplot)
FIND_LIBRARY(VPLOT_LIBRARY NAMES ${VPLOT_NAMES} )
SET(RXIO_NAMES ${RXIO_NAMES} rxio librxio)
FIND_LIBRARY(RXIO_LIBRARY NAMES ${RXIO_NAMES} )
# handle the QUIETLY and REQUIRED arguments and set GPSTK_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPSTK DEFAULT_MSG GPSTK_LIBRARY GPSTK_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOMATICS DEFAULT_MSG GEOMATICS_LIBRARY GEOMATICS_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROCFRAME DEFAULT_MSG PROCFRAME_LIBRARY PROCFRAME_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(VDRAW DEFAULT_MSG VDRAW_LIBRARY VDRAW_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(VPLOT DEFAULT_MSG VPLOT_LIBRARY VPLOT_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RXIO DEFAULT_MSG RXIO_LIBRARY RXIO_INCLUDE_DIR)
IF(GPSTK_FOUND)
SET( GPSTK_LIBRARIES ${GPSTK_LIBRARY} )
ENDIF(GPSTK_FOUND)
IF(GEOMATICS_FOUND)
SET( GEOMATICS_LIBRARIES ${GEOMATICS_LIBRARY} )
ENDIF(GEOMATICS_FOUND)
IF(PROCFRAME_FOUND)
SET( PROCFRAME_LIBRARIES ${PROCFRAME_LIBRARY} )
ENDIF(PROCFRAME_FOUND)
IF(VDRAW_FOUND)
SET( VDRAW_LIBRARIES ${VDRAW_LIBRARY} )
ENDIF(VDRAW_FOUND)
IF(VPLOT_FOUND)
SET( VPLOT_LIBRARIES ${VPLOT_LIBRARY} )
ENDIF(VPLOT_FOUND)
IF(RXIO_FOUND)
SET( RXIO_LIBRARIES ${RXIO_LIBRARY} )
ENDIF(RXIO_FOUND)
MARK_AS_ADVANCED(GPSTK_INCLUDE_DIR GPSTK_LIBRARY)
MARK_AS_ADVANCED(GEOMATICS_INCLUDE_DIR GEOMATICS_LIBRARY)
MARK_AS_ADVANCED(PROCFRAME_INCLUDE_DIR PROCFRAME_LIBRARY)
MARK_AS_ADVANCED(VDRAW_INCLUDE_DIR VDRAW_LIBRARY)
MARK_AS_ADVANCED(VPLOT_INCLUDE_DIR VPLOT_LIBRARY)
MARK_AS_ADVANCED(RXIO_INCLUDE_DIR RXIO_LIBRARY)

View File

@ -1,62 +0,0 @@
ABOUT GNSSPVT
----------------------
This program uses the high level GpsTk classes to implement a simple PVT solver
that uses RINEX files as an input.
The output is written both in the console and in a Google Earth KML file.
HOW TO BUILD GNSSPVT
----------------------
Installation in Ubuntu 11.04, 11.10, 12.04 (32 and 64 bits)
-----------------------------------------------------------
- Install CMake through your OS's package manager or by some other means.
- Install GpsTk:
The following procedure will build and install the GPSTk.
Ensure that prerequisites such as jam have been installed.
Download the GPSTk source distribution from http://www.gpstk.org/bin/view/Documentation/GPSTkDownloads
Extract the GPSTk tarball. For example, using GNU tar
tar xvzf gpstk.tar.gz
Change into the gpstk/dev directory (if using Subversion) or the gpstk/ directory (if using the tarball)and type
jam
To build the source documentation using doxygen:
doxygen
To install GPSTk as a system library in /usr/local, assume root privileges then execute
jam install
To install to a different directory, define the environment variable PREFIX to point to the root of the installation
- Download, unzip, configure, build and install glog, a Google's library that implements application-level logging:
$ wget http://google-glog.googlecode.com/files/glog-0.3.2.tar.gz
$ tar xvfz glog-0.3.2.tar.gz
$ cd glog-0.3.2
$ ./configure
$ make
$ sudo make install
- Go to GNSSPVT root directory and compile the gnsspvt:
$ cd gnss-sdr/src/utils/gpstk/gnsspvt/
$ mkdir build
$ cd build
$ cmake ../
$ make
If everything goes well, the executable file is available in the build directory.
USAGE
----------------------
./gnsspvt -i path_to_rinex_observable_file -n path_to_rinex_navigation_file -k path_to_kml_output_file

View File

@ -1,593 +0,0 @@
/*!
* \file gnsspvt.cpp
* \brief Adapted version of high level gpstk PVT solver to read RINEX files,
* compute the position, velocity and time solution, and write Google Earth KML output file.
* The input Observables and Navigation files can be RINEX 2.10 or RINEX 3.00.
* It is a modified version of the example5.cpp code provided in gpstk source code.
*
* \author Javier Arribas, 2012. jarribas(at)cttc.es
*
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2012 (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/>.
*
* -------------------------------------------------------------------------
*/
// Modified Example program Nro 5 for GPSTk
// This program shows how to use some high-level GPSTk classes
// Basic input/output C++ class
#include <iostream>
// Classes for handling observations RINEX files (data)
#include "gpstk/Rinex3ObsData.hpp"
#include "gpstk/Rinex3ObsStream.hpp"
// Class to easily extract data from Rinex3ObsData objects
#include "gpstk/ExtractData.hpp"
// Classes for handling satellite navigation parameters RINEX files
// (Broadcast ephemerides)
#include "gpstk/Rinex3NavHeader.hpp"
#include "gpstk/Rinex3NavData.hpp"
#include "gpstk/Rinex3NavStream.hpp"
// Class to store satellite broadcast navigation data
#include "gpstk/GPSEphemerisStore.hpp"
// Class to model GPS data for a mobile receiver
#include "gpstk/ModeledPR.hpp"
#include "gpstk/GNSSconstants.hpp"
#include "gpstk/CommonTime.hpp"
#include "gpstk/SatID.hpp"
#include "gpstk/Matrix.hpp"
#include "gpstk/XvtStore.hpp"
#include "gpstk/TropModel.hpp"
// Class to model the tropospheric delays
#include "gpstk/TropModel.hpp"
// Classes to model ans store ionospheric delays
#include "gpstk/IonoModel.hpp"
#include "gpstk/IonoModelStore.hpp"
// Class to solve the equations system using a Weighted Least Mean Square method
#include "gpstk/SolverWMS.hpp"
// Class to compute the weights to be used for each satellite
#include "gpstk/MOPSWeight.hpp"
// Basic framework for programs in the GPSTk. The 'process()' method MUST
// be implemented
#include "gpstk/BasicFramework.hpp"
#include "gpstk/geometry.hpp" // DEG_TO_RAD
// Time-class year-day-second
#include "gpstk/YDSTime.hpp"
#include "kml_printer_gpstk.h"
using namespace std;
using namespace gpstk;
// A new class is declared that will handle program behaviour
// This class inherits from BasicFramework
class gpstk_solver : public BasicFramework
{
public:
// Constructor declaration
gpstk_solver(char* arg0);
~gpstk_solver();
protected:
// Method that will take care of processing
virtual void process();
// Method that hold code to be run BEFORE processing
virtual void spinUp();
virtual int Prepare( const CommonTime& Tr,
std::vector<SatID>& Satellite,
std::vector<double>& Pseudorange,
const XvtStore<SatID>& Eph );
virtual int Prepare2( const CommonTime& Tr,
const Vector<SatID>& Satellite,
const Vector<double>& Pseudorange,
const XvtStore<SatID>& Eph );
private:
// These field represent options at command line interface (CLI)
CommandOptionWithArg dataFile;
CommandOptionWithArg navFile;
CommandOptionWithArg kmlFile;
Kml_Printer_gpstk kml_printer;
// If you want to share objects and variables among methods, you'd
// better declare them here
Rinex3ObsStream rObsFile; // Object to read Rinex observation data files
Rinex3ObsData rData; // Object to store Rinex observation data
Rinex3NavStream rNavFile; // Object to read Rinex navigation data files
Rinex3NavData rNavData; // Object to store Rinex navigation data
Rinex3NavHeader rNavHeader; // Object to read the header of Rinex
// navigation data files
IonoModelStore ionoStore; // Object to store ionospheric models
GPSEphemerisStore bceStore; // Object to store ephemeris
ModeledPR modelPR; // Declare a ModeledReferencePR object
MOPSTropModel mopsTM; // Declare a MOPSTropModel object
ExtractData obsC1; // Declare an ExtractData object
int indexC1; // Index to "C1" observation
bool useFormerPos; // Flag indicating if we have an a priori
// position
Position formerPosition; // Object to store the former position
IonoModel ioModel; // Declare a Ionospheric Model object
SolverWMS solver; // Declare an object to apply WMS method
MOPSWeight mopsWeights; // Object to compute satellites' weights
};
// Let's implement constructor details
gpstk_solver::gpstk_solver(char* arg0)
: BasicFramework(arg0, "\nProgram to print the position solution in ECEF "
"and longitude, latitude, height, based in C1 and "
"given a RINEX observations file and a RINEX "
"broadcast navigation file.\n\n"
"The output is: \n"
" Time(sec) X(m) Y(m) Z(m) Lon(deg) "
" Lat(deg) Height(m)\n"),
// Option initialization. "true" means a mandatory option
dataFile(CommandOption::stdType, 'i', "datainput",
" [-i|--datainput] Name of RINEX observations file.", true),
navFile(CommandOption::stdType, 'n', "navinput",
" [-n|--navinput] Name of RINEX broadcast navigation file.", true),
kmlFile(CommandOption::stdType, 'k', "kmloutput",
" [-n|--navinput] Name of KML output file.", true)
{
// These options may appear just once at CLI
dataFile.setMaxCount(1);
navFile.setMaxCount(1);
kmlFile.setMaxCount(1);
} // End of constructor details
/* Method to set an a priori position of receiver using
* Bancroft's method.
*
* @param Tr Time of observation
* @param Satellite std::vector of satellites in view
* @param Pseudorange std::vector of pseudoranges measured from
* rover station to satellites
* @param Eph Satellites Ephemeris
*
* @return
* 0 if OK
* -1 if problems arose
*/
int gpstk_solver::Prepare( const CommonTime& Tr,
std::vector<SatID>& Satellite,
std::vector<double>& Pseudorange,
const XvtStore<SatID>& Eph )
{
Matrix<double> SVP;
Bancroft Ban;
Vector<double> vPos;
PRSolution2 raimObj;
try
{
cerr << "Tr=" <<Tr<<std::endl;
for (std::vector<SatID>::iterator it = Satellite.begin() ; it != Satellite.end(); ++it)
{
cerr << "SatID=" << *it<<endl;
cerr << "EphemerisStore Sat XYZ= " << bceStore.getXvt(*it,rData.time).x<<std::endl;
}
for (std::vector<double>::iterator it = Pseudorange.begin() ; it != Pseudorange.end(); ++it)
{
cerr << "PseudoRanges=" << *it<<endl;
}
//cerr << "Eph=" << Eph <<std::endl;
//cerr << "SVP=" << SVP <<std::endl;
raimObj.PrepareAutonomousSolution( Tr,
Satellite,
Pseudorange,
Eph,
SVP );
if( Ban.Compute(SVP, vPos) < 0 )
{
cerr << "Error 1" <<std::endl;
cerr << "SVP="<<SVP<<std::endl;
cerr << "vPos=" << vPos <<std::endl;
return -1;
}
}
catch(Exception &error)
{
cerr << "Excepción 1: "<<error;
return -1;
}
cerr << "OK prepare"<<endl;
return 1;
} // End of method 'ModeledPR::Prepare()'
/* Method to set an a priori position of receiver using
* Bancroft's method.
*
* @param Tr Time of observation
* @param Satellite Vector of satellites in view
* @param Pseudorange Pseudoranges measured from rover station to
* satellites
* @param Eph Satellites Ephemeris
*
* @return
* 0 if OK
* -1 if problems arose
*/
int gpstk_solver::Prepare2( const CommonTime& Tr,
const Vector<SatID>& Satellite,
const Vector<double>& Pseudorange,
const XvtStore<SatID>& Eph )
{
int i;
std::vector<SatID> vSat;
std::vector<double> vPR;
// Convert from gpstk::Vector to std::vector
for (i = 0; i < (int)Satellite.size(); i++)
{
vSat.push_back(Satellite[i]);
}
for (i = 0; i < (int)Pseudorange.size(); i++)
{
vPR.push_back(Pseudorange[i]);
}
return Prepare(Tr, vSat, vPR, Eph);
} // End of method 'ModeledPR::Prepare()'
// Method that will be executed AFTER initialization but BEFORE processing
void gpstk_solver::spinUp()
{
//open KML output file
if (kml_printer.set_headers(kmlFile.getValue()[0].c_str())!=true)
{
cerr << "Problem creating the kml file "<<kmlFile.getValue()[0].c_str();
exit (-1);
}
// From now on, some parts may look similar to 'example3.cpp' and
// 'example4.cpp'
// Activate failbit to enable exceptions
rObsFile.exceptions(ios::failbit);
// First, data RINEX reading object
try
{
rObsFile.open(dataFile.getValue()[0].c_str(), std::ios::in);
}
catch(...)
{
cerr << "Problem opening file " << dataFile.getValue()[0].c_str()
<< endl;
cerr << "Maybe it doesn't exist or you don't have proper read "
<< "permissions." << endl;
exit (-1);
}
// We need to read the header of the observations file
Rinex3ObsHeader roh;
rObsFile >> roh;
// We need the index pointing to C1-type observations
try
{
indexC1 = roh.getObsIndex( "C1" );
}
catch(...)
{
cerr << "The observation file doesn't have C1 pseudoranges." << endl;
exit(1);
}
// Activate failbit to enable exceptions
rNavFile.exceptions(ios::failbit);
// Read nav file and store unique list of ephemerides
try
{
rNavFile.open(navFile.getValue()[0].c_str(), std::ios::in);
}
catch(...)
{
cerr << "Problem opening file " << navFile.getValue()[0].c_str() << endl;
cerr << "Maybe it doesn't exist or you don't have proper read "
<< "permissions." << endl;
exit (-1);
}
// We will need to read ionospheric parameters (Klobuchar model) from
// the file header
rNavFile >> rNavHeader;
// Let's feed the ionospheric model (Klobuchar type) from data in the
// navigation (ephemeris) file header. First, we must check if there are
// valid ionospheric correction parameters in the header
if(rNavHeader.valid & Rinex3NavHeader::validIonoCorrGPS)
{
// Extract the Alpha and Beta parameters from the header
double* ionAlpha = rNavHeader.mapIonoCorr["GPSA"].param;
double* ionBeta = rNavHeader.mapIonoCorr["GPSB"].param;
// Feed the ionospheric model with the parameters
ioModel.setModel(ionAlpha, ionBeta);
}
else
{
cerr << "WARNING: Navigation file " << navFile.getValue()[0].c_str()
<< " doesn't have valid ionospheric correction parameters." << endl;
}
// WARNING-WARNING-WARNING: In this case, the same model will be used
// for the full data span
ionoStore.addIonoModel(CommonTime::BEGINNING_OF_TIME, ioModel);
// Storing the ephemeris in "bceStore"
while (rNavFile >> rNavData)
{
bceStore.addEphemeris(rNavData);
rNavData.dump(cerr);
cerr<<endl;
}
// Setting the criteria for looking up ephemeris
bceStore.SearchPast(); // This is the default
// This is set to true if the former computed positon will be used as
// a priori position
useFormerPos = false; // At first, we don't have an a priori position
// Prepare for printing later on
cout << fixed << setprecision(8);
} // End of gpstk_solver::spinUp()
// Method that will really process information
void gpstk_solver::process()
{
// Let's read the observations RINEX, epoch by epoch
while( rObsFile >> rData )
{
// Begin usable data with enough number of satellites
if( (rData.epochFlag == 0 || rData.epochFlag == 1) &&
(rData.numSVs > 3) )
{
// Number of satellites with valid data in this epoch
int validSats = 0;
int prepareResult;
double rxAltitude; // Receiver altitude for tropospheric model
double rxLatitude; // Receiver latitude for tropospheric model
// We need to extract C1 data from this epoch. Skip epoch if not
// enough data (4 SV at least) is available
if( obsC1.getData(rData, indexC1) < 4 )
{
// The former position will not be valid next time
useFormerPos = false;
continue;
}
// If possible, use former position as a priori
if( useFormerPos )
{
prepareResult = modelPR.Prepare(formerPosition);
// We need to seed this kind of tropospheric model with
// receiver altitude
rxAltitude = formerPosition.getAltitude();
rxLatitude = formerPosition.getGeodeticLatitude();
}
else
{
// Use Bancroft method is no a priori position is available
cerr << "Bancroft method was used at epoch "
<< static_cast<YDSTime>(rData.time).sod << endl;
Prepare2( rData.time,obsC1.availableSV,obsC1.obsData,bceStore );
prepareResult = modelPR.Prepare( rData.time,
obsC1.availableSV,
obsC1.obsData,
bceStore );
// We need to seed this kind of tropospheric model with
// receiver altitude
rxAltitude = modelPR.rxPos.getAltitude();
rxLatitude = modelPR.rxPos.getGeodeticLatitude();
}
// If there were problems with Prepare(), skip this epoch
if( prepareResult )
{
// The former position will not be valid next time
useFormerPos = false;
continue;
}
// If there were no problems, let's feed the tropospheric model
mopsTM.setReceiverHeight(rxAltitude);
mopsTM.setReceiverLatitude(rxLatitude);
mopsTM.setDayOfYear(static_cast<YDSTime>(rData.time).doy);
// Now, let's compute the GPS model for our observable (C1)
validSats = modelPR.Compute( rData.time,
obsC1.availableSV,
obsC1.obsData,
bceStore,
&mopsTM,
&ionoStore );
// Only get into further computations if there are enough
// satellites
if( validSats >= 4 )
{
// Now let's solve the navigation equations using the WMS method
try
{
// First, compute the satellites' weights
int goodSv = mopsWeights.getWeights( rData.time,
modelPR.availableSV,
bceStore,
modelPR.ionoCorrections,
modelPR.elevationSV,
modelPR.azimuthSV,
modelPR.rxPos );
// Some minimum checking is in order
if ( goodSv != (int)modelPR.prefitResiduals.size() ) continue;
// Then, solve the system
solver.Compute( modelPR.prefitResiduals,
modelPR.geoMatrix,
mopsWeights.weightsVector );
}
catch( InvalidSolver& e )
{
cerr << "Couldn't solve equations system at epoch "
<< static_cast<YDSTime>(rData.time).sod << endl;
cerr << e << endl;
// The former position will not be valid next time
useFormerPos = false;
continue;
}
// With "solver", we got the difference vector between the
// a priori position and the computed, 'real' position. Then,
// let's convert the solution to a Position object
Position solPos( (modelPR.rxPos.X() + solver.solution[0]),
(modelPR.rxPos.Y() + solver.solution[1]),
(modelPR.rxPos.Z() + solver.solution[2]) );
// Print results
cout << static_cast<YDSTime>(rData.time).sod
<< " "; // Output field #1
cout << "X="<<solPos.X() << "; "; // Output field #2
cout << "Y="<<solPos.Y() << "; "; // Output field #3
cout << "Z="<<solPos.Z() << "; "; // Output field #4
cout << solPos.longitude() << " "; // Output field #5
cout << solPos.geodeticLatitude() << " "; // Output field #6
cout << solPos.height() << " "; // Output field #7
cout << endl;
cout << "Geocentric Latitude="<< solPos.geocentricLatitude() << " "; // Output field #5
cout << endl;
// write KML PVT line
kml_printer.print_position(solPos);
formerPosition = solPos;
// Next time, former position will be used as a priori
useFormerPos = true;
} // End of 'if( validSats >= 4 )'
else
{
// The former position will not be valid next time
useFormerPos = false;
}
} // End of 'if( (rData.epochFlag == 0 || rData.epochFlag == 1) &&...'
else
{
// The former position will not be valid next time
useFormerPos = false;
}
} // End of 'while( rObsFile >> rData )'
return;
} // End of 'gpstk_solver::process()'
gpstk_solver::~gpstk_solver()
{
kml_printer.close_file();
}
// Main function
int main(int argc, char* argv[])
{
try
{
gpstk_solver program(argv[0]);
if (!program.initialize(argc, argv))
return 0;
if (!program.run())
return 1;
return 0;
}
catch(Exception& e)
{
cout << "Problem: " << e << endl;
return 1;
}
catch(...)
{
cout << "Unknown error." << endl;
return 1;
}
return 0;
} // End of 'main()'

View File

@ -1,136 +0,0 @@
/*!
* \file kml_printer.cc
* \brief Implementation of a class that prints PVT information to a kml file
* for GPSTK data structures
* \author Javier Arribas, 2012. jarribas(at)cttc.es
*
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2012 (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 "kml_printer_gpstk.h"
#include <glog/log_severity.h>
#include <glog/logging.h>
#include <time.h>
bool Kml_Printer_gpstk::set_headers(std::string filename)
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
kml_file.open(filename.c_str());
if (kml_file.is_open())
{
DLOG(INFO) << "KML printer writing on " << filename.c_str();
// Set iostream numeric format and precision
kml_file.setf(kml_file.fixed,kml_file.floatfield);
kml_file << std::setprecision(14);
kml_file << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl
<< "<kml xmlns=\"http://www.opengis.net/kml/2.2\">" << std::endl
<< " <Document>" << std::endl
<< " <name>GNSS Track</name>" << std::endl
<< " <description>GNSS-SDR Receiver position log file created at " << asctime (timeinfo)
<< " </description>" << std::endl
<< "<Style id=\"yellowLineGreenPoly\">" << std::endl
<< " <LineStyle>" << std::endl
<< " <color>7f00ffff</color>" << std::endl
<< " <width>1</width>" << std::endl
<< " </LineStyle>" << std::endl
<< "<PolyStyle>" << std::endl
<< " <color>7f00ff00</color>" << std::endl
<< "</PolyStyle>" << std::endl
<< "</Style>" << std::endl
<< "<Placemark>" << std::endl
<< "<name>GNSS-SDR PVT</name>" << std::endl
<< "<description>GNSS-SDR position log</description>" << std::endl
<< "<styleUrl>#yellowLineGreenPoly</styleUrl>" << std::endl
<< "<LineString>" << std::endl
<< "<extrude>0</extrude>" << std::endl
<< "<tessellate>1</tessellate>" << std::endl
<< "<altitudeMode>absolute</altitudeMode>" << std::endl
<< "<coordinates>" << std::endl;
return true;
}
else
{
return false;
}
}
bool Kml_Printer_gpstk::print_position(gpstk::Position position)
{
double latitude;
double longitude;
double height;
latitude = position.geodeticLatitude();
longitude = position.getLongitude();
if (longitude>190)
{
longitude=longitude-360;
}
height = position.getHeight();
if (kml_file.is_open())
{
kml_file << longitude << "," << latitude << "," << height << std::endl;
return true;
}
else
{
return false;
}
}
bool Kml_Printer_gpstk::close_file()
{
if (kml_file.is_open())
{
kml_file << "</coordinates>" << std::endl
<< "</LineString>" << std::endl
<< "</Placemark>" << std::endl
<< "</Document>" << std::endl
<< "</kml>";
kml_file.close();
return true;
}
else
{
return false;
}
}
Kml_Printer_gpstk::Kml_Printer_gpstk () {}
Kml_Printer_gpstk::~Kml_Printer_gpstk () {}

View File

@ -1,60 +0,0 @@
/*!
* \file kml_printer.h
* \brief Interface of a class that prints PVT information to a kml file
* for GPSTK data structures
* \author Javier Arribas, 2012. jarribas(at)cttc.es
*
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2018 (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_KML_PRINTER_H_
#define GNSS_SDR_KML_PRINTER_H_
#include <iostream>
#include <fstream>
#include "gpstk/Position.hpp"
/*!
* \brief Prints PVT information to OGC KML format file (can be viewed with Google Earth)
*
* See http://www.opengeospatial.org/standards/kml
*/
class Kml_Printer_gpstk
{
private:
std::ofstream kml_file;
public:
bool set_headers(std::string filename);
bool print_position(gpstk::Position position);
bool close_file();
Kml_Printer_gpstk();
~Kml_Printer_gpstk();
};
#endif

View File

@ -4,7 +4,7 @@ Continuous Reproducibility in GNSS Signal Processing
This folder contains files required for the reproduction of the experiment proposed in:
C. Fern&aacute;ndez-Prades, J. Vil&agrave;-Valls, J. Arribas and A. Ramos, [*Continuous Reproducibility in GNSS Signal Processing*](http://ieeexplore.ieee.org/document/8331069/), IEEE Access, accepted for publication, April 2018. DOI: 10.1109/ACCESS.2018.2822835
C. Fern&aacute;ndez-Prades, J. Vil&agrave;-Valls, J. Arribas and A. Ramos, [*Continuous Reproducibility in GNSS Signal Processing*](https://ieeexplore.ieee.org/document/8331069/), IEEE Access, Vol. 6, No. 1, pp. 20451-20463, April 2018. DOI: [10.1109/ACCESS.2018.2822835](https://doi.org/10.1109/ACCESS.2018.2822835)
The data set used in this paper is available at https://zenodo.org/record/1184601