mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga
This commit is contained in:
		| @@ -227,8 +227,14 @@ endif(NOT LINUX_DISTRIBUTION) | |||||||
| if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | ||||||
|      set(OperatingSystem "Mac OS X") |      set(OperatingSystem "Mac OS X") | ||||||
|      set(OS_IS_MACOSX TRUE) |      set(OS_IS_MACOSX TRUE) | ||||||
|      exec_program(uname ARGS -v  OUTPUT_VARIABLE DARWIN_VERSION) |      execute_process(COMMAND uname -v OUTPUT_VARIABLE DARWIN_VERSION) | ||||||
|      string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) |      string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) | ||||||
|  |      if(${DARWIN_VERSION} MATCHES "18") | ||||||
|  |          set(MACOS_MOJAVE TRUE) | ||||||
|  |          set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") | ||||||
|  |          set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") | ||||||
|  |          message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on macOS Mojave 10.14") | ||||||
|  |      endif(${DARWIN_VERSION} MATCHES "18") | ||||||
|      if(${DARWIN_VERSION} MATCHES "17") |      if(${DARWIN_VERSION} MATCHES "17") | ||||||
|          set(MACOS_HIGH_SIERRA TRUE) |          set(MACOS_HIGH_SIERRA TRUE) | ||||||
|          set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") |          set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") | ||||||
| @@ -345,7 +351,7 @@ set(GNSSSDR_ARMADILLO_LOCAL_VERSION "9.200.x") | |||||||
| set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1") | set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1") | ||||||
| set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | ||||||
| set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6") | set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6") | ||||||
| set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.12") | set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.13") | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @@ -64,10 +64,10 @@ $ sudo apt-get install build-essential cmake git libboost-dev libboost-date-time | |||||||
|        libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev \ |        libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev \ | ||||||
|        libboost-serialization-dev liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr \ |        libboost-serialization-dev liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr \ | ||||||
|        libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ |        libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ | ||||||
|        libgnutls-openssl-dev libpcap-dev python-mako python-six libmatio-dev googletest |        libgnutls-openssl-dev libpcap-dev python-mako python-six libmatio-dev libgtest-dev | ||||||
| ~~~~~~ | ~~~~~~ | ||||||
|  |  | ||||||
| Please note that `googletest` was named `libgtest-dev` in distributions older than Debian 9 "stretch" and Ubuntu 17.04 "zesty". | Please note that the required files from `libgtest-dev` were moved to `googletest` in Debian 9 "stretch" and Ubuntu 18.04 "bionic", and moved back again to `libgtest-dev` in Debian 10 "buster" and Ubuntu 18.10 "cosmic". | ||||||
|  |  | ||||||
| **Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires `gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev` and `gr-osmosdr` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04 came with 1.5.2 and the minimum required version is 1.5.3. Please do not install the `libmatio-dev` package and install `libtool`, `automake` and `libhdf5-dev` instead. A recent version of the library will be downloaded and built automatically if CMake does not find it installed. | **Note for Ubuntu 14.04 LTS "trusty" users:** you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires `gnuradio-dev` >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT `libuhd-dev`, `gnuradio-dev` and `gr-osmosdr` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS. The same applies to `libmatio-dev`: Ubuntu 14.04 came with 1.5.2 and the minimum required version is 1.5.3. Please do not install the `libmatio-dev` package and install `libtool`, `automake` and `libhdf5-dev` instead. A recent version of the library will be downloaded and built automatically if CMake does not find it installed. | ||||||
|  |  | ||||||
| @@ -516,10 +516,7 @@ More details can be found in our tutorial about [GNSS-SDR configuration options | |||||||
| <a name="macosx">macOS and Mac OS X</a> | <a name="macosx">macOS and Mac OS X</a> | ||||||
| --------- | --------- | ||||||
|  |  | ||||||
|  | GNSS-SDR can be built on MacOS or Mac OS X, starting from 10.9 (Mavericks) and including 10.14 (Mojave). If you still have not installed [Xcode](https://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools. Launch the Terminal, found in /Applications/Utilities/, and type: | ||||||
| ### macOS 10.13 (High Sierra) and 10.12 (Sierra), Mac OS X 10.11 (El Capitan), 10.10 (Yosemite) and 10.9 (Mavericks). |  | ||||||
|  |  | ||||||
| If you still have not installed [Xcode](https://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools. Launch the Terminal, found in /Applications/Utilities/, and type: |  | ||||||
|  |  | ||||||
| ~~~~~~ | ~~~~~~ | ||||||
| $ xcode-select --install | $ xcode-select --install | ||||||
| @@ -558,7 +555,7 @@ You also might need to activate a Python installation. The list of installed ver | |||||||
| $ port select list python | $ port select list python | ||||||
| ~~~~~~ | ~~~~~~ | ||||||
|  |  | ||||||
| and you can activate a certain version (2.7 works well) by typing: | and you can activate a certain version by typing: | ||||||
|  |  | ||||||
| ~~~~~~ | ~~~~~~ | ||||||
| $ sudo port select --set python python27 | $ sudo port select --set python python27 | ||||||
|   | |||||||
| @@ -24,10 +24,10 @@ string(REGEX REPLACE "\n" ";" files "${files}") | |||||||
| foreach(file ${files}) | foreach(file ${files}) | ||||||
|   message(STATUS "Uninstalling $ENV{DESTDIR}${file}") |   message(STATUS "Uninstalling $ENV{DESTDIR}${file}") | ||||||
|   if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") |   if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") | ||||||
|     exec_program( |     execute_process( | ||||||
|       "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" |       COMMAND @CMAKE_COMMAND@ -E remove \"$ENV{DESTDIR}${file}\" | ||||||
|       OUTPUT_VARIABLE rm_out |       OUTPUT_VARIABLE rm_out | ||||||
|       RETURN_VALUE rm_retval |       RESULT_VARIABLE rm_retval | ||||||
|       ) |       ) | ||||||
|     if(NOT "${rm_retval}" STREQUAL 0) |     if(NOT "${rm_retval}" STREQUAL 0) | ||||||
|       message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") |       message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=217 | GNSS-SDR.SUPL_MCC=217 | ||||||
| GNSS-SDR.SUPL_MNS=7 | GNSS-SDR.SUPL_MNC=7 | ||||||
| GNSS-SDR.SUPL_LAC=861 | GNSS-SDR.SUPL_LAC=861 | ||||||
| GNSS-SDR.SUPL_CI=40184 | GNSS-SDR.SUPL_CI=40184 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5_1C | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.internal_fs_sps=32000000 | |||||||
| ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| ;GNSS-SDR.SUPL_gps_acquisition_port=7275 | ;GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| ;GNSS-SDR.SUPL_MCC=244 | ;GNSS-SDR.SUPL_MCC=244 | ||||||
| ;GNSS-SDR.SUPL_MNS=5 | ;GNSS-SDR.SUPL_MNC=5 | ||||||
| ;GNSS-SDR.SUPL_LAC=0x59e2 | ;GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| ;GNSS-SDR.SUPL_CI=0x31b0 | ;GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ GNSS-SDR.internal_fs_sps=50000000 | |||||||
| ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| ;GNSS-SDR.SUPL_gps_acquisition_port=7275 | ;GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| ;GNSS-SDR.SUPL_MCC=244 | ;GNSS-SDR.SUPL_MCC=244 | ||||||
| ;GNSS-SDR.SUPL_MNS=5 | ;GNSS-SDR.SUPL_MNC=5 | ||||||
| ;GNSS-SDR.SUPL_LAC=0x59e2 | ;GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| ;GNSS-SDR.SUPL_CI=0x31b0 | ;GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_1C_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com | GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_1C_acquisition_port=7275 | GNSS-SDR.SUPL_1C_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ GNSS-SDR.SUPL_gps_ephemeris_port=7275 | |||||||
| GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com | ||||||
| GNSS-SDR.SUPL_gps_acquisition_port=7275 | GNSS-SDR.SUPL_gps_acquisition_port=7275 | ||||||
| GNSS-SDR.SUPL_MCC=244 | GNSS-SDR.SUPL_MCC=244 | ||||||
| GNSS-SDR.SUPL_MNS=5 | GNSS-SDR.SUPL_MNC=5 | ||||||
| GNSS-SDR.SUPL_LAC=0x59e2 | GNSS-SDR.SUPL_LAC=0x59e2 | ||||||
| GNSS-SDR.SUPL_CI=0x31b0 | GNSS-SDR.SUPL_CI=0x31b0 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								docs/xml-schemas/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								docs/xml-schemas/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | # XML Schemas for Assisted GNSS-SDR | ||||||
|  |  | ||||||
|  | GNSS-SDR can read assistance data from [Extensible Markup Language (XML)](https://www.w3.org/XML/) files for faster [Time-To-First-Fix](https://gnss-sdr.org/design-forces/availability/#time-to-first-fix-ttff), and can store navigation data decoded from GNSS signals in the same format. This folder provides XML Schemas which describe those XML files structure. | ||||||
|  |  | ||||||
|  | [XSD (XML Schema Definition)](https://www.w3.org/XML/Schema) is a World Wide Web Consortium (W3C) recommendation that specifies how to formally describe the elements in an XML document. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | GPS L1 C/A | ||||||
|  | ---------- | ||||||
|  |  | ||||||
|  |  - [ephemeris_map.xsd](./ephemeris_map.xsd) - GPS NAV message ephemeris parameters. | ||||||
|  |  - [iono_model.xsd](./iono_model.xsd) - GPS NAV message ionospheric model parameters. | ||||||
|  |  - [utc_model.xsd](./utc_model.xsd) - GPS NAV message UTC model parameters. | ||||||
|  |  - [gps_almanac_map.xsd](./gps_almanac_map.xsd) - GPS NAV message almanac. | ||||||
|  |   | ||||||
|  |   | ||||||
|  | GPS L2C and L5 | ||||||
|  | -------------- | ||||||
|  |   | ||||||
|  |  - [cnav_ephemeris_map.xsd](./cnav_ephemeris_map.xsd) - GPS CNAV message ephemeris parameters. | ||||||
|  |   | ||||||
|  |   | ||||||
|  | Galileo | ||||||
|  | ------- | ||||||
|  |  | ||||||
|  |  - [gal_ephemeris_map.xsd](./gal_ephemeris_map.xsd) - Galileo ephemeris parameters. | ||||||
|  |  - [gal_iono_model.xsd](./gal_iono_model.xsd) - Galileo ionospheric model parameters. | ||||||
|  |  - [gal_utc_model.xsd](./gal_utc_model.xsd) - Galileo UTC model parameters. | ||||||
|  |  - [gal_almanac_map.xsd](./gal_almanac_map.xsd) - Galileo almanac. | ||||||
|  |  | ||||||
|  | ------- | ||||||
|  |  | ||||||
|  | Please check https://gnss-sdr.org/docs/sp-blocks/global-parameters/ for more information about the usage of XML files in GNSS-SDR. | ||||||
|  |   | ||||||
							
								
								
									
										72
									
								
								docs/xml-schemas/cnav_ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								docs/xml-schemas/cnav_ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_cnav_ephemeris_map"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="count"/> | ||||||
|  |               <xs:element type="xs:byte" name="item_version"/> | ||||||
|  |               <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> | ||||||
|  |                 <xs:complexType> | ||||||
|  |                   <xs:sequence> | ||||||
|  |                     <xs:element type="xs:byte" name="first"/> | ||||||
|  |                     <xs:element name="second"> | ||||||
|  |                       <xs:complexType> | ||||||
|  |                         <xs:sequence> | ||||||
|  |                           <xs:element type="xs:byte" name="i_satellite_PRN"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_TOW"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Crs"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_M_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cuc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_e_eccentricity"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cus"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toe1"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toe2"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cic"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cis"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_i_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Crc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IDOT"/> | ||||||
|  |                           <xs:element type="xs:short" name="i_GPS_week"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_TGD"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_ISCL1"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_ISCL2"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_ISCL5I"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_ISCL5Q"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_DELTA_A"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_DOT"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_DELTA_OMEGA_DOT"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f1"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f2"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_integrity_status_flag"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_alert_flag"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_antispoofing_flag"/> | ||||||
|  |                         </xs:sequence> | ||||||
|  |                         <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                       </xs:complexType> | ||||||
|  |                     </xs:element> | ||||||
|  |                   </xs:sequence> | ||||||
|  |                   <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                 </xs:complexType> | ||||||
|  |               </xs:element> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										78
									
								
								docs/xml-schemas/ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								docs/xml-schemas/ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_ephemeris_map"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="count"/> | ||||||
|  |               <xs:element type="xs:byte" name="item_version"/> | ||||||
|  |               <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> | ||||||
|  |                 <xs:complexType> | ||||||
|  |                   <xs:sequence> | ||||||
|  |                     <xs:element type="xs:byte" name="first"/> | ||||||
|  |                     <xs:element name="second"> | ||||||
|  |                       <xs:complexType> | ||||||
|  |                         <xs:sequence> | ||||||
|  |                           <xs:element type="xs:byte" name="i_satellite_PRN"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_TOW"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IODE_SF2"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IODE_SF3"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Crs"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Delta_n"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_M_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cuc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_e_eccentricity"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cus"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_sqrt_A"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toe"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cic"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Cis"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_i_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Crc"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA_DOT"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IDOT"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_code_on_L2"/> | ||||||
|  |                           <xs:element type="xs:short" name="i_GPS_week"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_L2_P_data_flag"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_SV_accuracy"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_SV_health"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_TGD"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IODC"/> | ||||||
|  |                           <xs:element type="xs:short" name="i_AODO"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_fit_interval_flag"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_spare1"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_spare2"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f1"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f2"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_integrity_status_flag"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_alert_flag"/> | ||||||
|  |                           <xs:element type="xs:byte" name="b_antispoofing_flag"/> | ||||||
|  |                         </xs:sequence> | ||||||
|  |                         <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                       </xs:complexType> | ||||||
|  |                     </xs:element> | ||||||
|  |                   </xs:sequence> | ||||||
|  |                   <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                 </xs:complexType> | ||||||
|  |               </xs:element> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										56
									
								
								docs/xml-schemas/gal_almanac_map.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								docs/xml-schemas/gal_almanac_map.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_gal_almanac_map"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="count"/> | ||||||
|  |               <xs:element type="xs:byte" name="item_version"/> | ||||||
|  |               <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> | ||||||
|  |                 <xs:complexType> | ||||||
|  |                   <xs:sequence> | ||||||
|  |                     <xs:element type="xs:byte" name="first"/> | ||||||
|  |                     <xs:element name="second"> | ||||||
|  |                       <xs:complexType mixed="true"> | ||||||
|  |                         <xs:sequence> | ||||||
|  |                           <xs:element type="xs:byte" name="i_satellite_PRN"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toa"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_WNa"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_IODa"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Delta_i"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_M_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_e_eccentricity"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Delta_sqrt_A"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA_DOT"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f1"/> | ||||||
|  |                           <xs:element type="xs:float" name="E5b_HS"/> | ||||||
|  |                           <xs:element type="xs:float" name="E1B_HS"/> | ||||||
|  |                           <xs:element type="xs:float" name="E5a_HS"/> | ||||||
|  |                         </xs:sequence> | ||||||
|  |                         <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                       </xs:complexType> | ||||||
|  |                     </xs:element> | ||||||
|  |                   </xs:sequence> | ||||||
|  |                   <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                 </xs:complexType> | ||||||
|  |               </xs:element> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										60
									
								
								docs/xml-schemas/gal_ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								docs/xml-schemas/gal_ephemeris_map.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_gal_ephemeris_map"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="count"/> | ||||||
|  |               <xs:element type="xs:byte" name="item_version"/> | ||||||
|  |               <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> | ||||||
|  |                 <xs:complexType> | ||||||
|  |                   <xs:sequence> | ||||||
|  |                     <xs:element type="xs:byte" name="first"/> | ||||||
|  |                     <xs:element name="second"> | ||||||
|  |                       <xs:complexType> | ||||||
|  |                         <xs:sequence> | ||||||
|  |                           <xs:element type="xs:byte" name="i_satellite_PRN"/> | ||||||
|  |                           <xs:element type="xs:float" name="M0_1"/> | ||||||
|  |                           <xs:element type="xs:float" name="e_1"/> | ||||||
|  |                           <xs:element type="xs:float" name="A_1"/> | ||||||
|  |                           <xs:element type="xs:float" name="OMEGA_0_2"/> | ||||||
|  |                           <xs:element type="xs:float" name="i_0_2"/> | ||||||
|  |                           <xs:element type="xs:float" name="omega_2"/> | ||||||
|  |                           <xs:element type="xs:float" name="OMEGA_dot_3"/> | ||||||
|  |                           <xs:element type="xs:float" name="iDot_2"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_uc_3"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_us_3"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_rc_3"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_rs_3"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_ic_4"/> | ||||||
|  |                           <xs:element type="xs:float" name="C_is_4"/> | ||||||
|  |                           <xs:element type="xs:float" name="t0e_1"/> | ||||||
|  |                           <xs:element type="xs:float" name="t0c_4"/> | ||||||
|  |                           <xs:element type="xs:float" name="af0_4"/> | ||||||
|  |                           <xs:element type="xs:float" name="af1_4"/> | ||||||
|  |                           <xs:element type="xs:float" name="af2_4"/> | ||||||
|  |                         </xs:sequence> | ||||||
|  |                         <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                       </xs:complexType> | ||||||
|  |                     </xs:element> | ||||||
|  |                   </xs:sequence> | ||||||
|  |                   <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                 </xs:complexType> | ||||||
|  |               </xs:element> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										29
									
								
								docs/xml-schemas/gal_iono_model.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docs/xml-schemas/gal_iono_model.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_gal_iono_model"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:float" name="ai0_5"/> | ||||||
|  |               <xs:element type="xs:float" name="ai1_5"/> | ||||||
|  |               <xs:element type="xs:float" name="ai2_5"/> | ||||||
|  |               <xs:element type="xs:byte" name="Region1_flag_5"/> | ||||||
|  |               <xs:element type="xs:byte" name="Region2_flag_5"/> | ||||||
|  |               <xs:element type="xs:byte" name="Region3_flag_5"/> | ||||||
|  |               <xs:element type="xs:byte" name="Region4_flag_5"/> | ||||||
|  |               <xs:element type="xs:byte" name="Region5_flag_5"/> | ||||||
|  |               <xs:element type="xs:float" name="TOW_5"/> | ||||||
|  |               <xs:element type="xs:float" name="WN_5"/> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										28
									
								
								docs/xml-schemas/gal_utc_model.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docs/xml-schemas/gal_utc_model.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_gal_utc_model"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:float" name="A0_6"/> | ||||||
|  |               <xs:element type="xs:float" name="A1_6"/> | ||||||
|  |               <xs:element type="xs:float" name="Delta_tLS_6"/> | ||||||
|  |               <xs:element type="xs:float" name="t0t_6"/> | ||||||
|  |               <xs:element type="xs:float" name="WNot_6"/> | ||||||
|  |               <xs:element type="xs:float" name="WN_LSF_6"/> | ||||||
|  |               <xs:element type="xs:float" name="DN_6"/> | ||||||
|  |               <xs:element type="xs:float" name="Delta_tLSF_6"/> | ||||||
|  |               <xs:element type="xs:byte" name="flag_utc_model"/> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										54
									
								
								docs/xml-schemas/gps_almanac_map.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								docs/xml-schemas/gps_almanac_map.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_gps_almanac_map"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="count"/> | ||||||
|  |               <xs:element type="xs:byte" name="item_version"/> | ||||||
|  |               <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> | ||||||
|  |                 <xs:complexType> | ||||||
|  |                   <xs:sequence> | ||||||
|  |                     <xs:element type="xs:byte" name="first"/> | ||||||
|  |                     <xs:element name="second"> | ||||||
|  |                       <xs:complexType> | ||||||
|  |                         <xs:sequence> | ||||||
|  |                           <xs:element type="xs:byte" name="i_satellite_PRN"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Delta_i"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_Toa"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_WNa"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_M_0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_e_eccentricity"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_sqrt_A"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_OMEGA_DOT"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_SV_health"/> | ||||||
|  |                           <xs:element type="xs:byte" name="i_AS_status"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f0"/> | ||||||
|  |                           <xs:element type="xs:float" name="d_A_f1"/> | ||||||
|  |                         </xs:sequence> | ||||||
|  |                         <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                         <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                       </xs:complexType> | ||||||
|  |                     </xs:element> | ||||||
|  |                   </xs:sequence> | ||||||
|  |                   <xs:attribute type="xs:byte" name="class_id" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="tracking_level" use="optional"/> | ||||||
|  |                   <xs:attribute type="xs:byte" name="version" use="optional"/> | ||||||
|  |                 </xs:complexType> | ||||||
|  |               </xs:element> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										27
									
								
								docs/xml-schemas/iono_model.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								docs/xml-schemas/iono_model.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_iono_model"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:float" name="d_alpha0"/> | ||||||
|  |               <xs:element type="xs:float" name="d_alpha1"/> | ||||||
|  |               <xs:element type="xs:float" name="d_alpha2"/> | ||||||
|  |               <xs:element type="xs:float" name="d_alpha3"/> | ||||||
|  |               <xs:element type="xs:float" name="d_beta0"/> | ||||||
|  |               <xs:element type="xs:float" name="d_beta1"/> | ||||||
|  |               <xs:element type="xs:float" name="d_beta2"/> | ||||||
|  |               <xs:element type="xs:float" name="d_beta3"/> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
							
								
								
									
										28
									
								
								docs/xml-schemas/utc_model.xsd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docs/xml-schemas/utc_model.xsd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||||||
|  |   <xs:element name="boost_serialization"> | ||||||
|  |     <xs:complexType> | ||||||
|  |       <xs:sequence> | ||||||
|  |         <xs:element name="GNSS-SDR_utc_model"> | ||||||
|  |           <xs:complexType> | ||||||
|  |             <xs:sequence> | ||||||
|  |               <xs:element type="xs:byte" name="valid"/> | ||||||
|  |               <xs:element type="xs:float" name="d_A1"/> | ||||||
|  |               <xs:element type="xs:float" name="d_A0"/> | ||||||
|  |               <xs:element type="xs:float" name="d_t_OT"/> | ||||||
|  |               <xs:element type="xs:short" name="i_WN_T"/> | ||||||
|  |               <xs:element type="xs:float" name="d_DeltaT_LS"/> | ||||||
|  |               <xs:element type="xs:short" name="i_WN_LSF"/> | ||||||
|  |               <xs:element type="xs:byte" name="i_DN"/> | ||||||
|  |               <xs:element type="xs:float" name="d_DeltaT_LSF"/> | ||||||
|  |             </xs:sequence> | ||||||
|  |             <xs:attribute type="xs:byte" name="class_id"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="tracking_level"/> | ||||||
|  |             <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |           </xs:complexType> | ||||||
|  |         </xs:element> | ||||||
|  |       </xs:sequence> | ||||||
|  |       <xs:attribute type="xs:string" name="signature"/> | ||||||
|  |       <xs:attribute type="xs:byte" name="version"/> | ||||||
|  |     </xs:complexType> | ||||||
|  |   </xs:element> | ||||||
|  | </xs:schema> | ||||||
| @@ -30,6 +30,7 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "rtklib_pvt.h" | #include "rtklib_pvt.h" | ||||||
|  | #include "pvt_conf.h" | ||||||
| #include "configuration_interface.h" | #include "configuration_interface.h" | ||||||
| #include "gnss_sdr_flags.h" | #include "gnss_sdr_flags.h" | ||||||
| #include <boost/archive/xml_oarchive.hpp> | #include <boost/archive/xml_oarchive.hpp> | ||||||
| @@ -54,97 +55,87 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | |||||||
|                                 in_streams_(in_streams), |                                 in_streams_(in_streams), | ||||||
|                                 out_streams_(out_streams) |                                 out_streams_(out_streams) | ||||||
| { | { | ||||||
|  |     Pvt_Conf pvt_output_parameters = Pvt_Conf(); | ||||||
|     // dump parameters |     // dump parameters | ||||||
|     std::string default_dump_filename = "./pvt.dat"; |     std::string default_dump_filename = "./pvt.dat"; | ||||||
|     std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; |     std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; | ||||||
|     std::string default_nmea_dump_devname = "/dev/tty1"; |     std::string default_nmea_dump_devname = "/dev/tty1"; | ||||||
|     std::string default_rtcm_dump_devname = "/dev/pts/1"; |     std::string default_rtcm_dump_devname = "/dev/pts/1"; | ||||||
|     DLOG(INFO) << "role " << role; |     DLOG(INFO) << "role " << role; | ||||||
|     dump_ = configuration->property(role + ".dump", false); |     pvt_output_parameters.dump = configuration->property(role + ".dump", false); | ||||||
|     dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); |     pvt_output_parameters.dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||||
|  |     pvt_output_parameters.dump_mat = configuration->property(role + ".dump_mat", true); | ||||||
|  |  | ||||||
|     // output rate |     // output rate | ||||||
|     int output_rate_ms = configuration->property(role + ".output_rate_ms", 500); |     pvt_output_parameters.output_rate_ms = configuration->property(role + ".output_rate_ms", 500); | ||||||
|  |  | ||||||
|     // display rate |     // display rate | ||||||
|     int display_rate_ms = configuration->property(role + ".display_rate_ms", 500); |     pvt_output_parameters.display_rate_ms = configuration->property(role + ".display_rate_ms", 500); | ||||||
|  |  | ||||||
|     // NMEA Printer settings |     // NMEA Printer settings | ||||||
|     bool flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); |     pvt_output_parameters.flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); | ||||||
|     std::string nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename); |     pvt_output_parameters.nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename); | ||||||
|     std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname); |     std::string nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname); | ||||||
|  |  | ||||||
|     // RINEX version |     // RINEX version | ||||||
|     int rinex_version = configuration->property(role + ".rinex_version", 3); |     pvt_output_parameters.rinex_version = configuration->property(role + ".rinex_version", 3); | ||||||
|     if (FLAGS_RINEX_version.compare("3.01") == 0) |     if (FLAGS_RINEX_version.compare("3.01") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 3; |             pvt_output_parameters.rinex_version = 3; | ||||||
|         } |         } | ||||||
|     else if (FLAGS_RINEX_version.compare("3.02") == 0) |     else if (FLAGS_RINEX_version.compare("3.02") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 3; |             pvt_output_parameters.rinex_version = 3; | ||||||
|         } |         } | ||||||
|     else if (FLAGS_RINEX_version.compare("3") == 0) |     else if (FLAGS_RINEX_version.compare("3") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 3; |             pvt_output_parameters.rinex_version = 3; | ||||||
|         } |         } | ||||||
|     else if (FLAGS_RINEX_version.compare("2.11") == 0) |     else if (FLAGS_RINEX_version.compare("2.11") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 2; |             pvt_output_parameters.rinex_version = 2; | ||||||
|         } |         } | ||||||
|     else if (FLAGS_RINEX_version.compare("2.10") == 0) |     else if (FLAGS_RINEX_version.compare("2.10") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 2; |             pvt_output_parameters.rinex_version = 2; | ||||||
|         } |         } | ||||||
|     else if (FLAGS_RINEX_version.compare("2") == 0) |     else if (FLAGS_RINEX_version.compare("2") == 0) | ||||||
|         { |         { | ||||||
|             rinex_version = 2; |             pvt_output_parameters.rinex_version = 2; | ||||||
|         } |         } | ||||||
|     int rinexobs_rate_ms = bc::lcm(configuration->property(role + ".rinexobs_rate_ms", 1000), output_rate_ms); |     pvt_output_parameters.rinexobs_rate_ms = bc::lcm(configuration->property(role + ".rinexobs_rate_ms", 1000), pvt_output_parameters.output_rate_ms); | ||||||
|     int rinexnav_rate_ms = bc::lcm(configuration->property(role + ".rinexnav_rate_ms", 6000), output_rate_ms); |     pvt_output_parameters.rinexnav_rate_ms = bc::lcm(configuration->property(role + ".rinexnav_rate_ms", 6000), pvt_output_parameters.output_rate_ms); | ||||||
|  |  | ||||||
|     // RTCM Printer settings |     // RTCM Printer settings | ||||||
|     bool flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false); |     pvt_output_parameters.flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false); | ||||||
|     std::string rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname); |     pvt_output_parameters.rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname); | ||||||
|     bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false); |     pvt_output_parameters.flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false); | ||||||
|     unsigned short rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101); |     pvt_output_parameters.rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101); | ||||||
|     unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234); |     pvt_output_parameters.rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234); | ||||||
|     // RTCM message rates: least common multiple with output_rate_ms |     // RTCM message rates: least common multiple with output_rate_ms | ||||||
|     int rtcm_MT1019_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), output_rate_ms); |     int rtcm_MT1019_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MT1020_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1020_rate_ms", 5000), output_rate_ms); |     int rtcm_MT1020_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1020_rate_ms", 5000), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MT1045_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms); |     int rtcm_MT1045_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MSM_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms); |     int rtcm_MSM_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MT1077_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), output_rate_ms); |     int rtcm_MT1077_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MT1087_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1087_rate_ms", rtcm_MSM_rate_ms), output_rate_ms); |     int rtcm_MT1087_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1087_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms); | ||||||
|     int rtcm_MT1097_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), output_rate_ms); |     int rtcm_MT1097_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), pvt_output_parameters.output_rate_ms); | ||||||
|     std::map<int, int> rtcm_msg_rate_ms; |     //std::map<int, int> rtcm_msg_rate_ms; | ||||||
|     rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms; |     pvt_output_parameters.rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms; | ||||||
|     rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms; |     pvt_output_parameters.rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms; | ||||||
|     rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms; |     pvt_output_parameters.rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms; | ||||||
|     for (int k = 1071; k < 1078; k++)  // All GPS MSM |     for (int k = 1071; k < 1078; k++)  // All GPS MSM | ||||||
|         { |         { | ||||||
|             rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms; |             pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms; | ||||||
|         } |         } | ||||||
|     for (int k = 1081; k < 1088; k++)  // All GLONASS MSM |     for (int k = 1081; k < 1088; k++)  // All GLONASS MSM | ||||||
|         { |         { | ||||||
|             rtcm_msg_rate_ms[k] = rtcm_MT1087_rate_ms; |             pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1087_rate_ms; | ||||||
|         } |         } | ||||||
|     for (int k = 1091; k < 1098; k++)  // All Galileo MSM |     for (int k = 1091; k < 1098; k++)  // All Galileo MSM | ||||||
|         { |         { | ||||||
|             rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms; |             pvt_output_parameters.rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms; | ||||||
|         } |         } | ||||||
|     // getting names from the config file, if available |  | ||||||
|     // default filename for assistance data |  | ||||||
|     const std::string eph_default_xml_filename = "./gps_ephemeris.xml"; |  | ||||||
|     const std::string utc_default_xml_filename = "./gps_utc_model.xml"; |  | ||||||
|     const std::string iono_default_xml_filename = "./gps_iono.xml"; |  | ||||||
|     const std::string ref_time_default_xml_filename = "./gps_ref_time.xml"; |  | ||||||
|     const std::string ref_location_default_xml_filename = "./gps_ref_location.xml"; |  | ||||||
|     eph_xml_filename_ = configuration->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename); |  | ||||||
|     //std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename); |  | ||||||
|     //std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename); |  | ||||||
|     //std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename); |  | ||||||
|     //std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename); |  | ||||||
|  |  | ||||||
|     // Infer the type of receiver |     // Infer the type of receiver | ||||||
|     /* |     /* | ||||||
| @@ -188,47 +179,46 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | |||||||
|     int glo_1G_count = configuration->property("Channels_1G.count", 0); |     int glo_1G_count = configuration->property("Channels_1G.count", 0); | ||||||
|     int glo_2G_count = configuration->property("Channels_2G.count", 0); |     int glo_2G_count = configuration->property("Channels_2G.count", 0); | ||||||
|  |  | ||||||
|     unsigned int type_of_receiver = 0; |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 1;  // L1 | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 2; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 3;  // L5 | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 4;  // E1 | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 5;  // E5a | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 6; | ||||||
|  |  | ||||||
|     // *******************WARNING!!!!!!!*********** |     if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 7; | ||||||
|     // GPS L5 only configurable for single frequency, single system at the moment!!!!!! |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 8;  // L1+L5 | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 1; |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 9;  // L1+E1 | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 2; |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 10; | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 3; |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 11; | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 4; |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 12; | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 5; |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 13;  // L5+E5a | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 6; |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 14; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 15; | ||||||
|  |     //if( (gps_1C_count == 0) && (gps_2S_count == 0)  && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 16; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 17; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 18; | ||||||
|  |     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 19; | ||||||
|  |     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) pvt_output_parameters.type_of_receiver = 20; | ||||||
|  |     if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 21; | ||||||
|  |     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) pvt_output_parameters.type_of_receiver = 22; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) pvt_output_parameters.type_of_receiver = 23; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 24; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 25; | ||||||
|  |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 26; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 27; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 28; | ||||||
|  |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 29; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 30; | ||||||
|  |     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) pvt_output_parameters.type_of_receiver = 31; | ||||||
|  |  | ||||||
|  |     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) pvt_output_parameters.type_of_receiver = 32;  // L1+E1+L5+E5a | ||||||
|  |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 7; |  | ||||||
|     //if( (gps_1C_count != 0) && (gps_2S_count == 0)  && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 8; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 9; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 10; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 11; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 12; |  | ||||||
|     //if( (gps_1C_count == 0) && (gps_2S_count == 0)  && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 13; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 14; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 15; |  | ||||||
|     //if( (gps_1C_count == 0) && (gps_2S_count == 0)  && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 16; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 17; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 18; |  | ||||||
|     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 19; |  | ||||||
|     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 20; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count == 0)) type_of_receiver = 21; |  | ||||||
|     //if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) type_of_receiver = 22; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) type_of_receiver = 23; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) type_of_receiver = 24; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count != 0)) type_of_receiver = 25; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) type_of_receiver = 26; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) type_of_receiver = 27; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_2G_count == 0)) type_of_receiver = 28; |  | ||||||
|     if ((gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) type_of_receiver = 29; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) type_of_receiver = 30; |  | ||||||
|     if ((gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2G_count != 0)) type_of_receiver = 31; |  | ||||||
|     // RTKLIB PVT solver options |     // RTKLIB PVT solver options | ||||||
|     // Settings 1 |     // Settings 1 | ||||||
|     int positioning_mode = -1; |     int positioning_mode = -1; | ||||||
|     std::string default_pos_mode("Single"); |     std::string default_pos_mode("Single"); | ||||||
|     std::string positioning_mode_str = configuration->property(role + ".positioning_mode", default_pos_mode); /* (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h */ |     std::string positioning_mode_str = configuration->property(role + ".positioning_mode", default_pos_mode);  //  (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h | ||||||
|     if (positioning_mode_str.compare("Single") == 0) positioning_mode = PMODE_SINGLE; |     if (positioning_mode_str.compare("Single") == 0) positioning_mode = PMODE_SINGLE; | ||||||
|     if (positioning_mode_str.compare("Static") == 0) positioning_mode = PMODE_STATIC; |     if (positioning_mode_str.compare("Static") == 0) positioning_mode = PMODE_STATIC; | ||||||
|     if (positioning_mode_str.compare("Kinematic") == 0) positioning_mode = PMODE_KINEMA; |     if (positioning_mode_str.compare("Kinematic") == 0) positioning_mode = PMODE_KINEMA; | ||||||
| @@ -489,8 +479,29 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | |||||||
|  |  | ||||||
|     rtkinit(&rtk, &rtklib_configuration_options); |     rtkinit(&rtk, &rtklib_configuration_options); | ||||||
|  |  | ||||||
|  |     // Outputs | ||||||
|  |     bool default_output_enabled = configuration->property(role + ".output_enabled", true); | ||||||
|  |     pvt_output_parameters.output_enabled = default_output_enabled; | ||||||
|  |     pvt_output_parameters.rinex_output_enabled = configuration->property(role + ".rinex_output_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.gpx_output_enabled = configuration->property(role + ".gpx_output_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.geojson_output_enabled = configuration->property(role + ".geojson_output_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.kml_output_enabled = configuration->property(role + ".kml_output_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.xml_output_enabled = configuration->property(role + ".xml_output_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.nmea_output_file_enabled = configuration->property(role + ".nmea_output_file_enabled", default_output_enabled); | ||||||
|  |     pvt_output_parameters.rtcm_output_file_enabled = configuration->property(role + ".rtcm_output_file_enabled", default_output_enabled); | ||||||
|  |  | ||||||
|  |     std::string default_output_path = configuration->property(role + ".output_path", std::string(".")); | ||||||
|  |     pvt_output_parameters.output_path = default_output_path; | ||||||
|  |     pvt_output_parameters.rinex_output_path = configuration->property(role + ".rinex_output_path", default_output_path); | ||||||
|  |     pvt_output_parameters.gpx_output_path = configuration->property(role + ".gpx_output_path", default_output_path); | ||||||
|  |     pvt_output_parameters.geojson_output_path = configuration->property(role + ".geojson_output_path", default_output_path); | ||||||
|  |     pvt_output_parameters.kml_output_path = configuration->property(role + ".kml_output_path", default_output_path); | ||||||
|  |     pvt_output_parameters.xml_output_path = configuration->property(role + ".xml_output_path", default_output_path); | ||||||
|  |     pvt_output_parameters.nmea_output_file_path = configuration->property(role + ".nmea_output_file_path", default_output_path); | ||||||
|  |     pvt_output_parameters.rtcm_output_file_path = configuration->property(role + ".rtcm_output_file_path", default_output_path); | ||||||
|  |  | ||||||
|     // make PVT object |     // make PVT object | ||||||
|     pvt_ = rtklib_make_pvt_cc(in_streams_, dump_, dump_filename_, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname, rinex_version, rinexobs_rate_ms, rinexnav_rate_ms, flag_rtcm_server, flag_rtcm_tty_port, rtcm_tcp_port, rtcm_station_id, rtcm_msg_rate_ms, rtcm_dump_devname, type_of_receiver, rtk); |     pvt_ = rtklib_make_pvt_cc(in_streams_, pvt_output_parameters, rtk); | ||||||
|     DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")"; |     DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")"; | ||||||
|     if (out_streams_ > 0) |     if (out_streams_ > 0) | ||||||
|         { |         { | ||||||
| @@ -499,40 +510,9 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool RtklibPvt::save_assistance_to_XML() |  | ||||||
| { |  | ||||||
|     LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename_; |  | ||||||
|     std::map<int, Gps_Ephemeris> eph_map = pvt_->get_GPS_L1_ephemeris_map(); |  | ||||||
|  |  | ||||||
|     if (eph_map.empty() == false) |  | ||||||
|         { |  | ||||||
|             std::ofstream ofs; |  | ||||||
|             try |  | ||||||
|                 { |  | ||||||
|                     ofs.open(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out); |  | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |  | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); |  | ||||||
|                     LOG(INFO) << "Saved GPS L1 Ephemeris map data"; |  | ||||||
|                 } |  | ||||||
|             catch (const std::exception& e) |  | ||||||
|                 { |  | ||||||
|                     LOG(WARNING) << e.what(); |  | ||||||
|                     return false; |  | ||||||
|                 } |  | ||||||
|         } |  | ||||||
|     else |  | ||||||
|         { |  | ||||||
|             LOG(WARNING) << "Failed to save Ephemeris, map is empty"; |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     return true;  // return variable (true == succeeded) |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| RtklibPvt::~RtklibPvt() | RtklibPvt::~RtklibPvt() | ||||||
| { | { | ||||||
|     rtkfree(&rtk); |     rtkfree(&rtk); | ||||||
|     save_assistance_to_XML(); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ | |||||||
| class ConfigurationInterface; | class ConfigurationInterface; | ||||||
|  |  | ||||||
| /*! | /*! | ||||||
|  * \brief This class implements a PvtInterface for Galileo E1 |  * \brief This class implements a PvtInterface for the RTKLIB PVT block | ||||||
|  */ |  */ | ||||||
| class RtklibPvt : public PvtInterface | class RtklibPvt : public PvtInterface | ||||||
| { | { | ||||||
| @@ -87,8 +87,6 @@ private: | |||||||
|     std::string role_; |     std::string role_; | ||||||
|     unsigned int in_streams_; |     unsigned int in_streams_; | ||||||
|     unsigned int out_streams_; |     unsigned int out_streams_; | ||||||
|     std::string eph_xml_filename_; |  | ||||||
|     bool save_assistance_to_XML(); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ include_directories( | |||||||
|      ${CMAKE_SOURCE_DIR}/src/core/receiver |      ${CMAKE_SOURCE_DIR}/src/core/receiver | ||||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs |      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs | ||||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/libs/rtklib |      ${CMAKE_SOURCE_DIR}/src/algorithms/libs/rtklib | ||||||
|  |      ${CMAKE_SOURCE_DIR}/src/algorithms/libs | ||||||
|      ${ARMADILLO_INCLUDE_DIRS} |      ${ARMADILLO_INCLUDE_DIRS} | ||||||
|      ${Boost_INCLUDE_DIRS} |      ${Boost_INCLUDE_DIRS} | ||||||
|      ${GLOG_INCLUDE_DIRS} |      ${GLOG_INCLUDE_DIRS} | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -38,6 +38,7 @@ | |||||||
| #include "geojson_printer.h" | #include "geojson_printer.h" | ||||||
| #include "rinex_printer.h" | #include "rinex_printer.h" | ||||||
| #include "rtcm_printer.h" | #include "rtcm_printer.h" | ||||||
|  | #include "pvt_conf.h" | ||||||
| #include "rtklib_solver.h" | #include "rtklib_solver.h" | ||||||
| #include <gnuradio/sync_block.h> | #include <gnuradio/sync_block.h> | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| @@ -55,23 +56,7 @@ class rtklib_pvt_cc; | |||||||
| typedef boost::shared_ptr<rtklib_pvt_cc> rtklib_pvt_cc_sptr; | typedef boost::shared_ptr<rtklib_pvt_cc> rtklib_pvt_cc_sptr; | ||||||
|  |  | ||||||
| rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t n_channels, | rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t n_channels, | ||||||
|     bool dump, |     const Pvt_Conf& conf_, | ||||||
|     std::string dump_filename, |  | ||||||
|     int32_t output_rate_ms, |  | ||||||
|     int32_t display_rate_ms, |  | ||||||
|     bool flag_nmea_tty_port, |  | ||||||
|     std::string nmea_dump_filename, |  | ||||||
|     std::string nmea_dump_devname, |  | ||||||
|     int32_t rinex_version, |  | ||||||
|     int32_t rinexobs_rate_ms, |  | ||||||
|     int32_t rinexnav_rate_ms, |  | ||||||
|     bool flag_rtcm_server, |  | ||||||
|     bool flag_rtcm_tty_port, |  | ||||||
|     uint16_t rtcm_tcp_port, |  | ||||||
|     uint16_t rtcm_station_id, |  | ||||||
|     std::map<int, int> rtcm_msg_rate_ms, |  | ||||||
|     std::string rtcm_dump_devname, |  | ||||||
|     const uint32_t type_of_receiver, |  | ||||||
|     rtk_t& rtk); |     rtk_t& rtk); | ||||||
|  |  | ||||||
| /*! | /*! | ||||||
| @@ -81,28 +66,14 @@ class rtklib_pvt_cc : public gr::sync_block | |||||||
| { | { | ||||||
| private: | private: | ||||||
|     friend rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t nchannels, |     friend rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t nchannels, | ||||||
|         bool dump, |         const Pvt_Conf& conf_, | ||||||
|         std::string dump_filename, |  | ||||||
|         int32_t output_rate_ms, |  | ||||||
|         int32_t display_rate_ms, |  | ||||||
|         bool flag_nmea_tty_port, |  | ||||||
|         std::string nmea_dump_filename, |  | ||||||
|         std::string nmea_dump_devname, |  | ||||||
|         int32_t rinex_version, |  | ||||||
|         int32_t rinexobs_rate_ms, |  | ||||||
|         int32_t rinexnav_rate_ms, |  | ||||||
|         bool flag_rtcm_server, |  | ||||||
|         bool flag_rtcm_tty_port, |  | ||||||
|         uint16_t rtcm_tcp_port, |  | ||||||
|         uint16_t rtcm_station_id, |  | ||||||
|         std::map<int, int> rtcm_msg_rate_ms, |  | ||||||
|         std::string rtcm_dump_devname, |  | ||||||
|         const uint32_t type_of_receiver, |  | ||||||
|         rtk_t& rtk); |         rtk_t& rtk); | ||||||
|  |  | ||||||
|     void msg_handler_telemetry(pmt::pmt_t msg); |     void msg_handler_telemetry(pmt::pmt_t msg); | ||||||
|  |  | ||||||
|     bool d_dump; |     bool d_dump; | ||||||
|  |     bool d_dump_mat; | ||||||
|  |     bool b_rinex_output_enabled; | ||||||
|     bool b_rinex_header_written; |     bool b_rinex_header_written; | ||||||
|     bool b_rinex_header_updated; |     bool b_rinex_header_updated; | ||||||
|     double d_rinex_version; |     double d_rinex_version; | ||||||
| @@ -110,6 +81,7 @@ private: | |||||||
|     int32_t d_rinexnav_rate_ms; |     int32_t d_rinexnav_rate_ms; | ||||||
|  |  | ||||||
|     bool b_rtcm_writing_started; |     bool b_rtcm_writing_started; | ||||||
|  |     bool b_rtcm_enabled; | ||||||
|     int32_t d_rtcm_MT1045_rate_ms;  //!< Galileo Broadcast Ephemeris |     int32_t d_rtcm_MT1045_rate_ms;  //!< Galileo Broadcast Ephemeris | ||||||
|     int32_t d_rtcm_MT1019_rate_ms;  //!< GPS Broadcast Ephemeris (orbits) |     int32_t d_rtcm_MT1019_rate_ms;  //!< GPS Broadcast Ephemeris (orbits) | ||||||
|     int32_t d_rtcm_MT1020_rate_ms;  //!< GLONASS Broadcast Ephemeris (orbits) |     int32_t d_rtcm_MT1020_rate_ms;  //!< GLONASS Broadcast Ephemeris (orbits) | ||||||
| @@ -134,6 +106,10 @@ private: | |||||||
|     std::shared_ptr<Rtcm_Printer> d_rtcm_printer; |     std::shared_ptr<Rtcm_Printer> d_rtcm_printer; | ||||||
|     double d_rx_time; |     double d_rx_time; | ||||||
|  |  | ||||||
|  |     bool d_geojson_output_enabled; | ||||||
|  |     bool d_gpx_output_enabled; | ||||||
|  |     bool d_kml_output_enabled; | ||||||
|  |  | ||||||
|     std::shared_ptr<rtklib_solver> d_ls_pvt; |     std::shared_ptr<rtklib_solver> d_ls_pvt; | ||||||
|  |  | ||||||
|     std::map<int, Gnss_Synchro> gnss_observables_map; |     std::map<int, Gnss_Synchro> gnss_observables_map; | ||||||
| @@ -156,24 +132,13 @@ private: | |||||||
|  |  | ||||||
|     bool load_gnss_synchro_map_xml(const std::string file_name);  //debug helper function |     bool load_gnss_synchro_map_xml(const std::string file_name);  //debug helper function | ||||||
|  |  | ||||||
|  |     bool d_xml_storage; | ||||||
|  |     std::string xml_base_path; | ||||||
|  |  | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     rtklib_pvt_cc(uint32_t nchannels, |     rtklib_pvt_cc(uint32_t nchannels, | ||||||
|         bool dump, std::string dump_filename, |         const Pvt_Conf& conf_, | ||||||
|         int32_t output_rate_ms, |  | ||||||
|         int32_t display_rate_ms, |  | ||||||
|         bool flag_nmea_tty_port, |  | ||||||
|         std::string nmea_dump_filename, |  | ||||||
|         std::string nmea_dump_devname, |  | ||||||
|         int32_t rinex_version, |  | ||||||
|         int32_t rinexobs_rate_ms, |  | ||||||
|         int32_t rinexnav_rate_ms, |  | ||||||
|         bool flag_rtcm_server, |  | ||||||
|         bool flag_rtcm_tty_port, |  | ||||||
|         uint16_t rtcm_tcp_port, |  | ||||||
|         uint16_t rtcm_station_id, |  | ||||||
|         std::map<int, int> rtcm_msg_rate_ms, |  | ||||||
|         std::string rtcm_dump_devname, |  | ||||||
|         const uint32_t type_of_receiver, |  | ||||||
|         rtk_t& rtk); |         rtk_t& rtk); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ set(PVT_LIB_SOURCES | |||||||
|      rtcm_printer.cc |      rtcm_printer.cc | ||||||
|      geojson_printer.cc |      geojson_printer.cc | ||||||
|      rtklib_solver.cc |      rtklib_solver.cc | ||||||
|  |      pvt_conf.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
| set(PVT_LIB_HEADERS  | set(PVT_LIB_HEADERS  | ||||||
| @@ -42,6 +43,7 @@ set(PVT_LIB_HEADERS | |||||||
|      rtcm_printer.h |      rtcm_printer.h | ||||||
|      geojson_printer.h |      geojson_printer.h | ||||||
|      rtklib_solver.h |      rtklib_solver.h | ||||||
|  |      pvt_conf.h | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -57,6 +59,7 @@ include_directories( | |||||||
|      ${ARMADILLO_INCLUDE_DIRS} |      ${ARMADILLO_INCLUDE_DIRS} | ||||||
|      ${GFlags_INCLUDE_DIRS} |      ${GFlags_INCLUDE_DIRS} | ||||||
|      ${GLOG_INCLUDE_DIRS} |      ${GLOG_INCLUDE_DIRS} | ||||||
|  |      ${MATIO_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| list(SORT PVT_LIB_HEADERS) | list(SORT PVT_LIB_HEADERS) | ||||||
| @@ -64,7 +67,12 @@ list(SORT PVT_LIB_SOURCES) | |||||||
|  |  | ||||||
| add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS}) | add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${PVT_LIB_HEADERS}) | source_group(Headers FILES ${PVT_LIB_HEADERS}) | ||||||
| add_dependencies(pvt_lib rtklib_lib armadillo-${armadillo_RELEASE} glog-${glog_RELEASE}) |  | ||||||
|  | if(MATIO_FOUND) | ||||||
|  |     add_dependencies(pvt_lib glog-${glog_RELEASE} armadillo-${armadillo_RELEASE}) | ||||||
|  | else(MATIO_FOUND) | ||||||
|  |     add_dependencies(pvt_lib glog-${glog_RELEASE} armadillo-${armadillo_RELEASE} matio-${GNSSSDR_MATIO_LOCAL_VERSION}) | ||||||
|  | endif(MATIO_FOUND) | ||||||
|  |  | ||||||
| target_link_libraries( | target_link_libraries( | ||||||
|     pvt_lib  |     pvt_lib  | ||||||
| @@ -75,4 +83,5 @@ target_link_libraries( | |||||||
|     ${ARMADILLO_LIBRARIES} |     ${ARMADILLO_LIBRARIES} | ||||||
|     ${BLAS} |     ${BLAS} | ||||||
|     ${LAPACK} |     ${LAPACK} | ||||||
|  |     ${MATIO_LIBRARIES} | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -32,14 +32,48 @@ | |||||||
|  |  | ||||||
| #include "geojson_printer.h" | #include "geojson_printer.h" | ||||||
| #include <boost/date_time/posix_time/posix_time.hpp> | #include <boost/date_time/posix_time/posix_time.hpp> | ||||||
|  | #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||||
|  | #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||||
|  | #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <iomanip> | #include <iomanip> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  |  | ||||||
|  |  | ||||||
| GeoJSON_Printer::GeoJSON_Printer() | GeoJSON_Printer::GeoJSON_Printer(const std::string& base_path) | ||||||
| { | { | ||||||
|     first_pos = true; |     first_pos = true; | ||||||
|  |     geojson_base_path = base_path; | ||||||
|  |     boost::filesystem::path full_path(boost::filesystem::current_path()); | ||||||
|  |     const boost::filesystem::path p(geojson_base_path); | ||||||
|  |     if (!boost::filesystem::exists(p)) | ||||||
|  |         { | ||||||
|  |             std::string new_folder; | ||||||
|  |             for (auto& folder : boost::filesystem::path(geojson_base_path)) | ||||||
|  |                 { | ||||||
|  |                     new_folder += folder.string(); | ||||||
|  |                     boost::system::error_code ec; | ||||||
|  |                     if (!boost::filesystem::exists(new_folder)) | ||||||
|  |                         { | ||||||
|  |                             if (!boost::filesystem::create_directory(new_folder, ec)) | ||||||
|  |                                 { | ||||||
|  |                                     std::cout << "Could not create the " << new_folder << " folder." << std::endl; | ||||||
|  |                                     geojson_base_path = full_path.string(); | ||||||
|  |                                 } | ||||||
|  |                         } | ||||||
|  |                     new_folder += boost::filesystem::path::preferred_separator; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             geojson_base_path = p.string(); | ||||||
|  |         } | ||||||
|  |     if (geojson_base_path.compare(".") != 0) | ||||||
|  |         { | ||||||
|  |             std::cout << "GeoJSON files will be stored at " << geojson_base_path << std::endl; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     geojson_base_path = geojson_base_path + boost::filesystem::path::preferred_separator; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -96,6 +130,7 @@ bool GeoJSON_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         { |         { | ||||||
|             filename_ = filename + ".geojson"; |             filename_ = filename + ".geojson"; | ||||||
|         } |         } | ||||||
|  |     filename_ = geojson_base_path + filename_; | ||||||
|  |  | ||||||
|     geojson_file.open(filename_.c_str()); |     geojson_file.open(filename_.c_str()); | ||||||
|  |  | ||||||
| @@ -124,6 +159,7 @@ bool GeoJSON_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|  |             std::cout << "File " << filename_ << " cannot be saved. Wrong permissions?" << std::endl; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -50,9 +50,10 @@ private: | |||||||
|     std::ofstream geojson_file; |     std::ofstream geojson_file; | ||||||
|     bool first_pos; |     bool first_pos; | ||||||
|     std::string filename_; |     std::string filename_; | ||||||
|  |     std::string geojson_base_path; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     GeoJSON_Printer(); |     GeoJSON_Printer(const std::string& base_path = "."); | ||||||
|     ~GeoJSON_Printer(); |     ~GeoJSON_Printer(); | ||||||
|     bool set_headers(std::string filename, bool time_tag_name = true); |     bool set_headers(std::string filename, bool time_tag_name = true); | ||||||
|     bool print_position(const std::shared_ptr<Pvt_Solution>& position, bool print_average_values); |     bool print_position(const std::shared_ptr<Pvt_Solution>& position, bool print_average_values); | ||||||
|   | |||||||
| @@ -32,11 +32,53 @@ | |||||||
|  |  | ||||||
| #include "gpx_printer.h" | #include "gpx_printer.h" | ||||||
| #include <boost/date_time/posix_time/posix_time.hpp> | #include <boost/date_time/posix_time/posix_time.hpp> | ||||||
|  | #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||||
|  | #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||||
|  | #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Gpx_Printer::Gpx_Printer(const std::string& base_path) | ||||||
|  | { | ||||||
|  |     positions_printed = false; | ||||||
|  |     indent = "  "; | ||||||
|  |     gpx_base_path = base_path; | ||||||
|  |     boost::filesystem::path full_path(boost::filesystem::current_path()); | ||||||
|  |     const boost::filesystem::path p(gpx_base_path); | ||||||
|  |     if (!boost::filesystem::exists(p)) | ||||||
|  |         { | ||||||
|  |             std::string new_folder; | ||||||
|  |             for (auto& folder : boost::filesystem::path(gpx_base_path)) | ||||||
|  |                 { | ||||||
|  |                     new_folder += folder.string(); | ||||||
|  |                     boost::system::error_code ec; | ||||||
|  |                     if (!boost::filesystem::exists(new_folder)) | ||||||
|  |                         { | ||||||
|  |                             if (!boost::filesystem::create_directory(new_folder, ec)) | ||||||
|  |                                 { | ||||||
|  |                                     std::cout << "Could not create the " << new_folder << " folder." << std::endl; | ||||||
|  |                                     gpx_base_path = full_path.string(); | ||||||
|  |                                 } | ||||||
|  |                         } | ||||||
|  |                     new_folder += boost::filesystem::path::preferred_separator; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             gpx_base_path = p.string(); | ||||||
|  |         } | ||||||
|  |     if (gpx_base_path.compare(".") != 0) | ||||||
|  |         { | ||||||
|  |             std::cout << "GPX files will be stored at " << gpx_base_path << std::endl; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     gpx_base_path = gpx_base_path + boost::filesystem::path::preferred_separator; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool Gpx_Printer::set_headers(std::string filename, bool time_tag_name) | bool Gpx_Printer::set_headers(std::string filename, bool time_tag_name) | ||||||
| { | { | ||||||
|     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); |     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); | ||||||
| @@ -84,6 +126,8 @@ bool Gpx_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         { |         { | ||||||
|             gpx_filename = filename + ".gpx"; |             gpx_filename = filename + ".gpx"; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |     gpx_filename = gpx_base_path + gpx_filename; | ||||||
|     gpx_file.open(gpx_filename.c_str()); |     gpx_file.open(gpx_filename.c_str()); | ||||||
|  |  | ||||||
|     if (gpx_file.is_open()) |     if (gpx_file.is_open()) | ||||||
| @@ -105,6 +149,7 @@ bool Gpx_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|  |             std::cout << "File " << gpx_filename << " cannot be saved. Wrong permissions?" << std::endl; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| } | } | ||||||
| @@ -171,13 +216,6 @@ bool Gpx_Printer::close_file() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| Gpx_Printer::Gpx_Printer() |  | ||||||
| { |  | ||||||
|     positions_printed = false; |  | ||||||
|     indent = "  "; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Gpx_Printer::~Gpx_Printer() | Gpx_Printer::~Gpx_Printer() | ||||||
| { | { | ||||||
|     close_file(); |     close_file(); | ||||||
|   | |||||||
| @@ -52,9 +52,10 @@ private: | |||||||
|     bool positions_printed; |     bool positions_printed; | ||||||
|     std::string gpx_filename; |     std::string gpx_filename; | ||||||
|     std::string indent; |     std::string indent; | ||||||
|  |     std::string gpx_base_path; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     Gpx_Printer(); |     Gpx_Printer(const std::string& base_path = "."); | ||||||
|     ~Gpx_Printer(); |     ~Gpx_Printer(); | ||||||
|     bool set_headers(std::string filename, bool time_tag_name = true); |     bool set_headers(std::string filename, bool time_tag_name = true); | ||||||
|     bool print_position(const std::shared_ptr<rtklib_solver>& position, bool print_average_values); |     bool print_position(const std::shared_ptr<rtklib_solver>& position, bool print_average_values); | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ | |||||||
| #include "galileo_navigation_message.h" | #include "galileo_navigation_message.h" | ||||||
| #include "gps_navigation_message.h" | #include "gps_navigation_message.h" | ||||||
| #include "gps_cnav_navigation_message.h" | #include "gps_cnav_navigation_message.h" | ||||||
|  | #include "galileo_almanac.h" | ||||||
| #include "gnss_synchro.h" | #include "gnss_synchro.h" | ||||||
| #include "rtklib_rtkcmn.h" | #include "rtklib_rtkcmn.h" | ||||||
| #include <fstream> | #include <fstream> | ||||||
|   | |||||||
| @@ -31,11 +31,52 @@ | |||||||
|  |  | ||||||
| #include "kml_printer.h" | #include "kml_printer.h" | ||||||
| #include <boost/date_time/posix_time/posix_time.hpp> | #include <boost/date_time/posix_time/posix_time.hpp> | ||||||
|  | #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||||
|  | #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||||
|  | #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Kml_Printer::Kml_Printer(const std::string& base_path) | ||||||
|  | { | ||||||
|  |     positions_printed = false; | ||||||
|  |     kml_base_path = base_path; | ||||||
|  |     boost::filesystem::path full_path(boost::filesystem::current_path()); | ||||||
|  |     const boost::filesystem::path p(kml_base_path); | ||||||
|  |     if (!boost::filesystem::exists(p)) | ||||||
|  |         { | ||||||
|  |             std::string new_folder; | ||||||
|  |             for (auto& folder : boost::filesystem::path(kml_base_path)) | ||||||
|  |                 { | ||||||
|  |                     new_folder += folder.string(); | ||||||
|  |                     boost::system::error_code ec; | ||||||
|  |                     if (!boost::filesystem::exists(new_folder)) | ||||||
|  |                         { | ||||||
|  |                             if (!boost::filesystem::create_directory(new_folder, ec)) | ||||||
|  |                                 { | ||||||
|  |                                     std::cout << "Could not create the " << new_folder << " folder." << std::endl; | ||||||
|  |                                     kml_base_path = full_path.string(); | ||||||
|  |                                 } | ||||||
|  |                         } | ||||||
|  |                     new_folder += boost::filesystem::path::preferred_separator; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             kml_base_path = p.string(); | ||||||
|  |         } | ||||||
|  |     if (kml_base_path.compare(".") != 0) | ||||||
|  |         { | ||||||
|  |             std::cout << "KML files will be stored at " << kml_base_path << std::endl; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     kml_base_path = kml_base_path + boost::filesystem::path::preferred_separator; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool Kml_Printer::set_headers(std::string filename, bool time_tag_name) | bool Kml_Printer::set_headers(std::string filename, bool time_tag_name) | ||||||
| { | { | ||||||
|     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); |     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); | ||||||
| @@ -83,6 +124,7 @@ bool Kml_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         { |         { | ||||||
|             kml_filename = filename + ".kml"; |             kml_filename = filename + ".kml"; | ||||||
|         } |         } | ||||||
|  |     kml_filename = kml_base_path + kml_filename; | ||||||
|     kml_file.open(kml_filename.c_str()); |     kml_file.open(kml_filename.c_str()); | ||||||
|  |  | ||||||
|     if (kml_file.is_open()) |     if (kml_file.is_open()) | ||||||
| @@ -119,6 +161,7 @@ bool Kml_Printer::set_headers(std::string filename, bool time_tag_name) | |||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|  |             std::cout << "File " << kml_filename << " cannot be saved. Wrong permissions?" << std::endl; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| } | } | ||||||
| @@ -178,12 +221,6 @@ bool Kml_Printer::close_file() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| Kml_Printer::Kml_Printer() |  | ||||||
| { |  | ||||||
|     positions_printed = false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Kml_Printer::~Kml_Printer() | Kml_Printer::~Kml_Printer() | ||||||
| { | { | ||||||
|     close_file(); |     close_file(); | ||||||
|   | |||||||
| @@ -50,9 +50,10 @@ private: | |||||||
|     std::ofstream kml_file; |     std::ofstream kml_file; | ||||||
|     bool positions_printed; |     bool positions_printed; | ||||||
|     std::string kml_filename; |     std::string kml_filename; | ||||||
|  |     std::string kml_base_path; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     Kml_Printer(); |     Kml_Printer(const std::string& base_path = std::string(".")); | ||||||
|     ~Kml_Printer(); |     ~Kml_Printer(); | ||||||
|     bool set_headers(std::string filename, bool time_tag_name = true); |     bool set_headers(std::string filename, bool time_tag_name = true); | ||||||
|     bool print_position(const std::shared_ptr<Pvt_Solution>& position, bool print_average_values); |     bool print_position(const std::shared_ptr<Pvt_Solution>& position, bool print_average_values); | ||||||
|   | |||||||
| @@ -35,6 +35,9 @@ | |||||||
|  |  | ||||||
| #include "nmea_printer.h" | #include "nmea_printer.h" | ||||||
| #include <boost/date_time/posix_time/posix_time.hpp> | #include <boost/date_time/posix_time/posix_time.hpp> | ||||||
|  | #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||||
|  | #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||||
|  | #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <cstdint> | #include <cstdint> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| @@ -44,14 +47,56 @@ | |||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  |  | ||||||
| Nmea_Printer::Nmea_Printer(std::string filename, bool flag_nmea_tty_port, std::string nmea_dump_devname) | Nmea_Printer::Nmea_Printer(std::string filename, bool flag_nmea_output_file, bool flag_nmea_tty_port, std::string nmea_dump_devname, const std::string& base_path) | ||||||
| { | { | ||||||
|     nmea_filename = filename; |     nmea_base_path = base_path; | ||||||
|  |     d_flag_nmea_output_file = flag_nmea_output_file; | ||||||
|  |     if (d_flag_nmea_output_file == true) | ||||||
|  |         { | ||||||
|  |             boost::filesystem::path full_path(boost::filesystem::current_path()); | ||||||
|  |             const boost::filesystem::path p(nmea_base_path); | ||||||
|  |             if (!boost::filesystem::exists(p)) | ||||||
|  |                 { | ||||||
|  |                     std::string new_folder; | ||||||
|  |                     for (auto& folder : boost::filesystem::path(nmea_base_path)) | ||||||
|  |                         { | ||||||
|  |                             new_folder += folder.string(); | ||||||
|  |                             boost::system::error_code ec; | ||||||
|  |                             if (!boost::filesystem::exists(new_folder)) | ||||||
|  |                                 { | ||||||
|  |                                     if (!boost::filesystem::create_directory(new_folder, ec)) | ||||||
|  |                                         { | ||||||
|  |                                             std::cout << "Could not create the " << new_folder << " folder." << std::endl; | ||||||
|  |                                             nmea_base_path = full_path.string(); | ||||||
|  |                                         } | ||||||
|  |                                 } | ||||||
|  |                             new_folder += boost::filesystem::path::preferred_separator; | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |             else | ||||||
|  |                 { | ||||||
|  |                     nmea_base_path = p.string(); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |             if ((nmea_base_path.compare(".") != 0) and (d_flag_nmea_output_file == true)) | ||||||
|  |                 { | ||||||
|  |                     std::cout << "NMEA files will be stored at " << nmea_base_path << std::endl; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |             nmea_base_path = nmea_base_path + boost::filesystem::path::preferred_separator; | ||||||
|  |  | ||||||
|  |             nmea_filename = nmea_base_path + filename; | ||||||
|  |  | ||||||
|             nmea_file_descriptor.open(nmea_filename.c_str(), std::ios::out); |             nmea_file_descriptor.open(nmea_filename.c_str(), std::ios::out); | ||||||
|             if (nmea_file_descriptor.is_open()) |             if (nmea_file_descriptor.is_open()) | ||||||
|                 { |                 { | ||||||
|                     DLOG(INFO) << "NMEA printer writing on " << nmea_filename.c_str(); |                     DLOG(INFO) << "NMEA printer writing on " << nmea_filename.c_str(); | ||||||
|                 } |                 } | ||||||
|  |             else | ||||||
|  |                 { | ||||||
|  |                     std::cout << "File " << nmea_filename << " cannot be saved. Wrong permissions?" << std::endl; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |  | ||||||
|     nmea_devname = nmea_dump_devname; |     nmea_devname = nmea_dump_devname; | ||||||
|     if (flag_nmea_tty_port == true) |     if (flag_nmea_tty_port == true) | ||||||
| @@ -149,6 +194,8 @@ bool Nmea_Printer::Print_Nmea_Line(const std::shared_ptr<rtklib_solver>& pvt_dat | |||||||
|     GPGSV = get_GPGSV(); |     GPGSV = get_GPGSV(); | ||||||
|  |  | ||||||
|     // write to log file |     // write to log file | ||||||
|  |     if (d_flag_nmea_output_file) | ||||||
|  |         { | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     // GPRMC |                     // GPRMC | ||||||
| @@ -163,7 +210,7 @@ bool Nmea_Printer::Print_Nmea_Line(const std::shared_ptr<rtklib_solver>& pvt_dat | |||||||
|             catch (const std::exception& ex) |             catch (const std::exception& ex) | ||||||
|                 { |                 { | ||||||
|                     DLOG(INFO) << "NMEA printer can not write on output file" << nmea_filename.c_str(); |                     DLOG(INFO) << "NMEA printer can not write on output file" << nmea_filename.c_str(); | ||||||
|             ; |                 } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     // write to serial device |     // write to serial device | ||||||
| @@ -348,7 +395,6 @@ std::string Nmea_Printer::get_GPRMC() | |||||||
|     sentence_str << get_UTC_NMEA_time(d_PVT_data->get_position_UTC_time()); |     sentence_str << get_UTC_NMEA_time(d_PVT_data->get_position_UTC_time()); | ||||||
|  |  | ||||||
|     // Status: A: data valid, V: data NOT valid |     // Status: A: data valid, V: data NOT valid | ||||||
|  |  | ||||||
|     if (valid_fix == true) |     if (valid_fix == true) | ||||||
|         { |         { | ||||||
|             sentence_str << ",A"; |             sentence_str << ",A"; | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public: | |||||||
|     /*! |     /*! | ||||||
|      * \brief Default constructor. |      * \brief Default constructor. | ||||||
|      */ |      */ | ||||||
|     Nmea_Printer(std::string filename, bool flag_nmea_tty_port, std::string nmea_dump_filename); |     Nmea_Printer(std::string filename, bool flag_nmea_output_file, bool flag_nmea_tty_port, std::string nmea_dump_filename, const std::string& base_path = "."); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      * \brief Print NMEA PVT and satellite info to the initialized device |      * \brief Print NMEA PVT and satellite info to the initialized device | ||||||
| @@ -67,6 +67,7 @@ public: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     std::string nmea_filename;  // String with the NMEA log filename |     std::string nmea_filename;  // String with the NMEA log filename | ||||||
|  |     std::string nmea_base_path; | ||||||
|     std::ofstream nmea_file_descriptor;  // Output file stream for NMEA log file |     std::ofstream nmea_file_descriptor;  // Output file stream for NMEA log file | ||||||
|     std::string nmea_devname; |     std::string nmea_devname; | ||||||
|     int nmea_dev_descriptor;  // NMEA serial device descriptor (i.e. COM port) |     int nmea_dev_descriptor;  // NMEA serial device descriptor (i.e. COM port) | ||||||
| @@ -82,6 +83,7 @@ private: | |||||||
|     std::string latitude_to_hm(double lat); |     std::string latitude_to_hm(double lat); | ||||||
|     char checkSum(std::string sentence); |     char checkSum(std::string sentence); | ||||||
|     bool print_avg_pos; |     bool print_avg_pos; | ||||||
|  |     bool d_flag_nmea_output_file; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								src/algorithms/PVT/libs/pvt_conf.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/algorithms/PVT/libs/pvt_conf.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | /*! | ||||||
|  |  * \file pvt_conf.cc | ||||||
|  |  * \brief Class that contains all the configuration parameters for a PVT block | ||||||
|  |  * \author Carles Fernandez, 2018. cfernandez(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/>. | ||||||
|  |  * | ||||||
|  |  * ------------------------------------------------------------------------- | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include "pvt_conf.h" | ||||||
|  |  | ||||||
|  | Pvt_Conf::Pvt_Conf() | ||||||
|  | { | ||||||
|  |     type_of_receiver = 0U; | ||||||
|  |     output_rate_ms = 0; | ||||||
|  |     display_rate_ms = 0; | ||||||
|  |  | ||||||
|  |     rinex_version = 0; | ||||||
|  |     rinexobs_rate_ms = 0; | ||||||
|  |     rinexnav_rate_ms = 0; | ||||||
|  |  | ||||||
|  |     dump = false; | ||||||
|  |     dump_mat = true; | ||||||
|  |  | ||||||
|  |     flag_nmea_tty_port = false; | ||||||
|  |  | ||||||
|  |     flag_rtcm_server = false; | ||||||
|  |     flag_rtcm_tty_port = false; | ||||||
|  |     rtcm_tcp_port = 0U; | ||||||
|  |     rtcm_station_id = 0U; | ||||||
|  |  | ||||||
|  |     output_enabled = true; | ||||||
|  |     rinex_output_enabled = true; | ||||||
|  |     gpx_output_enabled = true; | ||||||
|  |     geojson_output_enabled = true; | ||||||
|  |     nmea_output_file_enabled = true; | ||||||
|  |     kml_output_enabled = true; | ||||||
|  |     xml_output_enabled = true; | ||||||
|  |     rtcm_output_file_enabled = true; | ||||||
|  |  | ||||||
|  |     output_path = std::string("."); | ||||||
|  |     rinex_output_path = std::string("."); | ||||||
|  |     gpx_output_path = std::string("."); | ||||||
|  |     geojson_output_path = std::string("."); | ||||||
|  |     nmea_output_file_path = std::string("."); | ||||||
|  |     kml_output_path = std::string("."); | ||||||
|  |     xml_output_path = std::string("."); | ||||||
|  |     rtcm_output_file_path = std::string("."); | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								src/algorithms/PVT/libs/pvt_conf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/algorithms/PVT/libs/pvt_conf.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | |||||||
|  | /*! | ||||||
|  |  * \file pvt_conf.h | ||||||
|  |  * \brief Class that contains all the configuration parameters for the PVT block | ||||||
|  |  * \author Carles Fernandez, 2018. cfernandez(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_PVT_CONF_H_ | ||||||
|  | #define GNSS_SDR_PVT_CONF_H_ | ||||||
|  |  | ||||||
|  | #include <cstddef> | ||||||
|  | #include <cstdint> | ||||||
|  | #include <string> | ||||||
|  | #include <map> | ||||||
|  |  | ||||||
|  | class Pvt_Conf | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     uint32_t type_of_receiver; | ||||||
|  |     int32_t output_rate_ms; | ||||||
|  |     int32_t display_rate_ms; | ||||||
|  |  | ||||||
|  |     int32_t rinex_version; | ||||||
|  |     int32_t rinexobs_rate_ms; | ||||||
|  |     int32_t rinexnav_rate_ms; | ||||||
|  |     std::map<int, int> rtcm_msg_rate_ms; | ||||||
|  |  | ||||||
|  |     bool dump; | ||||||
|  |     bool dump_mat; | ||||||
|  |     std::string dump_filename; | ||||||
|  |  | ||||||
|  |     bool flag_nmea_tty_port; | ||||||
|  |     std::string nmea_dump_filename; | ||||||
|  |     std::string nmea_dump_devname; | ||||||
|  |  | ||||||
|  |     bool flag_rtcm_server; | ||||||
|  |     bool flag_rtcm_tty_port; | ||||||
|  |     uint16_t rtcm_tcp_port; | ||||||
|  |     uint16_t rtcm_station_id; | ||||||
|  |     std::string rtcm_dump_devname; | ||||||
|  |  | ||||||
|  |     bool output_enabled; | ||||||
|  |     bool rinex_output_enabled; | ||||||
|  |     bool gpx_output_enabled; | ||||||
|  |     bool geojson_output_enabled; | ||||||
|  |     bool nmea_output_file_enabled; | ||||||
|  |     bool kml_output_enabled; | ||||||
|  |     bool xml_output_enabled; | ||||||
|  |     bool rtcm_output_file_enabled; | ||||||
|  |  | ||||||
|  |     std::string output_path; | ||||||
|  |     std::string rinex_output_path; | ||||||
|  |     std::string gpx_output_path; | ||||||
|  |     std::string geojson_output_path; | ||||||
|  |     std::string nmea_output_file_path; | ||||||
|  |     std::string kml_output_path; | ||||||
|  |     std::string xml_output_path; | ||||||
|  |     std::string rtcm_output_file_path; | ||||||
|  |  | ||||||
|  |     Pvt_Conf(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -77,12 +77,12 @@ class Rinex_Printer | |||||||
| { | { | ||||||
| public: | public: | ||||||
|     /*! |     /*! | ||||||
|      * \brief Default constructor. Creates GPS Navigation and Observables RINEX files and their headers |      * \brief Default constructor. Creates GNSS Navigation and Observables RINEX files and their headers | ||||||
|      */ |      */ | ||||||
|     Rinex_Printer(int version = 0); |     Rinex_Printer(int version = 0, const std::string& base_path = "."); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      * \brief Default destructor. Closes GPS Navigation and Observables RINEX files |      * \brief Default destructor. Closes GNSS Navigation and Observables RINEX files | ||||||
|      */ |      */ | ||||||
|     ~Rinex_Printer(); |     ~Rinex_Printer(); | ||||||
|  |  | ||||||
| @@ -106,12 +106,17 @@ public: | |||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the Galileo Navigation Data header |      *  \brief Generates the Galileo Navigation Data header | ||||||
|      */ |      */ | ||||||
|     void rinex_nav_header(std::fstream& out, const Galileo_Iono& iono, const Galileo_Utc_Model& utc_model, const Galileo_Almanac& galileo_almanac); |     void rinex_nav_header(std::fstream& out, const Galileo_Iono& iono, const Galileo_Utc_Model& utc_model); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the Mixed (GPS/Galileo) Navigation Data header |      *  \brief Generates the Mixed (GPS/Galileo) Navigation Data header | ||||||
|      */ |      */ | ||||||
|     void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac); |     void rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Generates the Mixed (GPS CNAV/Galileo) Navigation Data header | ||||||
|  |      */ | ||||||
|  |     void rinex_nav_header(std::fstream& out, const Gps_CNAV_Iono& iono, const Gps_CNAV_Utc_Model& utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the GLONASS L1, L2 C/A Navigation Data header |      *  \brief Generates the GLONASS L1, L2 C/A Navigation Data header | ||||||
| @@ -121,7 +126,7 @@ public: | |||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the Mixed (Galileo/GLONASS) Navigation Data header |      *  \brief Generates the Mixed (Galileo/GLONASS) Navigation Data header | ||||||
|      */ |      */ | ||||||
|     void rinex_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); |     void rinex_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header |      *  \brief Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header | ||||||
| @@ -141,12 +146,12 @@ public: | |||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the GPS L2 Observation data header |      *  \brief Generates the GPS L2 Observation data header | ||||||
|      */ |      */ | ||||||
|     void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& eph, const double d_TOW_first_observation); |     void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& eph, const double d_TOW_first_observation, const std::string gps_bands = "2S"); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the dual frequency GPS L1 & L2 Observation data header |      *  \brief Generates the dual frequency GPS L1 & L2/L5 Observation data header | ||||||
|      */ |      */ | ||||||
|     void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, const double d_TOW_first_observation); |     void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, const double d_TOW_first_observation, const std::string gps_bands = "1C 2S"); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the Galileo Observation data header. Example: bands("1B"), bands("1B 5X"), bands("5X"), ... Default: "1B". |      *  \brief Generates the Galileo Observation data header. Example: bands("1B"), bands("1B 5X"), bands("5X"), ... Default: "1B". | ||||||
| @@ -158,6 +163,16 @@ public: | |||||||
|      */ |      */ | ||||||
|     void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, const double d_TOW_first_observation, const std::string galileo_bands = "1B"); |     void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, const double d_TOW_first_observation, const std::string galileo_bands = "1B"); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Generates the Mixed (GPS/Galileo) Observation data header. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". | ||||||
|  |      */ | ||||||
|  |     void rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& eph_cnav, const Galileo_Ephemeris& galileo_eph, const double d_TOW_first_observation, const std::string gps_bands = "1C 2S", const std::string galileo_bands = "1B"); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Generates the Mixed (GPS/Galileo) Observation data header. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". | ||||||
|  |      */ | ||||||
|  |     void rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris& eph_cnav, const Galileo_Ephemeris& galileo_eph, const double d_TOW_first_observation, const std::string gps_bands = "2S", const std::string galileo_bands = "1B"); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Generates the GLONASS GNAV Observation data header. Example: bands("1C"), bands("1C 2C"), bands("2C"), ... Default: "1C". |      *  \brief Generates the GLONASS GNAV Observation data header. Example: bands("1C"), bands("1C 2C"), bands("2C"), ... Default: "1C". | ||||||
|      */ |      */ | ||||||
| @@ -239,6 +254,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map); |     void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_Ephemeris>& gps_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file | ||||||
|  |      */ | ||||||
|  |     void log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps_CNAV_Ephemeris>& gps_cnav_eph_map, const std::map<int32_t, Galileo_Ephemeris>& galileo_eph_map); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Writes data from the GLONASS GNAV navigation message into the RINEX file |      *  \brief Writes data from the GLONASS GNAV navigation message into the RINEX file | ||||||
|      */ |      */ | ||||||
| @@ -284,6 +304,16 @@ public: | |||||||
|      */ |      */ | ||||||
|     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, const double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables); |     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, const double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Writes Mixed GPS / Galileo observables into the RINEX file | ||||||
|  |      */ | ||||||
|  |     void log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      *  \brief Writes Mixed GPS / Galileo observables into the RINEX file | ||||||
|  |      */ | ||||||
|  |     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      *  \brief Writes GLONASS GNAV observables into the RINEX file. Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". |      *  \brief Writes GLONASS GNAV observables into the RINEX file. Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". | ||||||
|      */ |      */ | ||||||
| @@ -318,9 +348,11 @@ public: | |||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono); |     void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono); | ||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac); |     void update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& utc_model, const Galileo_Almanac& galileo_almanac); |     void update_nav_header(std::fstream& out, const Gps_CNAV_Utc_Model& utc_model, const Gps_CNAV_Iono& iono, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model); | ||||||
|  |  | ||||||
|  |     void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& utc_model); | ||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); |     void update_nav_header(std::fstream& out, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||||
|  |  | ||||||
| @@ -328,7 +360,7 @@ public: | |||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_cnav_iono, const Gps_CNAV_Utc_Model& gps_cnav_utc, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); |     void update_nav_header(std::fstream& out, const Gps_CNAV_Iono& gps_cnav_iono, const Gps_CNAV_Utc_Model& gps_cnav_utc, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||||
|  |  | ||||||
|     void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); |     void update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Glonass_Gnav_Utc_Model& glonass_gnav_utc_model, const Glonass_Gnav_Almanac& glonass_gnav_almanac); | ||||||
|  |  | ||||||
|     void update_obs_header(std::fstream& out, const Gps_Utc_Model& utc_model); |     void update_obs_header(std::fstream& out, const Gps_Utc_Model& utc_model); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,6 +33,9 @@ | |||||||
|  |  | ||||||
| #include "rtcm_printer.h" | #include "rtcm_printer.h" | ||||||
| #include <boost/date_time/posix_time/posix_time.hpp> | #include <boost/date_time/posix_time/posix_time.hpp> | ||||||
|  | #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||||
|  | #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||||
|  | #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <iomanip> | #include <iomanip> | ||||||
| #include <fcntl.h>    // for O_RDWR | #include <fcntl.h>    // for O_RDWR | ||||||
| @@ -42,10 +45,45 @@ | |||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  |  | ||||||
| Rtcm_Printer::Rtcm_Printer(std::string filename, bool flag_rtcm_server, bool flag_rtcm_tty_port, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, std::string rtcm_dump_devname, bool time_tag_name) | Rtcm_Printer::Rtcm_Printer(std::string filename, bool flag_rtcm_file_dump, bool flag_rtcm_server, bool flag_rtcm_tty_port, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, std::string rtcm_dump_devname, bool time_tag_name, const std::string& base_path) | ||||||
| { | { | ||||||
|     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); |     boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); | ||||||
|     tm timeinfo = boost::posix_time::to_tm(pt); |     tm timeinfo = boost::posix_time::to_tm(pt); | ||||||
|  |     d_rtcm_file_dump = flag_rtcm_file_dump; | ||||||
|  |     rtcm_base_path = base_path; | ||||||
|  |     if (d_rtcm_file_dump) | ||||||
|  |         { | ||||||
|  |             boost::filesystem::path full_path(boost::filesystem::current_path()); | ||||||
|  |             const boost::filesystem::path p(rtcm_base_path); | ||||||
|  |             if (!boost::filesystem::exists(p)) | ||||||
|  |                 { | ||||||
|  |                     std::string new_folder; | ||||||
|  |                     for (auto& folder : boost::filesystem::path(rtcm_base_path)) | ||||||
|  |                         { | ||||||
|  |                             new_folder += folder.string(); | ||||||
|  |                             boost::system::error_code ec; | ||||||
|  |                             if (!boost::filesystem::exists(new_folder)) | ||||||
|  |                                 { | ||||||
|  |                                     if (!boost::filesystem::create_directory(new_folder, ec)) | ||||||
|  |                                         { | ||||||
|  |                                             std::cout << "Could not create the " << new_folder << " folder." << std::endl; | ||||||
|  |                                             rtcm_base_path = full_path.string(); | ||||||
|  |                                         } | ||||||
|  |                                 } | ||||||
|  |                             new_folder += boost::filesystem::path::preferred_separator; | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |             else | ||||||
|  |                 { | ||||||
|  |                     rtcm_base_path = p.string(); | ||||||
|  |                 } | ||||||
|  |             if (rtcm_base_path.compare(".") != 0) | ||||||
|  |                 { | ||||||
|  |                     std::cout << "RTCM binary file will be stored at " << rtcm_base_path << std::endl; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |             rtcm_base_path = rtcm_base_path + boost::filesystem::path::preferred_separator; | ||||||
|  |         } | ||||||
|  |  | ||||||
|     if (time_tag_name) |     if (time_tag_name) | ||||||
|         { |         { | ||||||
| @@ -89,12 +127,19 @@ Rtcm_Printer::Rtcm_Printer(std::string filename, bool flag_rtcm_server, bool fla | |||||||
|         { |         { | ||||||
|             rtcm_filename = filename + ".rtcm"; |             rtcm_filename = filename + ".rtcm"; | ||||||
|         } |         } | ||||||
|  |     rtcm_filename = rtcm_base_path + rtcm_filename; | ||||||
|  |     if (d_rtcm_file_dump) | ||||||
|  |         { | ||||||
|             rtcm_file_descriptor.open(rtcm_filename.c_str(), std::ios::out); |             rtcm_file_descriptor.open(rtcm_filename.c_str(), std::ios::out); | ||||||
|             if (rtcm_file_descriptor.is_open()) |             if (rtcm_file_descriptor.is_open()) | ||||||
|                 { |                 { | ||||||
|                     DLOG(INFO) << "RTCM printer writing on " << rtcm_filename.c_str(); |                     DLOG(INFO) << "RTCM printer writing on " << rtcm_filename.c_str(); | ||||||
|                 } |                 } | ||||||
|  |             else | ||||||
|  |                 { | ||||||
|  |                     std::cout << "File " << rtcm_filename << "cannot be saved. Wrong permissions?" << std::endl; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |  | ||||||
|     rtcm_devname = rtcm_dump_devname; |     rtcm_devname = rtcm_dump_devname; | ||||||
|     if (flag_rtcm_tty_port == true) |     if (flag_rtcm_tty_port == true) | ||||||
| @@ -341,6 +386,8 @@ void Rtcm_Printer::close_serial() | |||||||
| bool Rtcm_Printer::Print_Message(const std::string& message) | bool Rtcm_Printer::Print_Message(const std::string& message) | ||||||
| { | { | ||||||
|     //write to file |     //write to file | ||||||
|  |     if (d_rtcm_file_dump) | ||||||
|  |         { | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     rtcm_file_descriptor << message << std::endl; |                     rtcm_file_descriptor << message << std::endl; | ||||||
| @@ -350,6 +397,7 @@ bool Rtcm_Printer::Print_Message(const std::string& message) | |||||||
|                     DLOG(INFO) << "RTCM printer cannot write on the output file " << rtcm_filename.c_str(); |                     DLOG(INFO) << "RTCM printer cannot write on the output file " << rtcm_filename.c_str(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|  |         } | ||||||
|  |  | ||||||
|     //write to serial device |     //write to serial device | ||||||
|     if (rtcm_dev_descriptor != -1) |     if (rtcm_dev_descriptor != -1) | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ public: | |||||||
|     /*! |     /*! | ||||||
|      * \brief Default constructor. |      * \brief Default constructor. | ||||||
|      */ |      */ | ||||||
|     Rtcm_Printer(std::string filename, bool flag_rtcm_server, bool flag_rtcm_tty_port, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, std::string rtcm_dump_filename, bool time_tag_name = true); |     Rtcm_Printer(std::string filename, bool flag_rtcm_file_dump, bool flag_rtcm_server, bool flag_rtcm_tty_port, uint16_t rtcm_tcp_port, uint16_t rtcm_station_id, std::string rtcm_dump_filename, bool time_tag_name = true, const std::string& base_path = "."); | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      * \brief Default destructor. |      * \brief Default destructor. | ||||||
| @@ -143,6 +143,7 @@ public: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     std::string rtcm_filename;  // String with the RTCM log filename |     std::string rtcm_filename;  // String with the RTCM log filename | ||||||
|  |     std::string rtcm_base_path; | ||||||
|     std::ofstream rtcm_file_descriptor;  // Output file stream for RTCM log file |     std::ofstream rtcm_file_descriptor;  // Output file stream for RTCM log file | ||||||
|     std::string rtcm_devname; |     std::string rtcm_devname; | ||||||
|     uint16_t port; |     uint16_t port; | ||||||
| @@ -152,6 +153,7 @@ private: | |||||||
|     void close_serial(); |     void close_serial(); | ||||||
|     std::shared_ptr<Rtcm> rtcm; |     std::shared_ptr<Rtcm> rtcm; | ||||||
|     bool Print_Message(const std::string& message); |     bool Print_Message(const std::string& message); | ||||||
|  |     bool d_rtcm_file_dump; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -56,17 +56,19 @@ | |||||||
| #include "GPS_L1_CA.h" | #include "GPS_L1_CA.h" | ||||||
| #include "Galileo_E1.h" | #include "Galileo_E1.h" | ||||||
| #include "GLONASS_L1_L2_CA.h" | #include "GLONASS_L1_L2_CA.h" | ||||||
|  | #include <matio.h> | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
|  |  | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
| rtklib_solver::rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, rtk_t& rtk) | rtklib_solver::rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, bool flag_dump_to_mat, rtk_t &rtk) | ||||||
| { | { | ||||||
|     // init empty ephemeris for all the available GNSS channels |     // init empty ephemeris for all the available GNSS channels | ||||||
|     d_nchannels = nchannels; |     d_nchannels = nchannels; | ||||||
|     d_dump_filename = dump_filename; |     d_dump_filename = dump_filename; | ||||||
|     d_flag_dump_enabled = flag_dump_to_file; |     d_flag_dump_enabled = flag_dump_to_file; | ||||||
|  |     d_flag_dump_mat_enabled = flag_dump_to_mat; | ||||||
|     count_valid_position = 0; |     count_valid_position = 0; | ||||||
|     this->set_averaging_flag(false); |     this->set_averaging_flag(false); | ||||||
|     rtk_ = rtk; |     rtk_ = rtk; | ||||||
| @@ -92,6 +94,301 @@ rtklib_solver::rtklib_solver(int nchannels, std::string dump_filename, bool flag | |||||||
|         } |         } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool rtklib_solver::save_matfile() | ||||||
|  | { | ||||||
|  |     // READ DUMP FILE | ||||||
|  |     std::string dump_filename = d_dump_filename; | ||||||
|  |     std::ifstream::pos_type size; | ||||||
|  |     int32_t number_of_double_vars = 21; | ||||||
|  |     int32_t number_of_uint32_vars = 2; | ||||||
|  |     int32_t number_of_uint8_vars = 3; | ||||||
|  |     int32_t number_of_float_vars = 2; | ||||||
|  |     int32_t epoch_size_bytes = sizeof(double) * number_of_double_vars + | ||||||
|  |                                sizeof(uint32_t) * number_of_uint32_vars + | ||||||
|  |                                sizeof(uint8_t) * number_of_uint8_vars + | ||||||
|  |                                sizeof(float) * number_of_float_vars; | ||||||
|  |     std::ifstream dump_file; | ||||||
|  |     std::cout << "Generating .mat file for " << dump_filename << std::endl; | ||||||
|  |     dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||||
|  |     try | ||||||
|  |         { | ||||||
|  |             dump_file.open(dump_filename.c_str(), std::ios::binary | std::ios::ate); | ||||||
|  |         } | ||||||
|  |     catch (const std::ifstream::failure &e) | ||||||
|  |         { | ||||||
|  |             std::cerr << "Problem opening dump file:" << e.what() << std::endl; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     // count number of epochs and rewind | ||||||
|  |     int64_t num_epoch = 0LL; | ||||||
|  |     if (dump_file.is_open()) | ||||||
|  |         { | ||||||
|  |             size = dump_file.tellg(); | ||||||
|  |             num_epoch = static_cast<int64_t>(size) / static_cast<int64_t>(epoch_size_bytes); | ||||||
|  |             dump_file.seekg(0, std::ios::beg); | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     uint32_t *TOW_at_current_symbol_ms = new uint32_t[num_epoch]; | ||||||
|  |     uint32_t *week = new uint32_t[num_epoch]; | ||||||
|  |     double *RX_time = new double[num_epoch]; | ||||||
|  |     double *user_clk_offset = new double[num_epoch]; | ||||||
|  |     double *pos_x = new double[num_epoch]; | ||||||
|  |     double *pos_y = new double[num_epoch]; | ||||||
|  |     double *pos_z = new double[num_epoch]; | ||||||
|  |     double *vel_x = new double[num_epoch]; | ||||||
|  |     double *vel_y = new double[num_epoch]; | ||||||
|  |     double *vel_z = new double[num_epoch]; | ||||||
|  |     double *cov_xx = new double[num_epoch]; | ||||||
|  |     double *cov_yy = new double[num_epoch]; | ||||||
|  |     double *cov_zz = new double[num_epoch]; | ||||||
|  |     double *cov_xy = new double[num_epoch]; | ||||||
|  |     double *cov_yz = new double[num_epoch]; | ||||||
|  |     double *cov_zx = new double[num_epoch]; | ||||||
|  |     double *latitude = new double[num_epoch]; | ||||||
|  |     double *longitude = new double[num_epoch]; | ||||||
|  |     double *height = new double[num_epoch]; | ||||||
|  |     uint8_t *valid_sats = new uint8_t[num_epoch]; | ||||||
|  |     uint8_t *solution_status = new uint8_t[num_epoch]; | ||||||
|  |     uint8_t *solution_type = new uint8_t[num_epoch]; | ||||||
|  |     float *AR_ratio_factor = new float[num_epoch]; | ||||||
|  |     float *AR_ratio_threshold = new float[num_epoch]; | ||||||
|  |     double *gdop = new double[num_epoch]; | ||||||
|  |     double *pdop = new double[num_epoch]; | ||||||
|  |     double *hdop = new double[num_epoch]; | ||||||
|  |     double *vdop = new double[num_epoch]; | ||||||
|  |  | ||||||
|  |     try | ||||||
|  |         { | ||||||
|  |             if (dump_file.is_open()) | ||||||
|  |                 { | ||||||
|  |                     for (int64_t i = 0; i < num_epoch; i++) | ||||||
|  |                         { | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&TOW_at_current_symbol_ms[i]), sizeof(uint32_t)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&week[i]), sizeof(uint32_t)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&RX_time[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&user_clk_offset[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&pos_x[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&pos_y[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&pos_z[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&vel_x[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&vel_y[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&vel_z[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_xx[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_yy[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_zz[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_xy[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_yz[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&cov_zx[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&latitude[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&longitude[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&height[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&valid_sats[i]), sizeof(uint8_t)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&solution_status[i]), sizeof(uint8_t)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&solution_type[i]), sizeof(uint8_t)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&AR_ratio_factor[i]), sizeof(float)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&AR_ratio_threshold[i]), sizeof(float)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&gdop[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&pdop[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&hdop[i]), sizeof(double)); | ||||||
|  |                             dump_file.read(reinterpret_cast<char *>(&vdop[i]), sizeof(double)); | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |             dump_file.close(); | ||||||
|  |         } | ||||||
|  |     catch (const std::ifstream::failure &e) | ||||||
|  |         { | ||||||
|  |             std::cerr << "Problem reading dump file:" << e.what() << std::endl; | ||||||
|  |             delete[] TOW_at_current_symbol_ms; | ||||||
|  |             delete[] week; | ||||||
|  |             delete[] RX_time; | ||||||
|  |             delete[] user_clk_offset; | ||||||
|  |             delete[] pos_x; | ||||||
|  |             delete[] pos_y; | ||||||
|  |             delete[] pos_z; | ||||||
|  |             delete[] vel_x; | ||||||
|  |             delete[] vel_y; | ||||||
|  |             delete[] vel_z; | ||||||
|  |             delete[] cov_xx; | ||||||
|  |             delete[] cov_yy; | ||||||
|  |             delete[] cov_zz; | ||||||
|  |             delete[] cov_xy; | ||||||
|  |             delete[] cov_yz; | ||||||
|  |             delete[] cov_zx; | ||||||
|  |             delete[] latitude; | ||||||
|  |             delete[] longitude; | ||||||
|  |             delete[] height; | ||||||
|  |             delete[] valid_sats; | ||||||
|  |             delete[] solution_status; | ||||||
|  |             delete[] solution_type; | ||||||
|  |             delete[] AR_ratio_factor; | ||||||
|  |             delete[] AR_ratio_threshold; | ||||||
|  |             delete[] gdop; | ||||||
|  |             delete[] pdop; | ||||||
|  |             delete[] hdop; | ||||||
|  |             delete[] vdop; | ||||||
|  |  | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     // WRITE MAT FILE | ||||||
|  |     mat_t *matfp; | ||||||
|  |     matvar_t *matvar; | ||||||
|  |     std::string filename = dump_filename; | ||||||
|  |     filename.erase(filename.length() - 4, 4); | ||||||
|  |     filename.append(".mat"); | ||||||
|  |     matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73); | ||||||
|  |     if (reinterpret_cast<int64_t *>(matfp) != NULL) | ||||||
|  |         { | ||||||
|  |             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||||
|  |             matvar = Mat_VarCreate("TOW_at_current_symbol_ms", MAT_C_UINT32, MAT_T_UINT32, 2, dims, TOW_at_current_symbol_ms, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("week", MAT_C_UINT32, MAT_T_UINT32, 2, dims, week, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("RX_time", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, RX_time, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("user_clk_offset", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, user_clk_offset, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("pos_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_x, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("pos_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_y, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("pos_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_z, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("vel_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_x, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("vel_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_y, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("vel_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_z, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_xx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_xx, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_yy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_yy, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_zz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_zz, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_xy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_xy, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_yz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_yz, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("cov_zx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_zx, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("latitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, latitude, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("longitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, longitude, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("height", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, height, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("valid_sats", MAT_C_UINT8, MAT_T_UINT8, 2, dims, valid_sats, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("solution_status", MAT_C_UINT8, MAT_T_UINT8, 2, dims, solution_status, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("solution_type", MAT_C_UINT8, MAT_T_UINT8, 2, dims, solution_type, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("AR_ratio_factor", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, AR_ratio_factor, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("AR_ratio_threshold", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, AR_ratio_threshold, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("gdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, gdop, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("pdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pdop, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("hdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, hdop, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |  | ||||||
|  |             matvar = Mat_VarCreate("vdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vdop, 0); | ||||||
|  |             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||||
|  |             Mat_VarFree(matvar); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     Mat_Close(matfp); | ||||||
|  |     delete[] TOW_at_current_symbol_ms; | ||||||
|  |     delete[] week; | ||||||
|  |     delete[] RX_time; | ||||||
|  |     delete[] user_clk_offset; | ||||||
|  |     delete[] pos_x; | ||||||
|  |     delete[] pos_y; | ||||||
|  |     delete[] pos_z; | ||||||
|  |     delete[] vel_x; | ||||||
|  |     delete[] vel_y; | ||||||
|  |     delete[] vel_z; | ||||||
|  |     delete[] cov_xx; | ||||||
|  |     delete[] cov_yy; | ||||||
|  |     delete[] cov_zz; | ||||||
|  |     delete[] cov_xy; | ||||||
|  |     delete[] cov_yz; | ||||||
|  |     delete[] cov_zx; | ||||||
|  |     delete[] latitude; | ||||||
|  |     delete[] longitude; | ||||||
|  |     delete[] height; | ||||||
|  |     delete[] valid_sats; | ||||||
|  |     delete[] solution_status; | ||||||
|  |     delete[] solution_type; | ||||||
|  |     delete[] AR_ratio_factor; | ||||||
|  |     delete[] AR_ratio_threshold; | ||||||
|  |     delete[] gdop; | ||||||
|  |     delete[] pdop; | ||||||
|  |     delete[] hdop; | ||||||
|  |     delete[] vdop; | ||||||
|  |  | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  |  | ||||||
| rtklib_solver::~rtklib_solver() | rtklib_solver::~rtklib_solver() | ||||||
| { | { | ||||||
| @@ -106,6 +403,10 @@ rtklib_solver::~rtklib_solver() | |||||||
|                     LOG(WARNING) << "Exception in destructor closing the RTKLIB dump file " << ex.what(); |                     LOG(WARNING) << "Exception in destructor closing the RTKLIB dump file " << ex.what(); | ||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
|  |     if (d_flag_dump_mat_enabled) | ||||||
|  |         { | ||||||
|  |             save_matfile(); | ||||||
|  |         } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -493,7 +794,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | |||||||
|                     unsigned int used_sats = 0; |                     unsigned int used_sats = 0; | ||||||
|                     for (unsigned int i = 0; i < MAXSAT; i++) |                     for (unsigned int i = 0; i < MAXSAT; i++) | ||||||
|                         { |                         { | ||||||
|                             if (rtk_.ssat[i].vsat[0] == 1) used_sats++; |                             if (rtk_.ssat[i].vs == 1) used_sats++; | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
|                     std::vector<double> azel; |                     std::vector<double> azel; | ||||||
| @@ -501,7 +802,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | |||||||
|                     unsigned int index_aux = 0; |                     unsigned int index_aux = 0; | ||||||
|                     for (unsigned int i = 0; i < MAXSAT; i++) |                     for (unsigned int i = 0; i < MAXSAT; i++) | ||||||
|                         { |                         { | ||||||
|                             if (rtk_.ssat[i].vsat[0] == 1) |                             if (rtk_.ssat[i].vs == 1) | ||||||
|                                 { |                                 { | ||||||
|                                     azel[2 * index_aux] = rtk_.ssat[i].azel[0]; |                                     azel[2 * index_aux] = rtk_.ssat[i].azel[0]; | ||||||
|                                     azel[2 * index_aux + 1] = rtk_.ssat[i].azel[1]; |                                     azel[2 * index_aux + 1] = rtk_.ssat[i].azel[1]; | ||||||
|   | |||||||
| @@ -60,6 +60,7 @@ | |||||||
| #include "gps_navigation_message.h" | #include "gps_navigation_message.h" | ||||||
| #include "gps_cnav_navigation_message.h" | #include "gps_cnav_navigation_message.h" | ||||||
| #include "glonass_gnav_navigation_message.h" | #include "glonass_gnav_navigation_message.h" | ||||||
|  | #include "galileo_almanac.h" | ||||||
| #include "gnss_synchro.h" | #include "gnss_synchro.h" | ||||||
| #include "pvt_solution.h" | #include "pvt_solution.h" | ||||||
| #include <fstream> | #include <fstream> | ||||||
| @@ -76,14 +77,16 @@ private: | |||||||
|     rtk_t rtk_; |     rtk_t rtk_; | ||||||
|     std::string d_dump_filename; |     std::string d_dump_filename; | ||||||
|     std::ofstream d_dump_file; |     std::ofstream d_dump_file; | ||||||
|  |     bool save_matfile(); | ||||||
|  |  | ||||||
|     bool d_flag_dump_enabled; |     bool d_flag_dump_enabled; | ||||||
|  |     bool d_flag_dump_mat_enabled; | ||||||
|     int d_nchannels;  // Number of available channels for positioning |     int d_nchannels;  // Number of available channels for positioning | ||||||
|     double dop_[4]; |     double dop_[4]; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     sol_t pvt_sol; |     sol_t pvt_sol; | ||||||
|     rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, rtk_t& rtk); |     rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, bool flag_dump_to_mat, rtk_t& rtk); | ||||||
|     ~rtklib_solver(); |     ~rtklib_solver(); | ||||||
|  |  | ||||||
|     bool get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_map, bool flag_averaging); |     bool get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_map, bool flag_averaging); | ||||||
| @@ -99,10 +102,11 @@ public: | |||||||
|  |  | ||||||
|     Galileo_Utc_Model galileo_utc_model; |     Galileo_Utc_Model galileo_utc_model; | ||||||
|     Galileo_Iono galileo_iono; |     Galileo_Iono galileo_iono; | ||||||
|     Galileo_Almanac galileo_almanac; |     std::map<int, Galileo_Almanac> galileo_almanac_map; | ||||||
|  |  | ||||||
|     Gps_Utc_Model gps_utc_model; |     Gps_Utc_Model gps_utc_model; | ||||||
|     Gps_Iono gps_iono; |     Gps_Iono gps_iono; | ||||||
|  |     std::map<int, Gps_Almanac> gps_almanac_map; | ||||||
|  |  | ||||||
|     Gps_CNAV_Iono gps_cnav_iono; |     Gps_CNAV_Iono gps_cnav_iono; | ||||||
|     Gps_CNAV_Utc_Model gps_cnav_utc_model; |     Gps_CNAV_Utc_Model gps_cnav_utc_model; | ||||||
|   | |||||||
| @@ -40,6 +40,9 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1Pcps8msAmbiguousAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
| GalileoE1Pcps8msAmbiguousAcquisition::GalileoE1Pcps8msAmbiguousAcquisition( | GalileoE1Pcps8msAmbiguousAcquisition::GalileoE1Pcps8msAmbiguousAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -122,6 +122,12 @@ public: | |||||||
|      * \brief Restart acquisition algorithm |      * \brief Restart acquisition algorithm | ||||||
|      */ |      */ | ||||||
|     void reset() override; |     void reset() override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
|     void set_state(int state __attribute__((unused))) override{}; |     void set_state(int state __attribute__((unused))) override{}; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|   | |||||||
| @@ -42,6 +42,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1PcpsAmbiguousAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( | GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| @@ -49,7 +53,7 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( | |||||||
|     Acq_Conf acq_parameters; |     Acq_Conf acq_parameters; | ||||||
|     configuration_ = configuration; |     configuration_ = configuration; | ||||||
|     std::string default_item_type = "gr_complex"; |     std::string default_item_type = "gr_complex"; | ||||||
|     std::string default_dump_filename = "./data/acquisition.dat"; |     std::string default_dump_filename = "./acquisition.mat"; | ||||||
|  |  | ||||||
|     DLOG(INFO) << "role " << role; |     DLOG(INFO) << "role " << role; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -131,6 +131,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_acquisition_sptr acquisition_; |     pcps_acquisition_sptr acquisition_; | ||||||
|   | |||||||
| @@ -39,9 +39,12 @@ | |||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1PcpsAmbiguousAcquisitionFpga::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| @@ -49,9 +52,11 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | |||||||
|     //printf("top acq constructor start\n"); |     //printf("top acq constructor start\n"); | ||||||
|     pcpsconf_fpga_t acq_parameters; |     pcpsconf_fpga_t acq_parameters; | ||||||
|     configuration_ = configuration; |     configuration_ = configuration; | ||||||
|  |  | ||||||
|     std::string default_item_type = "cshort"; |     std::string default_item_type = "cshort"; | ||||||
|     std::string default_dump_filename = "./data/acquisition.dat"; |     std::string default_dump_filename = "./data/acquisition.dat"; | ||||||
|  |  | ||||||
|  |  | ||||||
|     DLOG(INFO) << "role " << role; |     DLOG(INFO) << "role " << role; | ||||||
|  |  | ||||||
|     //    item_type_ = configuration_->property(role + ".item_type", default_item_type); |     //    item_type_ = configuration_->property(role + ".item_type", default_item_type); | ||||||
| @@ -139,6 +144,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | |||||||
|     for (unsigned int PRN = 1; PRN <= Galileo_E1_NUMBER_OF_CODES; PRN++) |     for (unsigned int PRN = 1; PRN <= Galileo_E1_NUMBER_OF_CODES; PRN++) | ||||||
|         { |         { | ||||||
|  |  | ||||||
|  |  | ||||||
|         //code_ = new gr_complex[vector_length_]; |         //code_ = new gr_complex[vector_length_]; | ||||||
|  |  | ||||||
|         bool cboc = false; // cboc is set to 0 when using the FPGA |         bool cboc = false; // cboc is set to 0 when using the FPGA | ||||||
| @@ -272,6 +278,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | |||||||
| //        fclose(fid2); | //        fclose(fid2); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -593,4 +600,3 @@ gr::basic_block_sptr GalileoE1PcpsAmbiguousAcquisitionFpga::get_right_block() | |||||||
|     return acquisition_fpga_; |     return acquisition_fpga_; | ||||||
|     //   printf("top acq get right block end\n"); |     //   printf("top acq get right block end\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -156,6 +156,11 @@ public: | |||||||
|       */ |       */ | ||||||
|      void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); |      void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); | ||||||
|  |  | ||||||
|  |      /*! | ||||||
|  |       * \brief Stop running acquisition | ||||||
|  |       */ | ||||||
|  |      void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     //pcps_acquisition_sptr acquisition_; |     //pcps_acquisition_sptr acquisition_; | ||||||
|   | |||||||
| @@ -40,6 +40,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1PcpsCccwsrAmbiguousAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition( | GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -125,6 +125,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_cccwsr_acquisition_cc_sptr acquisition_cc_; |     pcps_cccwsr_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -40,6 +40,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1PcpsQuickSyncAmbiguousAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE1PcpsQuickSyncAmbiguousAcquisition::GalileoE1PcpsQuickSyncAmbiguousAcquisition( | GalileoE1PcpsQuickSyncAmbiguousAcquisition::GalileoE1PcpsQuickSyncAmbiguousAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -129,6 +129,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; |     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -40,6 +40,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE1PcpsTongAmbiguousAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE1PcpsTongAmbiguousAcquisition::GalileoE1PcpsTongAmbiguousAcquisition( | GalileoE1PcpsTongAmbiguousAcquisition::GalileoE1PcpsTongAmbiguousAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -128,6 +128,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_tong_acquisition_cc_sptr acquisition_cc_; |     pcps_tong_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -46,6 +46,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE5aNoncoherentIQAcquisitionCaf::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE5aNoncoherentIQAcquisitionCaf::GalileoE5aNoncoherentIQAcquisitionCaf( | GalileoE5aNoncoherentIQAcquisitionCaf::GalileoE5aNoncoherentIQAcquisitionCaf( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -131,6 +131,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_; |     galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -42,13 +42,17 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE5aPcpsAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE5aPcpsAcquisition::GalileoE5aPcpsAcquisition(ConfigurationInterface* configuration, | GalileoE5aPcpsAcquisition::GalileoE5aPcpsAcquisition(ConfigurationInterface* configuration, | ||||||
|     std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| { | { | ||||||
|     Acq_Conf acq_parameters = Acq_Conf(); |     Acq_Conf acq_parameters = Acq_Conf(); | ||||||
|     configuration_ = configuration; |     configuration_ = configuration; | ||||||
|     std::string default_item_type = "gr_complex"; |     std::string default_item_type = "gr_complex"; | ||||||
|     std::string default_dump_filename = "../data/acquisition.dat"; |     std::string default_dump_filename = "./acquisition.mat"; | ||||||
|  |  | ||||||
|     DLOG(INFO) << "Role " << role; |     DLOG(INFO) << "Role " << role; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -122,6 +122,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     float calculate_threshold(float pfa); |     float calculate_threshold(float pfa); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -39,11 +39,12 @@ | |||||||
| #include <volk_gnsssdr/volk_gnsssdr_complex.h> | #include <volk_gnsssdr/volk_gnsssdr_complex.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GalileoE5aPcpsAcquisitionFpga::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterface* configuration, | GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterface* configuration, | ||||||
|     std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| { | { | ||||||
| @@ -180,7 +181,6 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf | |||||||
|                     d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int>(floor(fft_codes_padded[i].real() * (pow(2, 5) - 1) / max)), |                     d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int>(floor(fft_codes_padded[i].real() * (pow(2, 5) - 1) / max)), | ||||||
|                         static_cast<int>(floor(fft_codes_padded[i].imag() * (pow(2, 5) - 1) / max))); |                         static_cast<int>(floor(fft_codes_padded[i].imag() * (pow(2, 5) - 1) / max))); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -144,6 +144,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); |     void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     //float calculate_threshold(float pfa); |     //float calculate_threshold(float pfa); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -43,6 +43,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GlonassL1CaPcpsAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( | GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -131,6 +131,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_acquisition_sptr acquisition_; |     pcps_acquisition_sptr acquisition_; | ||||||
|   | |||||||
| @@ -42,6 +42,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GlonassL2CaPcpsAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GlonassL2CaPcpsAcquisition::GlonassL2CaPcpsAcquisition( | GlonassL2CaPcpsAcquisition::GlonassL2CaPcpsAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -130,6 +130,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_acquisition_sptr acquisition_; |     pcps_acquisition_sptr acquisition_; | ||||||
|   | |||||||
| @@ -45,6 +45,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( | GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| @@ -52,7 +56,7 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( | |||||||
|     Acq_Conf acq_parameters = Acq_Conf(); |     Acq_Conf acq_parameters = Acq_Conf(); | ||||||
|     configuration_ = configuration; |     configuration_ = configuration; | ||||||
|     std::string default_item_type = "gr_complex"; |     std::string default_item_type = "gr_complex"; | ||||||
|     std::string default_dump_filename = "./data/acquisition.dat"; |     std::string default_dump_filename = "./acquisition.mat"; | ||||||
|  |  | ||||||
|     DLOG(INFO) << "role " << role; |     DLOG(INFO) << "role " << role; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -135,6 +135,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_acquisition_sptr acquisition_; |     pcps_acquisition_sptr acquisition_; | ||||||
|   | |||||||
| @@ -42,12 +42,16 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsAcquisitionFineDoppler::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( | GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
| { | { | ||||||
|     std::string default_item_type = "gr_complex"; |     std::string default_item_type = "gr_complex"; | ||||||
|     std::string default_dump_filename = "./data/acquisition.dat"; |     std::string default_dump_filename = "./acquisition.mat"; | ||||||
|  |  | ||||||
|     DLOG(INFO) << "role " << role; |     DLOG(INFO) << "role " << role; | ||||||
|     Acq_Conf acq_parameters = Acq_Conf(); |     Acq_Conf acq_parameters = Acq_Conf(); | ||||||
|   | |||||||
| @@ -126,6 +126,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     pcps_acquisition_fine_doppler_cc_sptr acquisition_cc_; |     pcps_acquisition_fine_doppler_cc_sptr acquisition_cc_; | ||||||
|     size_t item_size_; |     size_t item_size_; | ||||||
|   | |||||||
| @@ -48,6 +48,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsAcquisitionFpga::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga( | GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -154,6 +154,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); |     void read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor); | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_acquisition_fpga_sptr acquisition_fpga_; |     pcps_acquisition_fpga_sptr acquisition_fpga_; | ||||||
|   | |||||||
| @@ -42,6 +42,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsAssistedAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( | GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -122,6 +122,11 @@ public: | |||||||
|     void reset() override; |     void reset() override; | ||||||
|     void set_state(int state __attribute__((unused))) override{}; |     void set_state(int state __attribute__((unused))) override{}; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     pcps_assisted_acquisition_cc_sptr acquisition_cc_; |     pcps_assisted_acquisition_cc_sptr acquisition_cc_; | ||||||
|     size_t item_size_; |     size_t item_size_; | ||||||
|   | |||||||
| @@ -40,6 +40,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsOpenClAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( | GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -124,6 +124,11 @@ public: | |||||||
|     void reset() override; |     void reset() override; | ||||||
|     void set_state(int state __attribute__((unused))) override{}; |     void set_state(int state __attribute__((unused))) override{}; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_opencl_acquisition_cc_sptr acquisition_cc_; |     pcps_opencl_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -41,6 +41,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsQuickSyncAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsQuickSyncAcquisition::GpsL1CaPcpsQuickSyncAcquisition( | GpsL1CaPcpsQuickSyncAcquisition::GpsL1CaPcpsQuickSyncAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -130,6 +130,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; |     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
| @@ -40,6 +40,10 @@ | |||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
|  | void GpsL1CaPcpsTongAcquisition::stop_acquisition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
| GpsL1CaPcpsTongAcquisition::GpsL1CaPcpsTongAcquisition( | GpsL1CaPcpsTongAcquisition::GpsL1CaPcpsTongAcquisition( | ||||||
|     ConfigurationInterface* configuration, std::string role, |     ConfigurationInterface* configuration, std::string role, | ||||||
|     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) |     unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) | ||||||
|   | |||||||
| @@ -129,6 +129,11 @@ public: | |||||||
|      */ |      */ | ||||||
|     void set_state(int state) override; |     void set_state(int state) override; | ||||||
|  |  | ||||||
|  |     /*! | ||||||
|  |      * \brief Stop running acquisition | ||||||
|  |      */ | ||||||
|  |     void stop_acquisition() override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     ConfigurationInterface* configuration_; |     ConfigurationInterface* configuration_; | ||||||
|     pcps_tong_acquisition_cc_sptr acquisition_cc_; |     pcps_tong_acquisition_cc_sptr acquisition_cc_; | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Marc Majoral
					Marc Majoral