[hamradio-commits] [gnss-sdr] 118/126: Integrating the RTCM printer

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sat Dec 26 18:38:08 UTC 2015


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

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

commit 286ee3b56107caeb9ea44ee9ca1a9b7403fd8830
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Fri Dec 25 10:25:22 2015 +0100

    Integrating the RTCM printer
    
    Now the Galileo E1 receiver generates RTCM messages 1045 (ephemeris) and
    MSM7 / 1097 (observables). Parameters related to RTCM included in conf
    files. The TCP/IP server can be activated by setting flag_rtcm_server to
    true.
---
 conf/gnss-sdr.conf                                 | 22 +++++--
 conf/gnss-sdr_GPS_L1_GN3S_realtime.conf            | 13 ++--
 conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf       |  3 +
 conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf   |  5 +-
 conf/gnss-sdr_GPS_L1_USRP_realtime.conf            |  6 +-
 conf/gnss-sdr_GPS_L1_acq_QuickSync.conf            | 39 ++++++-----
 conf/gnss-sdr_GPS_L1_gr_complex.conf               |  3 +
 conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf           | 29 +++++----
 conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf     | 37 ++++++-----
 conf/gnss-sdr_GPS_L1_nsr.conf                      |  3 +
 conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf        |  3 +
 conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf         |  6 +-
 conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf          | 10 +--
 conf/gnss-sdr_GPS_L1_two_bits_cpx.conf             |  4 +-
 conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf          |  3 +
 conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf      |  3 +
 conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf   |  6 ++
 conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf        | 53 ++++++++++-----
 conf/gnss-sdr_Galileo_E1_nsr.conf                  | 11 +++-
 conf/gnss-sdr_Galileo_E1_short.conf                | 54 ++++++++++-----
 conf/gnss-sdr_Galileo_E5a.conf                     |  7 +-
 conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf           |  9 ++-
 conf/gnss-sdr_Hybrid_byte.conf                     | 46 +++++++------
 conf/gnss-sdr_Hybrid_byte_sim.conf                 | 46 +++++++------
 conf/gnss-sdr_Hybrid_nsr.conf                      | 54 ++++++++-------
 conf/gnss-sdr_Hybrid_short.conf                    | 46 +++++++------
 ...tichannel_GPS_L1_Flexiband_bin_file_III_1a.conf | 43 ++++++------
 ...tichannel_GPS_L1_Flexiband_realtime_III_1a.conf | 45 +++++++------
 ...tichannel_GPS_L1_Flexiband_realtime_III_1b.conf | 45 +++++++------
 ...ltichannel_GPS_L1_Flexiband_realtime_II_3b.conf | 43 ++++++------
 ...ultichannel_GPS_L1_Flexiband_realtime_I_1b.conf | 45 +++++++------
 ...hannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf | 50 +++++++-------
 ...1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf | 59 +++++++++--------
 ...sdr_multichannel_GPS_L1_USRP_X300_realtime.conf | 65 +++++++++---------
 ...channel_GPS_L2_M_Flexiband_bin_file_III_1a.conf | 53 ++++++++-------
 ...channel_GPS_L2_M_Flexiband_bin_file_III_1b.conf | 61 ++++++++---------
 conf/gnss-sdr_multisource_Hybrid_nsr.conf          | 76 ++++++++++++----------
 conf/gnss-sdr_multisource_Hybrid_short.conf        | 66 ++++++++++---------
 .../PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc       | 36 ++++++++++
 .../PVT/gnuradio_blocks/galileo_e1_pvt_cc.h        |  1 +
 src/algorithms/PVT/libs/rtcm_printer.cc            | 52 +++++++++++++++
 src/algorithms/PVT/libs/rtcm_printer.h             | 12 ++++
 42 files changed, 773 insertions(+), 500 deletions(-)

diff --git a/conf/gnss-sdr.conf b/conf/gnss-sdr.conf
index 639b506..1664c8b 100644
--- a/conf/gnss-sdr.conf
+++ b/conf/gnss-sdr.conf
@@ -203,13 +203,13 @@ Channel.signal=1C
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -217,7 +217,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.005
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.0001
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -235,10 +235,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -290,7 +290,7 @@ PVT.output_rate_ms=10
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# KML, GeoJSON and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
 PVT.dump_filename=./PVT
@@ -298,12 +298,20 @@ PVT.dump_filename=./PVT
 ;#nmea_dump_filename: NMEA log path and filename
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 
-;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
+;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
 PVT.flag_nmea_tty_port=true;
 
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
+PVT.flag_rtcm_server=false;
+
+;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_rtcm_tty_port=false;
+
+;#rtcm_dump_devname: serial device descriptor for RTCM logging
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf b/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
index 703c87f..b5f2c8c 100644
--- a/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf
@@ -6,17 +6,17 @@
 
 ;######### GLOBAL OPTIONS ##################
 ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=2727933.33  ;  8183800/3 
+GNSS-SDR.internal_fs_hz=2727933.33  ;  8183800/3
 
 ;######### CONTROL_THREAD CONFIG ############
 ControlThread.wait_for_flowgraph=false
 
 ;######### SIGNAL_SOURCE CONFIG ############
 ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
-;#Notes for GN3S source: 
+;#Notes for GN3S source:
 ; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz).
 ; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block
-GNSS-SDR.internal_fs_hz=2727933.33  ; 8183800/3 
+GNSS-SDR.internal_fs_hz=2727933.33  ; 8183800/3
 
 ;######### SIGNAL_SOURCE CONFIG ############
 SignalSource.implementation=GN3S_Signal_Source
@@ -81,7 +81,7 @@ Acquisition_1C.doppler_step=500
 ;######### TRACKING GLOBAL CONFIG ############
 Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 Tracking_1C.item_type=gr_complex
-Tracking_1C.if=0 
+Tracking_1C.if=0
 Tracking_1C.dump=false
 Tracking_1C.dump_filename=../data/epl_tracking_ch_
 Tracking_1C.pll_bw_hz=45.0;
@@ -109,7 +109,10 @@ PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
 PVT.dump=false
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;######### OUTPUT_FILTER CONFIG ############
 OutputFilter.implementation=Null_Sink_Output_Filter
-OutputFilter.item_type=gr_complex
\ No newline at end of file
+OutputFilter.item_type=gr_complex
diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
index 1b021da..dfac848 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf
@@ -376,6 +376,9 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
index 322ecbd..da410de 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
@@ -377,7 +377,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -391,6 +391,9 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_USRP_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
index bd7c607..d52ce19 100644
--- a/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_USRP_realtime.conf
@@ -361,7 +361,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -375,6 +375,10 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf b/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
index 6b18c6d..cdf9de6 100644
--- a/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
+++ b/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf
@@ -20,16 +20,16 @@ SignalSource.implementation=File_Signal_Source
 SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
 
 
