Index: /trunk/BNC/RTCM/GPSDecoder.h
===================================================================
--- /trunk/BNC/RTCM/GPSDecoder.h	(revision 1183)
+++ /trunk/BNC/RTCM/GPSDecoder.h	(revision 1184)
@@ -134,7 +134,9 @@
 
   QList<p_obs> _obsList;
-  QList<int> _typeList; // RTCM message types
+  QList<int> _typeList; // RTCMv3 message types
   QList<int> _epochList; // Broadcast corrections
-  QList<double> _antList; // Antenna XYZ-H
+  QList<char*> _antType; // RTCMv3 antenna descriptor
+  QList<double> _antList5; // RTCMv3 antenna XYZ
+  QList<double> _antList6; // RTCMv3 antenna XYZ & H
 };
 
Index: /trunk/BNC/RTCM3/rtcm3torinex.c
===================================================================
--- /trunk/BNC/RTCM3/rtcm3torinex.c	(revision 1183)
+++ /trunk/BNC/RTCM3/rtcm3torinex.c	(revision 1184)
@@ -1,5 +1,5 @@
 /*
   Converter for RTCM3 data to RINEX.
-  $Id: rtcm3torinex.c,v 1.16 2008/09/02 14:14:33 weber Exp $
+  $Id: rtcm3torinex.c,v 1.17 2008/09/22 09:39:49 weber Exp $
   Copyright (C) 2005-2008 by Dirk Stöcker <stoecker@alberding.eu>
 
@@ -51,5 +51,5 @@
 
 /* CVS revision and version */
-static char revisionstr[] = "$Revision: 1.16 $";
+static char revisionstr[] = "$Revision: 1.17 $";
 
 #ifndef COMPILEDATE
