Index: trunk/BNC/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8800)
+++ trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8801)
@@ -243,5 +243,5 @@
         {GPS_WAVELENGTH_L1, "1P"},
         {GPS_WAVELENGTH_L1, "1W"},
-        {0.0, 0}/*{GPS_WAVELENGTH_L1,"1Y"}*/,
+        {0.0, 0},
         {0.0, 0},
         {0.0, 0},
@@ -249,5 +249,5 @@
         {GPS_WAVELENGTH_L2, "2P"},
         {GPS_WAVELENGTH_L2, "2W"},
-        {0.0, 0}/*{GPS_WAVELENGTH_L2,"2Y"}*/,
+        {0.0, 0},
         {0.0, 0},
         {0.0, 0},
@@ -288,13 +288,13 @@
         {1.0, "2C"},
         {1.0, "2P"},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
+        {GLO_WAVELENGTH_L1a, "4A"},
+        {GLO_WAVELENGTH_L1a, "4B"},
+        {GLO_WAVELENGTH_L1a, "4X"},
+        {GLO_WAVELENGTH_L2a, "6A"},
+        {GLO_WAVELENGTH_L2a, "6B"},
+        {GLO_WAVELENGTH_L2a, "6X"},
+        {GLO_WAVELENGTH_L3,  "3I"},
+        {GLO_WAVELENGTH_L3,  "3Q"},
+        {GLO_WAVELENGTH_L3,  "3X"},
         {0.0, 0},
         {0.0, 0},
@@ -316,15 +316,15 @@
 static struct CodeData gal[RTCM3_MSM_NUMSIG] = {
         {0.0, 0},
-        {GAL_WAVELENGTH_E1, "1C"},
-        {GAL_WAVELENGTH_E1, "1A"},
-        {GAL_WAVELENGTH_E1, "1B"},
-        {GAL_WAVELENGTH_E1, "1X"},
-        {GAL_WAVELENGTH_E1, "1Z"},
-        {0.0, 0},
-        {GAL_WAVELENGTH_E6, "6C"},
-        {GAL_WAVELENGTH_E6, "6A"},
-        {GAL_WAVELENGTH_E6, "6B"},
-        {GAL_WAVELENGTH_E6, "6X"},
-        {GAL_WAVELENGTH_E6, "6Z"},
+        {GAL_WAVELENGTH_E1,  "1C"},
+        {GAL_WAVELENGTH_E1,  "1A"},
+        {GAL_WAVELENGTH_E1,  "1B"},
+        {GAL_WAVELENGTH_E1,  "1X"},
+        {GAL_WAVELENGTH_E1,  "1Z"},
+        {0.0, 0},
+        {GAL_WAVELENGTH_E6,  "6C"},
+        {GAL_WAVELENGTH_E6,  "6A"},
+        {GAL_WAVELENGTH_E6,  "6B"},
+        {GAL_WAVELENGTH_E6,  "6X"},
+        {GAL_WAVELENGTH_E6,  "6Z"},
         {0.0, 0},
         {GAL_WAVELENGTH_E5B, "7I"},
@@ -332,7 +332,7 @@
         {GAL_WAVELENGTH_E5B, "7X"},
         {0.0, 0},
-        {GAL_WAVELENGTH_E5AB, "8I"},
-        {GAL_WAVELENGTH_E5AB, "8Q"},
-        {GAL_WAVELENGTH_E5AB, "8X"},
+        {GAL_WAVELENGTH_E5AB,"8I"},
+        {GAL_WAVELENGTH_E5AB,"8Q"},
+        {GAL_WAVELENGTH_E5AB,"8X"},
         {0.0, 0},
         {GAL_WAVELENGTH_E5A, "5I"},
@@ -346,5 +346,5 @@
         {0.0, 0},
         {0.0, 0},
-        {0.0, 0},
+        {0.0, 0}
     };
 