-;#item_type: Type and resolution for each of the signal samples. 
+;#item_type: Type and resolution for each of the signal samples.
 ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer.
 ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
 
 SignalSource.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -45,12 +45,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -84,7 +84,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -126,7 +126,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -142,7 +142,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -199,13 +199,13 @@ Channel4.repeat_satellite=false
 
 ;######### ACQUISITION GLOBAL CONFIG ############_1C
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=true
 ;#filename: Log path and filename
 ;Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent-integration_time_ms=4
@@ -221,7 +221,7 @@ Acquisition_1C.threshold=0.4
 Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
-;#repeat_satellite: Use only jointly with the satellte PRN ID option. 
+;#repeat_satellite: Use only jointly with the satellte PRN ID option.
 
 
 ;######### TRACKING GLOBAL CONFIG ############
@@ -231,10 +231,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -264,7 +264,7 @@ TelemetryDecoder_1C.dump=false
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -278,7 +278,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -287,12 +287,19 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
+PVT.flag_nmea_tty_port=true
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex.conf b/conf/gnss-sdr_GPS_L1_gr_complex.conf
index b1b15d5..ed63788 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex.conf
@@ -77,6 +77,9 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
index 98359bc..0b1f831 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf
@@ -22,10 +22,10 @@ SignalSource.filename=/home/javier/ClionProjects/gnss-sim/build/signal_out.bin
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -41,12 +41,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -77,7 +77,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -118,7 +118,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -134,7 +134,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -191,13 +191,13 @@ Channel.signal=1C
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_GPS.dump=false
 ;#filename: Log path and filename
 Acquisition_GPS.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_GPS.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_GPS.sampled_ms=1
@@ -205,7 +205,7 @@ Acquisition_GPS.sampled_ms=1
 Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_GPS.threshold=0.01
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_GPS.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_GPS.doppler_max=6000
@@ -219,10 +219,10 @@ Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_GPS.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_GPS.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_GPS.dump=true
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -274,7 +274,7 @@ PVT.output_rate_ms=10
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -288,6 +288,9 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf b/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf
index 884f668..6462bc4 100644
--- a/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf
+++ b/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf
@@ -22,10 +22,10 @@ SignalSource.filename=../data/agilent_cap2.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=gr_complex
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -41,12 +41,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -77,7 +77,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -118,7 +118,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -134,7 +134,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -162,19 +162,19 @@ _1C
 Channels_1C.count=8
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel.signal=1C
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -182,7 +182,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.008
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -197,10 +197,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -232,7 +232,7 @@ TelemetryDecoder_1C.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -246,7 +246,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=100
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -255,7 +255,7 @@ PVT.output_rate_ms=10
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -269,8 +269,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=true
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_GPS_L1_nsr.conf b/conf/gnss-sdr_GPS_L1_nsr.conf
index 9520764..ef1457f 100644
--- a/conf/gnss-sdr_GPS_L1_nsr.conf
+++ b/conf/gnss-sdr_GPS_L1_nsr.conf
@@ -130,6 +130,9 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=true
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf b/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
index 007cc56..c3087fe 100644
--- a/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
+++ b/conf/gnss-sdr_GPS_L1_nsr_twobit_packed.conf
@@ -145,6 +145,9 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=true
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
index c7a929d..a9f6200 100644
--- a/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf
@@ -272,7 +272,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -286,6 +286,10 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=true
diff --git a/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf b/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
index b4ddde3..296e542 100644
--- a/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
+++ b/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf
@@ -40,7 +40,7 @@ SignalSource.AGC_enabled = false
 SignalSource.samples=0
 SignalSource.repeat=false
 SignalSource.dump=false
-SignalSource.dump_filename=../data/signal_source.dat 
+SignalSource.dump_filename=../data/signal_source.dat
 SignalSource.enable_throttle_control=false
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
@@ -76,7 +76,7 @@ InputFilter.sampling_frequency=1999898
 InputFilter.IF=80558 ; IF deviation due to front-end LO inaccuracies [Hz]
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 ;# DISABLED IN THE RTL-SDR REALTIME
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -133,7 +133,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 PVT.output_rate_ms=100
 PVT.display_rate_ms=500
@@ -142,9 +142,11 @@ PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
 PVT.dump=false
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.item_type=gr_complex
-
diff --git a/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf b/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
index a90433c..8a638f5 100644
--- a/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
+++ b/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf
@@ -129,9 +129,11 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.item_type=gr_complex
-
diff --git a/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf b/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
index 438f9f4..a312d3c 100644
--- a/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
+++ b/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf
@@ -199,6 +199,9 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
index 13414a0..ff0f0bd 100644
--- a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
@@ -156,6 +156,9 @@ PVT.dump_filename=./PVT
 PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
 PVT.flag_nmea_tty_port=false;
 PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
index d4a3189..055962e 100644
--- a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf
@@ -77,6 +77,12 @@ PVT.output_rate_ms=100;
 PVT.display_rate_ms=500;
 PVT.dump=false
 PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
+PVT.flag_nmea_tty_port=true
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;######### OUTPUT_FILTER CONFIG ############
 OutputFilter.implementation=Null_Sink_Output_Filter
diff --git a/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf b/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
index bb7733a..eb6b80a 100644
--- a/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
+++ b/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf
@@ -19,16 +19,16 @@ SignalSource.implementation=File_Signal_Source
 SignalSource.filename=./datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
 
 
-;#item_type: Type and resolution for each of the signal samples. 
+;#item_type: Type and resolution for each of the signal samples.
 ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer.
 ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
 
 SignalSource.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -43,12 +43,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -82,7 +82,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -132,7 +132,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -148,7 +148,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -180,13 +180,13 @@ Channel.signal=1B
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.coherent_integration_time_ms=4
@@ -211,10 +211,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=true
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -247,7 +247,7 @@ TelemetryDecoder_1B.dump=false
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Galileo_E1B_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -261,7 +261,7 @@ PVT.implementation=GALILEO_E1_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=100
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -270,12 +270,35 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
+;# KML, GeoJSON, NMEA and RTCM output configuration
+
+;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
+PVT.dump_filename=./PVT
+
+;#nmea_dump_filename: NMEA log path and filename
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+
+;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_nmea_tty_port=true;
+
+;#nmea_dump_devname: serial device descriptor for NMEA logging
+PVT.nmea_dump_devname=/dev/pts/4
+
+;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
+PVT.flag_rtcm_server=false;
+
+;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_rtcm_tty_port=false;
+
+;#rtcm_dump_devname: serial device descriptor for RTCM logging
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
diff --git a/conf/gnss-sdr_Galileo_E1_nsr.conf b/conf/gnss-sdr_Galileo_E1_nsr.conf
index c9b3572..73a7bb1 100644
--- a/conf/gnss-sdr_Galileo_E1_nsr.conf
+++ b/conf/gnss-sdr_Galileo_E1_nsr.conf
@@ -27,12 +27,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 SignalConditioner.implementation=Signal_Conditioner
 