@@ -290,17 +290,92 @@
     {
 #ifdef NO_RTCM3_MAIN
-    double antX, antY, antZ, antH; /* Antenna XYZ-H */
+    case 1005:
+      {
+        double antX, antY, antZ; /* Antenna XYZ */
+        SKIPBITS(22)
+        GETBITSSIGN(antX, 38)
+        SKIPBITS(2)
+        GETBITSSIGN(antY, 38)
+        SKIPBITS(2)
+        GETBITSSIGN(antZ, 38)
+        handle->antList5[handle->antSize5 + 0] = antX;
+        handle->antList5[handle->antSize5 + 1] = antY;
+        handle->antList5[handle->antSize5 + 2] = antZ;
+        if(handle->antSize5 < 100 - 5 ) {handle->antSize5 += 3;}
+        ret = 1005;
+      }
+      break;
     case 1006:
       {
-        SKIPBITS(22);
-        GETBITSSIGN(antX, 38); SKIPBITS(2);
-        GETBITSSIGN(antY, 38); SKIPBITS(2);
-        GETBITSSIGN(antZ, 38);
-        GETBITS(    antH, 16);
-        handle->antList[handle->antSize + 0] = antX;
-        handle->antList[handle->antSize + 1] = antY;
-        handle->antList[handle->antSize + 2] = antZ;
-        handle->antList[handle->antSize + 3] = antH;
-        if(handle->antSize < 100 - 6 ) {handle->antSize += 4;}
+        double antX, antY, antZ, antH; /* Antenna XYZ-H */
+        SKIPBITS(22)
+        GETBITSSIGN(antX, 38)
+        SKIPBITS(2)
+        GETBITSSIGN(antY, 38)
+        SKIPBITS(2)
+        GETBITSSIGN(antZ, 38)
+        GETBITS(    antH, 16)
+        handle->antList6[handle->antSize6 + 0] = antX;
+        handle->antList6[handle->antSize6 + 1] = antY;
+        handle->antList6[handle->antSize6 + 2] = antZ;
+        handle->antList6[handle->antSize6 + 3] = antH;
+        if(handle->antSize6 < 100 - 6 ) {handle->antSize6 += 4;}
+        ret = 1006;
+      }
+      break;
+    case 1007:
+      {
+        char *antC = '\0'; /* Antenna Descriptor */
+        char *antS = '\0';
+        antC = (char*) malloc(32);   
+        antS  = (char*) malloc(32);   
+        uint32_t antN;
+        uint32_t antD;
+        uint32_t jj;
+
+        SKIPBITS(12)
+        GETBITS(antN, 8)
+        if ((antN>0) && (antN<32)) {
+          for (jj = 0; jj < antN; jj++) {
+            GETBITS(antD, 8)
+            sprintf(antS,"%c",antD);
+            if (jj<1) {
+              strcpy(antC,antS);
+            } else {
+              strcat(antC,antS);
+            }
+          }
+          handle->antType[handle->antSize] = antC;
+          if(handle->antSize < 100) {handle->antSize += 1;}
+        }
+        ret = 1007;
+      }
+      break;
+    case 1008:
+      {
+        char *antC = '\0'; /* Antenna Descriptor */
+        char *antS = '\0';
+        antC = (char*) malloc(32);   
+        antS  = (char*) malloc(32);   
+        uint32_t antN;
+        uint32_t antD;
+        uint32_t jj;
+
+        SKIPBITS(12)
+        GETBITS(antN, 8)
+        if ((antN>0) && (antN<32)) {
+          for (jj = 0; jj < antN; jj++) {
+            GETBITS(antD, 8)
+            sprintf(antS,"%c",antD);
+            if (jj<1) {
+              strcpy(antC,antS);
+            } else {
+              strcat(antC,antS);
+            }
+          }
+          handle->antType[handle->antSize] = antC;
+          if(handle->antSize < 100) {handle->antSize += 1;}
+        }
+        ret = 1008;
       }
       break;
@@ -1639,5 +1714,5 @@
 
 #ifndef NO_RTCM3_MAIN
-static char datestr[]     = "$Date: 2008/09/02 14:14:33 $";
+static char datestr[]     = "$Date: 2008/09/22 09:39:49 $";
 
 /* The string, which is send as agent in HTTP request */
Index: /trunk/BNC/bncabout.html
===================================================================
--- /trunk/BNC/bncabout.html	(revision 1183)
+++ /trunk/BNC/bncabout.html	(revision 1184)
@@ -21,5 +21,5 @@
 The Bundesamt fuer Geodaesie und Kartographie (BKG) may not be held liable for damages of any kind, direct or consequential, which may result from the use of this software.<br>
 <br>
-BKG, Frankfurt, Germany, September 2008<br>
+BKG, Frankfurt, Germany, November 2008<br>
 E-Mail: <a><u>euref-ip@bkg.bund.de</u></a>.<br>
 </p>
Index: /trunk/BNC/bncgetthread.cpp
===================================================================
--- /trunk/BNC/bncgetthread.cpp	(revision 1183)
+++ /trunk/BNC/bncgetthread.cpp	(revision 1184)
@@ -737,6 +737,6 @@
 	    bool dump = true;
 
-	    RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder);
-	    if ( decoder2 && !_rnx_set_position ) {
+     RTCM2Decoder* decoder2 = dynamic_cast<RTCM2Decoder*>(_decoder);
+     if ( decoder2 && !_rnx_set_position ) {
 	      double stax, stay, staz;
 	      double dL1[3], dL2[3];
@@ -796,6 +796,6 @@
         if ( _checkMountPoint == _staID || _checkMountPoint == "ALL" ) {
 
-          // RTCM message types
-          // ------------------
+          // RTCMv3 message types
+          // --------------------
           if (0<_decoder->_typeList.size()) {
             QString type;
@@ -807,13 +807,39 @@
           _decoder->_typeList.clear();
 
-          // Antenna XYZ & H
-          // ---------------
-          if (0<_decoder->_antList.size()) {
+          // RTCMv3 antenna descriptor
+          // -------------------------
+          if (0<_decoder->_antType.size()) {
+            QString ant1;
+            for (int ii=0;ii<_decoder->_antType.size();ii++) {
+              ant1 =  QString("%1 ").arg(_decoder->_antType[ii]);
+              emit(newMessage(_staID + ": Antenna descriptor " + ant1.toAscii() ));
+            }
+          }
+          _decoder->_antType.clear();
+
+          // RTCMv3 antenna XYZ
+          // ------------------
+          if (0<_decoder->_antList5.size()) {
+            QString ant1,ant2,ant3;
+            for (int ii=0;ii<_decoder->_antList5.size();ii+=3) {
+              ant1 =  QString("%1 ").arg(_decoder->_antList5[ii+0]*0.0001,0,'f',4);
+              ant2 =  QString("%1 ").arg(_decoder->_antList5[ii+1]*0.0001,0,'f',4);
+              ant3 =  QString("%1 ").arg(_decoder->_antList5[ii+2]*0.0001,0,'f',4);
+              emit(newMessage(_staID + ": ARP (ITRF) X " + ant1.toAscii() + "m" ));
+              emit(newMessage(_staID + ": ARP (ITRF) Y " + ant2.toAscii() + "m"));
+              emit(newMessage(_staID + ": ARP (ITRF) Z " + ant3.toAscii() + "m"));
+            }
+          }
+          _decoder->_antList5.clear();
+
+          // RTCMv3 antenna XYZ-H
+          // --------------------
+          if (0<_decoder->_antList6.size()) {
             QString ant1,ant2,ant3,ant4;
-            for (int ii=0;ii<_decoder->_antList.size();ii+=4) {
-              ant1 =  QString("%1 ").arg(_decoder->_antList[ii+0]*0.0001,0,'f',4);
-              ant2 =  QString("%1 ").arg(_decoder->_antList[ii+1]*0.0001,0,'f',4);
-              ant3 =  QString("%1 ").arg(_decoder->_antList[ii+2]*0.0001,0,'f',4);
-              ant4 =  QString("%1 ").arg(_decoder->_antList[ii+3]*0.0001,0,'f',4);
+            for (int ii=0;ii<_decoder->_antList6.size();ii+=4) {
+              ant1 =  QString("%1 ").arg(_decoder->_antList6[ii+0]*0.0001,0,'f',4);
+              ant2 =  QString("%1 ").arg(_decoder->_antList6[ii+1]*0.0001,0,'f',4);
+              ant3 =  QString("%1 ").arg(_decoder->_antList6[ii+2]*0.0001,0,'f',4);
+              ant4 =  QString("%1 ").arg(_decoder->_antList6[ii+3]*0.0001,0,'f',4);
               emit(newMessage(_staID + ": ARP (ITRF) X " + ant1.toAscii() + "m" ));
               emit(newMessage(_staID + ": ARP (ITRF) Y " + ant2.toAscii() + "m"));
@@ -822,5 +848,5 @@
             }
           }
-          _decoder->_antList.clear();
+          _decoder->_antList6.clear();
         }
       }
Index: /trunk/BNC/bnchelp.html
===================================================================
--- /trunk/BNC/bnchelp.html	(revision 1183)
+++ /trunk/BNC/bnchelp.html	(revision 1184)
@@ -71,4 +71,5 @@
 &nbsp; &nbsp; &nbsp; 3.4.1. <a href=#genlog>Logfile</a><br>
 &nbsp; &nbsp; &nbsp; 3.4.2. <a href=#genapp>Append Files</a><br>
+&nbsp; &nbsp; &nbsp; 3.4.3. <a href=#reconf>Reread Configuration</a><br>
 3.5. <a href=#rinex>RINEX - Observations</a><br>
 &nbsp; &nbsp; &nbsp; 3.5.1. <a href=#rnxname>File Names</a><br>
@@ -165,4 +166,7 @@
 </p>
 <p><a name="general"><h4>3.4. General</h4></p>
+<p>
+The following defines general settings for BNC's logfile, file handling and re-configuration on-the-fly.
+</p>
 
 <p><a name="genlog"><h4>3.4.1 Logfile - optional</h4></p>
@@ -171,7 +175,22 @@
 </p>
 
-<p><a name="genapp"><h4>3.4.2 Append Files</h4></p>
+<p><a name="genapp"><h4>3.4.2 Append Files - optional</h4></p>
 <p>
 When BNC is started, new files are created by default and any existing files with the same name will be overwritten. However, users might want to append existing files following a restart of BNC, a system crash or when BNC crashed. Tick 'Append files' to continue with existing files and keep what has been recorded so far. Note that option 'Append files' affects all types of files created by BNC.
+</p> 
+
+<p><a name="reconf"><h4>3.4.3 Reread Configuration - mandatory</h4></p>
+<p>
+When operating BNC in online mode, some configuration parameters can be changed on-the-fly without interrupting the running process. For that BNC rereads parts of its configuration (see section 'Config File') in pre-defined intervals. Configuration parameters that can be changed on-the-fly are
+</p>
+<p>
+<ul>
+<li>'mountPoints' to change the selection of streams to be processed, see section 'Mountpoints',</li>
+<li>'waitTime' to change the 'Wait for full epoch' parameter, see section 'Synchronized Observations', and</li>
+<li>'binSample' to change the 'Sampling' parameter, see section 'Synchronized Observations'.</li>
+</ul> 
+</p> 
+<p> 
+Select '1 min', '1 hour', or '1 day' to let BNC reread the above mentioned configuration parameters every full minute, hour, or day and thus avoid usage of 'Start', 'Stop', or 'Quit' buttons.
 </p> 
 
@@ -675,5 +694,5 @@
 <p> 
 Command line options are available to run BNC in 'no window' mode or let it read data from a file in 'offline' mode.
-BNC will then use processing options from the configuration file ${HOME}/.config/BKG/BNC_NTRIP_Client.conf (Unix/Linux, see Config File example in the Annex) or from the register BKG_NTRIP_Client (Windows). Note that the self-explaining contents of the configuration file or the Windows register can easily be edited. 
+BNC will then use processing options from the configuration file ${HOME}/.config/BKG/BNC_NTRIP_Client.conf (Unix/Linux, see 'Config File' example in the Annex) or from the register BKG_NTRIP_Client (Windows). Note that the self-explaining contents of the configuration file or the Windows register can easily be edited. 
 </p> 
 
@@ -790,5 +809,5 @@
 <tr><td>Jul 2007 &nbsp;</td><td>Version 1.4 &nbsp;</td><td>[Bug] Skip messages from proxy server<br> [Bug] Call RINEX script through 'nohup'</td></tr>
 <tr><td>Apr 2008 &nbsp;</td><td>Version 1.5 &nbsp;</td><td>[Add] Handle ephemeris from RTCM Version 3.x streams<br> [Add] Upgrade to Qt Version 4.3.2<br> [Add] Optional RINEX v3 output<br> [Add] SBAS support<br> [Bug] RINEX skeleton download following stream outage<br> [Add] Handle ephemeris from RTIGS streams<br> [Add] Monitor stream failure/recovery and latency<br> [Mod] Redesign of main window<br> [Bug] Freezing of About window on Mac systems<br> [Bug] Fixed problem with PRN 32 in RTCMv2 decoder<br> [Bug] Fix for Trimble 4000SSI receivers in RTCMv2 decoder<br> [Mod] Major revision of input buffer in RTCMv2 decoder</td></tr>
-<tr><td>Oct 2008 &nbsp;</td><td>Version 1.6 &nbsp;</td><td>[Mod] Fill blanc columns in RINEXv3 with 0.000<br> [Add] RTCMv3 decoder for clock and orbit corrections<br>[Add] Check RTCMv3 streams for incoming message types<br> [Add] Decode RTCMv2 message types 3, 20, 21, and 22<br> [Add] Loss of lock and lock time indicator in RINEX output<br> [Bug] Rounding error in RTCMv3 decoder concern. GLONASS height<br> [Mod] Accept GLONASS in RTCMv3 when transmitted first<br> [Add] Leap second 1 January 2009<br> [Add] Read data from file, offline mode</td></tr>
+<tr><td>Nov 2008 &nbsp;</td><td>Version 1.6 &nbsp;</td><td>[Mod] Fill blanc columns in RINEXv3 with 0.000<br> [Add] RTCMv3 decoder for clock and orbit corrections<br>[Add] Check RTCMv3 streams for incoming message types<br> [Add] Decode RTCMv2 message types 3, 20, 21, and 22<br> [Add] Loss of lock and lock time indicator in RINEX output<br> [Bug] Rounding error in RTCMv3 decoder concern. GLONASS height<br> [Mod] Accept GLONASS in RTCMv3 when transmitted first<br> [Add] Leap second 1 January 2009<br> [Add] Read data from file, offline mode</td></tr>
 </table>
 </p>
@@ -983,4 +1002,8 @@
 casterPort=80
 casterUser=user
+corrIntr=1 day
+corrPath=
+corrPort=
+corrTime=5
 ephIntr=1 day
 ephPath=/home/user/rinex
@@ -990,4 +1013,5 @@
 mountPoints=//user:pass@www.euref-ip.net:2101/ACOR0 RTCM_2.3 43.36 351.60 no, //user:pass@www.igs-ip.net:2101/FFMJ3 RTCM_3.0 41.58 1.40 no
 obsRate=
+onTheFlyInterval=1 day
 outEphPort=2102
 outFile=/home/user/ascii
@@ -998,7 +1022,7 @@
 rnxAppend=2
 rnxIntr=15 min
-rnxPath=/home/weber/rinex
+rnxPath=/home/user/rinex
 rnxSampl=0
-rnxScript=/home/weber/up2archive
+rnxScript=/home/user/up2archive
 rnxSkel=SKL
 rnxV3=2
@@ -1006,4 +1030,7 @@
 </pre>
 </p>
+<p>
+Note that on Windows systems configuration parameters are saved in register BKG_NTRIP_Client.
+<p>
 
 <p><a name="links"><h3>8.5 Links</h3></p>
Index: /trunk/BNC/bncwindow.cpp
===================================================================
--- /trunk/BNC/bncwindow.cpp	(revision 1183)
+++ /trunk/BNC/bncwindow.cpp	(revision 1184)
@@ -273,4 +273,5 @@
   _rnxSkelLineEdit->setWhatsThis(tr("<p>Whenever BNC starts generating RINEX Observation files (and then once every day at midnight), it first tries to retrieve information needed for RINEX headers from so-called public RINEX header skeleton files which are derived from sitelogs. However, sometimes public RINEX header skeleton files are not available, its contents is not up to date, or you need to put additional/optional records in the RINEX header.</p><p>For that BNC allows using personal skeleton files that contain the header records you would like to include. You can derive a personal RINEX header skeleton file from the information given in an up to date sitelog. A file in the RINEX 'Directory' with the RINEX 'Skeleton extension' is interpreted by BNC as a personal RINEX header skeleton file for the corresponding stream.</p>"));
   _rnxAppendCheckBox->setWhatsThis(tr("<p>When BNC is started, new files are created by default and any existing files with the same name will be overwritten. However, users might want to append already existing files following a restart of BNC, a system crash or when BNC crashed. Tick 'Append files' to continue with existing files and keep what has been recorded so far.</p>"));
+  _onTheFlyComboBox->setWhatsThis(tr("<p>When operating BNC in online mode, some configuration parameters can be changed on-the-fly without interrupting the running process. For that BNC rereads parts of its configuration in pre-defined intervals.<p></p>Select '1 min', '1 hour', or '1 day' to let BNC reread its configuration every full minute, hour, or day and thus avoid usage of 'Start', 'Stop', or 'Quit' buttons.</p>"));
   _rnxIntrComboBox->setWhatsThis(tr("<p>Select the length of the RINEX Observation file.</p>"));
   _ephIntrComboBox->setWhatsThis(tr("<p>Select the length of the RINEX Navigation file.</p>"));
@@ -332,7 +333,7 @@
   gLayout->addWidget(new QLabel("Append files")    ,1,0 );
   gLayout->addWidget(_rnxAppendCheckBox,     1,1  );
-  gLayout->addWidget(new QLabel("Reread Configuration every")    ,2,0 );
+  gLayout->addWidget(new QLabel("Reread configuration")    ,2,0 );
   gLayout->addWidget(_onTheFlyComboBox,     2,1  );
-  gLayout->addWidget(new QLabel("General settings for logfile and file handling."),3, 0, 1, 2, Qt::AlignLeft);
+  gLayout->addWidget(new QLabel("General settings for logfile, file handling and re-configuration on-the-fly."),3, 0, 1, 2, Qt::AlignLeft);
   gLayout->addWidget(new QLabel("    "),4,0);
   gLayout->addWidget(new QLabel("    "),5,0);