@@ -406,13 +406,13 @@
         {0.0, 0},
         {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
-        {0.0, 0},
+        {BDS_WAVELENGTH_B1C, "1D"},
+        {BDS_WAVELENGTH_B1C, "1P"},
+        {BDS_WAVELENGTH_B1C, "1X"},
+        {0.0, 0},
+        {0.0, 0},
+        {0.0, 0},
+        {BDS_WAVELENGTH_B2a, "5D"},
+        {BDS_WAVELENGTH_B2a, "5P"},
+        {BDS_WAVELENGTH_B2a, "5X"},
         {0.0, 0},
         {0.0, 0},
@@ -465,6 +465,5 @@
 //
 ////////////////////////////////////////////////////////////////////////////
-bool RTCM3Decoder::DecodeRTCM3MSM(unsigned char* data, int size)
-    {
+bool RTCM3Decoder::DecodeRTCM3MSM(unsigned char* data, int size) {
   bool decoded = false;
   int type, syncf, i;
@@ -525,11 +524,16 @@
     int sigmask, numsat = 0, numsig = 0;
     uint64_t satmask, cellmask, ui;
-    double rrmod[RTCM3_MSM_NUMSAT];
-    int rrint[RTCM3_MSM_NUMSAT], rdop[RTCM3_MSM_NUMSAT],
-        extsat[RTCM3_MSM_NUMSAT];
-    int ll[RTCM3_MSM_NUMCELLS]/*, hc[RTCM3_MSM_NUMCELLS]*/;
-    double cnr[RTCM3_MSM_NUMCELLS];
-    double cp[RTCM3_MSM_NUMCELLS], psr[RTCM3_MSM_NUMCELLS],
-        dop[RTCM3_MSM_NUMCELLS];
+    // satellite data
+    double rrmod[RTCM3_MSM_NUMSAT]; // GNSS sat rough ranges modulo 1 millisecond
+    int    rrint[RTCM3_MSM_NUMSAT]; // number of integer msecs in GNSS sat rough ranges
+    int    rdop[RTCM3_MSM_NUMSAT];  // GNSS sat rough phase range rates
+    int    extsat[RTCM3_MSM_NUMSAT];// extended sat info
+    // signal data
+    int    ll[RTCM3_MSM_NUMCELLS];  // lock time indicator
+    /*int    hc[RTCM3_MSM_NUMCELLS];*/  // half cycle ambiguity indicator
+    double cnr[RTCM3_MSM_NUMCELLS]; // signal cnr
+    double cp[RTCM3_MSM_NUMCELLS];  // fine phase range data
+    double psr[RTCM3_MSM_NUMCELLS]; // fine psr
+    double dop[RTCM3_MSM_NUMCELLS]; // fine phase range rates
 
     SKIPBITS(3 + 7 + 2 + 2 + 1 + 3)
@@ -547,5 +551,5 @@
     i = numsat * numsig;
     GETBITS64(cellmask, (unsigned )i)
-
+    // satellite data
     switch (type % 10) {
       case 1:
@@ -575,5 +579,5 @@
         break;
     }
-
+    // signal data
     int numcells = numsat * numsig;
     /** Drop anything which exceeds our cell limit. Increase limit definition
@@ -726,15 +730,18 @@
               {
                 int k = GLOFreq[RTCM3_MSM_NUMSAT - i - 1];
-                if (extsat[numsat] < 14) {
-                  k = GLOFreq[RTCM3_MSM_NUMSAT - i - 1] = 100 + extsat[numsat]
-                      - 7;
+                if (extsat[numsat] < 14) { // channel number is available as extended info for MSM5/7
+                  k = GLOFreq[RTCM3_MSM_NUMSAT - i - 1] = 100 + extsat[numsat] - 7;
                 }
-                if (k)
-                  cd.wl = (
-                      cd.wl == 0.0 ?
-                          GLO_WAVELENGTH_L1(k - 100) :
-                          GLO_WAVELENGTH_L2(k - 100));
-                else
+                if (k) {
+                  if      (cd.wl == 0.0) {
+                    cd.wl = GLO_WAVELENGTH_L1(k - 100);
+                  }
+                  else if (cd.wl == 1.0) {
+                    cd.wl = GLO_WAVELENGTH_L2(k - 100);
+                  }
+                }
+                else if (!k && cd.wl <= 1) {
                   cd.code = 0;
+                }
               }
               break;
@@ -754,5 +761,5 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
@@ -761,5 +768,5 @@
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + (rrmod[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
+                                 + (rrmod[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -771,11 +778,10 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
-
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + rrmod[numsat] * LIGHTSPEED / 1000.0 / cd.wl;
+                                 + rrmod[numsat] * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -787,12 +793,10 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat] +  rrint[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
-
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0
-                          / cd.wl;
+                                 + (rrmod[numsat] +  rrint[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -800,5 +804,4 @@
                   frqObs->_slipCounter = ll[count];
                 }
-
                 frqObs->_snr = cnr[count];
                 frqObs->_snrValid = true;
@@ -807,12 +810,10 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
-
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0
-                          / cd.wl;
+                                 + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -820,8 +821,6 @@
                   frqObs->_slipCounter = ll[count];
                 }
-
                 frqObs->_snr = cnr[count];
                 frqObs->_snrValid = true;
-
                 if (dop[count] > -1.6384) {
                   frqObs->_doppler = -(dop[count] + rdop[numsat]) / cd.wl;
@@ -832,12 +831,10 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
-
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0
-                          / cd.wl;
+                                 + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -852,12 +849,10 @@
                 if (psr[count] > -1.0 / (1 << 10)) {
                   frqObs->_code = psr[count] * LIGHTSPEED / 1000.0
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
+                                + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0;
                   frqObs->_codeValid = true;
                 }
-
                 if (cp[count] > -1.0 / (1 << 8)) {
                   frqObs->_phase = cp[count] * LIGHTSPEED / 1000.0 / cd.wl
-                      + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0
-                          / cd.wl;
+                                 + (rrmod[numsat] + rrint[numsat]) * LIGHTSPEED / 1000.0 / cd.wl;
                   frqObs->_phaseValid = true;
                   frqObs->_lockTime = lti2sec(type,ll[count]);
@@ -879,6 +874,7 @@
         }
       }
-      if (CurrentObs._obs.size() > 0)
+      if (CurrentObs._obs.size() > 0) {
         _CurrentObsList.push_back(CurrentObs);
+      }
     }
   }
@@ -1118,5 +1114,8 @@
     GETBITS(i, 1)
     tk += i * 30;
-    eph._tki = tk < 3 * 60 * 60 ? tk - 3 * 60 * 60 + 86400 : tk - 3 * 60 * 60;
+    eph._tki = tk - 3*60*60;
+    if(eph._tki < 0.0) {
+      eph._tki += 86400.0;
+    }
     GETBITS(eph._health, 1) /* MSB of Bn*/
     GETBITS(eph._P2, 1)  /* P2 */
Index: trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h
===================================================================
--- trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h	(revision 8800)
+++ trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h	(revision 8801)
@@ -108,5 +108,5 @@
   CLOCKORBIT_NUMQZSS=10,
   CLOCKORBIT_NUMSBAS=38,
-  CLOCKORBIT_NUMBDS=37,
+  CLOCKORBIT_NUMBDS=63,
   CLOCKORBIT_NUMBIAS=100,
   CLOCKORBIT_NUMIONOLAYERS=4,
@@ -236,5 +236,8 @@
   CODETYPE_BDS_B2a_D         = 12,
   CODETYPE_BDS_B2a_P         = 13,
-  CODETYPE_BDS_B2a_DP        = 14
+  CODETYPE_BDS_B2a_DP        = 14,
+
+  CODETYPE_IRNSS_S_SPS       = 8,
+  CODETYPE_IRNSS_L5_SPS      = 22
 };
 
@@ -372,5 +375,5 @@
 
 /* return size of resulting data or 0 in case of an error */
-size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type,
+size_t MakeClockOrbit(/*const*/ struct ClockOrbit *co, enum ClockOrbitType type,
        int moremessagesfollow, char *buffer, size_t size);
 size_t MakeCodeBias(const struct CodeBias *b, enum CodeBiasType type,
Index: trunk/BNC/src/RTCM3/gnss.h
===================================================================
--- trunk/BNC/src/RTCM3/gnss.h	(revision 8800)
+++ trunk/BNC/src/RTCM3/gnss.h	(revision 8801)
@@ -26,36 +26,42 @@
 #define GNSS_H
 
-#define LIGHTSPEED         2.99792458e8    /* m/sec */
-#define GPS_FREQU_L1       1575420000.0  /* Hz */
-#define GPS_FREQU_L2       1227600000.0  /* Hz */
-#define GPS_FREQU_L5       1176450000.0  /* Hz */
-#define GPS_WAVELENGTH_L1  (LIGHTSPEED / GPS_FREQU_L1) /* m */
-#define GPS_WAVELENGTH_L2  (LIGHTSPEED / GPS_FREQU_L2) /* m */
-#define GPS_WAVELENGTH_L5  (LIGHTSPEED / GPS_FREQU_L5) /* m */
+#define LIGHTSPEED          2.99792458e8    /* m/sec */
+#define GPS_FREQU_L1        1575420000.0  /* Hz */
+#define GPS_FREQU_L2        1227600000.0  /* Hz */
+#define GPS_FREQU_L5        1176450000.0  /* Hz */
+#define GPS_WAVELENGTH_L1   (LIGHTSPEED / GPS_FREQU_L1) /* m */
+#define GPS_WAVELENGTH_L2   (LIGHTSPEED / GPS_FREQU_L2) /* m */
+#define GPS_WAVELENGTH_L5   (LIGHTSPEED / GPS_FREQU_L5) /* m */
 
-#define GLO_FREQU_L1_BASE  1602000000.0  /* Hz */
-#define GLO_FREQU_L2_BASE  1246000000.0  /* Hz */
-#define GLO_FREQU_L1_STEP      562500.0  /* Hz */
-#define GLO_FREQU_L2_STEP      437500.0  /* Hz */
-#define GLO_FREQU_L1(a)      (GLO_FREQU_L1_BASE+(a)*GLO_FREQU_L1_STEP)
-#define GLO_FREQU_L2(a)      (GLO_FREQU_L2_BASE+(a)*GLO_FREQU_L2_STEP)
+#define GLO_FREQU_L1_BASE   1602000000.0  /* Hz */
+#define GLO_FREQU_L2_BASE   1246000000.0  /* Hz */
+#define GLO_FREQU_L1_STEP       562500.0  /* Hz */
+#define GLO_FREQU_L2_STEP       437500.0  /* Hz */
+#define GLO_FREQU_L1(a)     (GLO_FREQU_L1_BASE+(a)*GLO_FREQU_L1_STEP)
+#define GLO_FREQU_L2(a)     (GLO_FREQU_L2_BASE+(a)*GLO_FREQU_L2_STEP)
+#define GLO_FREQU_L1a       1600995000.0  /* Hz */
+#define GLO_FREQU_L2a       1248060000.0  /* Hz */
+#define GLO_FREQU_L3        1202025000.0  /* Hz */
 #define GLO_WAVELENGTH_L1(a) (LIGHTSPEED / GLO_FREQU_L1(a)) /* m */
 #define GLO_WAVELENGTH_L2(a) (LIGHTSPEED / GLO_FREQU_L2(a)) /* m */
+#define GLO_WAVELENGTH_L1a   (LIGHTSPEED / GLO_FREQU_L1a)   /* m */
+#define GLO_WAVELENGTH_L2a   (LIGHTSPEED / GLO_FREQU_L2a)   /* m */
+#define GLO_WAVELENGTH_L3    (LIGHTSPEED / GLO_FREQU_L3)    /* m */
 
-#define GAL_FREQU_E1       1575420000.0  /* Hz */
-#define GAL_FREQU_E5A      1176450000.0  /* Hz */
-#define GAL_FREQU_E5AB     1191795000.0  /* Hz */
-#define GAL_FREQU_E5B      1207140000.0  /* Hz */
-#define GAL_FREQU_E6       1278750000.0  /* Hz */
-#define GAL_WAVELENGTH_E1     (LIGHTSPEED / GAL_FREQU_E1) /* m */
-#define GAL_WAVELENGTH_E5A    (LIGHTSPEED / GAL_FREQU_E5A) /* m */
-#define GAL_WAVELENGTH_E5AB   (LIGHTSPEED / GAL_FREQU_E5AB) /* m */
-#define GAL_WAVELENGTH_E5B    (LIGHTSPEED / GAL_FREQU_E5B) /* m */
-#define GAL_WAVELENGTH_E6     (LIGHTSPEED / GAL_FREQU_E6) /* m */
+#define GAL_FREQU_E1        1575420000.0  /* Hz */
+#define GAL_FREQU_E5A       1176450000.0  /* Hz */
+#define GAL_FREQU_E5AB      1191795000.0  /* Hz */
+#define GAL_FREQU_E5B       1207140000.0  /* Hz */
+#define GAL_FREQU_E6        1278750000.0  /* Hz */
+#define GAL_WAVELENGTH_E1   (LIGHTSPEED / GAL_FREQU_E1)  /* m */
+#define GAL_WAVELENGTH_E5A  (LIGHTSPEED / GAL_FREQU_E5A) /* m */
+#define GAL_WAVELENGTH_E5AB (LIGHTSPEED / GAL_FREQU_E5AB)/* m */
+#define GAL_WAVELENGTH_E5B  (LIGHTSPEED / GAL_FREQU_E5B) /* m */
+#define GAL_WAVELENGTH_E6   (LIGHTSPEED / GAL_FREQU_E6)  /* m */
 
-#define QZSS_FREQU_L1       1575420000.0  /* Hz */
-#define QZSS_FREQU_L2       1227600000.0  /* Hz */
-#define QZSS_FREQU_L5       1176450000.0  /* Hz */
-#define QZSS_FREQU_L6      1278750000.0 /* Hz */
+#define QZSS_FREQU_L1       1575420000.0 /* Hz */
+#define QZSS_FREQU_L2       1227600000.0 /* Hz */
+#define QZSS_FREQU_L5       1176450000.0 /* Hz */
+#define QZSS_FREQU_L6       1278750000.0 /* Hz */
 #define QZSS_WAVELENGTH_L1  (LIGHTSPEED / QZSS_FREQU_L1) /* m */
 #define QZSS_WAVELENGTH_L2  (LIGHTSPEED / QZSS_FREQU_L2) /* m */
@@ -63,13 +69,17 @@
 #define QZSS_WAVELENGTH_L6  (LIGHTSPEED / QZSS_FREQU_L6) /* m */
 
-#define BDS_FREQU_B1       1561098000.0  /* Hz */
-#define BDS_FREQU_B2       1207140000.0  /* Hz */
-#define BDS_FREQU_B3       1268520000.0  /* Hz */
-#define BDS_WAVELENGTH_B1  (LIGHTSPEED / BDS_FREQU_B1) /* m */
-#define BDS_WAVELENGTH_B2  (LIGHTSPEED / BDS_FREQU_B2) /* m */
-#define BDS_WAVELENGTH_B3  (LIGHTSPEED / BDS_FREQU_B3) /* m */
+#define BDS_FREQU_B1        1561098000.0  /* Hz */
+#define BDS_FREQU_B2        1207140000.0  /* Hz */
+#define BDS_FREQU_B3        1268520000.0  /* Hz */
+#define BDS_FREQU_B1C       1575420000.0  /* Hz */
+#define BDS_FREQU_B2a       1176450000.0  /* Hz */
+#define BDS_WAVELENGTH_B1   (LIGHTSPEED / BDS_FREQU_B1)  /* m */
+#define BDS_WAVELENGTH_B2   (LIGHTSPEED / BDS_FREQU_B2)  /* m */
+#define BDS_WAVELENGTH_B3   (LIGHTSPEED / BDS_FREQU_B3)  /* m */
+#define BDS_WAVELENGTH_B1C  (LIGHTSPEED / BDS_FREQU_B1C) /* m */
+#define BDS_WAVELENGTH_B2a  (LIGHTSPEED / BDS_FREQU_B2a) /* m */
 
-#define IRNSS_FREQU_L5     1176450000.0 /* Hz */
-#define IRNSS_FREQU_S      2492028000.0 /* Hz */
+#define IRNSS_FREQU_L5      1176450000.0 /* Hz */
+#define IRNSS_FREQU_S       2492028000.0 /* Hz */
 #define IRNSS_WAVELENGTH_L5 (LIGHTSPEED / IRNSS_FREQU_L5) /* m */
 #define IRNSS_WAVELENGTH_S  (LIGHTSPEED / IRNSS_FREQU_S)  /* m */
Index: trunk/BNC/src/bncutils.cpp
===================================================================
--- trunk/BNC/src/bncutils.cpp	(revision 8800)
+++ trunk/BNC/src/bncutils.cpp	(revision 8801)
@@ -173,5 +173,4 @@
     }
   }
-
 }
 