@@ -122,8 +122,13 @@ PVT.output_rate_ms=100
 PVT.display_rate_ms=500
 PVT.dump=true
 PVT.dump_filename=./PVT
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
+PVT.flag_nmea_tty_port=true
+PVT.nmea_dump_devname=/dev/pts/4
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;######### OUTPUT_FILTER CONFIG ############
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.item_type=gr_complex
-
diff --git a/conf/gnss-sdr_Galileo_E1_short.conf b/conf/gnss-sdr_Galileo_E1_short.conf
index e7400c4..d162139 100644
--- a/conf/gnss-sdr_Galileo_E1_short.conf
+++ b/conf/gnss-sdr_Galileo_E1_short.conf
@@ -21,10 +21,10 @@ SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SP
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -40,12 +40,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -75,7 +75,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -116,7 +116,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -132,7 +132,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -164,13 +164,13 @@ Channel.signal=1B
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -178,7 +178,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.000002
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -195,7 +195,7 @@ Acquisition_1B.doppler_step=125
 ;Acquisition_1B2.repeat_satellite = true
 ;Acquisition_1B3.repeat_satellite = true
 
-;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. 
+;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
 ;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000
 Acquisition_1B.cboc=false
 
@@ -208,10 +208,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -245,7 +245,7 @@ TelemetryDecoder_1B.dump=false
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Galileo_E1B_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -259,7 +259,7 @@ PVT.implementation=GALILEO_E1_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=100
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -268,12 +268,32 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
-;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
+;# KML, GeoJSON, NMEA and RTCM output configuration
+
+;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
 PVT.dump_filename=./PVT
 
+;#nmea_dump_filename: NMEA log path and filename
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
+
+;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_nmea_tty_port=true;
+
+;#nmea_dump_devname: serial device descriptor for NMEA logging
+PVT.nmea_dump_devname=/dev/pts/4
+
+;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
+PVT.flag_rtcm_server=false;
+
+;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
+PVT.flag_rtcm_tty_port=false;
+
+;#rtcm_dump_devname: serial device descriptor for RTCM logging
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
diff --git a/conf/gnss-sdr_Galileo_E5a.conf b/conf/gnss-sdr_Galileo_E5a.conf
index d7f0458..6fb9078 100644
--- a/conf/gnss-sdr_Galileo_E5a.conf
+++ b/conf/gnss-sdr_Galileo_E5a.conf
@@ -323,8 +323,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
-
+;# KML, GeoJSON, NMEA and RTCM output configuration
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
@@ -337,6 +336,10 @@ PVT.flag_nmea_tty_port=true;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 
 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
diff --git a/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf b/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
index 6698384..89be9e4 100644
--- a/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
+++ b/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf
@@ -145,11 +145,14 @@ PVT.implementation=GALILEO_E1_PVT
 PVT.averaging_depth=100
 PVT.flag_averaging=true
 PVT.output_rate_ms=100
+PVT.dump=false
 PVT.dump_filename=./PVT
-PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
-PVT.flag_nmea_tty_port=true;
+PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
+PVT.flag_nmea_tty_port=true
 PVT.nmea_dump_devname=/dev/pts/4
-PVT.dump=false
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
diff --git a/conf/gnss-sdr_Hybrid_byte.conf b/conf/gnss-sdr_Hybrid_byte.conf
index 2eedc6c..3f3e793 100644
--- a/conf/gnss-sdr_Hybrid_byte.conf
+++ b/conf/gnss-sdr_Hybrid_byte.conf
@@ -22,10 +22,10 @@ SignalSource.filename=/Users/javier/signals/fraunhofer/L125_III1b_210s_L1.bin
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=20000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -41,12 +41,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -76,7 +76,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -117,7 +117,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,7 +133,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -164,7 +164,7 @@ Channels_1B.count=8
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel1.signal=1C
 Channel2.signal=1C
@@ -185,13 +185,13 @@ Channel15.signal=1B
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -199,7 +199,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.0060
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -209,13 +209,13 @@ Acquisition_1C.doppler_step=500
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -223,7 +223,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000008
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -237,10 +237,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -265,10 +265,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -310,7 +310,7 @@ TelemetryDecoder_1B.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Hybrid_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -324,7 +324,7 @@ PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -333,9 +333,13 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
diff --git a/conf/gnss-sdr_Hybrid_byte_sim.conf b/conf/gnss-sdr_Hybrid_byte_sim.conf
index aa4d546..7ab2662 100644
--- a/conf/gnss-sdr_Hybrid_byte_sim.conf
+++ b/conf/gnss-sdr_Hybrid_byte_sim.conf
@@ -22,10 +22,10 @@ SignalSource.filename=/home/javier/ClionProjects/gnss-sim/build/signal_out.bin
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -41,12 +41,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -76,7 +76,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -117,7 +117,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,7 +133,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -164,7 +164,7 @@ Channels_1B.count=0
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel1.signal=1C
 Channel2.signal=1C
@@ -185,13 +185,13 @@ Channel15.signal=1B
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -199,7 +199,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.045
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=6000
@@ -209,13 +209,13 @@ Acquisition_1C.doppler_step=100
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -223,7 +223,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000008
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -237,10 +237,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=true
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -265,10 +265,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -310,7 +310,7 @@ TelemetryDecoder_1B.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=true
 
 ;#dump_filename: Log path and filename.
@@ -324,7 +324,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -333,9 +333,13 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
diff --git a/conf/gnss-sdr_Hybrid_nsr.conf b/conf/gnss-sdr_Hybrid_nsr.conf
index 91a9eb1..f58d543 100644
--- a/conf/gnss-sdr_Hybrid_nsr.conf
+++ b/conf/gnss-sdr_Hybrid_nsr.conf
@@ -24,10 +24,10 @@ SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=20480000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -43,12 +43,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -65,7 +65,7 @@ DataTypeAdapter.item_type=float
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation 
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
 ;# that shifts IF down to zero Hz.
 
 InputFilter.implementation=Freq_Xlating_Fir_Filter
