Changeset 10753 in ntrip


Ignore:
Timestamp:
Sep 2, 2025, 1:03:59 PM (4 weeks ago)
Author:
stuerze
Message:

NtripSever functionallity added

Location:
trunk/BNC
Files:
11 added
8 deleted
31 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/Example_Configs/00_Readme.txt

    r9969 r10753  
    220220with an update rate of 5 seconds.
    221221
    222 20. Configuration File 'CompareSp3.bnc'
     22220. Configuration File 'UploadRaw.bnc'
     223Purpose: Forward the stream contents of the incoming stream BCEP00BKG0
     224from products.igs-ip.net to another caster.
     225
     22621. Configuration File 'CompareSp3.bnc'
    223227Purpose: Compare two SP3 files to calculate RMS values for orbit and clock
    224228differences. GPS satellite G05 and GLONASS satellite R18 are excluded from this
    225229comparison. Comparison results are saved in a logfile.
    226230
    227 21. Configuration File 'Empty.bnc'
     23122. Configuration File 'Empty.bnc'
    228232Purpose: Provide an empty example configuration file for BNC which only
    229233contains the default settings.
     
    237241The scripts expect 'Example_Configs' to be the current working directory.
    238242
    239 22. Shell Script 'RinexQC.sh'
     24323. Shell Script 'RinexQC.sh'
    240244Purpose: Equals configuration file example 'RinexQC.bnc', checks the quality of
    241245a RINEX Version 4 file by means of a multipath analysis. The platform offscreen
     
    243247All results are saved on disk.
    244248
    245 23. Shell Script 'RinexConcat.sh'
     24924. Shell Script 'RinexConcat.sh'
    246250Purpose: Equals configuration file example 'RinexConcat.bnc', concatenates
    247251several RINEX Version 3 files to produce one compiled file and edit the marker
     
    249253offline.
    250254
    251 24. Shell Script 'RinexEph.sh'
     25525. Shell Script 'RinexEph.sh'
    252256Purpose: Equals configuration file example 'RinexEph.bnc', converts a RTCM
    253257stream with navigation messages to RINEX Navigation files. The configuration
     
    258262Ephemeris resources.
    259263
    260 25. Shell Script 'ScanLate.sh'
     26426. Shell Script 'ScanLate.sh'
    261265Purpose: Scan an observation stream for contained RTCM message types, print
    262266observation latencies. The output is saved in a logfile. Latencies are
     
    264268seconds.
    265269
    266 26. Shell Script 'RinexObs.sh'
     27027. Shell Script 'RinexObs.sh'
    267271Purpose: Equals configuration file example 'RinexObs.bnc', converts RTCM
    268272streams to RINEX Observation files. The configuration pulls streams from two
     
    280284always overrule options contained in the configuration file.
    281285
    282 27. Shell Script 'CompareSp3.sh'
     28628. Shell Script 'CompareSp3.sh'
    283287Purpose: Equals configuration file example 'CompareSp3.bnc', compares two SP3
    284288files to calculate RMS values for orbit and clock differences. However, instead
     
    288292in a logfile.
    289293
    290 Andrea Stuerze, BKG
    291 Frankfurt, September 2022
    292 igs-ip@bkg.bund.de
    293 
  • trunk/BNC/Example_Configs/01_RinexObs.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131132uploadSamplClkRnx=5
  • trunk/BNC/Example_Configs/02_RinexEph.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/03_BrdcCorr.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
    134135uploadSamplSp3=30 sec
     136
    135137[PPP]
    136138antexFile=
  • trunk/BNC/Example_Configs/04_RinexConcat.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/05_RinexQC.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/06_RTK.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/07_FeedEngine.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/08_PPP.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/09_PPPNet.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/10_PPPQuickStart.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/11_PPPPostProc.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
    134135uploadSamplSp3=30 sec
     136
    135137[PPP]
    136138antexFile=Input/igs20.atx
  • trunk/BNC/Example_Configs/12_PPPOsm.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/13_PPPGalHAS.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/14_SaveSp3.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=",,,2,,,IGS20,RTCM-SSR,2,Output/BKG0MGXRTS${V3PROD}.SP3,Output/BKG0MGXRTS${V3PROD}.CLK,,,,,0 byte(s),"
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/15_Sp3ETRFPPP.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=",,,2,,,ETRF2000,IGS-SSR,2,Output/BKG0MGXRTS${V3PROD}.SP3,Output/BKG0MGXRTS${V3PROD}.CLK,,,,,0 byte(s),"
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/Example_Configs/16_Upload.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut="products.igs-ip.net,2101,CLOCK,2,user,pass,IGS20,IGS-SSR,0,Output/BKG0MGXRTS${V3PROD}.SP3,Output/BKG0MGXRTS${V3PROD}.CLK,Output/BKG0MGXRTS${V3PROD}.BIA,,,,0 byte(s),"
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=0 sec
  • trunk/BNC/Example_Configs/17_Combi.bnc

    r10663 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut="products.igs-ip.net,2101,SSRA02IGS1_T,2,,,IGS20,IGS-SSR,2,Output/BKG0MGXRTS${V3PROD}.SP3,Output/BKG0MGXRTS${V3PROD}.CLK,Output/BKG0MGXRTS${V3PROD}.BIA,,,,0 byte(s),"
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131132uploadSamplClkRnx=5
  • trunk/BNC/Example_Configs/18_CombiPPP.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut="products.igs-ip.net,2101,SSRA02IGS1_T,2,,,IGS20,IGS-SSR,2,Output/BKG0MGXRTS${V3PROD}.SP3,Output/BKG0MGXRTS${V3PROD}.CLK,Output/BKG0MGXRTS${V3PROD}.BIA,,,,0 byte(s),"
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=0 sec
  • trunk/BNC/Example_Configs/19_UploadEph.bnc

    r10668 r10753  
    128128uploadIntr=1 day
    129129uploadMountpointsOut=
     130uploadRawMountpointsOut=
    130131uploadSamplBiaSnx=5
    131 uploadSamplClkRnx5
     132uploadSamplClkRnx=0
    132133uploadSamplRtcmEph=5
    133134uploadSamplRtcmEphCorr=5 sec
  • trunk/BNC/src/bnccaster.cpp

    r10696 r10753  
    7171  reopenOutFile();
    7272
     73  // FeedEngine output port
     74  // ----------------------
    7375  int port = settings.value("outPort").toInt();
    74 
    7576  if (port != 0) {
    7677    _server = new QTcpServer;
     
    136137    _miscSockets = 0;
    137138  }
     139
     140  // RawUploadCaster
     141  _bncRawUploadCaster = new bncRawUploadCaster();
     142
    138143}
    139144
     
    162167  delete _miscServer;
    163168  delete _miscSockets;
     169  delete _bncRawUploadCaster;
    164170}
    165171
     
    281287  connect(getThread, SIGNAL(newRawData(QByteArray, QByteArray)),
    282288          this,      SLOT(slotNewRawData(QByteArray, QByteArray)));
     289
     290  connect(getThread, SIGNAL(newRawData(QByteArray, QByteArray)),
     291          _bncRawUploadCaster, SLOT(slotNewRawData(QByteArray, QByteArray)));
    283292
    284293  connect(getThread, SIGNAL(getThreadFinished(QByteArray)),
  • trunk/BNC/src/bnccaster.h

    r9107 r10753  
    3333
    3434#include "satObs.h"
     35#include "upload/bncrawuploadcaster.h"
    3536
    3637class bncGetThread;
     
    8889   QTcpServer*                     _miscServer;
    8990   QList<QTcpSocket*>*             _miscSockets;
     91   bncRawUploadCaster*             _bncRawUploadCaster;
    9092   QMap<std::string, QMap<t_prn, double> > _lockTimeMap;
    9193   QMap<std::string, QMap<t_prn, int> >    _jumpCounterMap;
  • trunk/BNC/src/bnccore.h

    r10465 r10753  
    7373  QMap<int, bncTableItem*> _uploadTableItems;
    7474  QMap<int, bncTableItem*> _uploadEphTableItems;
     75  QMap<int, bncTableItem*> _uploadRawTableItems;
    7576
    7677 public slots:
  • trunk/BNC/src/bncgetthread.cpp

    r10696 r10753  
    344344    _decoder = new bncRtnetDecoder();
    345345  } else {
    346     emit(newMessage(_staID + ": Unknown data format " + _format, true));
     346    emit(newMessage(_staID + ": Unknown data format " + _format + ". Please change the format entry to ZERO or ZERO2FILE to forward unchanged data.", true));
    347347    _isToBeDeleted = true;
    348348    return failure;
  • trunk/BNC/src/bnchelp.html

    r10694 r10753  
    247247&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.16.3 <a href=#brdcsys>Satellite System </a><br>
    248248&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.16.4 <a href=#brdcsmpl>Sampling</a><br>
    249 &nbsp; &nbsp; &nbsp; 2.17 <a href=#streams><b>Streams Canvas</b></a><br>
    250 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.1 <a href=#streamedit>Edit Streams</a><br>
    251 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.2 <a href=#streamdelete>Delete Stream</a><br>
    252 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.3 <a href=#streamconf>Reconfigure Stream Selection On-the-fly</a><br>
    253 &nbsp; &nbsp; &nbsp; 2.18 <a href=#logs><b>Logging Canvas</b></a><br>
    254 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.1 <a href=#logfile>Log</a><br>
    255 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.2 <a href=#throughput>Throughput</a><br>
    256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.3 <a href=#latency>Latency</a><br>
    257 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.4 <a href=#ppptab>PPP Plot</a><br>
    258 &nbsp; &nbsp; &nbsp; 2.19 <a href=#bottom><b>Bottom Menu Bar</b></a><br>
    259 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1 <a href=#streamadd>Add Stream</a><br>
    260 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1 <a href=#streamcaster>Add Stream - Coming from Caster</a><br>
    261 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.1 <a href=#streamhost>Caster Host and Port</a><br>
    262 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.2 <a href=#streamtable>Casters Table</a><br>
    263 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.3 <a href=#streamuser>User and Password</a><br>
    264 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.4 <a href=#gettable>Get Table</a><br>
    265 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.5 <a href=#ntripv>Ntrip Version</a><br>
    266 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.1.6 <a href=#castermap>Map</a><br>
    267 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.2 <a href=#streamip>Add Stream - Coming from TCP/IP Port</a><br>
    268 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.3 <a href=#streamudp>Add Stream - Coming from UDP Port</a><br>
    269 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1.4 <a href=#streamser>Add Stream - Coming from Serial Port</a><br>
    270 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.2 <a href=#streamsdelete>Delete Stream</a><br>
    271 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.3 <a href=#streamsmap>Map</a><br>
    272 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.4 <a href=#start>Start</a><br>
    273 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.5 <a href=#stop>Stop</a><br>
    274 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.6 <a href=#contexthelp>Help? = Shift+F1</a><br>
    275 &nbsp; &nbsp; &nbsp; 2.20 <a href=#cmd><b>Command Line Options</b></a><br>
    276 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1 <a href=#cmdVersion>Version</a><br>
    277 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.2 <a href=#cmdDisplay>Display</a><br>
    278 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.3 <a href=#nw>No Window Mode</a><br>
    279 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.4 <a href=#post>File Mode</a><br>
    280 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.5 <a href=#conffile>Configuration File</a><br>
    281 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.6 <a href=#confopt>Configuration Options</a><br><br>
     249&nbsp; &nbsp; &nbsp; 2.17 <a href=#upraw><b>Upload Raw Data - NtripServer Functionality</b></a><br>
     250&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.1 <a href=#rawsourcemount>Source Mountpoint</a><br>
     251&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.2 <a href=#rawserver>Host &amp; Port</a><br>
     252&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.17.3 <a href=#rawmount>Upload Mountpoint, Ntrip Version, User, Password</a><br>
     253&nbsp; &nbsp; &nbsp; 2.18 <a href=#streams><b>Streams Canvas</b></a><br>
     254&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.1 <a href=#streamedit>Edit Streams</a><br>
     255&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.2 <a href=#streamdelete>Delete Stream</a><br>
     256&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.18.3 <a href=#streamconf>Reconfigure Stream Selection On-the-fly</a><br>
     257&nbsp; &nbsp; &nbsp; 2.19 <a href=#logs><b>Logging Canvas</b></a><br>
     258&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.1 <a href=#logfile>Log</a><br>
     259&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.2 <a href=#throughput>Throughput</a><br>
     260&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.3 <a href=#latency>Latency</a><br>
     261&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.19.4 <a href=#ppptab>PPP Plot</a><br>
     262&nbsp; &nbsp; &nbsp; 2.20 <a href=#bottom><b>Bottom Menu Bar</b></a><br>
     263&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1 <a href=#streamadd>Add Stream</a><br>
     264&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1 <a href=#streamcaster>Add Stream - Coming from Caster</a><br>
     265&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.1 <a href=#streamhost>Caster Host and Port</a><br>
     266&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.2 <a href=#streamtable>Casters Table</a><br>
     267&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.3 <a href=#streamuser>User and Password</a><br>
     268&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.4 <a href=#gettable>Get Table</a><br>
     269&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.5 <a href=#ntripv>Ntrip Version</a><br>
     270&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.1.6 <a href=#castermap>Map</a><br>
     271&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.2 <a href=#streamip>Add Stream - Coming from TCP/IP Port</a><br>
     272&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.3 <a href=#streamudp>Add Stream - Coming from UDP Port</a><br>
     273&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.1.4 <a href=#streamser>Add Stream - Coming from Serial Port</a><br>
     274&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.2 <a href=#streamsdelete>Delete Stream</a><br>
     275&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.3 <a href=#streamsmap>Map</a><br>
     276&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.4 <a href=#start>Start</a><br>
     277&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.5 <a href=#stop>Stop</a><br>
     278&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.20.6 <a href=#contexthelp>Help? = Shift+F1</a><br>
     279&nbsp; &nbsp; &nbsp; 2.21 <a href=#cmd><b>Command Line Options</b></a><br>
     280&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.1 <a href=#cmdVersion>Version</a><br>
     281&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.2 <a href=#cmdDisplay>Display</a><br>
     282&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.3 <a href=#nw>No Window Mode</a><br>
     283&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.4 <a href=#post>File Mode</a><br>
     284&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.5 <a href=#conffile>Configuration File</a><br>
     285&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.21.6 <a href=#confopt>Configuration Options</a><br><br>
    282286<b>3.</b> <a href=#annex><b>Annex</b></a><br><br>
    283287&nbsp; &nbsp; &nbsp; 3.1 <a href=#rtcm>RTCM Standards</a><br>
     
    10891093</li>
    10901094
     1095<li>Configuration File 'UploadRaw.bnc'<br>
     1096Purpose: Forward the stream contents of the incoming stream BCEP00BKG0
     1097from products.igs-ip.net to another caster.
     1098</li>
     1099
    10911100<li>Configuration File 'CompareSp3.bnc'<br>
    10921101Purpose: Compare two SP3 files to calculate RMS values for orbit and clock
     
    11071116'Example_Configs' to be the current working directory.
    11081117
    1109 <ol start="22">
     1118<ol start="23">
    11101119<li>Shell Script 'RinexQC.sh'<br>
    11111120Purpose: Equals configuration file example 'RinexQC.bnc', checks the quality of
     
    11531162For specific applications you may like to use your own set of standard configuration options from a configuration file and update some of its content via command line. When using a configuration file together with command line configuration options in one BNC call, the command line configuration options will always overrule options contained in the configuration file.
    11541163
    1155 <ol start="27">
     1164<ol start="28">
    11561165<li>Shell Script 'CompareSp3.sh'<br>
    11571166Purpose: Equals configuration file example 'CompareSp3.bnc', compares two SP3
     
    55635572<p>Figure 32: BNC producing Broadcast Ephemeris streams from globally distributed RTCM streams; upload in RTCM format to an Ntrip Broadcaster</p>
    55645573
    5565 <p><h4 id="streams">2.17 Streams Canvas</h4></p>
     5574<p><h4 id="upraw">2.17 Upload Raw Data - NtripServer Functionality</h4></p>
     5575<p>
     5576BNC can upload Raw Data streams in any format like a NtripServer. To fill the 'Upload Raw Data' table, hit the 'Add Row' button.
     5577</p>
     5578<p><h4 id="rawsourcemount">2.17.1 Source Mountpoint</h4></p>
     5579<p>
     5580Within the 'Source Mountpoint' field please specify the Source of data from the 'Streams' section below, which shall be forwarded without decoding.
     5581If the decoder string is not an accepted one ('RTCM_2.x', 'RTCM_3.x' and 'RTNET'), please change the decoder string to
     5582<ul>
     5583<li> 'ZERO' (forward the raw data) or </li>
     5584<li> 'ZERO2FILE' (forward and store the raw data)</li>
     5585</ul> in addition.
     5586</p>
     5587<p><h4 id="rawserver">2.17.2 Host &amp; Port - optional</h4></p>
     5588<p>
     5589Specify the 'Host' IP number or URL of an Ntrip Broadcaster to upload the stream. An empty option field means that you
     5590do not want to upload Broadcast Ephemeris.
     5591</p>
     5592<p>
     5593Enter the Ntrip Broadcaster's IP 'Port' number for stream upload. Note that Ntrip Broadcasters are often configured to provide
     5594access through more than one port, usually ports 80 and 2101. If you experience communication problems on port 80, you should
     5595try to use the alternative port(s).
     5596</p>
     5597
     5598<p><h4 id="rawmount">2.17.3 Mountpoint, Ntrip Version, User, Password - mandatory if 'Host' is set</h4></p>
     5599<p>
     5600BNC uploads a stream to the Ntrip Broadcaster by referring it to a dedicated mountpoint that has been set by its operator.
     5601Specify the mountpoint based on the details you received for your stream from the operator. It is often a 9-character ID (capital letters)
     5602plus an integer number.
     5603</p>
     5604<p>
     5605For stream upload the Ntrip Version can be chosen. An Ntrip version 1 upload is protected through an upload 'Password' only.
     5606For an Ntrip Version 2 upload an upload 'User' is required in addition. Enter the user name and the password you received
     5607from the Ntrip Broadcaster operator along with the mountpoint.
     5608</p>
     5609
     5610<p><h4 id="streams">2.18 Streams Canvas</h4></p>
    55665611<p>
    55675612Each stream on an Ntrip Broadcaster (and consequently on BNC) is defined using a unique source ID called mountpoint. An Ntrip Client like BNC
     
    55875632</table>
    55885633</p>
    5589 <p><h4 id="streamedit">2.17.1 Edit Streams</h4></p>
     5634<p><h4 id="streamedit">2.18.1 Edit Streams</h4></p>
    55905635<ul>
    55915636  <li>BNC automatically allocates one of its internal decoders to a stream based on the stream's 'format' and 'format-details' as given in the source-table.
     
    56145659</ul>
    56155660
    5616 <p><h4 id="streamdelete">2.17.2 Delete Stream</h4></p>
     5661<p><h4 id="streamdelete">2.18.2 Delete Stream</h4></p>
    56175662<p>
    56185663To remove a stream from the 'Streams' canvas in the main window, highlight it by clicking on it and hit the 'Delete Stream' button.
     
    56205665</p>
    56215666
    5622 <p><h4 id="streamconf">2.17.3 Reconfigure Stream Selection On-the-fly</h4></p>
     5667<p><h4 id="streamconf">2.18.3 Reconfigure Stream Selection On-the-fly</h4></p>
    56235668<p>
    56245669The streams selection can be changed on-the-fly without interrupting uninvolved threads in the running BNC process.
     
    56365681</p>
    56375682
    5638 <p><h4 id="logs">2.18 Logging Canvas</h4></p>
     5683<p><h4 id="logs">2.19 Logging Canvas</h4></p>
    56395684<p>
    56405685The 'Logging Canvas' above the bottom menu bar on the main window labeled 'Log', 'Throughput', 'Latency', and 'PPP Plot'
     
    56435688</p>
    56445689
    5645 <p><h4 id="logfile">2.18.1 Log</h4></p>
     5690<p><h4 id="logfile">2.19.1 Log</h4></p>
    56465691<p>
    56475692Records of BNC's activities are shown in the 'Log' tab. They can be saved into a file when a valid path is specified in the 'Logfile (full path)' field.
    56485693</p>
    56495694
    5650 <p><h4 id="throughput">2.18.2 Throughput</h4></p>
     5695<p><h4 id="throughput">2.19.2 Throughput</h4></p>
    56515696<p>
    56525697The bandwidth consumption per stream is shown in the 'Throughput' tab in bits per second (bps) or kilobits per second (kbps).
     
    56555700<p><img src="IMG/Figure33.png"width=1000/></p>
    56565701<p>Figure 33: Bandwidth consumption of RTCM streams received by BNC</p>
    5657 <p><h4 id="latency">2.18.3 Latency</h4></p>
     5702<p><h4 id="latency">2.19.3 Latency</h4></p>
    56585703<p>
    56595704The latency of observations in each incoming stream is shown in the 'Latency' tab in milliseconds or seconds.
     
    56665711<p>Figure 34: Latency of RTCM streams received by BNC</p>
    56675712
    5668 <p><h4 id="ppptab">2.18.4 PPP Plot</h4></p>
     5713<p><h4 id="ppptab">2.19.4 PPP Plot</h4></p>
    56695714<p>
    56705715Precise Point Positioning time series of North (red), East (green) and Up (blue) coordinate components are shown in the 'PPP Plot' tab when
     
    56775722<p>Figure 35: Example for time series plot of displacements produced by BNC</p>
    56785723
    5679 <p><h4 id="bottom">2.19 Bottom Menu Bar</h4></p>
     5724<p><h4 id="bottom">2.20 Bottom Menu Bar</h4></p>
    56805725<p>
    56815726The bottom menu bar allows to add or delete streams to or from BNC's configuration and to start or stop it.
     
    56865731<p>Figure 36: Steam input communication links accepted by BNC</p>
    56875732
    5688 <p><h4 id="streamadd">2.19.1 Add Stream</h4></p>
     5733<p><h4 id="streamadd">2.20.1 Add Stream</h4></p>
    56895734<p>
    56905735Button 'Add Stream' allows you to pull streams either from an Ntrip Broadcaster or from a TCP/IP port, UPD port, or serial port.
    56915736</p>
    56925737
    5693 <p><h4 id="streamcaster">2.19.1.1 Add Stream - Coming from Caster</h4></p>
     5738<p><h4 id="streamcaster">2.20.1.1 Add Stream - Coming from Caster</h4></p>
    56945739<p>
    56955740Button 'Add Stream' &gt; 'Coming from Caster' opens a window that allows users to select data streams from an Ntrip Broadcaster according
     
    56975742</p>
    56985743
    5699 <p><h4 id="streamhost">2.19.1.1.1 Caster Host and Port - mandatory</h4></p>
     5744<p><h4 id="streamhost">2.20.1.1.1 Caster Host and Port - mandatory</h4></p>
    57005745<p>
    57015746Enter the Ntrip Broadcaster host IP and port number. Note that EUREF and IGS operate Ntrip Broadcasters
     
    57055750</p>
    57065751
    5707 <p><h4 id="streamtable">2.19.1.1.2 Casters Table - optional</h4></p>
     5752<p><h4 id="streamtable">2.20.1.1.2 Casters Table - optional</h4></p>
    57085753<p>
    57095754It may be that you are not sure about your Ntrip Broadcaster's host and port number or you are interested in other
     
    57155760<p>Figure 37: BNC's 'Select Broadcaster' table</p>
    57165761
    5717 <p><h4 id="streamuser">2.19.1.1.3 User and Password - mandatory for protected streams</h4></p>
     5762<p><h4 id="streamuser">2.20.1.1.3 User and Password - mandatory for protected streams</h4></p>
    57185763<p>
    57195764Streams on Ntrip Broadcasters may be protected. Enter a valid 'User' ID and 'Password' for access to protected streams.
     
    57235768</p>
    57245769
    5725 <p><h4 id="gettable">2.19.1.1.4 Get Table</h4></p>
     5770<p><h4 id="gettable">2.20.1.1.4 Get Table</h4></p>
    57265771<p>
    57275772Use the 'Get Table' button to download the source-table from the Ntrip Broadcaster. Pay attention to data fields 'format' and 'format-details'.
     
    57615806<p>Figure 38: Broadcaster source-table shown by BNC</p>
    57625807
    5763 <p><h4 id="ntripv">2.19.1.1.5 Ntrip Version - mandatory</h4></p>
     5808<p><h4 id="ntripv">2.20.1.1.5 Ntrip Version - mandatory</h4></p>
    57645809<p>
    57655810Some limitations and deficiencies of the Ntrip Version 1 stream transport protocol are solved in Ntrip Version 2.
     
    57905835a mobile Internet Service Provider may not support it.
    57915836</p>
    5792 <p><h4 id="castermap">2.19.1.1.6 Map - optional</h4></p>
     5837<p><h4 id="castermap">2.20.1.1.6 Map - optional</h4></p>
    57935838<p>
    57945839Button 'Map' opens a window to show a distribution map of the caster's streams. You may like to zoom in or out using the mouse.
     
    57985843<p>Figure 39: Stream distribution map shown by BNC as derived from Ntrip Broadcaster source-table</p>
    57995844
    5800 <p><h4 id="streamip">2.19.1.2 Add Stream - Coming from TCP/IP Port</h4></p>
     5845<p><h4 id="streamip">2.20.1.2 Add Stream - Coming from TCP/IP Port</h4></p>
    58015846<p>
    58025847Button 'Add Stream' &gt; 'Coming from TCP/IP Port' allows to retrieve streams via TCP directly from an IP address
     
    58185863Note that this option works only if no proxy server is involved in the communication link.
    58195864</p>
    5820 <p><h4 id="streamudp">2.19.1.3 Add Stream - Coming from UDP Port</h4></p>
     5865<p><h4 id="streamudp">2.20.1.3 Add Stream - Coming from UDP Port</h4></p>
    58215866<p>
    58225867Button 'Add Stream' &gt; 'Coming from UDP Port' allows to pick up streams arriving directly at one of the local host's UDP ports without using the Ntrip transport protocol. For that you:
     
    58335878<p>
    58345879
    5835 <p><h4 id="streamser">2.19.1.4 Add Stream - Coming from Serial Port</h4></p>
     5880<p><h4 id="streamser">2.20.1.4 Add Stream - Coming from Serial Port</h4></p>
    58365881<p>
    58375882Button 'Add Stream' &gt; 'Coming from Serial Port' allows to retrieve streams from a GNSS receiver via serial port without using the Ntrip transport protocol. For that you:
     
    58725917<p>Figure 40: BNC configuration for pulling a stream via serial port</p>
    58735918
    5874 <p><h4 id="streamsdelete">2.19.2 Delete Stream</h4></p>
     5919<p><h4 id="streamsdelete">2.20.2 Delete Stream</h4></p>
    58755920<p>
    58765921Button 'Delete Stream' allows you to delete streams previously selected for retrieval as listed under the 'Streams' canvas on BNC's main window.
    58775922</p>
    58785923
    5879 <p><h4 id="streamsmap">2.19.3 Map</h4></p>
     5924<p><h4 id="streamsmap">2.20.3 Map</h4></p>
    58805925<p>
    58815926Button 'Map' opens a window to show a distribution map of the streams selected for retrieval as listed under the 'Streams' canvas.
     
    58835928</p>
    58845929
    5885 <p><h4 id="start">2.19.4 Start</h4></p>
     5930<p><h4 id="start">2.20.4 Start</h4></p>
    58865931<p>
    58875932Hit 'Start' to start retrieving, decoding or converting GNSS data streams in real-time.
     
    58905935</p>
    58915936
    5892 <p><h4 id="stop">2.19.5 Stop</h4></p>
     5937<p><h4 id="stop">2.20.5 Stop</h4></p>
    58935938<p>
    58945939Hit the 'Stop' button in order to stop BNC.
    58955940</p>
    58965941
    5897 <p><h4 id="contexthelp">2.19.6 Help? = Shift+F1</h4></p>
     5942<p><h4 id="contexthelp">2.20.6 Help? = Shift+F1</h4></p>
    58985943<p>
    58995944BNC comes with a <i>What's This</i> help system providing information about its functionality and usage.
     
    59025947The dialogs on some operating systems may provide a '?' button that users can click; click the relevant widget to pop up the help text.
    59035948</p>
    5904 <p><h4 id="cmd">2.20 Command Line Options</h4></p>
     5949<p><h4 id="cmd">2.21 Command Line Options</h4></p>
    59055950<p>
    59065951Command line options are available to run BNC in 'no window' mode or let it read previously recorded input offline from one or
     
    59195964provides a list of all available command line options.
    59205965</p>
    5921 <p><h4 id="cmdVersion">2.20.1 Version - optional</h4></p>
     5966<p><h4 id="cmdVersion">2.21.1 Version - optional</h4></p>
    59225967<p>
    59235968Command line option '--version' lets BNC print its version number.
     
    59275972&nbsp; &nbsp; &nbsp; bnc --version (MS Windows: bnc.exe --version | more)
    59285973</p>
    5929 <p><h4 id="cmdDisplay">2.20.2 Display - optional</h4></p>
     5974<p><h4 id="cmdDisplay">2.21.2 Display - optional</h4></p>
    59305975<p>
    59315976On systems which support graphics, command line option '--display' forces BNC to present the BNC window on the specified display.
     
    59355980&nbsp; &nbsp; &nbsp; bnc.exe --display localhost:10.0
    59365981</p>
    5937 <p><h4 id="nw">2.20.3 No Window Mode - optional</h4></p>
     5982<p><h4 id="nw">2.21.3 No Window Mode - optional</h4></p>
    59385983<p>
    59395984Apart from its regular windows mode, BNC can be started on all systems as a batch job with command line option '-nw'.
     
    59706015</p></pre>
    59716016
    5972 <p><h4 id="post">2.20.4 File Mode - optional</h4></p>
     6017<p><h4 id="post">2.21.4 File Mode - optional</h4></p>
    59736018<p>
    59746019Although BNC is primarily a real-time online tool, for debugging purposes it can be run offline to read data from a file
     
    59866031<p>Note further that option '--file' forces BNC to apply the '-nw' option for running in 'no window' mode.
    59876032</p>
    5988 <p><h4 id="conffile">2.20.5 Configuration File - optional</h4></p>
     6033<p><h4 id="conffile">2.21.5 Configuration File - optional</h4></p>
    59896034The default configuration filename is 'BNC.bnc'. You may change this name at startup time using command line option '--conf &lt;<u>confFileName</u>&gt;'. This allows running several BNC jobs in parallel on the same host using different sets of configuration options. <u>confFileName</u> stands either for the full path to a configuration file or just for a filename. If you introduce only a filename, the corresponding file will be saved in the current working directory from where BNC is started.
    59906035</p>
     
    59966041This leads to a BNC job using configuration file 'MyConfig.bnc'. The configuration file will be saved in the current working directory.
    59976042</p>
    5998 <p><h4 id="confopt">2.20.6 Configuration Options - optional</h4></p>
     6043<p><h4 id="confopt">2.21.6 Configuration Options - optional</h4></p>
    59996044<p>
    60006045BNC applies options from the configuration file but allows updating every one of them on the command line while the content of the configuration file remains unchanged. Note the following syntax for Command Line Interface (CLI) options:
     
    64966541
    64976542Upload Ephemeris Panel keys:
    6498    uploadEphMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:
     6543   uploadEphMountpointsOut {Upload ephemeris table [character string, semicolon separated list, each element in quotation marks, example:
    64996544                           "products.igs-ip.net,443,BCEP00BKG0,2s,usr,pass,ALL;products.igs-ip.net,443,BCEP01BKG0,2s,usr,pass,G"]}
    65006545   uploadSamplRtcmEph      {Stream upload sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}
     6546
     6547Upload Raw Data Panel keys:
     6548   uploadRawMountpointsOut {Upload raw data table [character string, semicolon separated list, each element in quotation marks, example:
     6549                           "TCP00DEU0,products.igs-ip.net,443,SSRA00BKG0,2s,usr,pass;TCP01DEU0,products.igs-ip.net,443,SSRA01BKG0,2s,usr,pass"]}
    65016550
    65026551Add Stream keys:
  • trunk/BNC/src/bncmain.cpp

    r10667 r10753  
    341341        "\n"
    342342        "Upload Ephemeris Panel keys:\n"
    343         "   uploadEphMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:\n"
     343        "   uploadEphMountpointsOut {Upload ephemeris table [character string, semicolon separated list, each element in quotation marks, example:\n"
    344344        "                           \"products.igs-ip.net,443,BCEP00BKG0,2s,usr,pass,ALL;products.igs-ip.net,443,BCEP01BKG0,2s,usr,pass,G\"]}\n"
    345345        "   uploadSamplRtcmEph      {Stream upload sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
     346        "\n"
     347        "Upload Raw Data Panel keys:\n"
     348        "   uploadRawMountpointsOut {Upload raw data table [character string, semicolon separated list, each element in quotation marks, example:\n"
     349        "                           \"TCP00DEU0,products.igs-ip.net,443,SSRA00BKG0,2s,usr,pass;TCP01DEU0,products.igs-ip.net,443,SSRA01BKG0,2s,usr,pass\"]}\n"
    346350        "\n"
    347351        "Add Stream keys:\n"
  • trunk/BNC/src/bncsettings.cpp

    r10667 r10753  
    6262        setValue_p("font", "");
    6363        setValue_p("casterUrlList", (QStringList()
    64             << "http://user:pass@euref-ip.net:2101"
    65             << "http://user:pass@igs-ip.net:2101"
    66             << "http://user:pass@products.igs-ip.net:2101"
    67             << "http://user:pass@mgex.igs-ip.net:2101"));
     64            << "http://user:pass@euref-ip.net:443"
     65            << "http://user:pass@igs-ip.net:443"
     66            << "http://user:pass@products.igs-ip.net:443"
     67            << "http://user:pass@mgex.igs-ip.net:443"));
    6868        setValue_p("mountPoints", "");
    69         setValue_p("ntripVersion", "2");
     69        setValue_p("ntripVersion", "2s");
    7070        // Network
    7171        setValue_p("proxyHost", "");
     
    181181        setValue_p("cmbSbas", "0");
    182182        setValue_p("cmbNavic", "0");
    183 
    184183        // Upload (clk)
    185184        setValue_p("uploadMountpointsOut", "");
     
    204203        setValue_p("trafo_scr", "");
    205204        setValue_p("trafo_t0", "");
    206         // Upload (eph)
     205        // Upload Eph
    207206        setValue_p("uploadEphMountpointsOut", "");
    208207        setValue_p("uploadSamplRtcmEph", "5");
     208        // Upload Raw
     209        setValue_p("uploadRawMountpointsOut", "");
    209210    }
    210211}
  • trunk/BNC/src/bncwindow.cpp

    r10667 r10753  
    561561    // -------------
    562562    _uploadTable = new QTableWidget(0, 16);
    563     _uploadTable->setHorizontalHeaderLabels(QString("Host, Port, Mount, Ntrip, User, Password, System, Format, CoM, SP3 File, RNX File, BSX File, PID, SID, IOD, bytes").split(","));
     563    _uploadTable->setHorizontalHeaderLabels(QString("Host, Port, Mountpoint, Ntrip, User, Password, System, Format, CoM, SP3 File, RNX File, BSX File, PID, SID, IOD, Bytes").split(","));
    564564    _uploadTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
    565565    _uploadTable->setSelectionBehavior(QAbstractItemView::SelectRows);
    566566    _uploadTable->horizontalHeader()->resizeSection(0, 13 * ww);
    567567    _uploadTable->horizontalHeader()->resizeSection(1, 5 * ww);
    568     _uploadTable->horizontalHeader()->resizeSection(2, 6 * ww);
     568    _uploadTable->horizontalHeader()->resizeSection(2, 10 * ww);
    569569    _uploadTable->horizontalHeader()->resizeSection(3, 6 * ww);
    570570    _uploadTable->horizontalHeader()->resizeSection(4, 8 * ww);
     
    657657    // Upload RTCM3 Ephemeris
    658658    // ----------------------
    659     _uploadEphTable = new QTableWidget(0, 6);
     659    _uploadEphTable = new QTableWidget(0, 7);
    660660    _uploadEphTable->setColumnCount(8);
    661661    _uploadEphTable->setRowCount(0);
    662     _uploadEphTable->setHorizontalHeaderLabels(QString("Host, Port, Mount,  Ntrip, User, Password, System, bytes").split(","));
     662    _uploadEphTable->setHorizontalHeaderLabels(QString("Host, Port, Mountpoint,  Ntrip, User, Password, System, Bytes").split(","));
    663663    _uploadEphTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
    664664    _uploadEphTable->setSelectionBehavior(QAbstractItemView::SelectRows);
     
    668668    _uploadEphTable->horizontalHeader()->resizeSection(3, 6 * ww);
    669669    _uploadEphTable->horizontalHeader()->resizeSection(4, 8 * ww);
    670     _uploadEphTable->horizontalHeader()->resizeSection(3, 8 * ww);
    671     _uploadEphTable->horizontalHeader()->resizeSection(5, 10 * ww);
    672     _uploadEphTable->horizontalHeader()->resizeSection(6, 12 * ww);
     670    _uploadEphTable->horizontalHeader()->resizeSection(5, 8 * ww);
     671    _uploadEphTable->horizontalHeader()->resizeSection(6, 10 * ww);
     672    _uploadEphTable->horizontalHeader()->resizeSection(7, 12 * ww);
    673673#if QT_VERSION < 0x050000
    674674    _uploadEphTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
     
    701701        enableWidget(false, _uploadSamplRtcmEphSpinBox);
    702702    }
     703
     704    // Upload Raw data
     705    // ----------------------
     706    _uploadRawTable = new QTableWidget(0, 7);
     707    _uploadRawTable->setColumnCount(8);
     708    _uploadRawTable->setRowCount(0);
     709    _uploadRawTable->setHorizontalHeaderLabels(QString("Source Mountpoint, Host, Port, Upload Mountpoint,  Ntrip, User, Password, Bytes").split(","));
     710    _uploadRawTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
     711    _uploadRawTable->setSelectionBehavior(QAbstractItemView::SelectRows);
     712    _uploadRawTable->horizontalHeader()->resizeSection(0, 13 * ww);
     713    _uploadRawTable->horizontalHeader()->resizeSection(1, 13 * ww);
     714    _uploadRawTable->horizontalHeader()->resizeSection(2, 5 * ww);
     715    _uploadRawTable->horizontalHeader()->resizeSection(3, 13 * ww);
     716    _uploadRawTable->horizontalHeader()->resizeSection(4, 6 * ww);
     717    _uploadRawTable->horizontalHeader()->resizeSection(5, 8 * ww);
     718    _uploadRawTable->horizontalHeader()->resizeSection(6, 8 * ww);
     719    _uploadRawTable->horizontalHeader()->resizeSection(7, 10 * ww);
     720    _uploadRawTable->horizontalHeader()->resizeSection(8, 12 * ww);
     721#if QT_VERSION < 0x050000
     722    _uploadRawTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
     723#else
     724    _uploadRawTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
     725#endif
     726    _uploadRawTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
     727
     728    connect(_uploadRawTable, SIGNAL(itemSelectionChanged()), SLOT(slotBncTextChanged()));
     729
     730    QPushButton* addUploadRawRowButton = new QPushButton("Add Row");
     731    addUploadRawRowButton->setMaximumWidth(9 * ww);
     732    QPushButton* delUploadRawRowButton = new QPushButton("Del Row");
     733    delUploadRawRowButton->setMaximumWidth(9 * ww);
    703734
    704735    // Canvas with Editable Fields
     
    728759    QWidget* uploadgroup = new QWidget();
    729760    QWidget* uploadEphgroup = new QWidget();
     761    QWidget* uploadRawgroup = new QWidget();
    730762    _aogroup->addTab(pgroup, tr("Network"));
    731763    _aogroup->addTab(ggroup, tr("General"));
     
    746778    _aogroup->addTab(uploadgroup, tr("Upload Corrections"));
    747779    _aogroup->addTab(uploadEphgroup, tr("Upload Ephemeris"));
     780    _aogroup->addTab(uploadRawgroup, tr("Upload Raw Data"));
    748781
    749782    // Log Tab
     
    13651398    populateUploadTable();
    13661399
    1367     uploadLayout->addWidget(new QLabel("Upload RTCM Version 3 Broadcast Corrections to caster.<br>"));
     1400    uploadLayout->addWidget(new QLabel("Upload RTCM Version 3 Broadcast Corrections to Broadcaster.<br>"));
    13681401    uploadLayout->addWidget(_uploadTable);
    13691402    uploadLayout->addLayout(uploadHlpLayout);
     
    13861419    populateUploadEphTable();
    13871420
    1388     uploadLayoutEph->addWidget(new QLabel("Upload concatenated RTCMv3 Broadcast Ephemeris to caster.<br>"));
     1421    uploadLayoutEph->addWidget(new QLabel("Upload RTCM Version 3 Broadcast Ephemeris to Broadcaster.<br>"));
    13891422    uploadLayoutEph->addWidget(_uploadEphTable);
    13901423    uploadLayoutEph->addLayout(uploadHlpLayoutEph);
     
    13921425    uploadEphgroup->setLayout(uploadLayoutEph);
    13931426
     1427
     1428    // Upload Layout (Raw Data)
     1429    // -------------------------
     1430    QGridLayout* uploadHlpLayoutRaw = new QGridLayout();
     1431
     1432    connect(addUploadRawRowButton, SIGNAL(clicked()), this, SLOT(slotAddUploadRawRow()));
     1433    connect(delUploadRawRowButton, SIGNAL(clicked()), this, SLOT(slotDelUploadRawRow()));
     1434
     1435    uploadHlpLayoutRaw->addWidget(addUploadRawRowButton, 0, 0);
     1436    uploadHlpLayoutRaw->addWidget(delUploadRawRowButton, 0, 1);
     1437
     1438    QBoxLayout* uploadLayoutRaw = new QBoxLayout(QBoxLayout::TopToBottom);
     1439    populateUploadRawTable();
     1440
     1441    uploadLayoutRaw->addWidget(new QLabel("Upload Raw Data to Broadcaster (Ntrip Server Functionality).<br>"));
     1442    uploadLayoutRaw->addWidget(_uploadRawTable);
     1443    uploadLayoutRaw->addLayout(uploadHlpLayoutRaw);
     1444
     1445    uploadRawgroup->setLayout(uploadLayoutRaw);
    13941446
    13951447    // Main Layout
     
    15031555    _miscPortLineEdit->setWhatsThis(tr("<p>BNC can output an incoming stream through an IP port of your local host.</p><p>Specify a port number to activate this function. In this case, the stream content remains untouched; BNC does not decode or reformat the data for this output.</p><p> If the decoder string is not an accepted one ('RTCM_2.x', 'RTCM_3.x' and 'RTNET'), please change the decoder string to <ul>"
    15041556        "<li> 'ZERO' (forward the raw data) or </li>"
    1505         "<li> 'ZERO2File' (forward and store the raw data)</li> </ul> in addition. <i>[key: miscPort]</i></p>"));
     1557        "<li> 'ZERO2FILE' (forward and store the raw data)</li> </ul> in addition. <i>[key: miscPort]</i></p>"));
    15061558
    15071559    // WhatsThis, PPP (1)
     
    16061658    // WhatsThis, Combine Corrections
    16071659    // ------------------------------
    1608     _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution. Finally, double click on the 'Exclude Satellites' field and specify satellites, to exclude them for an individual AC. An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC. Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
     1660    _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. </p><p>To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution. Finally, double click on the 'Exclude Satellites' field and specify satellites, to exclude them for an individual AC. An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC. Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
    16091661    addCmbRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Combine Corrections' table.</p>"));
    16101662    delCmbRowButton->setWhatsThis(tr("<p>Hit 'Delete' button to delete the highlighted line(s) from the 'Combine Corrections' table.</p>"));
     
    16251677    // WhatsThis, Upload Corrections
    16261678    // -----------------------------
    1627     _uploadTable->setWhatsThis(tr("<p>BNC can upload clock and orbit corrections to Broadcast Ephemeris (Broadcast Corrections) as well as Code Biases in different SSR formats. You may have a situation where clocks, orbits and code biases come from an external Real-time Network Engine (1) or a situation where clock and orbit corrections are combined within BNC (2).</p><p>(1) BNC identifies a stream as coming from a Real-time Network Engine if its format is specified as 'RTNET' and hence its decoder string in the 'Streams' canvas is 'RTNET'. It encodes and uploads that stream to the specified Ntrip Broadcaster Host and Port</p><p>(2) BNC understands that it is expected to encode and upload combined Broadcast Ephemeris Corrections if you specify correction streams in the 'Combine Corrections' table.</p><p>To fill the 'Upload Corrections' table, hit the 'Add Row' button, double click on the 'Host' field to enter the IP or URL of an Ntrip Broadcaster and hit Enter. Select the Ntrip Version that shall be used for data upload. Then double click on the 'Port', 'Mount' and 'Password' fields to enter the Ntrip Broadcaster IP port (default is 80), the mountpoint and the stream upload password. If Ntrip Version 2 is chosen, click to the 'User' field to enter a stream upload user name. An empty 'Host' option field means that you don't want to upload corrections.</p><p>Select a target coordinate reference System (e.g. IGS20) for outgoing clock and orbit corrections.</p><p>Select a target SSR format (e.g. IGS-SSR) for outgoing clock and orbit corrections.</p><p>By default orbit and clock corrections refer to Antenna Phase Center (APC). Tick 'CoM' to refer uploaded corrections to Center of Mass instead of APC.</p><p>Specify a path for saving generated Broadcast Corrections plus Broadcast Ephemeris as SP3 orbit files. If the specified directory does not exist, BNC will not create such files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.SP3.</p><p>Specify a path for saving generated Broadcast Correction clocks plus Broadcast Ephemeris clocks as Clock RINEX files. If the specified directory does not exist, BNC will not create Clock RINEX files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.CLK.</p><p>Specify a path for saving generated Code Biases as SINEX Bias files. If the specified directory does not exist, BNC will not create SINEX Bias files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.BIA.</p><p>Note that '${V3PROD}' produces the time stamp in the filename, which is related to the RINEX version 3 filename concept.</p><p>Finally, specify a SSR Provider ID (issued by RTCM), SSR Solution ID, and SSR Issue of Data number.</p><p>In case the 'Combine Corrections' table contains only one Broadcast Correction stream, BNC will add that stream content to the Broadcast Ephemeris to save results in files specified via SP3 and/or Clock RINEX file path. You should then define only the SP3 and Clock RINEX file path and no further option in the 'Upload Corrections' table. <i>[key: uploadMountpointsOut]</i></p>"));
     1679    _uploadTable->setWhatsThis(tr("<p>BNC can upload clock and orbit corrections to Broadcast Ephemeris (Broadcast Corrections) as well as Code Biases in different SSR formats. You may have a situation where clocks, orbits and code biases come from an external Real-time Network Engine (1) or a situation where clock and orbit corrections are combined within BNC (2).</p><p>(1) BNC identifies a stream as coming from a Real-time Network Engine if its format is specified as 'RTNET' and hence its decoder string in the 'Streams' canvas is 'RTNET'. It encodes and uploads that stream to the specified Ntrip Broadcaster Host and Port</p><p>(2) BNC understands that it is expected to encode and upload combined Broadcast Ephemeris Corrections if you specify correction streams in the 'Combine Corrections' table.</p><p>To fill the 'Upload Corrections' table, hit the 'Add Row' button, double click on the 'Host' field to enter the IP or URL of an Ntrip Broadcaster and hit Enter. Select the Ntrip Version that shall be used for data upload. Then double click on the 'Port', 'Mountpoint' and 'Password' fields to enter the Ntrip Broadcaster IP port, the mountpoint and the stream upload password. If Ntrip Version 2 is chosen, click to the 'User' field to enter a stream upload user name. An empty 'Host' option field means that you don't want to upload corrections.</p><p>Select a target coordinate reference System (e.g. IGS20) for outgoing clock and orbit corrections.</p><p>Select a target SSR format (e.g. IGS-SSR) for outgoing clock and orbit corrections.</p><p>By default orbit and clock corrections refer to Antenna Phase Center (APC). Tick 'CoM' to refer uploaded corrections to Center of Mass instead of APC.</p><p>Specify a path for saving generated Broadcast Corrections plus Broadcast Ephemeris as SP3 orbit files. If the specified directory does not exist, BNC will not create such files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.SP3.</p><p>Specify a path for saving generated Broadcast Correction clocks plus Broadcast Ephemeris clocks as Clock RINEX files. If the specified directory does not exist, BNC will not create Clock RINEX files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.CLK.</p><p>Specify a path for saving generated Code Biases as SINEX Bias files. If the specified directory does not exist, BNC will not create SINEX Bias files. The following is a path example for a Linux system: /home/user/BKG0MGXRTS${V3PROD}.BIA.</p><p>Note that '${V3PROD}' produces the time stamp in the filename, which is related to the RINEX version 3 filename concept.</p><p>Finally, specify a SSR Provider ID (issued by RTCM), SSR Solution ID, and SSR Issue of Data number.</p><p>In case the 'Combine Corrections' table contains only one Broadcast Correction stream, BNC will add that stream content to the Broadcast Ephemeris to save results in files specified via SP3 and/or Clock RINEX file path. You should then define only the SP3 and Clock RINEX file path and no further option in the 'Upload Corrections' table. <i>[key: uploadMountpointsOut]</i></p>"));
    16281680    addUploadRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Upload Corrections' table.</p>"));
    16291681    delUploadRowButton->setWhatsThis(tr("<p>Hit 'Del Row' button to delete the highlighted line(s) from the 'Upload Corrections' table.</p>"));
     
    16381690    // WhatsThis, Upload Ephemeris
    16391691    // ---------------------------
    1640     _uploadEphTable->setWhatsThis(tr("<p>BNC can upload Broadcast Ephemeris streams in RTCM Version 3 format. To fill the 'Upload Ephemeris' table, hit the 'Add Row' button, double click on the 'Host' field to enter the IP or URL of an Ntrip Broadcaster and hit Enter. Select the Ntrip Version that shall be used for data upload. Then double click on the 'Port', 'Mount' and 'Password' fields to enter the Ntrip Broadcaster IP port (default is 80), the mountpoint and the stream upload password. If Ntrip Version 2 is chosen, click to the 'User' field to enter a stream upload user name. Specify the satellite system(s) that shall be part of the uploaded stream (e.g. G for GPS or GRE for GPS+GLONASS+Galileo, or ALL). <i>[key: uploadEphHost]</i></p>"));
     1692    _uploadEphTable->setWhatsThis(tr("<p>BNC can upload Broadcast Ephemeris streams in RTCM Version 3 format. </p><p>To fill the 'Upload Ephemeris' table, hit the 'Add Row' button, double click on the 'Host' field to enter the IP or URL of an Ntrip Broadcaster and hit Enter. Select the Ntrip Version that shall be used for data upload. Then double click on the 'Port', 'Mountpoint' and 'Password' fields to enter the Ntrip Broadcaster IP port, the mountpoint and the stream upload password. If Ntrip Version 2 is chosen, click to the 'User' field to enter a stream upload user name. Specify the satellite system(s) that shall be part of the uploaded stream (e.g. G for GPS or GRE for GPS+GLONASS+Galileo, or ALL). <i>[key: uploadEphMountpointsOut]</i></p>"));
    16411693    addUploadEphRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Upload Ephemeris' table.</p>"));
    16421694    delUploadEphRowButton->setWhatsThis(tr("<p>Hit 'Del Row' button to delete the highlighted line(s) from the 'Upload Ephemeris' table.</p>"));
    16431695    _uploadSamplRtcmEphSpinBox->setWhatsThis(tr("<p>Select the Broadcast Ephemeris sampling interval in seconds.</p><p>Default is '5', meaning that a complete set of Broadcast Ephemeris is uploaded every 5 seconds. <i>[key: uploadSamplRtcmEph]</i></p>"));
     1696
     1697    // WhatsThis, Upload Raw Data
     1698    // ---------------------------
     1699    _uploadRawTable->setWhatsThis(tr("<p>BNC can upload Raw Data streams in any format like a NtripServer. </p><p>To fill the 'Upload Raw Data' table, hit the 'Add Row' button and double click on the 'Source Mountpoint' field to enter the Source of data from the 'Streams' section below, which shall be forwarded without decoding and hit Enter. Double click on the 'Host' field to enter the IP or URL of an Ntrip Broadcaster and hit Enter. Select the Ntrip Version that shall be used for data upload. Then double click on the 'Port', 'Upload Mountpoint' and 'Password' fields to enter the Ntrip Broadcaster IP port, the stream upload mountpoint and password. If Ntrip Version 2 is chosen, click to the 'User' field to enter a stream upload user name. </p><p> If the decoder string is not an accepted one ('RTCM_2.x', 'RTCM_3.x' and 'RTNET'), please change the decoder string to <ul>"
     1700        "<li> 'ZERO' (forward the raw data) or </li>"
     1701        "<li> 'ZERO2FILE' (forward and store the raw data)</li> </ul> in addition <i>[key: uploadRawMountpointsOut]</i></p>"));
     1702    addUploadEphRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Upload Raw Data' table.</p>"));
     1703    delUploadEphRowButton->setWhatsThis(tr("<p>Hit 'Del Row' button to delete the highlighted line(s) from the 'Upload Raw Data' table.</p>"));
     1704
    16441705
    16451706    // WhatsThis, Streams Canvas
     
    17811842    delete _cmbNavicCheckBox;
    17821843    delete _cmbBsxFile;
     1844    delete _uploadSamplRtcmEphCorrComboBox;
    17831845    _uploadEphTable->deleteLater();
    1784     delete _uploadSamplRtcmEphCorrComboBox;
     1846    _uploadRawTable->deleteLater();
    17851847    _uploadTable->deleteLater();
    17861848    delete _uploadIntrComboBox;
     
    21512213    QStringList uploadEphMountpointsOut;
    21522214    for (int iRow = 0; iRow < _uploadEphTable->rowCount(); iRow++) {
    2153         QString hlp;
    2154         for (int iCol = 0; iCol < _uploadEphTable->columnCount(); iCol++) {
    2155             if (_uploadEphTable->cellWidget(iRow, iCol) &&
    2156                 (iCol == 3 || iCol == 4 || iCol == 5 || iCol == 6)) {
    2157                 if (iCol == 3) {
    2158                     QComboBox* ntripversion = (QComboBox*)(_uploadEphTable->cellWidget(iRow, iCol));
    2159                     hlp += ntripversion->currentText() + ",";
    2160                 }
    2161                 else if (iCol == 4) {
    2162                     QLineEdit* user = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
    2163                     hlp += user->text() + ",";
    2164                 }
    2165                 else if (iCol == 5) {
    2166                     QLineEdit* passwd = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
    2167                     hlp += passwd->text() + ",";
    2168                 }
    2169                 else if (iCol == 6) {
    2170                     QLineEdit* system = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
    2171                     hlp += system->text() + ",";
    2172                 }
     2215      QString hlp;
     2216      for (int iCol = 0; iCol < _uploadEphTable->columnCount(); iCol++) {
     2217          if (_uploadEphTable->cellWidget(iRow, iCol) &&
     2218              (iCol == 3 || iCol == 4 || iCol == 5 || iCol == 6)) {
     2219              if      (iCol == 3) {
     2220                  QComboBox* ntripversion = (QComboBox*)(_uploadEphTable->cellWidget(iRow, iCol));
     2221                  hlp += ntripversion->currentText() + ",";
     2222              }
     2223              else if (iCol == 4) {
     2224                  QLineEdit* user = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
     2225                  hlp += user->text() + ",";
     2226              }
     2227              else if (iCol == 5) {
     2228                  QLineEdit* passwd = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
     2229                  hlp += passwd->text() + ",";
     2230              }
     2231              else if (iCol == 6) {
     2232                  QLineEdit* system = (QLineEdit*)(_uploadEphTable->cellWidget(iRow, iCol));
     2233                  hlp += system->text() + ",";
     2234              }
     2235          }
     2236          else if (_uploadEphTable->item(iRow, iCol)) {
     2237              hlp += _uploadEphTable->item(iRow, iCol)->text() + ",";
     2238          }
     2239      }
     2240      if (!hlp.isEmpty()) {
     2241          uploadEphMountpointsOut << hlp;
     2242      }
     2243    }
     2244
     2245    QStringList uploadRawMountpointsOut;
     2246    for (int iRow = 0; iRow < _uploadRawTable->rowCount(); iRow++) {
     2247      QString hlp;
     2248      for (int iCol = 0; iCol < _uploadRawTable->columnCount(); iCol++) {
     2249        if (_uploadRawTable->cellWidget(iRow, iCol) &&
     2250            (iCol == 4 || iCol == 5 || iCol == 6)) {
     2251            if      (iCol == 4) {
     2252                QComboBox* ntripversion = (QComboBox*)(_uploadRawTable->cellWidget(iRow, iCol));
     2253                hlp += ntripversion->currentText() + ",";
    21732254            }
    2174             else if (_uploadEphTable->item(iRow, iCol)) {
    2175                 hlp += _uploadEphTable->item(iRow, iCol)->text() + ",";
     2255            else if (iCol == 5) {
     2256                QLineEdit* user = (QLineEdit*)(_uploadRawTable->cellWidget(iRow, iCol));
     2257                hlp += user->text() + ",";
    21762258            }
    2177         }
    2178         if (!hlp.isEmpty()) {
    2179             uploadEphMountpointsOut << hlp;
    2180         }
     2259            else if (iCol == 6) {
     2260                QLineEdit* passwd = (QLineEdit*)(_uploadRawTable->cellWidget(iRow, iCol));
     2261                hlp += passwd->text() + ",";
     2262            }
     2263        }
     2264        else if (_uploadRawTable->item(iRow, iCol)) {
     2265            hlp += _uploadRawTable->item(iRow, iCol)->text() + ",";
     2266        }
     2267      }
     2268      if (!hlp.isEmpty()) {
     2269          uploadRawMountpointsOut << hlp;
     2270      }
    21812271    }
    21822272
     
    22232313    settings.setValue("outSampl", _outSamplComboBox->currentText());
    22242314    settings.setValue("outFile", _outFileLineEdit->text());
    2225     settings.setValue("outLockTime", _outLockTimeCheckBox->checkState());    settings.setValue("outUPort", _outUPortLineEdit->text());
     2315    settings.setValue("outLockTime", _outLockTimeCheckBox->checkState());
     2316    settings.setValue("outUPort", _outUPortLineEdit->text());
    22262317    // Serial Output
    22272318    settings.setValue("serialMountPoint", _serialMountPointLineEdit->text());
     
    23032394    }
    23042395    settings.setValue("uploadSamplRtcmEph", _uploadSamplRtcmEphSpinBox->value());
    2305 
     2396    // Upload Raw Data
     2397    if (!uploadRawMountpointsOut.isEmpty()) {
     2398        settings.setValue("uploadRawMountpointsOut", uploadRawMountpointsOut);
     2399    }
     2400    else {
     2401        settings.setValue("uploadRawMountpointsOut", "");
     2402    }
    23062403    if (_caster) {
    23072404        _caster->readMountPoints();
     
    29693066            QComboBox* ntripversion = new QComboBox();
    29703067            ntripversion->setEditable(false);
    2971             ntripversion->addItems(QString("1,2,2s").split(","));
     3068            ntripversion->addItems(QString("2s,2,1").split(","));
    29723069            ntripversion->setFrame(false);
    29733070            _uploadTable->setCellWidget(iRow, iCol, ntripversion);
     
    29953092            QComboBox* format = new QComboBox();
    29963093            format->setEditable(false);
     3094            //format->addItems(QString("IGS-SSR,RTCM-SSR,RTCM-NEW-SSR").split(","));
    29973095            format->addItems(QString("IGS-SSR,RTCM-SSR").split(","));
    29983096            format->setFrame(false);
     
    30993197                QComboBox* format = new QComboBox();
    31003198                format->setEditable(false);
     3199                //format->addItems(QString("IGS-SSR,RTCM-SSR,RTCM-NEW-SSR").split(","));
    31013200                format->addItems(QString("IGS-SSR,RTCM-SSR").split(","));
    31023201                format->setFrame(false);
     
    31413240            QComboBox* ntripversion = new QComboBox();
    31423241            ntripversion->setEditable(false);
    3143             ntripversion->addItems(QString("1,2,2s").split(","));
     3242            ntripversion->addItems(QString("2s,2,1").split(","));
    31443243            ntripversion->setFrame(false);
    31453244            _uploadEphTable->setCellWidget(iRow, iCol, ntripversion);
     
    31773276////////////////////////////////////////////////////////////////////////////
    31783277void bncWindow::slotDelUploadEphRow() {
    3179     BNC_CORE->_uploadTableItems.clear();
     3278    BNC_CORE->_uploadEphTableItems.clear();
    31803279    int nRows = _uploadEphTable->rowCount();
    31813280    std::vector <bool> flg(nRows);
     
    31943293    }
    31953294    for (int iRow = 0; iRow < _uploadTable->rowCount(); iRow++) {
    3196         BNC_CORE->_uploadTableItems[iRow] =
     3295        BNC_CORE->_uploadEphTableItems[iRow] =
    31973296            (bncTableItem*)_uploadEphTable->item(iRow, 7);
    31983297    }
     
    32613360}
    32623361
     3362//
     3363////////////////////////////////////////////////////////////////////////////
     3364void bncWindow::slotAddUploadRawRow() {
     3365    int iRow = _uploadRawTable->rowCount();
     3366    _uploadRawTable->insertRow(iRow);
     3367    for (int iCol = 0; iCol < _uploadRawTable->columnCount(); iCol++) {
     3368        if (iCol == 4) {
     3369            QComboBox* ntripversion = new QComboBox();
     3370            ntripversion->setEditable(false);
     3371            ntripversion->addItems(QString("2s,2,1").split(","));
     3372            ntripversion->setFrame(false);
     3373            _uploadRawTable->setCellWidget(iRow, iCol, ntripversion);
     3374
     3375        }
     3376        else if (iCol == 5) {
     3377            QLineEdit* user = new QLineEdit();
     3378            user->setFrame(false);
     3379            _uploadRawTable->setCellWidget(iRow, iCol, user);
     3380        }
     3381        else if (iCol == 6) {
     3382            QLineEdit* passwd = new QLineEdit();
     3383            passwd->setFrame(false);
     3384            passwd->setEchoMode(QLineEdit::PasswordEchoOnEdit);
     3385            _uploadRawTable->setCellWidget(iRow, iCol, passwd);
     3386        }
     3387        else if (iCol == 7) {
     3388            bncTableItem* bncIt = new bncTableItem();
     3389            bncIt->setFlags(bncIt->flags() & ~Qt::ItemIsEditable);
     3390            _uploadRawTable->setItem(iRow, iCol, bncIt);
     3391            BNC_CORE->_uploadRawTableItems[iRow] = bncIt;
     3392        }
     3393        else {
     3394          _uploadRawTable->setItem(iRow, iCol, new QTableWidgetItem(""));
     3395        }
     3396    }
     3397}
     3398
     3399//
     3400////////////////////////////////////////////////////////////////////////////
     3401void bncWindow::slotDelUploadRawRow() {
     3402    BNC_CORE->_uploadRawTableItems.clear();
     3403    int nRows = _uploadRawTable->rowCount();
     3404    std::vector <bool> flg(nRows);
     3405    for (int iRow = 0; iRow < nRows; iRow++) {
     3406        if (_uploadRawTable->item(iRow, 1)->isSelected()) {
     3407            flg[iRow] = true;
     3408        }
     3409        else {
     3410            flg[iRow] = false;
     3411        }
     3412    }
     3413    for (int iRow = nRows - 1; iRow >= 0; iRow--) {
     3414        if (flg[iRow]) {
     3415            _uploadRawTable->removeRow(iRow);
     3416        }
     3417    }
     3418    for (int iRow = 0; iRow < _uploadRawTable->rowCount(); iRow++) {
     3419        BNC_CORE->_uploadRawTableItems[iRow] =
     3420            (bncTableItem*)_uploadRawTable->item(iRow, 7);
     3421    }
     3422}
     3423
     3424//
     3425////////////////////////////////////////////////////////////////////////////
     3426void bncWindow::populateUploadRawTable() {
     3427    for (int iRow = _uploadRawTable->rowCount() - 1; iRow >= 0; iRow--) {
     3428      _uploadRawTable->removeRow(iRow);
     3429    }
     3430
     3431    bncSettings settings;
     3432
     3433    int iRow = -1;
     3434    QListIterator<QString> it(settings.value("uploadRawMountpointsOut").toStringList());
     3435    while (it.hasNext()) {
     3436        QStringList hlp = it.next().split(",");
     3437        if (hlp.size() > 6) {
     3438            ++iRow;
     3439            _uploadRawTable->insertRow(iRow);
     3440        }
     3441        for (int iCol = 0; iCol < hlp.size(); iCol++) {
     3442            if (iCol == 4) {
     3443                QComboBox* ntripversion = new QComboBox();
     3444                ntripversion->setEditable(false);
     3445                ntripversion->addItems(QString("1,2,2s").split(","));
     3446                ntripversion->setFrame(false);
     3447                ntripversion->setCurrentIndex(ntripversion->findText(hlp[iCol]));
     3448                _uploadRawTable->setCellWidget(iRow, iCol, ntripversion);
     3449            }
     3450            else if (iCol == 5) {
     3451                QLineEdit* user = new QLineEdit();
     3452                user->setFrame(false);
     3453                user->setText(hlp[iCol]);
     3454                _uploadRawTable->setCellWidget(iRow, iCol, user);
     3455            }
     3456            else if (iCol == 6) {
     3457                QLineEdit* passwd = new QLineEdit();
     3458                passwd->setFrame(false);
     3459                passwd->setEchoMode(QLineEdit::PasswordEchoOnEdit);
     3460                passwd->setText(hlp[iCol]);
     3461                _uploadRawTable->setCellWidget(iRow, iCol, passwd);
     3462            }
     3463            else if (iCol == 7) {
     3464                bncTableItem* bncIt = new bncTableItem();
     3465                bncIt->setFlags(bncIt->flags() & ~Qt::ItemIsEditable);
     3466                _uploadRawTable->setItem(iRow, iCol, bncIt);
     3467                BNC_CORE->_uploadRawTableItems[iRow] = bncIt;
     3468            }
     3469            else {
     3470              _uploadRawTable->setItem(iRow, iCol, new QTableWidgetItem(hlp[iCol]));
     3471            }
     3472        }
     3473    }
     3474}
    32633475
    32643476// Progress Bar Change
  • trunk/BNC/src/bncwindow.h

    r10657 r10753  
    9696    void slotAddUploadEphRow();
    9797    void slotDelUploadEphRow();
     98    void slotAddUploadRawRow();
     99    void slotDelUploadRawRow();
    98100    void slotSetUploadTrafo();
    99101    void slotReqcEditOption();
     
    110112    void populateUploadTable();
    111113    void populateUploadEphTable();
     114    void populateUploadRawTable();
    112115    void enableWidget(bool enable, QWidget* widget);
    113116    void startRealTime();
     
    243246    QSpinBox* _uploadSamplRtcmEphSpinBox;
    244247
     248    QTableWidget* _uploadRawTable;
     249
    245250    bncCaster* _caster;
    246251    bncEphUploadCaster* _casterEph;
  • trunk/BNC/src/src.pri

    r10551 r10753  
    5454          bncbiassinex.h                                              \
    5555          bncbytescounter.h bncsslconfig.h reqcdlg.h                  \
     56          ephemeris.h t_prn.h satObs.h                                \
    5657          upload/bncrtnetdecoder.h upload/bncuploadcaster.h           \
    57           ephemeris.h t_prn.h satObs.h                                \
     58          upload/bncrawuploadcaster.h                                 \
    5859          upload/bncrtnetuploadcaster.h upload/bnccustomtrafo.h       \
    5960          upload/bncephuploadcaster.h qtfilechooser.h                 \
     
    6869          RTCM3/clock_and_orbit/clock_orbit_igs.h                     \
    6970          RTCM3/clock_and_orbit/clock_orbit_rtcm.h                    \
     71          RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h                \
    7072          rinex/rnxobsfile.h                                          \
    7173          rinex/rnxnavfile.h       rinex/corrfile.h                   \
     
    9395          bncoutf.cpp bncclockrinex.cpp bncsp3.cpp bncsinextro.cpp    \
    9496          bncbiassinex.cpp                                            \
     97          ephemeris.cpp t_prn.cpp satObs.cpp                          \
    9598          bncbytescounter.cpp bncsslconfig.cpp reqcdlg.cpp            \
    96           ephemeris.cpp t_prn.cpp satObs.cpp                          \
    9799          upload/bncrtnetdecoder.cpp upload/bncuploadcaster.cpp       \
     100          upload/bncrawuploadcaster.cpp                               \
    98101          upload/bncrtnetuploadcaster.cpp upload/bnccustomtrafo.cpp   \
    99102          upload/bncephuploadcaster.cpp qtfilechooser.cpp             \
     
    106109          RTCM3/RTCM3coDecoder.cpp RTCM3/ephEncoder.cpp               \
    107110          RTCM3/crsEncoder.cpp                                        \
     111          RTCM3/clock_and_orbit/clock_orbit.cpp                       \
    108112          RTCM3/clock_and_orbit/clock_orbit_igs.cpp                   \
    109113          RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp                  \
     114          RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp              \
    110115          rinex/rnxobsfile.cpp                                        \
    111116          rinex/rnxnavfile.cpp     rinex/corrfile.cpp                 \
  • trunk/BNC/src/upload/bncuploadcaster.cpp

    r10227 r10753  
    5757            SLOT(slotNewBytes(const QByteArray,double)));
    5858  }
     59
    5960  if (BNC_CORE->_uploadEphTableItems.find(_iRow) != BNC_CORE->_uploadEphTableItems.end()) {
    6061    connect(this, SIGNAL(newBytes(QByteArray,double)),
     
    6263            SLOT(slotNewBytes(const QByteArray,double)));
    6364  }
     65
     66  if (BNC_CORE->_uploadRawTableItems.find(_iRow) != BNC_CORE->_uploadRawTableItems.end()) {
     67    connect(this, SIGNAL(newBytes(QByteArray,double)),
     68            BNC_CORE->_uploadRawTableItems.value(iRow),
     69            SLOT(slotNewBytes(const QByteArray,double)));
     70  }
     71
    6472
    6573  _sslIgnoreErrors = (Qt::CheckState(settings.value("sslIgnoreErrors").toInt()) == Qt::Checked);
Note: See TracChangeset for help on using the changeset viewer.