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") | ||||
|      set(OperatingSystem "Mac OS X") | ||||
|      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}) | ||||
|      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") | ||||
|          set(MACOS_HIGH_SIERRA TRUE) | ||||
|          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_GNSS_SIM_LOCAL_VERSION "master") | ||||
| 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-serialization-dev liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr \ | ||||
|        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. | ||||
|  | ||||
| @@ -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> | ||||
| --------- | ||||
|  | ||||
|  | ||||
| ### 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: | ||||
| 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: | ||||
|  | ||||
| ~~~~~~ | ||||
| $ 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 | ||||
| ~~~~~~ | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -24,10 +24,10 @@ string(REGEX REPLACE "\n" ";" files "${files}") | ||||
| foreach(file ${files}) | ||||
|   message(STATUS "Uninstalling $ENV{DESTDIR}${file}") | ||||
|   if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") | ||||
|     exec_program( | ||||
|       "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" | ||||
|     execute_process( | ||||
|       COMMAND @CMAKE_COMMAND@ -E remove \"$ENV{DESTDIR}${file}\" | ||||
|       OUTPUT_VARIABLE rm_out | ||||
|       RETURN_VALUE rm_retval | ||||
|       RESULT_VARIABLE rm_retval | ||||
|       ) | ||||
|     if(NOT "${rm_retval}" STREQUAL 0) | ||||
|       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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=217 | ||||
| GNSS-SDR.SUPL_MNS=7 | ||||
| GNSS-SDR.SUPL_MNC=7 | ||||
| GNSS-SDR.SUPL_LAC=861 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5_1C | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| ;GNSS-SDR.SUPL_MCC=244 | ||||
| ;GNSS-SDR.SUPL_MNS=5 | ||||
| ;GNSS-SDR.SUPL_MNC=5 | ||||
| ;GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| ;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_port=7275 | ||||
| ;GNSS-SDR.SUPL_MCC=244 | ||||
| ;GNSS-SDR.SUPL_MNS=5 | ||||
| ;GNSS-SDR.SUPL_MNC=5 | ||||
| ;GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| ;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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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_port=7275 | ||||
| GNSS-SDR.SUPL_MCC=244 | ||||
| GNSS-SDR.SUPL_MNS=5 | ||||
| GNSS-SDR.SUPL_MNC=5 | ||||
| GNSS-SDR.SUPL_LAC=0x59e2 | ||||
| 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 "pvt_conf.h" | ||||
| #include "configuration_interface.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <boost/archive/xml_oarchive.hpp> | ||||
| @@ -54,97 +55,87 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | ||||
|                                 in_streams_(in_streams), | ||||
|                                 out_streams_(out_streams) | ||||
| { | ||||
|     Pvt_Conf pvt_output_parameters = Pvt_Conf(); | ||||
|     // dump parameters | ||||
|     std::string default_dump_filename = "./pvt.dat"; | ||||
|     std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; | ||||
|     std::string default_nmea_dump_devname = "/dev/tty1"; | ||||
|     std::string default_rtcm_dump_devname = "/dev/pts/1"; | ||||
|     DLOG(INFO) << "role " << role; | ||||
|     dump_ = configuration->property(role + ".dump", false); | ||||
|     dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     pvt_output_parameters.dump = configuration->property(role + ".dump", false); | ||||
|     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 | ||||
|     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 | ||||
|     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 | ||||
|     bool 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.flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); | ||||
|     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); | ||||
|  | ||||
|     // 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) | ||||
|         { | ||||
|             rinex_version = 3; | ||||
|             pvt_output_parameters.rinex_version = 3; | ||||
|         } | ||||
|     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) | ||||
|         { | ||||
|             rinex_version = 3; | ||||
|             pvt_output_parameters.rinex_version = 3; | ||||
|         } | ||||
|     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) | ||||
|         { | ||||
|             rinex_version = 2; | ||||
|             pvt_output_parameters.rinex_version = 2; | ||||
|         } | ||||
|     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); | ||||
|     int rinexnav_rate_ms = bc::lcm(configuration->property(role + ".rinexnav_rate_ms", 6000), output_rate_ms); | ||||
|     pvt_output_parameters.rinexobs_rate_ms = bc::lcm(configuration->property(role + ".rinexobs_rate_ms", 1000), pvt_output_parameters.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 | ||||
|     bool 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); | ||||
|     bool flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false); | ||||
|     unsigned short 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.flag_rtcm_tty_port = configuration->property(role + ".flag_rtcm_tty_port", false); | ||||
|     pvt_output_parameters.rtcm_dump_devname = configuration->property(role + ".rtcm_dump_devname", default_rtcm_dump_devname); | ||||
|     pvt_output_parameters.flag_rtcm_server = configuration->property(role + ".flag_rtcm_server", false); | ||||
|     pvt_output_parameters.rtcm_tcp_port = configuration->property(role + ".rtcm_tcp_port", 2101); | ||||
|     pvt_output_parameters.rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234); | ||||
|     // 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_MT1020_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1020_rate_ms", 5000), output_rate_ms); | ||||
|     int rtcm_MT1045_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms); | ||||
|     int rtcm_MSM_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), 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_MT1087_rate_ms = bc::lcm(configuration->property(role + ".rtcm_MT1087_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), output_rate_ms); | ||||
|     std::map<int, int> rtcm_msg_rate_ms; | ||||
|     rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms; | ||||
|     rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms; | ||||
|     rtcm_msg_rate_ms[1045] = rtcm_MT1045_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), pvt_output_parameters.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), pvt_output_parameters.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), pvt_output_parameters.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; | ||||
|     pvt_output_parameters.rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms; | ||||
|     pvt_output_parameters.rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms; | ||||
|     pvt_output_parameters.rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms; | ||||
|     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 | ||||
|         { | ||||
|             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 | ||||
|         { | ||||
|             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 | ||||
|     /* | ||||
| @@ -188,47 +179,46 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | ||||
|     int glo_1G_count = configuration->property("Channels_1G.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!!!!!!!*********** | ||||
|     // 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)) 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)) 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)) 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)) 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)) 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)) 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 = 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) && (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)) 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)) 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)) 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)) 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)) 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)) 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 | ||||
|     // Settings 1 | ||||
|     int positioning_mode = -1; | ||||
|     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("Static") == 0) positioning_mode = PMODE_STATIC; | ||||
|     if (positioning_mode_str.compare("Kinematic") == 0) positioning_mode = PMODE_KINEMA; | ||||
| @@ -489,8 +479,29 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration, | ||||
|  | ||||
|     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 | ||||
|     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() << ")"; | ||||
|     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() | ||||
| { | ||||
|     rtkfree(&rtk); | ||||
|     save_assistance_to_XML(); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -40,7 +40,7 @@ | ||||
| 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 | ||||
| { | ||||
| @@ -87,8 +87,6 @@ private: | ||||
|     std::string role_; | ||||
|     unsigned int in_streams_; | ||||
|     unsigned int out_streams_; | ||||
|     std::string eph_xml_filename_; | ||||
|     bool save_assistance_to_XML(); | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -36,6 +36,7 @@ include_directories( | ||||
|      ${CMAKE_SOURCE_DIR}/src/core/receiver | ||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs | ||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/libs/rtklib | ||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/libs | ||||
|      ${ARMADILLO_INCLUDE_DIRS} | ||||
|      ${Boost_INCLUDE_DIRS} | ||||
|      ${GLOG_INCLUDE_DIRS} | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -38,6 +38,7 @@ | ||||
| #include "geojson_printer.h" | ||||
| #include "rinex_printer.h" | ||||
| #include "rtcm_printer.h" | ||||
| #include "pvt_conf.h" | ||||
| #include "rtklib_solver.h" | ||||
| #include <gnuradio/sync_block.h> | ||||
| #include <sys/types.h> | ||||
| @@ -55,23 +56,7 @@ class rtklib_pvt_cc; | ||||
| typedef boost::shared_ptr<rtklib_pvt_cc> rtklib_pvt_cc_sptr; | ||||
|  | ||||
| rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t n_channels, | ||||
|     bool dump, | ||||
|     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, | ||||
|     const Pvt_Conf& conf_, | ||||
|     rtk_t& rtk); | ||||
|  | ||||
| /*! | ||||
| @@ -81,28 +66,14 @@ class rtklib_pvt_cc : public gr::sync_block | ||||
| { | ||||
| private: | ||||
|     friend rtklib_pvt_cc_sptr rtklib_make_pvt_cc(uint32_t nchannels, | ||||
|         bool dump, | ||||
|         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, | ||||
|         const Pvt_Conf& conf_, | ||||
|         rtk_t& rtk); | ||||
|  | ||||
|     void msg_handler_telemetry(pmt::pmt_t msg); | ||||
|  | ||||
|     bool d_dump; | ||||
|     bool d_dump_mat; | ||||
|     bool b_rinex_output_enabled; | ||||
|     bool b_rinex_header_written; | ||||
|     bool b_rinex_header_updated; | ||||
|     double d_rinex_version; | ||||
| @@ -110,6 +81,7 @@ private: | ||||
|     int32_t d_rinexnav_rate_ms; | ||||
|  | ||||
|     bool b_rtcm_writing_started; | ||||
|     bool b_rtcm_enabled; | ||||
|     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_MT1020_rate_ms;  //!< GLONASS Broadcast Ephemeris (orbits) | ||||
| @@ -134,6 +106,10 @@ private: | ||||
|     std::shared_ptr<Rtcm_Printer> d_rtcm_printer; | ||||
|     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::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 d_xml_storage; | ||||
|     std::string xml_base_path; | ||||
|  | ||||
|  | ||||
| public: | ||||
|     rtklib_pvt_cc(uint32_t nchannels, | ||||
|         bool dump, 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, | ||||
|         const Pvt_Conf& conf_, | ||||
|         rtk_t& rtk); | ||||
|  | ||||
|     /*! | ||||
|   | ||||
| @@ -29,6 +29,7 @@ set(PVT_LIB_SOURCES | ||||
|      rtcm_printer.cc | ||||
|      geojson_printer.cc | ||||
|      rtklib_solver.cc | ||||
|      pvt_conf.cc | ||||
| ) | ||||
|  | ||||
| set(PVT_LIB_HEADERS  | ||||
| @@ -42,6 +43,7 @@ set(PVT_LIB_HEADERS | ||||
|      rtcm_printer.h | ||||
|      geojson_printer.h | ||||
|      rtklib_solver.h | ||||
|      pvt_conf.h | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -57,6 +59,7 @@ include_directories( | ||||
|      ${ARMADILLO_INCLUDE_DIRS} | ||||
|      ${GFlags_INCLUDE_DIRS} | ||||
|      ${GLOG_INCLUDE_DIRS} | ||||
|      ${MATIO_INCLUDE_DIRS} | ||||
| ) | ||||
|  | ||||
| list(SORT PVT_LIB_HEADERS) | ||||
| @@ -64,7 +67,12 @@ list(SORT PVT_LIB_SOURCES) | ||||
|  | ||||
| add_library(pvt_lib ${PVT_LIB_SOURCES} ${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( | ||||
|     pvt_lib  | ||||
| @@ -75,4 +83,5 @@ target_link_libraries( | ||||
|     ${ARMADILLO_LIBRARIES} | ||||
|     ${BLAS} | ||||
|     ${LAPACK} | ||||
|     ${MATIO_LIBRARIES} | ||||
| ) | ||||
|   | ||||
| @@ -32,14 +32,48 @@ | ||||
|  | ||||
| #include "geojson_printer.h" | ||||
| #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 <iomanip> | ||||
| #include <sstream> | ||||
|  | ||||
|  | ||||
| GeoJSON_Printer::GeoJSON_Printer() | ||||
| GeoJSON_Printer::GeoJSON_Printer(const std::string& base_path) | ||||
| { | ||||
|     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_ = geojson_base_path + filename_; | ||||
|  | ||||
|     geojson_file.open(filename_.c_str()); | ||||
|  | ||||
| @@ -124,6 +159,7 @@ bool GeoJSON_Printer::set_headers(std::string filename, bool time_tag_name) | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             std::cout << "File " << filename_ << " cannot be saved. Wrong permissions?" << std::endl; | ||||
|             return false; | ||||
|         } | ||||
| } | ||||
|   | ||||
| @@ -50,9 +50,10 @@ private: | ||||
|     std::ofstream geojson_file; | ||||
|     bool first_pos; | ||||
|     std::string filename_; | ||||
|     std::string geojson_base_path; | ||||
|  | ||||
| public: | ||||
|     GeoJSON_Printer(); | ||||
|     GeoJSON_Printer(const std::string& base_path = "."); | ||||
|     ~GeoJSON_Printer(); | ||||
|     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); | ||||
|   | ||||
| @@ -32,11 +32,53 @@ | ||||
|  | ||||
| #include "gpx_printer.h" | ||||
| #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 <sstream> | ||||
|  | ||||
| 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) | ||||
| { | ||||
|     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 = gpx_base_path + gpx_filename; | ||||
|     gpx_file.open(gpx_filename.c_str()); | ||||
|  | ||||
|     if (gpx_file.is_open()) | ||||
| @@ -105,6 +149,7 @@ bool Gpx_Printer::set_headers(std::string filename, bool time_tag_name) | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             std::cout << "File " << gpx_filename << " cannot be saved. Wrong permissions?" << std::endl; | ||||
|             return false; | ||||
|         } | ||||
| } | ||||
| @@ -171,13 +216,6 @@ bool Gpx_Printer::close_file() | ||||
| } | ||||
|  | ||||
|  | ||||
| Gpx_Printer::Gpx_Printer() | ||||
| { | ||||
|     positions_printed = false; | ||||
|     indent = "  "; | ||||
| } | ||||
|  | ||||
|  | ||||
| Gpx_Printer::~Gpx_Printer() | ||||
| { | ||||
|     close_file(); | ||||
|   | ||||
| @@ -52,9 +52,10 @@ private: | ||||
|     bool positions_printed; | ||||
|     std::string gpx_filename; | ||||
|     std::string indent; | ||||
|     std::string gpx_base_path; | ||||
|  | ||||
| public: | ||||
|     Gpx_Printer(); | ||||
|     Gpx_Printer(const std::string& base_path = "."); | ||||
|     ~Gpx_Printer(); | ||||
|     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); | ||||
|   | ||||
| @@ -36,6 +36,7 @@ | ||||
| #include "galileo_navigation_message.h" | ||||
| #include "gps_navigation_message.h" | ||||
| #include "gps_cnav_navigation_message.h" | ||||
| #include "galileo_almanac.h" | ||||
| #include "gnss_synchro.h" | ||||
| #include "rtklib_rtkcmn.h" | ||||
| #include <fstream> | ||||
|   | ||||
| @@ -31,11 +31,52 @@ | ||||
|  | ||||
| #include "kml_printer.h" | ||||
| #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 <sstream> | ||||
|  | ||||
| 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) | ||||
| { | ||||
|     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 = kml_base_path + kml_filename; | ||||
|     kml_file.open(kml_filename.c_str()); | ||||
|  | ||||
|     if (kml_file.is_open()) | ||||
| @@ -119,6 +161,7 @@ bool Kml_Printer::set_headers(std::string filename, bool time_tag_name) | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             std::cout << "File " << kml_filename << " cannot be saved. Wrong permissions?" << std::endl; | ||||
|             return false; | ||||
|         } | ||||
| } | ||||
| @@ -178,12 +221,6 @@ bool Kml_Printer::close_file() | ||||
| } | ||||
|  | ||||
|  | ||||
| Kml_Printer::Kml_Printer() | ||||
| { | ||||
|     positions_printed = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| Kml_Printer::~Kml_Printer() | ||||
| { | ||||
|     close_file(); | ||||
|   | ||||
| @@ -50,9 +50,10 @@ private: | ||||
|     std::ofstream kml_file; | ||||
|     bool positions_printed; | ||||
|     std::string kml_filename; | ||||
|     std::string kml_base_path; | ||||
|  | ||||
| public: | ||||
|     Kml_Printer(); | ||||
|     Kml_Printer(const std::string& base_path = std::string(".")); | ||||
|     ~Kml_Printer(); | ||||
|     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); | ||||
|   | ||||
| @@ -35,6 +35,9 @@ | ||||
|  | ||||
| #include "nmea_printer.h" | ||||
| #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 <cstdint> | ||||
| #include <fcntl.h> | ||||
| @@ -44,14 +47,56 @@ | ||||
| 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); | ||||
|             if (nmea_file_descriptor.is_open()) | ||||
|                 { | ||||
|                     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; | ||||
|     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(); | ||||
|  | ||||
|     // write to log file | ||||
|     if (d_flag_nmea_output_file) | ||||
|         { | ||||
|             try | ||||
|                 { | ||||
|                     // GPRMC | ||||
| @@ -163,7 +210,7 @@ bool Nmea_Printer::Print_Nmea_Line(const std::shared_ptr<rtklib_solver>& pvt_dat | ||||
|             catch (const std::exception& ex) | ||||
|                 { | ||||
|                     DLOG(INFO) << "NMEA printer can not write on output file" << nmea_filename.c_str(); | ||||
|             ; | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     // 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()); | ||||
|  | ||||
|     // Status: A: data valid, V: data NOT valid | ||||
|  | ||||
|     if (valid_fix == true) | ||||
|         { | ||||
|             sentence_str << ",A"; | ||||
|   | ||||
| @@ -53,7 +53,7 @@ public: | ||||
|     /*! | ||||
|      * \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 | ||||
| @@ -67,6 +67,7 @@ public: | ||||
|  | ||||
| private: | ||||
|     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::string nmea_devname; | ||||
|     int nmea_dev_descriptor;  // NMEA serial device descriptor (i.e. COM port) | ||||
| @@ -82,6 +83,7 @@ private: | ||||
|     std::string latitude_to_hm(double lat); | ||||
|     char checkSum(std::string sentence); | ||||
|     bool print_avg_pos; | ||||
|     bool d_flag_nmea_output_file; | ||||
| }; | ||||
|  | ||||
| #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: | ||||
|     /*! | ||||
|      * \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(); | ||||
|  | ||||
| @@ -106,12 +106,17 @@ public: | ||||
|     /*! | ||||
|      *  \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 | ||||
|      */ | ||||
|     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 | ||||
| @@ -121,7 +126,7 @@ public: | ||||
|     /*! | ||||
|      *  \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 | ||||
| @@ -141,12 +146,12 @@ public: | ||||
|     /*! | ||||
|      *  \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". | ||||
| @@ -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"); | ||||
|  | ||||
|     /*! | ||||
|      *  \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". | ||||
|      */ | ||||
| @@ -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); | ||||
|  | ||||
|     /*! | ||||
|      *  \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 | ||||
|      */ | ||||
| @@ -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); | ||||
|  | ||||
|     /*! | ||||
|      *  \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". | ||||
|      */ | ||||
| @@ -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_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); | ||||
|  | ||||
| @@ -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 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); | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,9 @@ | ||||
|  | ||||
| #include "rtcm_printer.h" | ||||
| #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 <iomanip> | ||||
| #include <fcntl.h>    // for O_RDWR | ||||
| @@ -42,10 +45,45 @@ | ||||
| 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(); | ||||
|     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) | ||||
|         { | ||||
| @@ -89,12 +127,19 @@ Rtcm_Printer::Rtcm_Printer(std::string filename, bool flag_rtcm_server, bool fla | ||||
|         { | ||||
|             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); | ||||
|             if (rtcm_file_descriptor.is_open()) | ||||
|                 { | ||||
|                     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; | ||||
|     if (flag_rtcm_tty_port == true) | ||||
| @@ -341,6 +386,8 @@ void Rtcm_Printer::close_serial() | ||||
| bool Rtcm_Printer::Print_Message(const std::string& message) | ||||
| { | ||||
|     //write to file | ||||
|     if (d_rtcm_file_dump) | ||||
|         { | ||||
|             try | ||||
|                 { | ||||
|                     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(); | ||||
|                     return false; | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     //write to serial device | ||||
|     if (rtcm_dev_descriptor != -1) | ||||
|   | ||||
| @@ -48,7 +48,7 @@ public: | ||||
|     /*! | ||||
|      * \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. | ||||
| @@ -143,6 +143,7 @@ public: | ||||
|  | ||||
| private: | ||||
|     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::string rtcm_devname; | ||||
|     uint16_t port; | ||||
| @@ -152,6 +153,7 @@ private: | ||||
|     void close_serial(); | ||||
|     std::shared_ptr<Rtcm> rtcm; | ||||
|     bool Print_Message(const std::string& message); | ||||
|     bool d_rtcm_file_dump; | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -56,17 +56,19 @@ | ||||
| #include "GPS_L1_CA.h" | ||||
| #include "Galileo_E1.h" | ||||
| #include "GLONASS_L1_L2_CA.h" | ||||
| #include <matio.h> | ||||
| #include <glog/logging.h> | ||||
|  | ||||
|  | ||||
| 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 | ||||
|     d_nchannels = nchannels; | ||||
|     d_dump_filename = dump_filename; | ||||
|     d_flag_dump_enabled = flag_dump_to_file; | ||||
|     d_flag_dump_mat_enabled = flag_dump_to_mat; | ||||
|     count_valid_position = 0; | ||||
|     this->set_averaging_flag(false); | ||||
|     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() | ||||
| { | ||||
| @@ -106,6 +403,10 @@ rtklib_solver::~rtklib_solver() | ||||
|                     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; | ||||
|                     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; | ||||
| @@ -501,7 +802,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                     unsigned int index_aux = 0; | ||||
|                     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 + 1] = rtk_.ssat[i].azel[1]; | ||||
|   | ||||
| @@ -60,6 +60,7 @@ | ||||
| #include "gps_navigation_message.h" | ||||
| #include "gps_cnav_navigation_message.h" | ||||
| #include "glonass_gnav_navigation_message.h" | ||||
| #include "galileo_almanac.h" | ||||
| #include "gnss_synchro.h" | ||||
| #include "pvt_solution.h" | ||||
| #include <fstream> | ||||
| @@ -76,14 +77,16 @@ private: | ||||
|     rtk_t rtk_; | ||||
|     std::string d_dump_filename; | ||||
|     std::ofstream d_dump_file; | ||||
|     bool save_matfile(); | ||||
|  | ||||
|     bool d_flag_dump_enabled; | ||||
|     bool d_flag_dump_mat_enabled; | ||||
|     int d_nchannels;  // Number of available channels for positioning | ||||
|     double dop_[4]; | ||||
|  | ||||
| public: | ||||
|     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(); | ||||
|  | ||||
|     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_Iono galileo_iono; | ||||
|     Galileo_Almanac galileo_almanac; | ||||
|     std::map<int, Galileo_Almanac> galileo_almanac_map; | ||||
|  | ||||
|     Gps_Utc_Model gps_utc_model; | ||||
|     Gps_Iono gps_iono; | ||||
|     std::map<int, Gps_Almanac> gps_almanac_map; | ||||
|  | ||||
|     Gps_CNAV_Iono gps_cnav_iono; | ||||
|     Gps_CNAV_Utc_Model gps_cnav_utc_model; | ||||
|   | ||||
| @@ -40,6 +40,9 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
| GalileoE1Pcps8msAmbiguousAcquisition::GalileoE1Pcps8msAmbiguousAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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 | ||||
|      */ | ||||
|     void reset() override; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
|     void set_state(int state __attribute__((unused))) override{}; | ||||
|  | ||||
| private: | ||||
|   | ||||
| @@ -42,6 +42,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1PcpsAmbiguousAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|     configuration_ = configuration; | ||||
|     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; | ||||
|  | ||||
|   | ||||
| @@ -131,6 +131,11 @@ public: | ||||
|      */ | ||||
|     void set_state(int state) override; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_acquisition_sptr acquisition_; | ||||
|   | ||||
| @@ -39,9 +39,12 @@ | ||||
| #include <glog/logging.h> | ||||
|  | ||||
|  | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1PcpsAmbiguousAcquisitionFpga::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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"); | ||||
|     pcpsconf_fpga_t acq_parameters; | ||||
|     configuration_ = configuration; | ||||
|  | ||||
|     std::string default_item_type = "cshort"; | ||||
|     std::string default_dump_filename = "./data/acquisition.dat"; | ||||
|  | ||||
|  | ||||
|     DLOG(INFO) << "role " << role; | ||||
|  | ||||
|     //    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++) | ||||
|         { | ||||
|  | ||||
|  | ||||
|         //code_ = new gr_complex[vector_length_]; | ||||
|  | ||||
|         bool cboc = false; // cboc is set to 0 when using the FPGA | ||||
| @@ -272,6 +278,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga( | ||||
| //        fclose(fid2); | ||||
|  | ||||
|  | ||||
|  | ||||
|         } | ||||
|  | ||||
|  | ||||
| @@ -593,4 +600,3 @@ gr::basic_block_sptr GalileoE1PcpsAmbiguousAcquisitionFpga::get_right_block() | ||||
|     return acquisition_fpga_; | ||||
|     //   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); | ||||
|  | ||||
|      /*! | ||||
|       * \brief Stop running acquisition | ||||
|       */ | ||||
|      void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     //pcps_acquisition_sptr acquisition_; | ||||
|   | ||||
| @@ -40,6 +40,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1PcpsCccwsrAmbiguousAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_cccwsr_acquisition_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -40,6 +40,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1PcpsQuickSyncAmbiguousAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1PcpsQuickSyncAmbiguousAcquisition::GalileoE1PcpsQuickSyncAmbiguousAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -40,6 +40,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE1PcpsTongAmbiguousAcquisition::GalileoE1PcpsTongAmbiguousAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_tong_acquisition_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -46,6 +46,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE5aNoncoherentIQAcquisitionCaf::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GalileoE5aNoncoherentIQAcquisitionCaf::GalileoE5aNoncoherentIQAcquisitionCaf( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -42,13 +42,17 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE5aPcpsAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| 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) | ||||
| { | ||||
|     Acq_Conf acq_parameters = Acq_Conf(); | ||||
|     configuration_ = configuration; | ||||
|     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; | ||||
|  | ||||
|   | ||||
| @@ -122,6 +122,11 @@ public: | ||||
|      */ | ||||
|     void set_state(int state) override; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     float calculate_threshold(float pfa); | ||||
|  | ||||
|   | ||||
| @@ -39,11 +39,12 @@ | ||||
| #include <volk_gnsssdr/volk_gnsssdr_complex.h> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GalileoE5aPcpsAcquisitionFpga::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| 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) | ||||
| { | ||||
| @@ -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)), | ||||
|                         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); | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     //float calculate_threshold(float pfa); | ||||
|  | ||||
|   | ||||
| @@ -43,6 +43,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GlonassL1CaPcpsAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_acquisition_sptr acquisition_; | ||||
|   | ||||
| @@ -42,6 +42,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GlonassL2CaPcpsAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GlonassL2CaPcpsAcquisition::GlonassL2CaPcpsAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_acquisition_sptr acquisition_; | ||||
|   | ||||
| @@ -45,6 +45,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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(); | ||||
|     configuration_ = configuration; | ||||
|     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; | ||||
|  | ||||
|   | ||||
| @@ -135,6 +135,11 @@ public: | ||||
|      */ | ||||
|     void set_state(int state) override; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_acquisition_sptr acquisition_; | ||||
|   | ||||
| @@ -42,12 +42,16 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsAcquisitionFineDoppler::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( | ||||
|     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 default_item_type = "gr_complex"; | ||||
|     std::string default_dump_filename = "./data/acquisition.dat"; | ||||
|     std::string default_dump_filename = "./acquisition.mat"; | ||||
|  | ||||
|     DLOG(INFO) << "role " << role; | ||||
|     Acq_Conf acq_parameters = Acq_Conf(); | ||||
|   | ||||
| @@ -126,6 +126,11 @@ public: | ||||
|      */ | ||||
|     void set_state(int state) override; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     pcps_acquisition_fine_doppler_cc_sptr acquisition_cc_; | ||||
|     size_t item_size_; | ||||
|   | ||||
| @@ -48,6 +48,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsAcquisitionFpga::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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); | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_acquisition_fpga_sptr acquisition_fpga_; | ||||
|   | ||||
| @@ -42,6 +42,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsAssistedAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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 set_state(int state __attribute__((unused))) override{}; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     pcps_assisted_acquisition_cc_sptr acquisition_cc_; | ||||
|     size_t item_size_; | ||||
|   | ||||
| @@ -40,6 +40,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsOpenClAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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 set_state(int state __attribute__((unused))) override{}; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_opencl_acquisition_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -41,6 +41,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsQuickSyncAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsQuickSyncAcquisition::GpsL1CaPcpsQuickSyncAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     pcps_quicksync_acquisition_cc_sptr acquisition_cc_; | ||||
|   | ||||
| @@ -40,6 +40,10 @@ | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| void GpsL1CaPcpsTongAcquisition::stop_acquisition() | ||||
| { | ||||
| } | ||||
|  | ||||
| GpsL1CaPcpsTongAcquisition::GpsL1CaPcpsTongAcquisition( | ||||
|     ConfigurationInterface* configuration, std::string role, | ||||
|     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; | ||||
|  | ||||
|     /*! | ||||
|      * \brief Stop running acquisition | ||||
|      */ | ||||
|     void stop_acquisition() override; | ||||
|  | ||||
| private: | ||||
|     ConfigurationInterface* configuration_; | ||||
|     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