@@ -76,10 +76,10 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse 
-;#reponse given a set of band edges, the desired reponse on those bands, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
 ;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -119,7 +119,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -139,7 +139,7 @@ InputFilter.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -154,11 +154,11 @@ Channels_1B.count=8
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
-;# "5X" GALILEO E5a I+Q 
+;# "5X" GALILEO E5a I+Q
 
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
@@ -181,13 +181,13 @@ Channel15.signal=1B
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -195,7 +195,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -205,13 +205,13 @@ Acquisition_1C.doppler_step=500
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -219,7 +219,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000002
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -233,10 +233,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -261,10 +261,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -306,7 +306,7 @@ TelemetryDecoder_1B_factor=4;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Hybrid_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -320,7 +320,7 @@ PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -329,9 +329,13 @@ PVT.output_rate_ms=10;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
diff --git a/conf/gnss-sdr_Hybrid_short.conf b/conf/gnss-sdr_Hybrid_short.conf
index 69ff84d..b6a2332 100644
--- a/conf/gnss-sdr_Hybrid_short.conf
+++ b/conf/gnss-sdr_Hybrid_short.conf
@@ -36,10 +36,10 @@ SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SP
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq=1575420000
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
@@ -55,12 +55,12 @@ SignalSource.dump_filename=../data/signal_source.dat
 
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 
 ;######### SIGNAL_CONDITIONER CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -90,7 +90,7 @@ InputFilter.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -131,7 +131,7 @@ InputFilter.ampl2_end=0.0
 InputFilter.band1_error=1.0
 InputFilter.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -147,7 +147,7 @@ InputFilter.IF=0
 
 
 ;######### RESAMPLER CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -178,7 +178,7 @@ Channels_1B.count=3
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -196,13 +196,13 @@ Channel5.signal=1C
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -210,7 +210,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -220,13 +220,13 @@ Acquisition_1C.doppler_step=500
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -234,7 +234,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000008
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -248,10 +248,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -276,10 +276,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -321,7 +321,7 @@ TelemetryDecoder_1B.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Hybrid_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -335,7 +335,7 @@ PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -344,9 +344,13 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
index 3e835d2..6e9f1d2 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf
@@ -52,7 +52,7 @@ SignalSource.AGC=true
 SignalSource.usb_packet_buffer=128
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -75,9 +75,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -117,7 +117,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -136,11 +136,11 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -163,11 +163,11 @@ InputFilter1.input_item_type=gr_complex
 InputFilter1.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -190,7 +190,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -214,23 +214,23 @@ Channel5.RF_channel_ID=0
 Channel6.RF_channel_ID=0
 Channel7.RF_channel_ID=0
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel.signal=1C
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_GPS.dump=false
 ;#filename: Log path and filename
 Acquisition_GPS.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_GPS.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_GPS.coherent_integration_time_ms=1
@@ -245,7 +245,7 @@ Acquisition_GPS.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_GPS.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_GPS.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -263,10 +263,10 @@ Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_GPS.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_GPS.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_GPS.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -298,7 +298,7 @@ TelemetryDecoder_GPS.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -312,7 +312,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -321,7 +321,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -335,8 +335,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
index 8324fae..94b34d5 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf
@@ -49,7 +49,7 @@ SignalSource.AGC=true
 SignalSource.usb_packet_buffer=128
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -72,9 +72,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -114,7 +114,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,11 +133,11 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -160,11 +160,11 @@ InputFilter1.input_item_type=gr_complex
 InputFilter1.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -187,7 +187,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -198,7 +198,7 @@ Channels_1C.count=8
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -214,7 +214,7 @@ Channel5.RF_channel_ID=0
 Channel6.RF_channel_ID=0
 Channel7.RF_channel_ID=0
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -227,18 +227,18 @@ Channel7.signal=1C
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -253,7 +253,7 @@ Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -271,10 +271,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -306,7 +306,7 @@ TelemetryDecoder_1C.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -320,7 +320,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -329,7 +329,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -343,8 +343,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
index eff9ec2..d71f588 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf
@@ -49,7 +49,7 @@ SignalSource.AGC=true
 SignalSource.usb_packet_buffer=128
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -72,9 +72,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -114,7 +114,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,11 +133,11 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -160,11 +160,11 @@ InputFilter1.input_item_type=gr_complex
 InputFilter1.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -187,7 +187,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -197,7 +197,7 @@ Channels_1C.count=8
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -213,7 +213,7 @@ Channel5.RF_channel_ID=0
 Channel6.RF_channel_ID=0
 Channel7.RF_channel_ID=0
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -225,18 +225,18 @@ Channel6.signal=1C
 Channel7.signal=1C
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -251,7 +251,7 @@ Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -269,10 +269,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -304,7 +304,7 @@ TelemetryDecoder_1C.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -318,7 +318,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -327,7 +327,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -341,8 +341,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
index eb9ff14..2b787f2 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf
@@ -49,7 +49,7 @@ SignalSource.AGC=true
 SignalSource.usb_packet_buffer=128
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -72,9 +72,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -114,7 +114,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,11 +133,11 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=16
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -160,11 +160,11 @@ InputFilter1.input_item_type=gr_complex
 InputFilter1.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -187,7 +187,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -213,7 +213,7 @@ Channel5.RF_channel_ID=0
 Channel6.RF_channel_ID=0
 Channel7.RF_channel_ID=0
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -226,18 +226,18 @@ Channel7.signal=1C
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_GPS.dump=false
 ;#filename: Log path and filename
 Acquisition_GPS.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_GPS.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_GPS.coherent_integration_time_ms=1
@@ -252,7 +252,7 @@ Acquisition_GPS.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_GPS.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_GPS.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -270,10 +270,10 @@ Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_GPS.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_GPS.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_GPS.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -305,7 +305,7 @@ TelemetryDecoder_GPS.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -319,7 +319,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -328,7 +328,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -342,8 +342,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
index fa3d096..39f2cec 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf
@@ -49,7 +49,7 @@ SignalSource.AGC=true
 SignalSource.usb_packet_buffer=128
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -72,9 +72,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -114,7 +114,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -133,11 +133,11 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -160,11 +160,11 @@ InputFilter1.input_item_type=gr_complex
 InputFilter1.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -187,7 +187,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -197,7 +197,7 @@ Channels_1C.count=4
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -213,7 +213,7 @@ Channel3.RF_channel_ID=0
 ;Channel6.RF_channel_ID=0
 ;Channel7.RF_channel_ID=0
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -221,18 +221,18 @@ Channel2.signal=1C
 Channel3.signal=1C
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -247,7 +247,7 @@ Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -265,10 +265,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -300,7 +300,7 @@ TelemetryDecoder_1C.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -314,7 +314,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -323,7 +323,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -337,8 +337,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
index e7ca792..36859a7 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf
@@ -53,7 +53,7 @@ SignalSource.usb_packet_buffer=128
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -76,9 +76,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -118,7 +118,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -139,7 +139,7 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######################################################
@@ -147,7 +147,7 @@ Resampler0.implementation=Pass_Through
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -170,9 +170,9 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter_ch1.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -212,7 +212,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -234,11 +234,11 @@ InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -261,7 +261,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -274,7 +274,7 @@ Channels_2S.count=8
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -357,16 +357,16 @@ Channel15.signal=2S
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -381,7 +381,7 @@ Acquisition_1C.doppler_max=5000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -413,7 +413,7 @@ Acquisition_2S.dump_filename=./acq_dump.dat
 Acquisition_2S.item_type=gr_complex
 Acquisition_2S.if=0
 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S.threshold=0.0005  
+Acquisition_2S.threshold=0.0005
 ;Acquisition_2S.pfa=0.001
 Acquisition_2S.doppler_max=5000
 Acquisition_2S.doppler_min=-5000
