Index: trunk/BNC/src/PPP_SSR_I/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP_SSR_I/pppFilter.cpp	(revision 6967)
+++ trunk/BNC/src/PPP_SSR_I/pppFilter.cpp	(revision 6968)
@@ -59,4 +59,5 @@
 const double   MAXRES_PHASE_GLONASS  = 2.98 * 0.03;
 const double   GLONASS_WEIGHT_FACTOR = 1.0;
+const double   BDS_WEIGHT_FACTOR     = 2.0;
 
 #define LOG (_pppClient->log())
@@ -132,4 +133,15 @@
   }
 
+  // BDS Offset
+  // ----------
+  else if (type == BDS_OFFSET) {
+    if (satData->prn[0] == 'C') {
+      return 1.0;
+    }
+    else {
+      return 0.0;
+    }
+  }
+
   // Ambiguities
   // -----------
@@ -221,5 +233,8 @@
   if (OPT->useSystem('E')) {
     _params.push_back(new t_pppParam(t_pppParam::GALILEO_OFFSET, ++nextPar, ""));
-  }
+  }/*
+  if (OPT->useSystem('C')) {
+    _params.push_back(new t_pppParam(t_pppParam::BDS_OFFSET, ++nextPar, ""));
+  }*/
 
   _QQ.ReSize(_params.size()); 
@@ -242,4 +257,7 @@
     }
     else if (pp->type == t_pppParam::GALILEO_OFFSET) {
+      _QQ(iPar,iPar) = 1000.0 * 1000.0;
+    }
+    else if (pp->type == t_pppParam::BDS_OFFSET) {
       _QQ(iPar,iPar) = 1000.0 * 1000.0;
     }
@@ -340,5 +358,9 @@
     //frqB = t_frequency::E5; -"-
   }
-
+  else if (satData->prn[0] == 'C') {
+    offset = Bds_offset();
+    //frqA = t_frequency::C2; as soon as available
+    //frqB = t_frequency::C7; -"-
+  }
   double phaseCenter = 0.0;
   if (_antex) { 
@@ -505,4 +527,8 @@
         _QQ(iPar,iPar) += 0.1 * 0.1;
       }
+
+      else if (pp->type == t_pppParam::BDS_OFFSET) {
+        _QQ(iPar,iPar) += 0.1 * 0.1;//TODO
+      }
     }
   }
@@ -510,5 +536,6 @@
   // Add New Ambiguities if necessary
   // --------------------------------
-  if (OPT->ambLCs('G').size() || OPT->ambLCs('R').size() || OPT->ambLCs('E').size()) {
+  if (OPT->ambLCs('G').size() || OPT->ambLCs('R').size() ||
+      OPT->ambLCs('E').size() || OPT->ambLCs('C').size()) {
 
     // Make a copy of QQ and xx, set parameter indices
@@ -635,4 +662,9 @@
           << sqrt(_QQ(par->index,par->index));
     }
+    else if (par->type == t_pppParam::BDS_OFFSET) {
+      LOG << "\n    offBds  = " << setw(10) << setprecision(3) << par->xx
+          << " +- " << setw(6) << setprecision(3)
+          << sqrt(_QQ(par->index,par->index));
+    }
   }
 
@@ -856,4 +888,7 @@
     if (satData->system() == 'R') {
       sigL3 *= GLONASS_WEIGHT_FACTOR;
+    }
+    if  (satData->system() == 'C') {
+      sigL3 *= BDS_WEIGHT_FACTOR;
     }
     PP(iObs,iObs) = 1.0 / (sigL3 * sigL3) / (ellWgtCoef * ellWgtCoef);
@@ -966,5 +1001,5 @@
     // -------------------------------------------------------------      
     bool usePhase = OPT->ambLCs('G').size() || OPT->ambLCs('R').size() ||
-                    OPT->ambLCs('E').size();
+                    OPT->ambLCs('E').size() || OPT->ambLCs('C').size() ;
 
     for (int iPhase = 0; iPhase <= (usePhase ? 1 : 0); iPhase++) {
Index: trunk/BNC/src/PPP_SSR_I/pppFilter.h
===================================================================
--- trunk/BNC/src/PPP_SSR_I/pppFilter.h	(revision 6967)
+++ trunk/BNC/src/PPP_SSR_I/pppFilter.h	(revision 6968)
@@ -131,5 +131,5 @@
  public:
   enum parType {CRD_X, CRD_Y, CRD_Z, RECCLK, TROPO, AMB_L3, 
-                GLONASS_OFFSET, GALILEO_OFFSET};
+                GLONASS_OFFSET, GALILEO_OFFSET, BDS_OFFSET};
   t_pppParam(parType typeIn, int indexIn, const QString& prn);
   ~t_pppParam();
@@ -197,5 +197,13 @@
     return 0.0;
   }
-
+  double Bds_offset() const {
+    for (int ii = 0; ii < _params.size(); ++ii) {
+      t_pppParam* pp = _params[ii];
+      if (pp->type == t_pppParam::BDS_OFFSET) {
+        return pp->xx;
+      }
+    }
+    return 0.0;
+  }
  private:
   void   reset();