@@ -810,4 +809,5 @@
 
 double accuracyFromIndex(int index, t_eph::e_type type) {
+double accuracy = -1.0;
 
   if (type == t_eph::GPS ||
@@ -817,33 +817,32 @@
     if ((index >= 0) && (index <= 6)) {
       if (index == 3) {
-        return  ceil(10.0 * pow(2.0, (double(index) / 2.0) + 1.0)) / 10.0;
+        accuracy =  ceil(10.0 * pow(2.0, (double(index) / 2.0) + 1.0)) / 10.0;
       }
       else {
-        return floor(10.0 * pow(2.0, (double(index) / 2.0) + 1.0)) / 10.0;
+        accuracy = floor(10.0 * pow(2.0, (double(index) / 2.0) + 1.0)) / 10.0;
       }
     }
     else if ((index > 6) && (index <= 15)) {
-      return (10.0 * pow(2.0, (double(index) - 2.0))) / 10.0;
+      accuracy = (10.0 * pow(2.0, (double(index) - 2.0))) / 10.0;
     }
     else {
-      return 8192.0;
+      accuracy = 8192.0;
     }
   }
   else if (type == t_eph::Galileo) {
-
     if ((index >= 0) && (index <= 49)) {
-      return (double(index) / 100.0);
+      accuracy = (double(index) / 100.0);
     }
     else if ((index > 49) && (index <= 74)) {
-      return (50.0 + (double(index) - 50.0) * 2.0) / 100.0;
+      accuracy = (50.0 + (double(index) - 50.0) * 2.0) / 100.0;
     }
     else if ((index > 74) && (index <= 99)) {
-      return 1.0 + (double(index) - 75.0) * 0.04;
+      accuracy = 1.0 + (double(index) - 75.0) * 0.04;
     }
     else if ((index > 99) && (index <= 125)) {
-      return 2.0 + (double(index) - 100.0) * 0.16;
+      accuracy = 2.0 + (double(index) - 100.0) * 0.16;
     }
     else {
-      return -1.0;
+      accuracy = -1.0;
     }
   }
@@ -851,22 +850,21 @@
     if ((index >= 0) && (index <= 6)) {
       if      (index == 1) {
-        return 2.8;
+        accuracy = 2.8;
       }
       else if (index == 3) {
-        return 5.7;
+        accuracy = 5.7;
       }
       else if (index == 5) {
-        return 11.3;
+        accuracy = 11.3;
       }
       else {
-        return pow(2, 1 + index / 2);
+        accuracy = pow(2, 1 + index / 2);
       }
     }
     else if ((index > 6) && (index <= 15)) {
-      return pow(2, index - 1);
-    }
-  }
-
-  return double(index);
+      accuracy = pow(2, index - 2);
+    }
+  }
+  return accuracy;
 }
 