@@ -449,7 +449,7 @@ TelemetryDecoder_2S.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -463,7 +463,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -472,7 +472,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -486,12 +486,16 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.filename=data/gnss-sdr.dat
-OutputFilter.item_type=gr_complex
\ No newline at end of file
+OutputFilter.item_type=gr_complex
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
index 019c0ab..bf3bb57 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf
@@ -57,7 +57,7 @@ SignalSource.usb_packet_buffer=128
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -80,9 +80,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -122,7 +122,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -143,7 +143,7 @@ InputFilter0.IF=0
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######################################################
@@ -151,7 +151,7 @@ Resampler0.implementation=Pass_Through
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -174,9 +174,9 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter_ch1.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -216,7 +216,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -238,11 +238,11 @@ InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -265,7 +265,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -279,7 +279,7 @@ Channels_2S.count=1
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -339,16 +339,16 @@ Channel16.RF_channel_ID=1
 Channel16.signal=2S
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -363,7 +363,7 @@ Acquisition_1C.doppler_max=5000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -395,7 +395,7 @@ Acquisition_2S.dump_filename=./acq_dump.dat
 Acquisition_2S.item_type=gr_complex
 Acquisition_2S.if=0
 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S.threshold=0.0005  
+Acquisition_2S.threshold=0.0005
 ;Acquisition_2S.pfa=0.001
 Acquisition_2S.doppler_max=5000
 Acquisition_2S.doppler_min=-5000
@@ -417,13 +417,13 @@ Tracking_2S.early_late_space_chips=0.5;
 ;# GALILEO E1B
 
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -431,7 +431,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000005
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=5000
@@ -443,10 +443,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -496,7 +496,7 @@ TelemetryDecoder_1B.decimation_factor=5;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Mixed_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -510,7 +510,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -519,7 +519,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -533,12 +533,15 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.filename=data/gnss-sdr.dat
-OutputFilter.item_type=gr_complex
\ No newline at end of file
+OutputFilter.item_type=gr_complex
diff --git a/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
index e040c75..49f36b4 100644
--- a/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf
@@ -37,7 +37,7 @@ SignalSource.item_type=gr_complex
 ;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends)
 SignalSource.RF_channels=2
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource.sampling_frequency=4000000
 
 ;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0)
@@ -46,10 +46,10 @@ SignalSource.subdevice=A:0 B:0
 ;######### RF Channels specific settings ######
 
 ;## RF CHANNEL 0 ##
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq0=1575420000
 
-;#gain: Front-end Gain in [dB] 
+;#gain: Front-end Gain in [dB]
 SignalSource.gain0=50
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit
@@ -61,10 +61,10 @@ SignalSource.dump0=false
 SignalSource.dump_filename0=../data/signal_source0.dat
 
 ;## RF CHANNEL 1 ##
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource.freq1=1575420000
 
-;#gain: Front-end Gain in [dB] 
+;#gain: Front-end Gain in [dB]
 SignalSource.gain1=50
 
 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit
@@ -77,7 +77,7 @@ SignalSource.dump_filename1=../data/signal_source1.dat
 
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -94,7 +94,7 @@ DataTypeAdapter0.item_type=gr_complex
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation 
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
 ;# that shifts IF down to zero Hz.
 
 InputFilter0.implementation=Pass_Through
@@ -105,10 +105,10 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse 
-;#reponse given a set of band edges, the desired reponse on those bands, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
 ;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -148,7 +148,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -167,7 +167,7 @@ InputFilter0.IF=5499998.47412109
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -175,7 +175,7 @@ InputFilter0.decimation_factor=8
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -186,7 +186,7 @@ SignalConditioner1.implementation=Pass_Through
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation 
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
 ;# that shifts IF down to zero Hz.
 
 InputFilter1.implementation=Pass_Through
@@ -197,10 +197,10 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse 
-;#reponse given a set of band edges, the desired reponse on those bands, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
 ;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -240,7 +240,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -260,7 +260,7 @@ InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -274,7 +274,7 @@ Channels_1C.count=4
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -287,7 +287,7 @@ Channel2.RF_channel_ID=0
 Channel3.RF_channel_ID=1
 
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -295,18 +295,18 @@ Channel2.signal=1C
 Channel3.signal=1C
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -321,7 +321,7 @@ Acquisition_1C.doppler_max=8000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=500
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -339,10 +339,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -374,7 +374,7 @@ TelemetryDecoder_1C.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -388,7 +388,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -397,7 +397,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -411,8 +411,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
index debff1a..a2edd7b 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
@@ -57,7 +57,7 @@ SignalSource.usb_packet_buffer=128
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -80,9 +80,9 @@ InputFilter0.dump=true
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter_ch0.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -122,7 +122,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -142,7 +142,7 @@ InputFilter0.IF=0
 InputFilter0.decimation_factor=4
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######################################################
@@ -150,7 +150,7 @@ Resampler0.implementation=Pass_Through
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -173,9 +173,9 @@ InputFilter1.dump=true
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter_ch1.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -215,7 +215,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -235,11 +235,11 @@ InputFilter1.decimation_factor=4
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -262,7 +262,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 
@@ -296,19 +296,19 @@ Channel1.signal=2S
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C0.dump=false
 ;#filename: Log path and filename
 Acquisition_1C0.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C0.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C0.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C0.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: 
+;#implementation: Acquisition algorithm selection for this channel:
 Acquisition_1C0.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
 Acquisition_1C0.threshold=0.002
@@ -319,23 +319,23 @@ Acquisition_1C0.doppler_max=5000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C0.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C0.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
 Acquisition_1C0.max_dwells=1
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_2S1.dump=false
 ;#filename: Log path and filename
 Acquisition_2S1.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_2S1.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_2S1.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_2S1.coherent_integration_time_ms=1
-;#implementation: Acquisition algorithm selection for this channel: 
+;#implementation: Acquisition algorithm selection for this channel:
 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition
 ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
 Acquisition_2S1.threshold=0.0005
@@ -346,7 +346,7 @@ Acquisition_2S1.doppler_max=5000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_2S1.doppler_step=100
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_2S1.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -397,7 +397,7 @@ TelemetryDecoder_2S1.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -411,7 +411,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -420,7 +420,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -434,8 +434,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
index 598a958..a2943a6 100644
--- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf
@@ -57,7 +57,7 @@ SignalSource.usb_packet_buffer=128
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner0.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 0 CONFIG ############
@@ -80,9 +80,9 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -122,7 +122,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -143,7 +143,7 @@ InputFilter0.IF=-205000
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler0.implementation=Pass_Through
 
 ;######################################################
@@ -151,7 +151,7 @@ Resampler0.implementation=Pass_Through
 ;######################################################
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner1.implementation=Signal_Conditioner
 
 ;######### DATA_TYPE_ADAPTER 1 CONFIG ############
@@ -174,9 +174,9 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter_ch1.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
 ;#the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -216,7 +216,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -236,11 +236,11 @@ InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler1.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 2 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 SignalConditioner2.implementation=Pass_Through
 
 ;######### DATA_TYPE_ADAPTER 2 CONFIG ############
