mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-08-11 00:13:52 +00:00
Merge branch 'osnma-cesare' of https://github.com/cesaaargm/osnma into osnma-cesare
This commit is contained in:
commit
44344e1371
1
.gitignore
vendored
1
.gitignore
vendored
@ -22,6 +22,7 @@ cmake-build-release/
|
|||||||
.vscode/
|
.vscode/
|
||||||
.vs/
|
.vs/
|
||||||
Testing/
|
Testing/
|
||||||
|
|
||||||
GSDR*
|
GSDR*
|
||||||
PVT_*
|
PVT_*
|
||||||
HAS_*
|
HAS_*
|
||||||
|
2
AUTHORS
2
AUTHORS
@ -37,6 +37,7 @@ Carles Fernández-Prades carles.fernandez@cttc.cat Project manager
|
|||||||
Javier Arribas javier.arribas@cttc.es Developer
|
Javier Arribas javier.arribas@cttc.es Developer
|
||||||
Luis Esteve Elfau luis@epsilon-formacion.com Developer
|
Luis Esteve Elfau luis@epsilon-formacion.com Developer
|
||||||
Marc Majoral marc.majoral@cttc.cat Developer
|
Marc Majoral marc.majoral@cttc.cat Developer
|
||||||
|
Xavier Guerrero xavier.guerrero@cttc.es Developer
|
||||||
Jordi Vilà-Valls jordi.vila-valls@isae-supaero.fr Consultant
|
Jordi Vilà-Valls jordi.vila-valls@isae-supaero.fr Consultant
|
||||||
Pau Closas pau.closas@northeastern.edu Consultant
|
Pau Closas pau.closas@northeastern.edu Consultant
|
||||||
Álvaro Cebrián Juan acebrianjuan@gmail.com Contributor
|
Álvaro Cebrián Juan acebrianjuan@gmail.com Contributor
|
||||||
@ -44,6 +45,7 @@ Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor
|
|||||||
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
|
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
|
||||||
Antonio Ramos antonio.ramosdet@gmail.com Contributor
|
Antonio Ramos antonio.ramosdet@gmail.com Contributor
|
||||||
Carlos Avilés carlos.avilesr@googlemail.com Contributor
|
Carlos Avilés carlos.avilesr@googlemail.com Contributor
|
||||||
|
Cesare Ghionoiu Martinez c.ghionoiu-martinez@tu-braunschweig.de Contributor
|
||||||
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
|
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
|
||||||
Damian Miralles dmiralles2009@gmail.com Contributor
|
Damian Miralles dmiralles2009@gmail.com Contributor
|
||||||
Daniel Fehr daniel.co@bluewin.ch Contributor
|
Daniel Fehr daniel.co@bluewin.ch Contributor
|
||||||
|
10
CITATION.cff
10
CITATION.cff
@ -20,6 +20,11 @@ authors:
|
|||||||
family-names: Majoral
|
family-names: Majoral
|
||||||
given-names: Marc
|
given-names: Marc
|
||||||
orcid: "https://orcid.org/0000-0001-6161-6747"
|
orcid: "https://orcid.org/0000-0001-6161-6747"
|
||||||
|
- affiliation: "Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)"
|
||||||
|
alias: xguerreropau
|
||||||
|
email: xavier.guerrero@cttc.es
|
||||||
|
family-names: Guerrero
|
||||||
|
given-names: Xavier
|
||||||
- alias: Gastd
|
- alias: Gastd
|
||||||
email: gabriel.araujo.5000@gmail.com
|
email: gabriel.araujo.5000@gmail.com
|
||||||
family-names: Araujo
|
family-names: Araujo
|
||||||
@ -56,6 +61,11 @@ authors:
|
|||||||
- email: daniel.co@bluewin.ch
|
- email: daniel.co@bluewin.ch
|
||||||
family-names: Fehr
|
family-names: Fehr
|
||||||
given-names: Daniel
|
given-names: Daniel
|
||||||
|
- alias: cesaaargm
|
||||||
|
affiliation: "Technische Universität Braunschweig"
|
||||||
|
email: c.ghionoiu-martinez@tu-braunschweig.de
|
||||||
|
family-names: "Ghionoiu Martinez"
|
||||||
|
given-names: Cesare
|
||||||
- alias: piyush0411
|
- alias: piyush0411
|
||||||
email: piyush04111999@gmail.com
|
email: piyush04111999@gmail.com
|
||||||
family-names: Gupta
|
family-names: Gupta
|
||||||
|
@ -360,7 +360,7 @@ set(GNSSSDR_ARMADILLO_LOCAL_VERSION "14.0.x")
|
|||||||
set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2")
|
set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.2")
|
||||||
set(GNSSSDR_GLOG_LOCAL_VERSION "0.7.1")
|
set(GNSSSDR_GLOG_LOCAL_VERSION "0.7.1")
|
||||||
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.27")
|
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.27")
|
||||||
set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "28.0")
|
set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "28.1")
|
||||||
set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.14")
|
set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.14")
|
||||||
set(GNSSSDR_GTEST_LOCAL_VERSION "1.15.2")
|
set(GNSSSDR_GTEST_LOCAL_VERSION "1.15.2")
|
||||||
set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "origin/master")
|
set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "origin/master")
|
||||||
@ -3357,37 +3357,17 @@ endif()
|
|||||||
if(ENABLE_MAX2771)
|
if(ENABLE_MAX2771)
|
||||||
if(DEFINED ENV{SDKTARGETSYSROOT})
|
if(DEFINED ENV{SDKTARGETSYSROOT})
|
||||||
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
||||||
|
else()
|
||||||
|
string(REGEX MATCH "(.*/tmp-glibc)" MATCHED_PATH "${GNURADIO_RUNTIME_INCLUDE_DIRS}")
|
||||||
|
if(MATCHED_PATH)
|
||||||
|
set(TARGET_ROOTFS_PATH "${MATCHED_PATH}/sysroots-components")
|
||||||
else()
|
else()
|
||||||
set(TARGET_ROOTFS_PATH "")
|
set(TARGET_ROOTFS_PATH "")
|
||||||
endif()
|
endif()
|
||||||
find_program(STRINGS_EXECUTABLE strings)
|
|
||||||
if(NOT STRINGS_EXECUTABLE)
|
|
||||||
message(STATUS "The 'strings' command could not be found. See https://www.gnu.org/software/binutils/")
|
|
||||||
message(STATUS " You can try to install it by typing:")
|
|
||||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU")
|
|
||||||
if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat")
|
|
||||||
message(STATUS " sudo yum install binutils")
|
|
||||||
elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE")
|
|
||||||
message(STATUS " sudo zypper install binutils")
|
|
||||||
else()
|
|
||||||
message(STATUS " sudo apt-get install binutils")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
file(GLOB_RECURSE SPIDEV_FILE "${TARGET_ROOTFS_PATH}/*/spidev.h")
|
||||||
message(FATAL_ERROR "Binutils are required to build GNSS-SDR for SoC FPGA devices using the MAX2771 option.")
|
if(EXISTS "${SPIDEV_FILE}")
|
||||||
endif()
|
message(STATUS "SPIdev driver found: ${SPIDEV_FILE}")
|
||||||
set(DTB_FILE "${TARGET_ROOTFS_PATH}/boot/devicetree/system-top.dtb")
|
|
||||||
if(EXISTS "${DTB_FILE}")
|
|
||||||
message(STATUS "Found DTB file: ${DTB_FILE}")
|
|
||||||
# Run the strings command and grep for "spidev"
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${STRINGS_EXECUTABLE} ${DTB_FILE}
|
|
||||||
COMMAND grep "spidev"
|
|
||||||
OUTPUT_VARIABLE GREP_OUTPUT
|
|
||||||
RESULT_VARIABLE GREP_RESULT
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
if(GREP_RESULT EQUAL 0)
|
|
||||||
message(STATUS "Found spidev-compatible peripheral in ${DTB_FILE}.")
|
|
||||||
else()
|
else()
|
||||||
message(STATUS "SPIdev driver not found, its installation is required.")
|
message(STATUS "SPIdev driver not found, its installation is required.")
|
||||||
if(ENABLE_PACKAGING)
|
if(ENABLE_PACKAGING)
|
||||||
@ -3396,9 +3376,6 @@ if(ENABLE_MAX2771)
|
|||||||
message(FATAL_ERROR "SPIdev driver is required for building gnss-sdr with -DENABLE_MAX2271=ON.")
|
message(FATAL_ERROR "SPIdev driver is required for building gnss-sdr with -DENABLE_MAX2271=ON.")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "The device tree (DTB) file ${DTB_FILE} cannot be found.")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
@ -3411,10 +3388,15 @@ endif()
|
|||||||
if(ENABLE_DMA_PROXY)
|
if(ENABLE_DMA_PROXY)
|
||||||
if(DEFINED ENV{SDKTARGETSYSROOT})
|
if(DEFINED ENV{SDKTARGETSYSROOT})
|
||||||
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
||||||
|
else()
|
||||||
|
string(REGEX MATCH "(.*/tmp-glibc)" MATCHED_PATH "${GNURADIO_RUNTIME_INCLUDE_DIRS}")
|
||||||
|
if(MATCHED_PATH)
|
||||||
|
set(TARGET_ROOTFS_PATH "${MATCHED_PATH}/sysroots-components")
|
||||||
else()
|
else()
|
||||||
set(TARGET_ROOTFS_PATH "")
|
set(TARGET_ROOTFS_PATH "")
|
||||||
endif()
|
endif()
|
||||||
set(DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/lib/modules/5.10.0-xilinx-v2021.2/extra/dma-proxy.ko")
|
endif()
|
||||||
|
file(GLOB_RECURSE DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/*/dma-proxy.ko")
|
||||||
if(EXISTS "${DMA_PROXY_FILE}")
|
if(EXISTS "${DMA_PROXY_FILE}")
|
||||||
message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}")
|
message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}")
|
||||||
else()
|
else()
|
||||||
@ -3512,10 +3494,15 @@ endif()
|
|||||||
if(ENABLE_DMA_PROXY)
|
if(ENABLE_DMA_PROXY)
|
||||||
if(DEFINED ENV{SDKTARGETSYSROOT})
|
if(DEFINED ENV{SDKTARGETSYSROOT})
|
||||||
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT})
|
||||||
|
else()
|
||||||
|
string(REGEX MATCH "(.*/tmp-glibc)" MATCHED_PATH "${GNURADIO_RUNTIME_INCLUDE_DIRS}")
|
||||||
|
if(MATCHED_PATH)
|
||||||
|
set(TARGET_ROOTFS_PATH "${MATCHED_PATH}/sysroots-components")
|
||||||
else()
|
else()
|
||||||
set(TARGET_ROOTFS_PATH "")
|
set(TARGET_ROOTFS_PATH "")
|
||||||
endif()
|
endif()
|
||||||
set(DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/lib/modules/5.10.0-xilinx-v2021.2/extra/dma-proxy.ko")
|
endif()
|
||||||
|
file(GLOB_RECURSE DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/*/dma-proxy.ko")
|
||||||
if(EXISTS "${DMA_PROXY_FILE}")
|
if(EXISTS "${DMA_PROXY_FILE}")
|
||||||
message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}")
|
message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}")
|
||||||
else()
|
else()
|
||||||
|
@ -45,6 +45,8 @@ All notable changes to GNSS-SDR will be documented in this file.
|
|||||||
described with the
|
described with the
|
||||||
[ION GNSS Software Defined Receiver Metadata Standard](https://sdr.ion.org/).
|
[ION GNSS Software Defined Receiver Metadata Standard](https://sdr.ion.org/).
|
||||||
It requires the `-DENABLE_ION=ON` building configuration option.
|
It requires the `-DENABLE_ION=ON` building configuration option.
|
||||||
|
- The `Monitor` and `PVT` blocks are now able to send data to multiple UDP
|
||||||
|
ports.
|
||||||
|
|
||||||
### Improvements in Portability:
|
### Improvements in Portability:
|
||||||
|
|
||||||
@ -89,9 +91,20 @@ All notable changes to GNSS-SDR will be documented in this file.
|
|||||||
Accordingly, the GNSS-SDR building system now looks for OpenSSL in the first
|
Accordingly, the GNSS-SDR building system now looks for OpenSSL in the first
|
||||||
place and, if not found, then it looks for GnuTLS as a fallback.
|
place and, if not found, then it looks for GnuTLS as a fallback.
|
||||||
|
|
||||||
|
### Reliability
|
||||||
|
|
||||||
|
- Implementation of the Galileo Open Service Navigation Message Authentication
|
||||||
|
(OSNMA), a data authentication function for the Galileo Open Service worldwide
|
||||||
|
users, freely accessible to all. OSNMA provides receivers with the assurance
|
||||||
|
that the received Galileo navigation message is coming from the system itself
|
||||||
|
and has not been modified. OSNMA is enabled by default if the receiver
|
||||||
|
configuration defines Galileo E1 OS channels. More details can be found in
|
||||||
|
[Introducing GNSS Navigation Message Authentication](https://gnss-sdr.org/osnma).
|
||||||
|
|
||||||
### Improvements in Usability:
|
### Improvements in Usability:
|
||||||
|
|
||||||
- Tidy up the `conf/` folder.
|
- Tidy up the `conf/` folder.
|
||||||
|
- Add `install` and `uninstall` targets to the `nav_msg_listener` utility.
|
||||||
|
|
||||||
See the definitions of concepts and metrics at
|
See the definitions of concepts and metrics at
|
||||||
https://gnss-sdr.org/design-forces/
|
https://gnss-sdr.org/design-forces/
|
||||||
|
@ -887,7 +887,7 @@ Rtklib_Pvt::Rtklib_Pvt(const ConfigurationInterface* configuration,
|
|||||||
// Read PVT MONITOR Configuration
|
// Read PVT MONITOR Configuration
|
||||||
pvt_output_parameters.monitor_enabled = configuration->property(role + ".enable_monitor", false);
|
pvt_output_parameters.monitor_enabled = configuration->property(role + ".enable_monitor", false);
|
||||||
pvt_output_parameters.udp_addresses = configuration->property(role + ".monitor_client_addresses", std::string("127.0.0.1"));
|
pvt_output_parameters.udp_addresses = configuration->property(role + ".monitor_client_addresses", std::string("127.0.0.1"));
|
||||||
pvt_output_parameters.udp_port = configuration->property(role + ".monitor_udp_port", 1234);
|
pvt_output_parameters.udp_ports = configuration->property(role + ".monitor_udp_port", std::string("1234"));
|
||||||
pvt_output_parameters.protobuf_enabled = configuration->property(role + ".enable_protobuf", true);
|
pvt_output_parameters.protobuf_enabled = configuration->property(role + ".enable_protobuf", true);
|
||||||
if (configuration->property("Monitor.enable_protobuf", false) == true)
|
if (configuration->property("Monitor.enable_protobuf", false) == true)
|
||||||
{
|
{
|
||||||
|
@ -482,7 +482,12 @@ rtklib_pvt_gs::rtklib_pvt_gs(uint32_t nchannels,
|
|||||||
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
||||||
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
||||||
|
|
||||||
d_udp_sink_ptr = std::make_unique<Monitor_Pvt_Udp_Sink>(udp_addr_vec, conf_.udp_port, conf_.protobuf_enabled);
|
std::string port_string = conf_.udp_ports;
|
||||||
|
std::vector<std::string> udp_port_vec = split_string(port_string, '_');
|
||||||
|
std::sort(udp_port_vec.begin(), udp_port_vec.end());
|
||||||
|
udp_port_vec.erase(std::unique(udp_port_vec.begin(), udp_port_vec.end()), udp_port_vec.end());
|
||||||
|
|
||||||
|
d_udp_sink_ptr = std::make_unique<Monitor_Pvt_Udp_Sink>(udp_addr_vec, udp_port_vec, conf_.protobuf_enabled);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -17,20 +17,25 @@
|
|||||||
|
|
||||||
#include "monitor_pvt_udp_sink.h"
|
#include "monitor_pvt_udp_sink.h"
|
||||||
#include <boost/archive/binary_oarchive.hpp>
|
#include <boost/archive/binary_oarchive.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses,
|
Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(
|
||||||
const uint16_t& port,
|
const std::vector<std::string>& addresses,
|
||||||
|
const std::vector<std::string>& ports,
|
||||||
bool protobuf_enabled) : socket{io_context},
|
bool protobuf_enabled) : socket{io_context},
|
||||||
use_protobuf(protobuf_enabled)
|
use_protobuf(protobuf_enabled)
|
||||||
{
|
{
|
||||||
for (const auto& address : addresses)
|
for (const auto& address : addresses)
|
||||||
{
|
{
|
||||||
boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::address::from_string(address, error), port);
|
for (const auto& port : ports)
|
||||||
|
{
|
||||||
|
boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::address::from_string(address, error), boost::lexical_cast<int>(port));
|
||||||
endpoints.push_back(endpoint);
|
endpoints.push_back(endpoint);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (use_protobuf)
|
if (use_protobuf)
|
||||||
{
|
{
|
||||||
|
@ -40,7 +40,10 @@ using b_io_context = boost::asio::io_service;
|
|||||||
class Monitor_Pvt_Udp_Sink
|
class Monitor_Pvt_Udp_Sink
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Monitor_Pvt_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t& port, bool protobuf_enabled);
|
Monitor_Pvt_Udp_Sink(
|
||||||
|
const std::vector<std::string>& addresses,
|
||||||
|
const std::vector<std::string>& ports,
|
||||||
|
bool protobuf_enabled);
|
||||||
bool write_monitor_pvt(const Monitor_Pvt* const monitor_pvt);
|
bool write_monitor_pvt(const Monitor_Pvt* const monitor_pvt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
std::string rtcm_output_file_path = std::string(".");
|
std::string rtcm_output_file_path = std::string(".");
|
||||||
std::string has_output_file_path = std::string(".");
|
std::string has_output_file_path = std::string(".");
|
||||||
std::string udp_addresses;
|
std::string udp_addresses;
|
||||||
|
std::string udp_ports;
|
||||||
std::string udp_eph_addresses;
|
std::string udp_eph_addresses;
|
||||||
std::string log_source_timetag_file;
|
std::string log_source_timetag_file;
|
||||||
|
|
||||||
@ -64,7 +65,6 @@ public:
|
|||||||
int32_t rinexobs_rate_ms = 0;
|
int32_t rinexobs_rate_ms = 0;
|
||||||
int32_t an_rate_ms = 20;
|
int32_t an_rate_ms = 20;
|
||||||
int32_t max_obs_block_rx_clock_offset_ms = 40;
|
int32_t max_obs_block_rx_clock_offset_ms = 40;
|
||||||
int udp_port = 0;
|
|
||||||
int udp_eph_port = 0;
|
int udp_eph_port = 0;
|
||||||
int rtk_trace_level = 0;
|
int rtk_trace_level = 0;
|
||||||
|
|
||||||
|
@ -226,13 +226,14 @@
|
|||||||
|
|
||||||
#endif // defined(CPU_FEATURES_ARCH_X86)
|
#endif // defined(CPU_FEATURES_ARCH_X86)
|
||||||
|
|
||||||
#if defined(CPU_FEATURES_ARCH_ANY_ARM)
|
// Note: MSVC targeting ARM does not define `__ARM_NEON` but Windows on ARM
|
||||||
#if defined(__ARM_NEON)
|
// requires it. In that case we force NEON detection.
|
||||||
|
#if defined(__ARM_NEON) || \
|
||||||
|
(defined(CPU_FEATURES_COMPILER_MSC) && defined(CPU_FEATURES_ARCH_ANY_ARM))
|
||||||
#define CPU_FEATURES_COMPILED_ANY_ARM_NEON 1
|
#define CPU_FEATURES_COMPILED_ANY_ARM_NEON 1
|
||||||
#else
|
#else
|
||||||
#define CPU_FEATURES_COMPILED_ANY_ARM_NEON 0
|
#define CPU_FEATURES_COMPILED_ANY_ARM_NEON 0
|
||||||
#endif // defined(__ARM_NEON)
|
#endif
|
||||||
#endif // defined(CPU_FEATURES_ARCH_ANY_ARM)
|
|
||||||
|
|
||||||
#if defined(CPU_FEATURES_ARCH_MIPS)
|
#if defined(CPU_FEATURES_ARCH_MIPS)
|
||||||
#if defined(__mips_msa)
|
#if defined(__mips_msa)
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#ifndef GNSS_SDR_FPGA_SPIDEV_H
|
#ifndef GNSS_SDR_FPGA_SPIDEV_H
|
||||||
#define GNSS_SDR_FPGA_SPIDEV_H
|
#define GNSS_SDR_FPGA_SPIDEV_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class Fpga_spidev
|
class Fpga_spidev
|
||||||
|
@ -26,21 +26,20 @@
|
|||||||
|
|
||||||
gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
||||||
int decimation_factor,
|
int decimation_factor,
|
||||||
int udp_port,
|
const std::vector<std::string>& udp_ports,
|
||||||
const std::vector<std::string>& udp_addresses,
|
const std::vector<std::string>& udp_addresses,
|
||||||
bool enable_protobuf)
|
bool enable_protobuf)
|
||||||
{
|
{
|
||||||
return gnss_synchro_monitor_sptr(new gnss_synchro_monitor(n_channels,
|
return gnss_synchro_monitor_sptr(new gnss_synchro_monitor(n_channels,
|
||||||
decimation_factor,
|
decimation_factor,
|
||||||
udp_port,
|
udp_ports,
|
||||||
udp_addresses,
|
udp_addresses,
|
||||||
enable_protobuf));
|
enable_protobuf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gnss_synchro_monitor::gnss_synchro_monitor(int n_channels,
|
gnss_synchro_monitor::gnss_synchro_monitor(int n_channels,
|
||||||
int decimation_factor,
|
int decimation_factor,
|
||||||
int udp_port,
|
const std::vector<std::string>& udp_ports,
|
||||||
const std::vector<std::string>& udp_addresses,
|
const std::vector<std::string>& udp_addresses,
|
||||||
bool enable_protobuf)
|
bool enable_protobuf)
|
||||||
: gr::block("gnss_synchro_monitor",
|
: gr::block("gnss_synchro_monitor",
|
||||||
@ -50,7 +49,7 @@ gnss_synchro_monitor::gnss_synchro_monitor(int n_channels,
|
|||||||
d_nchannels(n_channels),
|
d_nchannels(n_channels),
|
||||||
d_decimation_factor(decimation_factor)
|
d_decimation_factor(decimation_factor)
|
||||||
{
|
{
|
||||||
udp_sink_ptr = std::make_unique<Gnss_Synchro_Udp_Sink>(udp_addresses, udp_port, enable_protobuf);
|
udp_sink_ptr = std::make_unique<Gnss_Synchro_Udp_Sink>(udp_addresses, udp_ports, enable_protobuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ using gnss_synchro_monitor_sptr = gnss_shared_ptr<gnss_synchro_monitor>;
|
|||||||
|
|
||||||
gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
||||||
int decimation_factor,
|
int decimation_factor,
|
||||||
int udp_port,
|
const std::vector<std::string>& udp_ports,
|
||||||
const std::vector<std::string>& udp_addresses,
|
const std::vector<std::string>& udp_addresses,
|
||||||
bool enable_protobuf);
|
bool enable_protobuf);
|
||||||
|
|
||||||
@ -61,13 +61,13 @@ public:
|
|||||||
private:
|
private:
|
||||||
friend gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
friend gnss_synchro_monitor_sptr gnss_synchro_make_monitor(int n_channels,
|
||||||
int decimation_factor,
|
int decimation_factor,
|
||||||
int udp_port,
|
const std::vector<std::string>& udp_ports,
|
||||||
const std::vector<std::string>& udp_addresses,
|
const std::vector<std::string>& udp_addresses,
|
||||||
bool enable_protobuf);
|
bool enable_protobuf);
|
||||||
|
|
||||||
gnss_synchro_monitor(int n_channels,
|
gnss_synchro_monitor(int n_channels,
|
||||||
int decimation_factor,
|
int decimation_factor,
|
||||||
int udp_port,
|
const std::vector<std::string>& udp_ports,
|
||||||
const std::vector<std::string>& udp_addresses,
|
const std::vector<std::string>& udp_addresses,
|
||||||
bool enable_protobuf);
|
bool enable_protobuf);
|
||||||
|
|
||||||
|
@ -17,12 +17,14 @@
|
|||||||
|
|
||||||
#include "gnss_synchro_udp_sink.h"
|
#include "gnss_synchro_udp_sink.h"
|
||||||
#include <boost/archive/binary_oarchive.hpp>
|
#include <boost/archive/binary_oarchive.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/serialization/vector.hpp>
|
#include <boost/serialization/vector.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
Gnss_Synchro_Udp_Sink::Gnss_Synchro_Udp_Sink(const std::vector<std::string>& addresses,
|
Gnss_Synchro_Udp_Sink::Gnss_Synchro_Udp_Sink(
|
||||||
const uint16_t& port,
|
const std::vector<std::string>& addresses,
|
||||||
|
const std::vector<std::string>& ports,
|
||||||
bool enable_protobuf)
|
bool enable_protobuf)
|
||||||
: socket{io_context},
|
: socket{io_context},
|
||||||
use_protobuf(enable_protobuf)
|
use_protobuf(enable_protobuf)
|
||||||
@ -33,10 +35,15 @@ Gnss_Synchro_Udp_Sink::Gnss_Synchro_Udp_Sink(const std::vector<std::string>& add
|
|||||||
}
|
}
|
||||||
for (const auto& address : addresses)
|
for (const auto& address : addresses)
|
||||||
{
|
{
|
||||||
boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::address::from_string(address, error), port);
|
for (const auto& port : ports)
|
||||||
|
{
|
||||||
|
boost::asio::ip::udp::endpoint endpoint(
|
||||||
|
boost::asio::ip::address::from_string(address, error),
|
||||||
|
boost::lexical_cast<int>(port));
|
||||||
endpoints.push_back(endpoint);
|
endpoints.push_back(endpoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Gnss_Synchro_Udp_Sink::write_gnss_synchro(const std::vector<Gnss_Synchro>& stocks)
|
bool Gnss_Synchro_Udp_Sink::write_gnss_synchro(const std::vector<Gnss_Synchro>& stocks)
|
||||||
|
@ -45,7 +45,7 @@ using b_io_context = boost::asio::io_service;
|
|||||||
class Gnss_Synchro_Udp_Sink
|
class Gnss_Synchro_Udp_Sink
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Gnss_Synchro_Udp_Sink(const std::vector<std::string>& addresses, const uint16_t& port, bool enable_protobuf);
|
Gnss_Synchro_Udp_Sink(const std::vector<std::string>& addresses, const std::vector<std::string>& ports, bool enable_protobuf);
|
||||||
bool write_gnss_synchro(const std::vector<Gnss_Synchro>& stocks);
|
bool write_gnss_synchro(const std::vector<Gnss_Synchro>& stocks);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -237,11 +237,17 @@ void GNSSFlowgraph::init()
|
|||||||
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
||||||
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
||||||
|
|
||||||
|
std::string udp_port_string = configuration_->property("Monitor.udp_port", std::string("1234"));
|
||||||
|
std::vector<std::string> udp_port_vec = split_string(udp_port_string, '_');
|
||||||
|
std::sort(udp_port_vec.begin(), udp_port_vec.end());
|
||||||
|
udp_port_vec.erase(std::unique(udp_port_vec.begin(), udp_port_vec.end()), udp_port_vec.end());
|
||||||
|
|
||||||
// Instantiate monitor object
|
// Instantiate monitor object
|
||||||
GnssSynchroMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
GnssSynchroMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
||||||
configuration_->property("Monitor.decimation_factor", 1),
|
configuration_->property("Monitor.decimation_factor", 1),
|
||||||
configuration_->property("Monitor.udp_port", 1234),
|
udp_port_vec,
|
||||||
udp_addr_vec, enable_protobuf);
|
udp_addr_vec,
|
||||||
|
enable_protobuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -261,10 +267,16 @@ void GNSSFlowgraph::init()
|
|||||||
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
||||||
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
||||||
|
|
||||||
|
std::string udp_port_string = configuration_->property("AcquisitionMonitor.udp_port", std::string("1235"));
|
||||||
|
std::vector<std::string> udp_port_vec = split_string(udp_port_string, '_');
|
||||||
|
std::sort(udp_port_vec.begin(), udp_port_vec.end());
|
||||||
|
udp_port_vec.erase(std::unique(udp_port_vec.begin(), udp_port_vec.end()), udp_port_vec.end());
|
||||||
|
|
||||||
GnssSynchroAcquisitionMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
GnssSynchroAcquisitionMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
||||||
configuration_->property("AcquisitionMonitor.decimation_factor", 1),
|
configuration_->property("AcquisitionMonitor.decimation_factor", 1),
|
||||||
configuration_->property("AcquisitionMonitor.udp_port", 1235),
|
udp_port_vec,
|
||||||
udp_addr_vec, enable_protobuf);
|
udp_addr_vec,
|
||||||
|
enable_protobuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -284,10 +296,16 @@ void GNSSFlowgraph::init()
|
|||||||
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
std::sort(udp_addr_vec.begin(), udp_addr_vec.end());
|
||||||
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
udp_addr_vec.erase(std::unique(udp_addr_vec.begin(), udp_addr_vec.end()), udp_addr_vec.end());
|
||||||
|
|
||||||
|
std::string udp_port_string = configuration_->property("TrackingMonitor.udp_port", std::string("1236"));
|
||||||
|
std::vector<std::string> udp_port_vec = split_string(udp_port_string, '_');
|
||||||
|
std::sort(udp_port_vec.begin(), udp_port_vec.end());
|
||||||
|
udp_port_vec.erase(std::unique(udp_port_vec.begin(), udp_port_vec.end()), udp_port_vec.end());
|
||||||
|
|
||||||
GnssSynchroTrackingMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
GnssSynchroTrackingMonitor_ = gnss_synchro_make_monitor(channels_count_,
|
||||||
configuration_->property("TrackingMonitor.decimation_factor", 1),
|
configuration_->property("TrackingMonitor.decimation_factor", 1),
|
||||||
configuration_->property("TrackingMonitor.udp_port", 1236),
|
udp_port_vec,
|
||||||
udp_addr_vec, enable_protobuf);
|
udp_addr_vec,
|
||||||
|
enable_protobuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -158,10 +158,10 @@ const std::unordered_map<std::string, uint16_t> OSNMA_TABLE_15 = {
|
|||||||
{std::string("ECDSA P-256"), 512},
|
{std::string("ECDSA P-256"), 512},
|
||||||
{std::string("ECDSA P-521"), 1056}}; // key: ECDSA Curve and hash function, value: {l_ds_bits}
|
{std::string("ECDSA P-521"), 1056}}; // key: ECDSA Curve and hash function, value: {l_ds_bits}
|
||||||
|
|
||||||
const std::string PEMFILE_DEFAULT("./data/OSNMA_PublicKey.pem");
|
const std::string PEMFILE_DEFAULT("./OSNMA_PublicKey.pem");
|
||||||
const std::string CRTFILE_DEFAULT("./data/OSNMA_PublicKey_20240115100000_newPKID_1.crt");
|
const std::string CRTFILE_DEFAULT("./OSNMA_PublicKey_20240115100000_newPKID_1.crt");
|
||||||
const std::string MERKLEFILE_DEFAULT("./data/OSNMA_MerkleTree_20240115100000_newPKID_1.xml");
|
const std::string MERKLEFILE_DEFAULT("./OSNMA_MerkleTree_20240115100000_newPKID_1.xml");
|
||||||
const std::string KROOTFILE_DEFAULT("./data/OSNMA_DSM_KROOT_NMAHeader.bin");
|
const std::string KROOTFILE_DEFAULT("./OSNMA_DSM_KROOT_NMAHeader.bin");
|
||||||
|
|
||||||
class Mack_lookup
|
class Mack_lookup
|
||||||
{
|
{
|
||||||
|
@ -39,3 +39,19 @@ target_include_directories(navmsg_lib
|
|||||||
add_executable(nav_msg_listener ${NAVLISTENER_SOURCE_DIR}/main.cc)
|
add_executable(nav_msg_listener ${NAVLISTENER_SOURCE_DIR}/main.cc)
|
||||||
|
|
||||||
target_link_libraries(nav_msg_listener PUBLIC navmsg_lib)
|
target_link_libraries(nav_msg_listener PUBLIC navmsg_lib)
|
||||||
|
|
||||||
|
install(TARGETS nav_msg_listener
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
COMPONENT "nav_msg_listener"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT TARGET uninstall)
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||||
|
IMMEDIATE @ONLY
|
||||||
|
)
|
||||||
|
add_custom_target(uninstall
|
||||||
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
@ -27,6 +27,18 @@ $ cmake ..
|
|||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optionally, you can install it:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
and uninstall it later with:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo make uninstall
|
||||||
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
In order to tell GNSS-SDR to generate those messages, you need to include the
|
In order to tell GNSS-SDR to generate those messages, you need to include the
|
||||||
|
35
src/utils/nav-listener/cmake/cmake_uninstall.cmake.in
Normal file
35
src/utils/nav-listener/cmake/cmake_uninstall.cmake.in
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||||
|
# This file is part of GNSS-SDR.
|
||||||
|
#
|
||||||
|
# SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
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}")
|
||||||
|
if(CMAKE_VERSION VERSION_LESS 3.17)
|
||||||
|
execute_process(
|
||||||
|
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RESULT_VARIABLE rm_retval
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
execute_process(
|
||||||
|
COMMAND @CMAKE_COMMAND@ -E rm "$ENV{DESTDIR}${file}"
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RESULT_VARIABLE rm_retval
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
Loading…
x
Reference in New Issue
Block a user