@@ -263,7 +263,7 @@ InputFilter2.input_item_type=gr_complex
 InputFilter2.output_item_type=gr_complex
 
 ;######### RESAMPLER CONFIG 2 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 Resampler2.implementation=Pass_Through
 
 ;######### CHANNELS GLOBAL CONFIG ############
@@ -276,7 +276,7 @@ Channels_2S.count=1
 Channels.in_acquisition=1
 
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -335,17 +335,17 @@ Channel15.signal=2S
 
 
 ;######### SPECIFIC CHANNELS CONFIG ######
-;#The following options are specific to each channel and overwrite the generic options 
+;#The following options are specific to each channel and overwrite the generic options
 
 ;######### ACQUISITION GLOBAL CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.coherent_integration_time_ms=1
@@ -360,7 +360,7 @@ Acquisition_1C.doppler_max=10000
 ;#doppler_max: Doppler step in the grid search [Hz]
 Acquisition_1C.doppler_step=250
 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
-;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] 
+;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
 ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
 Acquisition_1C.bit_transition_flag=false
 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
@@ -376,7 +376,7 @@ Acquisition_2S1.dump_filename=./acq_dump.dat
 Acquisition_2S1.item_type=gr_complex
 Acquisition_2S1.if=0
 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S1.threshold=0.0001  
+Acquisition_2S1.threshold=0.0001
 ;Acquisition_2S1.pfa=0.001
 Acquisition_2S1.doppler_max=5000
 Acquisition_2S1.doppler_min=-5000
@@ -388,7 +388,7 @@ Acquisition_2S2.dump_filename=./acq_dump.dat
 Acquisition_2S2.item_type=gr_complex
 Acquisition_2S2.if=0
 Acquisition_2S2.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S2.threshold=0.0003 
+Acquisition_2S2.threshold=0.0003
 ;Acquisition_2S2.pfa=0.001
 Acquisition_2S2.doppler_max=5000
 Acquisition_2S2.doppler_min=-5000
@@ -400,7 +400,7 @@ Acquisition_2S3.dump_filename=./acq_dump.dat
 Acquisition_2S3.item_type=gr_complex
 Acquisition_2S3.if=0
 Acquisition_2S3.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S3.threshold=0.0003 
+Acquisition_2S3.threshold=0.0003
 ;Acquisition_2S3.pfa=0.001
 Acquisition_2S3.doppler_max=5000
 Acquisition_2S3.doppler_min=-5000
@@ -412,7 +412,7 @@ Acquisition_2S4.dump_filename=./acq_dump.dat
 Acquisition_2S4.item_type=gr_complex
 Acquisition_2S4.if=0
 Acquisition_2S4.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S4.threshold=0.0003 
+Acquisition_2S4.threshold=0.0003
 ;Acquisition_2S4.pfa=0.001
 Acquisition_2S4.doppler_max=5000
 Acquisition_2S4.doppler_min=-5000
@@ -424,7 +424,7 @@ Acquisition_2S5.dump_filename=./acq_dump.dat
 Acquisition_2S5.item_type=gr_complex
 Acquisition_2S5.if=0
 Acquisition_2S5.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S5.threshold=0.0003 
+Acquisition_2S5.threshold=0.0003
 ;Acquisition_2S5.pfa=0.001
 Acquisition_2S5.doppler_max=5000
 Acquisition_2S5.doppler_min=-5000
@@ -436,7 +436,7 @@ Acquisition_2S6.dump_filename=./acq_dump.dat
 Acquisition_2S6.item_type=gr_complex
 Acquisition_2S6.if=0
 Acquisition_2S6.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S6.threshold=0.0003 
+Acquisition_2S6.threshold=0.0003
 ;Acquisition_2S6.pfa=0.001
 Acquisition_2S6.doppler_max=5000
 Acquisition_2S6.doppler_min=-5000
@@ -475,10 +475,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -611,7 +611,7 @@ TelemetryDecoder_2S.decimation_factor=1;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables
 Observables.implementation=GPS_L1_CA_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -625,7 +625,7 @@ PVT.implementation=GPS_L1_CA_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=true
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -634,7 +634,7 @@ PVT.output_rate_ms=100
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500
 
-;# RINEX, KML, and NMEA output configuration
+;# KML, GeoJSON, NMEA and RTCM output configuration
 
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
@@ -648,8 +648,11 @@ PVT.flag_nmea_tty_port=false;
 ;#nmea_dump_devname: serial device descriptor for NMEA logging
 PVT.nmea_dump_devname=/dev/pts/4
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
 ;######### OUTPUT_FILTER CONFIG ############
diff --git a/conf/gnss-sdr_multisource_Hybrid_nsr.conf b/conf/gnss-sdr_multisource_Hybrid_nsr.conf
index fff399a..404a70d 100644
--- a/conf/gnss-sdr_multisource_Hybrid_nsr.conf
+++ b/conf/gnss-sdr_multisource_Hybrid_nsr.conf
@@ -3,7 +3,7 @@
 ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
 ;
 
-[GNSS-SDR] 
+[GNSS-SDR]
 
 Receiver.sources_count=2
 
@@ -15,7 +15,7 @@ GNSS-SDR.internal_fs_hz=2560000
 ;GNSS-SDR.internal_fs_hz=5120000
 
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 ;#repeat: Repeat the processing file. Disable this option in this version
@@ -34,10 +34,10 @@ SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource0.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource0.sampling_frequency=20480000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource0.freq=1575420000
 
 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
@@ -61,10 +61,10 @@ SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource1.item_type=byte
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource1.sampling_frequency=20480000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource1.freq=1575420000
 
 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
@@ -80,7 +80,7 @@ SignalSource1.dump_filename=../data/signal_source.dat
 
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -97,7 +97,7 @@ DataTypeAdapter0.item_type=float
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation 
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
 ;# that shifts IF down to zero Hz.
 
 InputFilter0.implementation=Freq_Xlating_Fir_Filter
@@ -108,10 +108,10 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse 
-;#reponse given a set of band edges, the desired reponse on those bands, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
 ;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -151,7 +151,7 @@ InputFilter0.ampl2_end=0.0
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -170,7 +170,7 @@ InputFilter0.IF=5499998.47412109
 InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -178,7 +178,7 @@ InputFilter0.decimation_factor=8
 Resampler0.implementation=Pass_Through
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -195,7 +195,7 @@ DataTypeAdapter1.item_type=float
 ;## Filter the input data. Can be combined with frequency translation for IF signals
 
 ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
-;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation 
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
 ;# that shifts IF down to zero Hz.
 
 InputFilter1.implementation=Freq_Xlating_Fir_Filter
@@ -206,10 +206,10 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
-;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse 
-;#reponse given a set of band edges, the desired reponse on those bands, 
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
+;#reponse given a set of band edges, the desired reponse on those bands,
 ;#and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
@@ -249,7 +249,7 @@ InputFilter1.ampl2_end=0.0
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -269,7 +269,7 @@ InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -284,7 +284,7 @@ Channels_1B.count=8
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
-;#signal: 
+;#signal:
 ;# "1C" GPS L1 C/A
 ;# "2S" GPS L2 L2C (M)
 ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
@@ -309,7 +309,7 @@ Channel13.RF_channel_ID=1
 Channel14.RF_channel_ID=1
 Channel15.RF_channel_ID=1
 
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel0.signal=1C
 Channel1.signal=1C
@@ -331,13 +331,13 @@ Channel15.signal=1B
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1C.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1C.sampled_ms=1
@@ -345,7 +345,7 @@ Acquisition_1C.sampled_ms=1
 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_1C.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_1C.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1C.doppler_max=10000
@@ -355,13 +355,13 @@ Acquisition_1C.doppler_step=500
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_1B.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_1B.sampled_ms=4
@@ -369,7 +369,7 @@ Acquisition_1B.sampled_ms=4
 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_1B.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_1B.pfa=0.0000002
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_1B.doppler_max=15000
@@ -383,10 +383,10 @@ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1C.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -411,10 +411,10 @@ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_1B.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_1B.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -457,7 +457,7 @@ TelemetryDecoder_1B.decimation_factor=4;
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Hybrid_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -471,7 +471,7 @@ PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -480,9 +480,13 @@ PVT.output_rate_ms=10;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=true
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
@@ -490,4 +494,4 @@ PVT.dump_filename=./PVT
 ;# Receiver output filter: Leave this block disabled in this version
 OutputFilter.implementation=Null_Sink_Output_Filter
 OutputFilter.filename=data/gnss-sdr.dat
-OutputFilter.item_type=gr_complex
\ No newline at end of file
+OutputFilter.item_type=gr_complex
diff --git a/conf/gnss-sdr_multisource_Hybrid_short.conf b/conf/gnss-sdr_multisource_Hybrid_short.conf
index a0199b9..5c5a1d7 100644
--- a/conf/gnss-sdr_multisource_Hybrid_short.conf
+++ b/conf/gnss-sdr_multisource_Hybrid_short.conf
@@ -10,7 +10,7 @@
 GNSS-SDR.internal_fs_hz=4000000
 Receiver.sources_count=2
 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
-; it helps to not overload the CPU, but the processing time will be longer. 
+; it helps to not overload the CPU, but the processing time will be longer.
 SignalSource.enable_throttle_control=false
 
 ;#repeat: Repeat the processing file. Disable this option in this version
@@ -30,13 +30,13 @@ SignalSource0.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource0.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource0.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource0.freq=1575420000
 
-;#gain: Front-end Gain in [dB] 
+;#gain: Front-end Gain in [dB]
 SignalSource0.gain=60
 
 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
@@ -61,13 +61,13 @@ SignalSource1.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 SignalSource1.item_type=short
 
-;#sampling_frequency: Original Signal sampling frequency in [Hz] 
+;#sampling_frequency: Original Signal sampling frequency in [Hz]
 SignalSource1.sampling_frequency=4000000
 
-;#freq: RF front-end center frequency in [Hz] 
+;#freq: RF front-end center frequency in [Hz]
 SignalSource1.freq=1575420000
 
-;#gain: Front-end Gain in [dB] 
+;#gain: Front-end Gain in [dB]
 SignalSource1.gain=60
 
 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
@@ -83,7 +83,7 @@ SignalSource1.dump_filename=../data/signal_source.dat
 
 
 ;######### SIGNAL_CONDITIONER 0 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -111,7 +111,7 @@ InputFilter0.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter0.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -151,8 +151,8 @@ InputFilter0.ampl2_end=0.0
 ;#The number of band_error elements must match the number of bands
 InputFilter0.band1_error=1.0
 InputFilter0.band2_error=1.0
- 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter0.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -166,7 +166,7 @@ InputFilter0.sampling_frequency=4000000
 InputFilter0.IF=0
 
 ;######### RESAMPLER 1 CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -189,7 +189,7 @@ Resampler1.sample_freq_in=4000000
 Resampler1.sample_freq_out=4000000
 
 ;######### SIGNAL_CONDITIONER 1 CONFIG ############
-;## It holds blocks to change data type, filter and resample input data. 
+;## It holds blocks to change data type, filter and resample input data.
 
 ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
 ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
@@ -217,7 +217,7 @@ InputFilter1.dump=false
 ;#dump_filename: Log path and filename.
 InputFilter1.dump_filename=../data/input_filter.dat
 
-;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. 
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
 ;#These options are based on parameters of gnuradio's function: gr_remez.
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
@@ -257,8 +257,8 @@ InputFilter1.ampl2_end=0.0
 ;#The number of band_error elements must match the number of bands
 InputFilter1.band1_error=1.0
 InputFilter1.band2_error=1.0
- 
-;#filter_type: one of "bandpass", "hilbert" or "differentiator" 
+
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
 InputFilter1.filter_type=bandpass
 
 ;#grid_density: determines how accurately the filter will be constructed.
@@ -272,7 +272,7 @@ InputFilter1.sampling_frequency=4000000
 InputFilter1.IF=0
 
 ;######### RESAMPLER 1 CONFIG ############
-;## Resamples the input data. 
+;## Resamples the input data.
 
 ;#implementation: Use [Pass_Through] or [Direct_Resampler]
 ;#[Pass_Through] disables this block
@@ -311,20 +311,20 @@ Channel0.RF_channel_ID=0
 Channel1.RF_channel_ID=0
 Channel2.RF_channel_ID=1
 Channel3.RF_channel_ID=1
-;#signal: 
+;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel.signal=1B
 
 
 ;######### GPS ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_GPS.dump=false
 ;#filename: Log path and filename
 Acquisition_GPS.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_GPS.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_GPS.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_GPS.sampled_ms=1
@@ -332,7 +332,7 @@ Acquisition_GPS.sampled_ms=1
 Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
 ;#threshold: Acquisition threshold
 Acquisition_GPS.threshold=0.0075
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 ;Acquisition_GPS.pfa=0.01
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_GPS.doppler_max=10000
@@ -342,13 +342,13 @@ Acquisition_GPS.doppler_step=500
 
 ;######### GALILEO ACQUISITION CONFIG ############
 
-;#dump: Enable or disable the acquisition internal data file logging [true] or [false] 
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
 Acquisition_Galileo.dump=false
 ;#filename: Log path and filename
 Acquisition_Galileo.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
 Acquisition_Galileo.item_type=gr_complex
-;#if: Signal intermediate frequency in [Hz] 
+;#if: Signal intermediate frequency in [Hz]
 Acquisition_Galileo.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
 Acquisition_Galileo.sampled_ms=4
@@ -356,7 +356,7 @@ Acquisition_Galileo.sampled_ms=4
 Acquisition_Galileo.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
 ;#threshold: Acquisition threshold
 ;Acquisition_Galileo.threshold=0
-;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] 
+;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
 Acquisition_Galileo.pfa=0.0000008
 ;#doppler_max: Maximum expected Doppler shift [Hz]
 Acquisition_Galileo.doppler_max=15000
@@ -370,10 +370,10 @@ Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_GPS.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_GPS.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_GPS.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -398,10 +398,10 @@ Tracking_Galileo.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
 Tracking_Galileo.item_type=gr_complex
 
-;#sampling_frequency: Signal Intermediate Frequency in [Hz] 
+;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_Galileo.if=0
 
-;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
 Tracking_Galileo.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
@@ -443,7 +443,7 @@ TelemetryDecoder_Galileo.dump=false
 ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
 Observables.implementation=Hybrid_Observables
 
-;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
 Observables.dump=false
 
 ;#dump_filename: Log path and filename.
@@ -457,7 +457,7 @@ PVT.implementation=Hybrid_PVT
 ;#averaging_depth: Number of PVT observations in the moving average algorithm
 PVT.averaging_depth=10
 
-;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] 
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
 PVT.flag_averaging=false
 
 ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
@@ -466,9 +466,13 @@ PVT.output_rate_ms=100;
 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
 PVT.display_rate_ms=500;
 
-;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] 
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
 PVT.dump=false
 
+PVT.flag_rtcm_server=false
+PVT.flag_rtcm_tty_port=false
+PVT.rtcm_dump_devname=/dev/pts/1
+
 ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
 PVT.dump_filename=./PVT
 
diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
index ad33f39..e29b5dd 100644
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
@@ -104,6 +104,7 @@ galileo_e1_pvt_cc::galileo_e1_pvt_cc(unsigned int nchannels, boost::shared_ptr<g
 
     b_rinex_header_writen = false;
     b_rinex_header_updated = false;
+    b_rtcm_writing_started = false;
     rp = std::make_shared<Rinex_Printer>();
 
     // ############# ENABLE DATA FILE LOG #################
@@ -270,6 +271,41 @@ int galileo_e1_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_it
                                             b_rinex_header_updated = true;
                                         }
                                 }
+
+                            if(b_rtcm_writing_started)
+                                {
+                                    if((d_sample_counter % (1000 / 4) ) == 0) // every second
+                                        {
+                                            std::map<int, Galileo_Ephemeris>::iterator gal_ephemeris_iter;
+                                            gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
+                                            if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
+                                                {
+                                                    d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map, 1234, 0, 0, 0, false, false );
+                                                    // gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more messages
+                                                }
+                                        }
+                                    if((d_sample_counter % (120000 / 4)) == 0) // every 2 minutes
+                                        {
+                                            std::map<int, Galileo_Ephemeris>::iterator gal_ephemeris_iter;
+                                            gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
+                                            if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
+                                                {
+                                                    d_rtcm_printer->Print_Rtcm_MT1045(gal_ephemeris_iter->second);
+                                                }
+                                        }
+                                }
+
+                            if(!b_rtcm_writing_started) // the first time
+                                {
+                                    std::map<int,Galileo_Ephemeris>::iterator gal_ephemeris_iter;
+                                    gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin();
+                                    if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
+                                        {
+                                            d_rtcm_printer->Print_Rtcm_MT1045(gal_ephemeris_iter->second);
+                                            d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map, 1234, 0, 0, 0, false, false );
+                                        }
+                                    b_rtcm_writing_started = true;
+                                }
                         }
                 }
 
diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
index 3eb07f3..074ebb0 100644
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
+++ b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h
@@ -107,6 +107,7 @@ private:
     bool d_dump;
     bool b_rinex_header_writen;
     bool b_rinex_header_updated;
+    bool b_rtcm_writing_started;
     std::shared_ptr<Rinex_Printer> rp;
     unsigned int d_nchannels;
     std::string d_dump_filename;
diff --git a/src/algorithms/PVT/libs/rtcm_printer.cc b/src/algorithms/PVT/libs/rtcm_printer.cc
index 5279e4f..6eec2d3 100644
--- a/src/algorithms/PVT/libs/rtcm_printer.cc
+++ b/src/algorithms/PVT/libs/rtcm_printer.cc
@@ -173,6 +173,58 @@ bool Rtcm_Printer::Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph)
 }
 
 
+bool Rtcm_Printer::Print_Rtcm_MSM(unsigned int msm_number, const Gps_Ephemeris & gps_eph,
+        const Gps_CNAV_Ephemeris & gps_cnav_eph,
+        const Galileo_Ephemeris & gal_eph,
+        double obs_time,
+        const std::map<int, Gnss_Synchro> & pseudoranges,
+        unsigned int ref_id,
+        unsigned int clock_steering_indicator,
+        unsigned int external_clock_indicator,
+        int smooth_int,
+        bool divergence_free,
+        bool more_messages)
+{
+    std::string msm;
+    if(msm_number == 1)
+        {
+            std::string msm = rtcm->print_MSM_1(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 2)
+        {
+            std::string msm = rtcm->print_MSM_2(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 3)
+        {
+            std::string msm = rtcm->print_MSM_3(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 4)
+        {
+            std::string msm = rtcm->print_MSM_4(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 5)
+        {
+            std::string msm = rtcm->print_MSM_5(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 6)
+        {
+            std::string msm = rtcm->print_MSM_6(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else if(msm_number == 7)
+        {
+            std::string msm = rtcm->print_MSM_7(gps_eph, gps_cnav_eph, gal_eph, obs_time, pseudoranges, ref_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
+        }
+    else
+        {
+            return false;
+        }
+
+
+    Rtcm_Printer::Print_Message(msm7);
+    return true;
+}
+
+
 int Rtcm_Printer::init_serial(std::string serial_device)
 {
     /*
diff --git a/src/algorithms/PVT/libs/rtcm_printer.h b/src/algorithms/PVT/libs/rtcm_printer.h
index 13a8974..6236a31 100644
--- a/src/algorithms/PVT/libs/rtcm_printer.h
+++ b/src/algorithms/PVT/libs/rtcm_printer.h
@@ -60,6 +60,18 @@ public:
     bool Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph); //<! GPS Ephemeris, should be broadcast in the event that the IODC does not match the IODE, and every 2 minutes.
     bool Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph); //<! Galileo Ephemeris, should be broadcast every 2 minutes
 
+    bool Print_Rtcm_MSM(int msm_number, const Gps_Ephemeris & gps_eph,
+            const Gps_CNAV_Ephemeris & gps_cnav_eph,
+            const Galileo_Ephemeris & gal_eph,
+            double obs_time,
+            const std::map<int, Gnss_Synchro> & pseudoranges,
+            unsigned int ref_id,
+            unsigned int clock_steering_indicator,
+            unsigned int external_clock_indicator,
+            int smooth_int,
+            bool divergence_free,
+            bool more_messages);
+
     std::string print_MT1005_test(); //<!  For testing purposes
 
 private:

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



More information about the pkg-hamradio-commits mailing list